Configurer les réécritures d'internationalisation (i18n)

Utilisez les réécritures d'internationalisation (« réécritures i18n ») pour proposer un contenu différent en fonction du pays ou de la langue préférée de l'utilisateur. Voici quelques exemples de configurations que vous pouvez configurer :

  • Proposez le même contenu en français à tous les utilisateurs qui préfèrent le français (quel que soit le pays).
    Exemple : une page d'accueil avec du texte en français

  • Diffusez du contenu en français standard aux utilisateurs qui préfèrent le français, mais pour les utilisateurs canadiens qui préfèrent le français, diffusez plutôt du contenu en français canadien.
    Exemple : une page d'accueil avec une formulation en français standard par rapport à une page d'accueil avec une formulation en français canadien

  • Diffusez le même contenu à tous les utilisateurs canadiens (quelle que soit leur langue de préférence).
    Exemple : une page d'accueil avec la langue "par défaut" de votre site, mais avec une fonctionnalité spécifique au Canada (comme un thème de vacances)

  • Proposez du contenu canadien en français aux utilisateurs canadiens qui préfèrent le français.
    Exemple : une page d'accueil avec une formulation en français canadien et une fonctionnalité spécifique au Canada (comme un thème de vacances)

Firebase Hosting détermine le pays d'un utilisateur à partir de son adresse IP et les préférences linguistiques d'un utilisateur à partir de l'en-tête de requête Accept-Language (généralement défini automatiquement par son navigateur Web ).

Configurer les réécritures i18n

Pour configurer les réécritures i18n pour votre site d'hébergement, vous devez créer un répertoire "i18n content" pour tout votre contenu localisé, puis ajouter l'attribut i18n à votre fichier firebase.json pour pointer vers votre nouveau répertoire "i18n content".

Voici les étapes détaillées :

  1. Dans le dossier public de votre répertoire d'applications local, créez un répertoire séparé pour votre "contenu i18n", puis créez des sous-dossiers pour chaque combinaison de langue et de pays prise en charge par votre site.

    Dans chaque sous-dossier, ajoutez le contenu spécifique à cette combinaison, comme des pages d'accueil sur le thème des vacances ou des pages 404 spécifiques à une langue.

    Voici un exemple de répertoire "i18n content" appelé 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
    

    Le localized-files/ contient des sous-dossiers distincts pour chaque combinaison de langue et de pays prise en charge par votre site. Le modèle de dénomination de chaque sous-dossier doit suivre l'un de ces formats :

    • languageCode_countryCode : Contient du contenu spécifique pour les utilisateurs qui ont cette préférence de langue et ce code de pays

    • languageCode : contient du contenu spécifique aux utilisateurs qui ont cette préférence de langue, mais le contenu n'est pas spécifique au pays ; fondamentalement équivalent à languageCode_ALL

    Reportez-vous à la sous-section Codes de pays et de langue ci-dessous pour plus de détails sur ces codes. Vous pouvez utiliser la valeur ALL (sensible à la casse) pour indiquer n'importe quel pays (comme es_ALL/ ) ou n'importe quelle langue (comme ALL_ca/ ).

    Les fichiers d'un sous-dossier n'ont pas besoin d'avoir des fichiers analogues dans le répertoire public ou dans d'autres sous-dossiers. Vous pouvez créer du contenu entièrement spécifique à une langue et/ou un pays.

  2. Ajoutez l'attribut i18n à votre fichier firebase.json et spécifiez le répertoire qui contient votre "contenu i18n". Continuons notre exemple :

    // firebase.json
    
    "hosting": {
    
      "public": "public",
    
      "ignore": [
        "firebase.json",
        "**/.*",
        "**/node_modules/**"
      ],
    
      "i18n": {
        "root": "/localized-files"  // directory that contains your "i18n content"
      }
    
      ...
    }
    

    Le répertoire spécifié pour root doit être le nom du répertoire qui contient tous vos sous-dossiers "contenu i18n". Si vous avez placé tous vos sous-dossiers "i18n content" à la racine de votre répertoire public , utilisez / pour la valeur de root . Les barres obliques de début et de fin dans la valeur root sont facultatives.

  3. Déployez votre "contenu i18n" et configurez-le sur votre site d'hébergement.

Vous pouvez tester votre configuration à l'aide de remplacements de cookies .

Codes pays et langue

Lorsque vous nommez les sous-dossiers "contenu i18n", vous devez utiliser des minuscules pour les codes de pays et de langue. Vous pouvez utiliser la valeur ALL (sensible à la casse) pour indiquer n'importe quel pays (comme es_ALL/ ) ou n'importe quelle langue (comme ALL_ca/ ).

L'hébergement obtient le code du pays à partir de l'adresse IP de l'utilisateur. Les codes de pays sont des codes ISO 3166-1 alpha-2 à deux lettres .

Les codes de langue sont obtenus à partir de l'en-tête de requête Accept-Language de l'utilisateur (généralement défini automatiquement par son navigateur Web ). Ce sont des codes ISO 639-1 . Gardez ce qui suit à l'esprit lorsque vous utilisez des codes de langue :

  • Lorsque l'hébergement recherche le "contenu i18n" à servir, il ordonne les langues en fonction des valeurs de qualité dans l'en-tête Accept-Language .

  • L'hébergement supprime toutes les sous-étiquettes régionales et nationales dans l'en-tête Accept-Language , de sorte que le code de langue dans un nom de sous-dossier "i18n content" ne peut pas contenir ces sous-étiquettes. Par exemple, vous ne pouvez pas utiliser es-419 ou es-US comme code de langue dans un nom de sous-dossier, mais vous pouvez utiliser es .

    Si vous souhaitez diffuser du contenu régional ou national spécifique, vous pouvez créer des sous-dossiers qui contiennent le contenu spécifique de la langue et du pays que vous souhaitez prendre en charge.

Ordre de priorité pour "contenu i18n"

Si vous configurez des réécritures i18n, l'hébergement diffuse le contenu en fonction de l'ordre de priorité suivant :

  1. Espaces de noms réservés commençant par un segment de chemin /__/*

  2. Redirections configurées

  3. Contenu statique de correspondance exacte

    1. Code langue + Code pays (par exemple, contenu de fr_ca/ )
      L'ordre suit les valeurs de qualité pour chaque langue dans l'en-tête Accept-Language de la requête.

    2. Code de pays uniquement (par exemple, contenu de ALL_ca/ )

    3. Code de langue uniquement (par exemple, contenu de fr/ ou es_ALL/ )
      L'ordre suit les valeurs de qualité pour chaque langue dans l'en-tête Accept-Language de la requête.

    4. Contenu statique de correspondance exacte "par défaut"
      Il s'agit du contenu qui se trouve en dehors du répertoire "i18n content", comme à la racine du répertoire public .

  4. Réécritures configurées

  5. 404 manutention

    1. i18n 404 pages
      Cela suit le même ordre de priorité indiqué ci-dessus pour le contenu statique de correspondance exacte.

    2. Page 404 personnalisée

    3. Page 404 par défaut (fournie par Firebase)

Exemple d'ordre de priorité

Continuons notre exemple ci-dessus. Nous utiliserons le même répertoire d'exemple et un exemple de requête.

  • Exemple de répertoire de projet local avec un répertoire "i18n content" (appelé 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
    
  • Exemple d'informations sur la demande

    • Codes de langue : fr , en (français, puis anglais)
      Les codes de langue sont classés en fonction des valeurs de qualité dans l'en-tête Accept-Language .

    • Indicatif de pays : ca (Canada)

Selon l'ordre de priorité de correspondance exacte et les valeurs de qualité des préférences linguistiques, l'hébergement recherchera dans les répertoires une page demandée dans l'ordre suivant.

  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 manutention

Quelle page sera servie à l'utilisateur ?

  • Page demandée : index.html

  • Page demandée : awesome-page.html

Notez ce qui suit à propos de cette recherche et diffusion du répertoire "i18n content":

  • Le localized-files/ ne contient pas réellement les sous-dossiers en_ca/ , en_ALL/ ou en/ , donc Hosting sautera simplement la liste des priorités jusqu'à ce qu'il trouve un sous-dossier correspondant à la combinaison langue-pays de la demande.

  • Même si le localized-files/ contient un sous-dossier es_ALL/ , l'exemple de requête ci-dessus n'inclut pas de code de langue es ou es-foo , donc Hosting ne recherchera pas le "contenu i18n" qui correspond à es .

  • Les sous-dossiers appelés fr/ et fr_ALL/ sont équivalents du point de vue des préférences de pays et de langue de l'utilisateur. Cependant, si les deux sous-dossiers existent, l'hébergement servira fr_ALL/ content avant fr/ content.

Vous pouvez modifier le contenu diffusé en utilisant des cookies pour remplacer les en-têtes de pays et de langue.

Voici quelques façons d'utiliser les remplacements de cookies :

  • Testez une fonctionnalité avec différentes combinaisons langue/pays pour vérifier quel contenu est diffusé.

  • Permettez à vos utilisateurs de modifier le contenu qu'ils voient. Par exemple, vous pouvez implémenter un sélecteur de langue, puis définir le firebase-language-override de l'utilisateur en conséquence.

Pour configurer les remplacements de cookies, définissez les cookies avec les deux ou l'un de ces noms : firebase-country-override et firebase-language-override . Par exemple, l'extrait de code JavaScript suivant remplace le code de pays par ca et l'en-tête Accept-Language par fr,en :

document.cookie = "firebase-country-override=ca";
document.cookie = "firebase-language-override=fr,en";

Les remplacements de cookies de langue doivent être une liste de codes de langue séparés par des virgules par ordre de préférence, sans sous-étiquettes ni valeurs de qualité.

Les remplacements de cookies ne sont pas reflétés dans les journaux.