Используйте интернационализацию rewrites («i18n rewrites») для обслуживания различного контента в зависимости от страны пользователя или предпочитаемого языка. Вот несколько примеров конфигураций, которые вы можете настроить:
Предоставляйте одинаковый французский контент всем пользователям, которые предпочитают французский язык (независимо от страны).
Пример: домашняя страница с текстом на французском языкеПредоставлять стандартный французский контент пользователям, которые предпочитают французский язык, а для канадских пользователей, которые предпочитают французский язык, предоставлять канадский французский контент.
Пример: домашняя страница с фразами на стандартном французском языке и домашняя страница с фразами на канадском французском языке.Предоставлять одинаковый контент всем канадским пользователям (независимо от их языковых предпочтений).
Пример: домашняя страница с языком «по умолчанию» вашего сайта, но со специфичной для Канады функцией (например, тематикой праздников)Предоставляйте контент на канадском французском языке канадским пользователям, которые предпочитают французский язык.
Пример: домашняя страница с канадскими французскими фразами и специфичной для Канады функцией (например, тема праздников)
Firebase Hosting определяет страну пользователя по его IP-адресу, а языковые предпочтения пользователя — по заголовку запроса Accept-Language
(обычно устанавливаются автоматически веб-браузером ).
Настройка i18n-переписывания
Чтобы настроить i18n-переписывание для вашего Hosting сайта, вам необходимо создать каталог «i18n content» для всего вашего локализованного контента, а затем добавить атрибут i18n
в ваш файл firebase.json
, чтобы указать на ваш новый каталог «i18n content».
Вот подробные шаги:
В
public
папке локального каталога приложения создайте отдельный каталог для вашего «i18n-контента», а затем создайте подпапки для каждой комбинации языка и страны, поддерживаемой вашим сайтом.В каждую подпапку добавьте контент, относящийся к данной комбинации, например, домашние страницы на праздничную тематику или страницы 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
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 alpha-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-контента»:
Каталог
localized-files/
на самом деле не содержит подпапокen_ca/
,en_ALL/
илиen/
, поэтому Hosting просто пропустит список приоритетов, пока не найдет соответствующую подпапку для комбинации языка и страны запроса.Несмотря на то, что каталог
localized-files/
содержит подпапкуes_ALL/
, приведенный выше пример запроса не включает код языкаes
илиes-foo
, поэтому Hosting не будет искать «i18n-контент», соответствующийes
.Подпапки
fr/
иfr_ALL/
эквивалентны с точки зрения страны и языковых предпочтений пользователя. Однако, если существуют обе подпапки, Hosting будет обслуживать содержимоеfr_ALL/
перед содержимымfr/
.
Переопределить коды языка и страны с помощью файлов 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 не отражаются в журналах.