Настройка перезаписи интернационализации (i18n)

Используйте переписывание интернационализации («i18n-переписывание») для показа разного контента в зависимости от страны или предпочитаемого языка пользователя. Вот несколько примеров конфигураций, которые вы можете настроить:

  • Предоставлять одинаковый контент на французском языке всем пользователям, которые предпочитают французский язык (независимо от страны).
    Пример: домашняя страница с текстом на французском языке

  • Предоставлять стандартный французский контент пользователям, которые предпочитают французский язык, а для канадских пользователей, которые предпочитают французский язык, предоставлять контент на канадском французском языке.
    Пример: домашняя страница с использованием стандартного французского языка и домашняя страница с использованием канадского французского языка

  • Предоставлять одинаковый контент всем канадским пользователям (независимо от их языковых предпочтений).
    Пример: домашняя страница с языком «по умолчанию» вашего сайта, но со специфичной для Канады функцией (например, тематикой праздников)

  • Предоставляйте контент на канадском французском языке канадским пользователям, которые предпочитают французский язык.
    Пример: домашняя страница с канадским вариантом французского языка и функциями, характерными для Канады (например, тема праздников)

Firebase Hosting определяет страну пользователя по его IP-адресу, а языковые настройки пользователя — по заголовку запроса Accept-Language (обычно устанавливаются автоматически веб-браузером ).

Настройка i18n-переписывания

Чтобы настроить i18n-переписывание для вашего Hosting сайта, вам необходимо создать каталог «i18n content» для всего локализованного контента, а затем добавить атрибут i18n в файл firebase.json , чтобы указать на новый каталог «i18n content».

Вот подробные шаги:

  1. В 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

    Каталог localized-files/ содержит отдельные подпапки для каждой комбинации языка и страны, поддерживаемой вашим сайтом. Имя каждой подпапки должно соответствовать одному из следующих форматов:

    • languageCode_countryCode : содержит контент, предназначенный для пользователей с заданным языковым предпочтением и кодом страны.

    • languageCode : содержит контент, предназначенный для пользователей с заданными языковыми предпочтениями, но не привязанный к конкретной стране; по сути, эквивалентно languageCode_ALL

    Подробнее об этих кодах см. в подразделе «Коды стран и языков» ниже. Значение ALL (с учётом регистра) можно использовать для обозначения любой страны (например, es_ALL/ ) или любого языка (например, ALL_ca/ ).

    Файлы в подпапке не обязательно должны иметь аналогичные файлы в public каталоге или других подпапках. Вы можете создавать контент, полностью соответствующий определённому языку и/или стране.

  2. Добавьте атрибут 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 необязательны.

  3. Разместите свой «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 .

    Если вы хотите обслуживать контент определенного региона или страны, вы можете создать подпапки, содержащие контент определенного языка или страны, который вы хотите поддерживать.

Приоритетный заказ для «i18n-контента»

Если вы настроите i18n-переписывание, Hosting будет обслуживать контент в следующем порядке приоритета:

  1. Зарезервированные пространства имен, начинающиеся с сегмента пути /__/*

  2. Настроенные перенаправления

  3. Статический контент с точным соответствием

    1. Код языка + Код страны (например, контент из fr_ca/ )
      Порядок соответствует значениям качества для каждого языка в заголовке Accept-Language запроса.

    2. Только код страны (например, контент из ALL_ca/ )

    3. Только код языка (например, содержимое из fr/ или es_ALL/ )
      Порядок соответствует значениям качества для каждого языка в заголовке Accept-Language запроса.

    4. Статический контент с точным соответствием «по умолчанию»
      Это контент, который находится за пределами каталога «i18n-контент», например в корне public каталога.

  4. Настроенные перезаписи

  5. обработка 404

    1. страницы i18n 404
      При этом соблюдается тот же порядок приоритетов, который указан выше для точного соответствия статического контента.

    2. Пользовательская страница 404

    3. Страница 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 будет искать в каталогах запрашиваемую страницу в следующем порядке.

  1. public/localized-files/fr_ca/

  2. public/localized-files/en_ca/

  3. public/localized-files/ALL_ca/

  4. public/localized-files/fr_ALL/

  5. public/localized-files/fr/

  6. public/localized-files/en_ALL/

  7. public/localized-files/en/

  8. public/

  9. обработка 404

Какая страница будет показана пользователю?

  • Запрошенная страница: index.html

  • Запрошенная страница: awesome-page.html

Обратите внимание на следующее относительно этого поиска и обслуживания каталога «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 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-файлов не отражаются в журналах.