設定國際化 (i18n) 重寫

使用國際化改寫 (「i18n 改寫」) 提供不同內容 根據使用者的國家/地區或偏好語言而定以下提供一些例子 您可以設定的配置項目:

  • 為偏好法文的「所有」使用者顯示相同的法文內容 (無論何者為何) 國家/地區)。
    範例:含有法文文字的首頁

  • 向偏好法文、 加拿大使用者偏好法文,提供加拿大法文內容 。
    範例:首頁寫法的法文語句和含有以下字詞的首頁 加拿大法文語句

  • 所有加拿大使用者 (不論 語言偏好設定)。
    範例:包含網站的「預設」首頁但有了 加拿大專屬功能 (例如節慶主題)

  • 向偏好法文的加拿大使用者放送加拿大法文內容。
    範例:含有加拿大法文語句的首頁,但以加拿大為主 特色 (例如節慶主題)

Firebase Hosting 會根據使用者的 IP 位址判斷使用者所在國家/地區,並根據 Accept-Language 要求標頭判斷使用者的語言偏好設定 (通常是由使用者的網路瀏覽器自動設定)。

設定 i18n 改寫

如要為 Hosting 網站設定 i18n 重新寫入,您必須建立「i18n」 內容」,然後加入 i18n 屬性。 連結到您的 firebase.json 檔案,指向新的「i18n 內容」目錄。

詳細步驟如下:

  1. 在本機應用程式目錄的 public 資料夾中建立獨立目錄 然後為每個語言建立子資料夾 網站支援的國家/地區組合。

    在每個子資料夾中,加入該組合的專屬內容,例如 節慶主題的首頁,或語言專屬的 404 網頁。

    請看「i18n 內容」範例名為 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. firebase.json 檔案中加入 i18n 屬性,並指定含有「i18n 內容」的目錄。繼續以上述範例為例:

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

    root 指定的目錄必須是 包含所有的「i18n 內容」子資料夾。如果您已將 「i18n 內容」位於 public 目錄根目錄的子資料夾,使用 / 用於 root 的值。root 值開頭和結尾的斜線 則為選用項目。

  3. 部署「i18n 內容」,並將其設為您的 Hosting 網站。

您可以使用 Cookie 覆寫來測試設定。

國家/地區和語言代碼

命名「i18n 內容」時子資料夾,且兩個國家/地區必須使用小寫 和語言代碼您可以使用 ALL 的值 (區分大小寫) 來表示 任何國家/地區 (例如 es_ALL/) 或任何語言 (例如 ALL_ca/)。

Hosting 會從使用者的 IP 位址取得國家/地區代碼。國家/地區代碼 為兩個字母 ISO 3166-1 alpha-2 代碼

從使用者的 Accept-Language 要求標頭中取得語言代碼 (通常 由網路瀏覽器自動設定)。 格式為 ISO 639-1。 使用語言代碼時,請注意下列事項:

  • Hosting搜尋「i18n 內容」時才能放送 偵測出語言、語言Accept-Language

  • HostingAccept-Language區域和國家/地區子標記均下滑 所以「i18n 內容」中的語言代碼子資料夾名稱不能 包含這些子標記舉例來說,es-419es-US 無法做為 語言代碼,但您可以使用 es

    如要放送特定區域或國家/地區的內容,您可以建立子資料夾,其中包含要支援的特定語言-國家/地區內容。

「i18n 內容」的優先順序

如果設定 i18n 重新寫入,Hosting 會根據下列項目提供內容 優先順序:

  1. /__/* 路徑區段為開頭的保留命名空間

  2. 已設定的重新導向

  3. 完全相符的靜態內容

    1. 語言代碼 + 國家/地區代碼 (例如來自 fr_ca/ 的內容)
      順序會依據要求 Accept-Language 標頭中各語言的品質值。

    2. 僅限國家/地區代碼 (例如「ALL_ca/」的內容)

    3. 僅限語言代碼 (例如來自 fr/es_ALL/ 的內容)
      此順序取決於要求中各語言的品質值 Accept-Language 標頭。

    4. 「預設」完全比對靜態內容
      這是位於「i18n content」目錄以外的內容,例如位於 public 目錄根目錄中。

  4. 已設定的重寫

  5. 404 處理

    1. i18n 404 頁面
      這會遵循上述完全比對靜態內容的優先順序。

    2. 自訂 404 頁面

    3. 預設 404 頁面 (由 Firebase 提供)

優先順序範例

延續上述範例。我們會使用相同的範例目錄和範例要求。

  • 含有「i18n 內容」的本機專案目錄範例目錄 (名為 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/ 子資料夾,因此 Hosting 只會略過 直到找出符合要求該要求的子資料夾為止 國家/地區組合。

  • 雖然 localized-files/ 目錄包含 es_ALL/ 子資料夾,上述範例要求不包含 eses-foo 所以 Hosting 不會搜尋「i18n 內容」並 符合 es

  • 從使用者的國家/地區和語言偏好設定來看,名為 fr/fr_ALL/ 的子資料夾是等同的。不過,如果同時擁有 存在,Hosting 會在 fr/ 內容之前放送 fr_ALL/ 內容。

您可以使用 Cookie 覆寫國家/地區和語言標頭,藉此變更要放送的內容。

以下列舉幾個使用 Cookie 覆寫功能的方法:

  • 使用不同的語言/國家/地區組合測試功能,確認系統會提供哪些內容。

  • 可讓使用者變更他們所看到的內容。舉例來說: 導入語言選單,然後將 系統會擷取 firebase-language-override 個 Cookie。

如要設定 Cookie 覆寫功能,請將 Cookie 設為同時使用以下兩種名稱: 《firebase-country-override》和《firebase-language-override》。舉例來說,下列 JavaScript 程式碼片段會將國家/地區代碼覆寫為 ca,並將 Accept-Language 標頭覆寫為 fr,en

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

語言 Cookie 覆寫值必須是以逗號分隔的語言代碼清單, 排列順序 (不含子標記或品質值)。

記錄檔中不會顯示 Cookie 覆寫值。