Используйте правила интернационализации (i18n rewrites), чтобы предоставлять разный контент в зависимости от страны или предпочтительного языка пользователя. Вот несколько примеров настроек, которые вы можете установить:
Предоставлять всем пользователям, предпочитающим французский язык (независимо от страны), одинаковый контент на французском языке.
Пример: главная страница с текстом на французском языке.Пользователям, предпочитающим французский язык, следует показывать контент на стандартном французском языке, а канадским пользователям, предпочитающим французский язык, — контент на канадском французском языке.
Пример: главная страница со стандартным французским языком и главная страница с канадским французским языком.Предоставлять всем канадским пользователям один и тот же контент (независимо от предпочтений в языке).
Пример: главная страница с «языком по умолчанию» вашего сайта, но с особенностями, характерными для Канады (например, с праздничной тематикой).Предоставлять канадским пользователям, предпочитающим французский язык, контент на французском языке.
Пример: главная страница с фразами на канадском французском языке и функцией, специфичной для Канады (например, тематикой праздника).
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.htmlpublic/ // 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 rewrites), 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.htmlindex.htmlиз подпапкиfr_ca/Поскольку Hosting сначала ищет файл index.html в подпапке
fr_ca/, он найдет точное совпадение сindex.htmlименно в этой подпапке.Запрошенная страница:
awesome-page.html404.htmlиз подпапкиfr/Hosting сначала в приоритетном порядке ищет точное совпадение во всей директории (включая все подпапки "i18n content" и корневой каталог), но для
awesome-page.htmlточного совпадения не найдено.Таким образом, Hosting начнет обработку ошибок 404, которая следует тому же порядку приоритетов интернационализации, что и поиск с точным совпадением. Подпапка
fr/— это первая подпапка, в которой обнаружена страница 404.
Обратите внимание на следующее относительно поиска и обслуживания каталога "i18n content":
В каталоге
localized-files/на самом деле нет подпапокen_ca/,en_ALL/илиen/, поэтому Hosting просто будет пропускать подпапки в списке приоритетов, пока не найдет соответствующую подпапку для комбинации языка и страны запроса.Несмотря на то, что в каталоге
localized-files/есть подпапкаes_ALL/, в приведенном выше примере запроса отсутствует код языкаesилиes-foo, поэтому Hosting не будет искать "контент интернационализации", соответствующий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-файлов, не отражаются в логах.