Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

配置国际化 (i18n) 重写

使用国际化重写(“i18n 重写”)来根据用户的国家或首选语言提供不同的内容。以下是您可以设置的一些示例配置:

  • 提供相同的法语内容到谁喜欢法国(不分国别)的所有用户。
    示例:带有法语文本的主页

  • 标准法语内容起到谁喜欢法国的用户,但对于谁喜欢加拿大法语用户,服务于加拿大法语内容,而不是。
    示例:带有标准法语短语的主页与带有加拿大法语短语的主页

  • 提供相同的内容给所有加拿大用户(无论他们的语言偏好)。
    示例:使用您网站的“默认”语言但具有加拿大特定功能(如假日主题)的主页

  • 向喜欢法语的加拿大用户提供加拿大法语内容。
    示例:带有加拿大法语短语和加拿大特定功能(如假日主题)的主页

火力地堡接待来自他们的IP地址,并从用户的语言首选项确定用户所在的国家Accept-Language请求头(通常是通过他们的网络浏览器自动设置)。

设置 i18n 重写

要建立国际化的重写你的托管网站,您需要创建您的所有本地化内容的“国际化内容”的目录,然后添加i18n属性,您firebase.json文件指向新的“国际化内容”目录。

以下是详细步骤:

  1. 在您的本地应用程序目录的public文件夹,为您的“国际化内容”一个单独的目录,然后创建您的网站支持的每种语言和国家组合的子文件夹。

    在每个子文件夹中,添加特定于该组合的内容,例如以假期为主题的主页或特定于语言的 404 页面。

    下面是一个例子“国际化内容”目录中称为localized-files

    public/
        index.html  // your site's default homepage
        404.html  // your site's custom 404 page
    
        localized-files/
            ALL_ca/
                index.html
            es_ALL/
                index.html
                404.html
            fr/
                index.html
                404.html
            fr_ca/
                index.html
    

    localized-files/目录包含通过您的网站支持的每种语言和国家的组合分开的子文件夹。每个子文件夹的命名模式必须遵循以下任一格式:

    • languageCode_countryCode :包含谁有语言偏好国家代码的用户特定内容

    • languageCode :包含谁有一个语言偏好的用户特定内容,但内容不具体国家;基本上等同于languageCode_ALL

    请参阅第国家和语言代码下面关于这些代码的更多细节。您可以使用的值ALL (区分大小写)表示任何国家(如es_ALL/ )或任何语言(如ALL_ca/ )。

    在子文件夹中的文件不需要有类似的文件public目录或其他子文件夹。您可以创建完全特定于某种语言和/或国家/地区的内容。

  2. 添加i18n属性的firebase.json文件,并指定包含您的“国际化内容”的目录。继续我们的例子:

    // firebase.json
    
    "hosting": {
    
      "public": "public",
    
      "ignore": [
        "firebase.json",
        "**/.*",
        "**/node_modules/**"
      ],
    
      "i18n": {
        "root": "/localized-files"  // directory that contains your "i18n content"
      }
    
      ...
    }
    

    对指定的目录root必须是包含所有你的“国际化内容”子文件夹的目录名。如果你放置你所有的“国际化内容”子文件夹在你的根public目录,使用/为价值root 。在开头和结尾的斜杠root值是可选的。

  3. 将您的“i18n 内容”和配置部署到您的托管站点。

您可以使用测试您的设置cookie的覆盖

国家和语言代码

命名“i18n 内容”子文件夹时,您必须对国家和语言代码使用小写。您可以使用的值ALL (区分大小写)表示任何国家(如es_ALL/ )或任何语言(如ALL_ca/ )。

Hosting 从用户的 IP 地址获取国家代码。国家代码是两个字母的ISO 3166-1 alpha-2代码

的语言代码被从用户的获得Accept-Language请求头(通常可以通过web浏览器自动设定)。他们是ISO 639-1代码。使用语言代码时请记住以下几点:

  • 当主机搜索服务为其中“国际化内容”,就下令基于质量值的语言Accept-Language头。

  • 托管滴在任何地区和国家的子标签Accept-Language头,所以在“国际化内容”子文件夹名称的语言代码不能包含这些子标签。例如,您不能使用es-419es-US作为一个子文件夹名称的语言代码,但你可以使用es

    如果要提供特定区域或国家/地区的内容,可以创建包含要支持的特定语言国家/地区内容的子文件夹。

“i18n 内容”的优先顺序

如果您设置 i18n 重写,托管将根据以下优先级顺序提供内容:

  1. 保留命名空间是使用begin /__/*路径段

  2. 配置重定向

  3. 完全匹配静态内容

    1. 语言代码+国家代码(例如,从内容fr_ca/
      顺序遵循在要求的每种语言的质量值Accept-Language头。

    2. 只有国家代码(例如,从内容ALL_ca/

    3. 语言代码只是(例如,从内容fr/es_ALL/
      顺序遵循在要求的每种语言的质量值Accept-Language头。

    4. “默认”完全匹配静态内容
      这是内容这就是“国际化内容”目录之外,像在根public目录。

  4. 配置重写

  5. 404处理

    1. i18n 404 页面
      这遵循与上面列出的完全匹配静态内容相同的优先级顺序。

    2. 自定义404

    3. 默认 404 页面(由 Firebase 提供)

优先顺序示例

让我们继续上面的例子。我们将使用相同的示例目录和示例请求。

  • 例如,本地项目目录与“国际化内容”目录(称为localized-files

    public/
        index.html  // your site's default homepage
        404.html  // your site's custom 404 page
    
        localized-files/
            ALL_ca/
                index.html
            es_ALL/
                index.html
                404.html
            fr/
                index.html
                404.html
            fr_ca/
                index.html
    
  • 示例请求信息

    • 语言代码: fren (法语,英语,然后)
      语言代码是基于质量值排序Accept-Language头。

    • 国家代码: ca (加拿大)

根据完全匹配的优先级顺序和语言首选项的质量值,Hosting 将按以下顺序搜索所请求页面的目录。

  1. public/localized-files/fr_ca/

  2. public/localized-files/en_ca/

  3. public/localized-files/ALL_ca/

  4. public/localized-files/fr_ALL/

  5. public/localized-files/fr/

  6. public/localized-files/en_ALL/

  7. public/localized-files/en/

  8. public/

  9. 404处理

哪个页面将提供给用户?

  • 请求的页面: index.html

  • 请求的页面: awesome-page.html

请注意有关“i18n 内容”目录的搜索和服务的以下内容:

  • localized-files/目录实际上并不包含en_ca/en_ALL/en/子文件夹,所以主机只会向下跳的优先级列表,直到它找到请求的语言-国家组合匹配的子文件夹。

  • 尽管localized-files/目录包含es_ALL/子文件夹,上面的例子请求不包括eses-foo语言代码,所以主机不会再搜索“国际化内容”匹配es

  • 子文件夹名为fr/fr_ALL/是从用户的国家和语言选项的视角等效的。然而,如果两个子文件夹存在,主机将成为fr_ALL/前内容fr/内容。

您可以通过使用 cookie 覆盖国家和语言标题来更改提供的内容。

以下是您可以使用 cookie 覆盖的一些方法:

  • 使用不同的语言/国家/地区组合测试​​功能以检查提供的内容。

  • 使您的用户能够更改他们看到的内容。例如,你可以实现一个语言选择器,然后设置用户的firebase-language-override相应的cookie。

配置cookie的覆盖,这些名字的双方或一方的一组Cookie: firebase-country-overridefirebase-language-override 。例如,下面的JavaScript代码片段覆盖国家代码是caAccept-Language标题是fr,en

document.cookie = "firebase-country-override=ca";
document.cookie = "firebase-language-override=fr,en";

语言 cookie 覆盖必须是一个以逗号分隔的语言代码列表,按偏好顺序排列,没有子标签或质量值。

Cookie 覆盖不会反映在日志中。