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

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

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

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

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

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

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 content". Если вы поместили все ваши подпапки "i18n content" в корень вашего public каталога, используйте / для значения root . Начальные и конечные слеши в значении root необязательны.

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

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

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

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

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

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

  3. Точное соответствие статическому контенту

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

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

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

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

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

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

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

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

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

  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 не отражаются в журналах.