Используйте переписывание интернационализации («i18n-переписывание») для показа разного контента в зависимости от страны или предпочитаемого языка пользователя. Вот несколько примеров конфигураций, которые вы можете настроить:
- Предоставлять одинаковый контент на французском языке всем пользователям, которые предпочитают французский язык (независимо от страны). 
 Пример: домашняя страница с текстом на французском языке
- Предоставлять стандартный французский контент пользователям, которые предпочитают французский язык, а для канадских пользователей, которые предпочитают французский язык, предоставлять контент на канадском французском языке. 
 Пример: домашняя страница с использованием стандартного французского языка и домашняя страница с использованием канадского французского языка
- Предоставлять одинаковый контент всем канадским пользователям (независимо от их языковых предпочтений). 
 Пример: домашняя страница с языком «по умолчанию» вашего сайта, но со специфичной для Канады функцией (например, тематикой праздников)
- Предоставляйте контент на канадском французском языке канадским пользователям, которые предпочитают французский язык. 
 Пример: домашняя страница с канадским вариантом французского языка и функциями, характерными для Канады (например, тема праздников)
 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-контент». Если все подпапки «i18n-контент» находятся в корне каталога- public, используйте- /в качестве значения- root. Начальные и конечные слеши в значении- rootнеобязательны.
- Разместите свой «i18n-контент» и конфигурацию на сайте Hosting . 
Вы можете протестировать свою настройку, используя переопределение файлов cookie .
Коды стран и языков
 При наименовании подпапок «i18n-контент» необходимо использовать строчные буквы как для кодов страны, так и для кодов языка. Для обозначения любой страны (например, es_ALL/ ) или любого языка (например, ALL_ca/ ) можно использовать значение ALL (с учётом регистра).
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.- Если вы хотите обслуживать контент определенного региона или страны, вы можете создать подпапки, содержащие контент определенного языка или страны, который вы хотите поддерживать. - В этом примере запрос из Испании с языковыми предпочтениями - 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-контент», например в корне- publicкаталога.
 
- Настроенные перезаписи 
- обработка 404 - страницы i18n 404 
 При этом соблюдается тот же порядок приоритетов, который указан выше для точного соответствия статического контента.
- Страница 404 по умолчанию (предоставлена Firebase) 
 
Пример приоритетного порядка
Продолжим наш пример. Мы используем тот же каталог и тот же запрос.
- Пример локального каталога проекта с каталогом «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
- Пример запроса информации - Коды языков: - 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-файлов не отражаются в журналах.