Используйте перезапись интернационализации («перезапись i18n») для предоставления различного контента в зависимости от страны пользователя или предпочтительного языка. Вот несколько примеров конфигураций, которые вы можете настроить:
Предоставляйте один и тот же контент на французском языке всем пользователям, предпочитающим французский язык (независимо от страны).
Пример: домашняя страница с французским текстомПредоставляйте контент на стандартном французском языке пользователям, предпочитающим французский язык, но пользователям из Канады , предпочитающим французский язык, вместо этого предоставляйте контент на канадском французском языке.
Пример: домашняя страница со стандартной французской формулировкой по сравнению с домашней страницей с канадской французской формулировкой.Предоставьте один и тот же контент всем канадским пользователям (независимо от их языковых предпочтений).
Пример: домашняя страница с языком вашего сайта по умолчанию, но с особенностью, характерной для Канады (например, праздничной темой).Предоставляйте канадско-французский контент пользователям из Канады, предпочитающим французский язык.
Пример: домашняя страница с канадско-французской формулировкой и особенностью Канады (например, праздничной темой).
Firebase Hosting определяет страну пользователя по его IP-адресу и языковые предпочтения пользователя по заголовку запроса Accept-Language
(обычно устанавливается автоматически их веб-браузером ).
Настройка перезаписей i18n
Чтобы настроить перезапись i18n для вашего хостинг-сайта, вам нужно создать каталог «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» и настройте его на своем хостинг-сайте.
Вы можете проверить свои настройки с помощью переопределения файлов cookie .
Коды страны и языка
При именовании подпапок «i18n content» вы должны использовать строчные буквы для кодов страны и языка. Вы можете использовать значение ALL
(с учетом регистра), чтобы указать любую страну (например es_ALL/
) или любой язык (например ALL_ca/
).
Хостинг получает код страны по IP-адресу пользователя. Коды стран представляют собой двухбуквенные коды ISO 3166-1 alpha-2 .
Коды языков берутся из заголовка запроса Accept-Language
пользователя (обычно устанавливаются автоматически их веб-браузером ). Это коды ISO 639-1 . При использовании языковых кодов помните следующее:
Когда хостинг ищет, какой «контент i18n» обслуживать, он упорядочивает языки на основе значений качества в заголовке
Accept-Language
.Хостинг удаляет все вложенные теги региона и страны в заголовке
Accept-Language
, поэтому код языка в имени подпапки «i18n content» не может содержать эти вложенные теги. Например, вы не можете использоватьes-419
илиes-US
в качестве кода языка в имени подпапки, но вы можете использоватьes
.Если вы хотите обслуживать определенный региональный или национальный контент, вы можете создать вложенные папки, содержащие контент для определенного языка и страны, который вы хотите поддерживать.
В этом примере запрос из Испании с языковым предпочтением
es
,es-es
или дажеes-419
будет получать содержимое из подпапкиes_es/
, поскольку хостинг обрабатывает все эти языковые коды какes
.Запрос из США, Мексики или любой другой страны с языковым предпочтением
es-419
будет получать содержимое из подпапкиes_ALL/
поскольку хостинг рассматривает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/
поскольку хостинг обрабатывает код языкаes-419
какes
.Однако запрос из США с языковым предпочтением
es-419
будет получать содержимое из подпапкиes_ALL/
поскольку хостинг рассматривает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, хостинг обслуживает контент в следующем порядке приоритета:
Зарезервированные пространства имен, начинающиеся с сегмента пути
/__/*
Настроенные редиректы
Статическое содержимое с точным соответствием
Код языка + код страны (например, контент из
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
(Канада)
В соответствии с порядком приоритета точного совпадения и значениями качества для языковых настроек Хостинг будет искать каталоги для запрошенной страницы в следующем порядке.
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/
Хостинг сначала ищет во всем каталоге (включая все подпапки «i18n content» и корневой каталог) в порядке приоритета для точного совпадения, но точного совпадения для
awesome-page.html
.Таким образом, хостинг начнет обработку ошибки 404, которая следует тому же порядку приоритетов i18n, что и поиск с точным соответствием.
fr/
— это первая найденная подпапка, содержащая страницу 404.
Обратите внимание на следующее об этом поиске и обслуживании каталога «i18n content»:
Каталог
localized-files/
на самом деле не содержитen_ca/
,en_ALL/
илиen/
, поэтому служба хостинга просто пропустит список приоритетов, пока не найдет соответствующую подпапку для комбинации языка и страны запроса.Несмотря на то, что каталог
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 не отражаются в журналах.