Используйте переписывание интернационализации («переписывание i18n») для предоставления различного контента в зависимости от страны пользователя или предпочтительного языка. Вот несколько примеров конфигураций, которые вы можете настроить:
Предоставляйте одинаковый контент на французском языке всем пользователям, которые предпочитают французский язык (независимо от страны).
Пример: домашняя страница с текстом на французском языке.Предоставляйте контент на стандартном французском языке пользователям, которые предпочитают французский язык, а канадским пользователям, предпочитающим французский язык, вместо этого показывайте контент на канадском французском языке.
Пример: домашняя страница со стандартной французской формулировкой по сравнению с домашней страницей с канадской французской формулировкой.Предоставляйте один и тот же контент всем канадским пользователям (независимо от их языковых предпочтений).
Пример: домашняя страница с языком вашего сайта по умолчанию, но со специфичной для Канады функцией (например, праздничной темой).Предоставляйте контент на канадском французском языке канадским пользователям, которые предпочитают французский язык.
Пример: домашняя страница с канадской французской формулировкой и особенностью, характерной для Канады (например, тема праздника).
Firebase Hosting определяет страну пользователя по его IP-адресу и языковые предпочтения пользователя по заголовку запроса Accept-Language
(обычно устанавливается автоматически веб-браузером ).
Настройте перезапись i18n
Чтобы настроить перезапись i18n для вашего Hosting сайта, вам необходимо создать каталог «i18n content» для всего вашего локализованного контента, а затем добавить атрибут i18n
в файл firebase.json
, чтобы указать на ваш новый каталог «i18n content».
Вот подробные шаги:
В
public
папке вашего локального каталога приложений создайте отдельный каталог для вашего «контента i18n», а затем создайте подпапки для каждой комбинации языка и страны, поддерживаемой вашим сайтом.В каждую подпапку добавьте контент, специфичный для этой комбинации, например домашние страницы на праздничную тему или страницы 404 для конкретного языка.
Вот пример каталога «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
public/ // matches requests that aren't specified by your "i18n content" subfolders // example: display your homepage in the "default" language for your site with no country-specific features index.html // your site's default homepage 404.html // your site's custom 404 page localized-files/ // matches requests from Canada with any language preference // example: display your homepage in the "default" language for your site with a Canada-specific feature ALL_ca/ index.html // matches requests from any country with a language preference of `es` or `es-foo` // example: display your homepage in Spanish with no country-specific features es_ALL/ index.html 404.html // your site's custom 404 page in Spanish // matches requests from any country with a language preference of `fr` or `fr-foo` // example: display your homepage in Standard French with no country-specific features fr/ index.html 404.html // your site's custom 404 page in French // matches requests from Canada with a language preference of `fr` or `fr-foo` // example: display your homepage in Canadian French and/or with a Canada-specific feature fr_ca/ index.html
Каталог
localized-files/
содержит отдельные подпапки для каждой комбинации языка и страны, поддерживаемой вашим сайтом. Шаблон именования для каждой подпапки должен соответствовать одному из следующих форматов:languageCode_countryCode
: Содержит контент, специфичный для пользователей, у которых есть эти языковые предпочтения и этот код страны.languageCode
: Содержит контент, предназначенный для пользователей, у которых есть эти языковые предпочтения, но контент не зависит от страны; в основном эквивалентенlanguageCode_ALL
Более подробную информацию об этих кодах см. в подразделе «Коды стран и языков» ниже. Вы можете использовать значение
ALL
(с учетом регистра), чтобы указать любую страну (например,es_ALL/
) или любой язык (например,ALL_ca/
).Файлы в подпапке не обязательно должны иметь аналогичные файлы в
public
каталоге или других подпапках. Вы можете создавать контент, полностью специфичный для языка и/или страны.Добавьте атрибут
i18n
в файлfirebase.json
и укажите каталог, содержащий ваш «контент i18n». Продолжая наш пример:// firebase.json "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "i18n": { "root": "/localized-files" // directory that contains your "i18n content" } ... }
Каталог, указанный в качестве
root
должен быть именем каталога, который содержит все ваши подпапки «i18n content». Если вы разместили все подпапки «i18n content» в корнеpublic
каталога, используйте/
для значенияroot
. Начальная и конечная косая черта вroot
значении не является обязательной.Разверните свой «контент i18n» и настройте его на своем Hosting сайте.
Вы можете протестировать свою настройку, используя переопределение файлов cookie .
Коды стран и языков
При именовании подпапок «i18n content» коды страны и языка должны использоваться строчными буквами. Вы можете использовать значение ALL
(с учетом регистра), чтобы указать любую страну (например, es_ALL/
) или любой язык (например, ALL_ca/
).
Hosting получает код страны с IP-адреса пользователя. Коды стран представляют собой двухбуквенные коды ISO 3166-1 альфа-2 .
Коды языков получаются из заголовка запроса Accept-Language
пользователя (обычно устанавливается автоматически веб-браузером ). Это коды ISO 639-1 . При использовании языковых кодов имейте в виду следующее:
Когда Hosting ищет, какой «контент i18n» обслуживать, он упорядочивает языки на основе значений качества в заголовке
Accept-Language
.Hosting удаляет все вложенные теги региона и страны в заголовке
Accept-Language
, поэтому код языка в имени подпапки «i18n content» не может содержать эти вложенные теги. Например, вы не можете использоватьes-419
илиes-US
в качестве кода языка в имени подпапки, но вы можете использоватьes
.Если вы хотите обслуживать контент определенного региона или страны, вы можете создать подпапки, содержащие контент конкретной страны, язык которого вы хотите поддерживать.
В этом примере запрос из Испании с языковым предпочтением
es
,es-es
или дажеes-419
получит контент из подпапкиes_es/
поскольку Hosting обрабатывает все эти языковые коды какes
.Запрос из США, Мексики или любой другой страны с языковым предпочтением
es-419
получит содержимое из подпапкиes_ALL/
поскольку Hosting рассматриваетes-419
какes
.public/ // matches requests that aren't specified by your "i18n content" subfolders index.html // the site's default homepage localized-files/ // matches requests from Spain with a language preference of `es` or `es-foo` es_es/ index.html // matches requests from any other country with a language preference of `es` or `es-foo` es_ALL/ index.html
В этом примере запрос из Мексики с языковым предпочтением
es-419
получит содержимое из подпапкиes_mx/
поскольку Hosting обрабатывает код языкаes-419
какes
.Однако запрос из США с языковым предпочтением
es-419
получит содержимое из подпапкиes_ALL/
, поскольку Hosting обрабатываетes-419
какes
и подпапкиes_us/
нет.public/ // matches requests that aren't specified by your "i18n content" subfolders index.html // the site's default homepage localized-files/ // matches requests from Argentina with a language preference of `es` or `es-foo` (mimics behavior of `es-ar` header tag) es_ar/ index.html // matches requests from Spain with a language preference of `es` or `es-foo` (mimics behavior of `es-es` header tag) es_es/ index.html // matches requests from Mexico with a language preference of `es` or `es-foo` (mimics behavior of `es-mx` header tag) es_mx/ index.html // matches requests from any other country with a language preference of `es` or `es-foo` (mimics behavior of `es-419` header tag) es_ALL/ index.html
Порядок приоритета для «контента i18n»
Если вы настроили перезапись i18n, Hosting обслуживает контент в следующем порядке приоритета:
Зарезервированные пространства имен, начинающиеся с сегмента пути
/__/*
Настроенные перенаправления
Точное соответствие статического контента
Код языка + код страны (например, контент из
fr_ca/
)
Порядок соответствует значениям качества для каждого языка в заголовкеAccept-Language
запроса.Только код страны (например, контент из
ALL_ca/
)Только код языка (например, контент из
fr/
илиes_ALL/
)
Порядок соответствует значениям качества для каждого языка в заголовкеAccept-Language
запроса.Статическое содержимое с точным соответствием «по умолчанию»
Это контент, находящийся за пределами каталога «i18n content», например, в корнеpublic
каталога.
Настроенные перезаписи
404 обработка
i18n 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
index.html
из подпапкиfr_ca/
Поскольку Hosting сначала ищет подпапку
fr_ca/
, он найдет точное совпадение сindex.html
в этой подпапке.Запрошенная страница:
awesome-page.html
404.html
из подпапкиfr/
Hosting сначала выполняет поиск по всему каталогу (включая все подпапки «i18n content» и корневой каталог) в порядке приоритета на предмет точного совпадения, но точного совпадения для
awesome-page.html
не существует.Итак, Hosting начнет обработку ошибки 404, которая соответствует тому же порядку приоритетов i18n, что и поиск с точным совпадением. Подпапка
fr/
— это первая найденная подпапка, содержащая страницу 404.
Обратите внимание на следующее об этом поиске и обслуживании каталога «i18n content»:
Каталог
localized-files/
на самом деле не содержит подпапокen_ca/
,en_ALL/
илиen/
, поэтому Hosting просто пропустит список приоритетов до тех пор, пока не найдет подпапку, соответствующую комбинации языка и страны запроса.Несмотря на то, что каталог
localized-files/
содержит подпапкуes_ALL/
, приведенный выше пример запроса не включает код языкаes
илиes-foo
, поэтому Hosting не будет искать «контент i18n», соответствующийes
.Подпапки
fr/
иfr_ALL/
эквивалентны с точки зрения предпочтений страны и языка пользователя. Однако, если обе подпапки существуют, Hosting будет обслуживатьfr_ALL/
content передfr/
content.
Переопределить коды языка и страны с помощью файлов cookie
Вы можете изменить отображаемый контент, используя файлы cookie для переопределения заголовков страны и языка.
Вот несколько способов использования переопределения файлов cookie:
Протестируйте функцию с различными комбинациями языка и страны, чтобы проверить, какой контент отображается.
Предоставьте своим пользователям возможность изменять контент, который они видят. Например, вы можете реализовать средство выбора языка, а затем соответствующим образом установить пользовательский файл cookie
firebase-language-override
.
Чтобы настроить переопределение файлов 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 не отражаются в журналах.