使用國際化重寫功能 (「i18n 重寫功能」),根據使用者的國家/地區或偏好語言提供不同的內容。以下列舉幾個您可以設定的設定範例:
為所有偏好法文的使用者 (不論國家/地區為何) 提供相同的法文內容。
範例:使用法文的首頁如果使用者偏好法文,則向他們放送標準法文內容;如果使用者偏好法文 (加拿大),則向他們放送法文 (加拿大) 內容。
範例:使用標準法文的首頁與使用加拿大法文的首頁為所有加拿大使用者提供相同的內容 (不論他們偏好的語言為何)。
範例:首頁使用網站的「預設」語言,但提供加拿大專屬功能 (例如節日主題)為偏好法文的加拿大使用者提供法文 (加拿大) 內容。
示例:首頁使用加拿大法文用語,並提供加拿大專屬功能 (例如節慶主題)
Firebase Hosting 會根據使用者的 IP 位址判斷使用者所在國家/地區,並根據 Accept-Language
要求標頭判斷使用者的語言偏好設定 (通常是由使用者的網路瀏覽器自動設定)。
設定 i18n 重寫
如要為 Hosting 網站設定 i18n 重寫功能,您需要為所有本地化內容建立「i18n 內容」目錄,然後將 i18n
屬性新增至 firebase.json
檔案,以便指向新的「i18n 內容」目錄。
詳細步驟如下:
在本機應用程式目錄的
public
資料夾中,為「i18n 內容」建立獨立的目錄,然後為網站支援的每種語言和國家/地區組合建立子資料夾。在每個子資料夾中,新增該組合專屬的內容,例如以節日為主題的首頁或特定語言的 404 頁面。
以下是名為
localized-files
的「i18n content」目錄範例: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
目錄或其他子資料夾中具有類似的檔案。你可以建立完全針對特定語言和/或國家/地區的內容。在
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
值中的前置和結尾斜線為選用項目。將「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
標頭中的品質值排序語言。Hosting 會捨棄
Accept-Language
標頭中的任何區域和國家/地區子標記,因此「i18n 內容」子資料夾名稱中的語言代碼不得包含這些子標記。舉例來說,您無法在子資料夾名稱中使用es-419
或es-US
做為語言代碼,但可以使用es
。如要放送特定區域或國家/地區的內容,您可以建立子資料夾,其中包含要支援的特定語言-國家/地區內容。
「i18n 內容」的優先順序
如果您設定 i18n 重寫功能,Hosting 會依下列優先順序提供內容:
開頭為
/__/*
路徑區段的保留命名空間已設定的重新導向
完全比對的靜態內容
語言代碼 + 國家/地區代碼 (例如來自
fr_ca/
的內容)
順序會遵循要求Accept-Language
標頭中每種語言的品質值。僅包含國家/地區代碼 (例如來自
ALL_ca/
的內容)僅限語言代碼 (例如
fr/
或es_ALL/
的內容)
順序會依據要求Accept-Language
標頭中每種語言的品質值。「預設」完全比對靜態內容
這是位於「i18n content」目錄外部的內容,例如位於public
目錄根目錄中。
已設定的重寫
404 處理
i18n 404 頁面
這會遵循上述完全比對靜態內容的優先順序。自訂 404 網頁
預設 404 網頁 (由 Firebase 提供)
優先順序範例
讓我們繼續上述範例。我們會使用相同的範例目錄和範例要求。
含有「i18n content」目錄 (名為
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
要求資訊範例
語言代碼:
fr
、en
(法文,然後英文)
語言代碼的排序方式是根據Accept-Language
標頭中的品質值。國家/地區代碼:
ca
(加拿大)
Hosting 會根據完全比對優先順序和語言偏好設定的品質值,按照以下順序搜尋目錄中的指定網頁。
public/localized-files/fr_ca/
public/localized-files/en_ca/
public/localized-files/ALL_ca/
public/localized-files/fr_ALL/
public/localized-files/fr/
public/localized-files/en_ALL/
public/localized-files/en/
public/
404 處理
系統會向使用者放送哪個網頁?
要求的頁面:
index.html
要求的頁面:
awesome-page.html
請注意下列與「i18n content」目錄的搜尋及服務相關的事項:
localized-files/
目錄實際上不含en_ca/
、en_ALL/
或en/
子目錄,因此 Hosting 會略過優先順序清單,直到找到與要求語言-國家/地區組合相符的子目錄為止。雖然
localized-files/
目錄包含es_ALL/
子資料夾,但上述要求範例並未包含es
或es-foo
語言代碼,因此 Hosting 不會搜尋與es
相符的「i18n 內容」。從使用者的國家/地區和語言偏好設定來看,名為
fr/
和fr_ALL/
的子資料夾是等同的。不過,如果兩個子資料夾都存在,Hosting 會先放送fr_ALL/
內容,再放送fr/
內容。
使用 Cookie 覆寫語言和國家/地區代碼
您可以使用 Cookie 覆寫國家/地區和語言標頭,藉此變更要放送的內容。
以下是使用 Cookie 覆寫值的幾種方式:
使用不同的語言/國家/地區組合測試功能,確認系統會提供哪些內容。
讓使用者自行變更所見內容。舉例來說,您可以實作語言挑選器,然後根據使用者的語言設定
firebase-language-override
Cookie。
如要設定 Cookie 覆寫值,請設定 firebase-country-override
和 firebase-language-override
這兩個名稱的 Cookie,舉例來說,下列 JavaScript 程式碼片段會將國家/地區代碼覆寫為 ca
,並將 Accept-Language
標頭覆寫為 fr,en
:
document.cookie = "firebase-country-override=ca";
document.cookie = "firebase-language-override=fr,en";
語言 Cookie 覆寫值必須是以半形逗號分隔的語言代碼清單,並依偏好順序排列,且不得包含子標記或品質值。
記錄檔中不會顯示 Cookie 覆寫值。