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

Utiliser des réécritures d'internationalisation ("i18n") pour diffuser des contenus différents en fonction du pays ou de la langue préférée de l'utilisateur. Voici quelques exemples que vous pouvez définir:

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

  • Proposer du contenu en français standard aux utilisateurs qui préfèrent le français, mais pour Utilisateurs canadiens qui préfèrent le français, proposent un contenu en français canadien à la place.
    Exemple: une page d'accueil avec des formulations en français standard ou une page d'accueil avec Formule en français canadien

  • Proposez le même contenu à tous les internautes canadiens (quel que soit leur préférences linguistiques).
    Exemple : une page d'accueil dans la langue "par défaut" de votre site, mais avec une fonctionnalité spécifique au Canada (comme un thème de fête)

  • Proposer des contenus en français canadien aux utilisateurs canadiens qui préfèrent le français.
    Exemple: une page d'accueil avec une formulation en français canadien et une version spécifique au Canada fonctionnalité (comme les fêtes de fin d'année)

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

Configurer des réécritures i18n

Pour configurer les réécritures multilingues pour votre site Hosting, vous devez créer un répertoire "contenu multilingue" pour tous vos contenus localisés, puis ajouter l'attribut i18n à votre fichier firebase.json pour qu'il pointe vers votre nouveau répertoire "contenu multilingue".

Voici la procédure détaillée :

  1. Dans le dossier public de votre répertoire d'application local, créez un répertoire distinct pour votre "contenu i18n", puis créez des sous-dossiers pour chaque langue et combinaison de pays acceptée par votre site.

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

    Voici un exemple de "contenu i18n" nommé 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 répertoire localized-files/ contient des sous-dossiers distincts pour chaque combinaison langue/pays acceptée par votre site. Le modèle de nommage pour chaque sous-dossier doivent suivre l'un des formats suivants:

    • languageCode_countryCode: inclut du contenu spécifique aux utilisateurs qui ont cette préférence linguistique et ce code pays

    • languageCode: inclut du contenu spécifique pour les utilisateurs qui l'ont les préférences linguistiques, mais le contenu n'est pas spécifique à un pays ; essentiellement équivaut à languageCode_ALL

    Voir la sous-section Codes des pays et des langues ci-dessous pour en savoir plus 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 de fichiers analogues dans le répertoire public ou dans d'autres sous-dossiers. Vous pouvez créer du contenu entièrement propres à une langue et/ou un pays.

  2. Ajoutez l'attribut i18n à votre fichier firebase.json et spécifiez la qui contient votre "contenu i18n". Poursuivons 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 contient tout votre "contenu i18n" sous-dossiers. Si vous avez placé toutes vos "contenu i18n" sous-dossiers à la racine de votre répertoire public, utilisez / pour la valeur de root. Barres obliques au début et à la fin de la valeur root sont facultatifs.

  3. Déployer votre "contenu i18n" et la configuration à votre site Hosting.

Vous pouvez tester votre configuration en utilisant la fonctionnalité Remplacement des cookies.

Codes de pays et de langue

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

Hosting obtient le code pays à partir de l'adresse IP de l'utilisateur. Codes pays sont composées de 2 lettres Codes ISO 3166-1 alpha-2.

Les codes de langue sont obtenus à partir de l'en-tête de requête Accept-Language de l'utilisateur. (généralement définis automatiquement par leur navigateur Web). Il s'agit de codes ISO 639-1. Tenez compte des points suivants lorsque vous utilisez les codes de langue:

  • Lorsque Hosting recherche quel "contenu i18n" elle ordonne langues en fonction des valeurs de qualité de l'en-tête Accept-Language.

  • Hosting supprime tous les sous-tags régionaux et nationaux dans l'en-tête Accept-Language. Par conséquent, le code de langue dans le nom d'un sous-dossier "Contenu i18n" ne peut pas contenir ces sous-tags. Par exemple, vous ne pouvez pas utiliser es-419 ni es-US comme code de langue dans le nom d'un sous-dossier, mais vous pouvez utiliser es.

    Si vous souhaitez diffuser du contenu spécifique à une région ou à un pays, vous pouvez créer des sous-dossiers contenant le contenu spécifique à la langue et au pays que vous souhaitez prendre en charge.

Ordre de priorité du "contenu i18n"

Si vous configurez des réécritures i18n, Hosting diffuse du contenu en fonction des éléments suivants ordre de priorité:

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

  2. Redirections configurées

  3. Contenu statique avec correspondance exacte

    1. Code de langue + code pays (par exemple, contenu du domaine fr_ca/)
      L'ordre suit les valeurs de qualité pour chaque langue dans le Accept-Language.

    2. Code pays uniquement (par exemple, contenu provenant 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 le Accept-Language.

    4. "Par défaut" contenu statique à correspondance exacte
      Ce contenu ne fait pas partie du "contenu i18n" d'assistance, comme dans racine du répertoire public.

  4. Réécritures configurées

  5. Gestion des erreurs 404

    1. Pages 404 i18n
      L'ordre de priorité est le même que celui indiqué ci-dessus pour les mots clés exacts. du contenu statique.

    2. Page d'erreur 404 personnalisée

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

Exemple d'ordre de priorité

Poursuivons 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 "contenu i18n" répertoire (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 requête

    • Codes de langue: fr, en (français, puis anglais)
      Les codes de langue sont classés en fonction des valeurs de qualité indiquées dans les Accept-Language.

    • Code pays: ca (Canada)

Selon l'ordre de priorité des mots clés exacts et les valeurs de qualité de la préférences linguistiques, Hosting effectuera une recherche dans les répertoires à la recherche 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. Gestion des erreurs 404

Quelle page sera présentée à l'utilisateur ?

  • Page demandée: index.html

  • Page demandée: awesome-page.html

Notez les points suivants à propos de la recherche et de la diffusion du "contenu i18n". répertoire:

  • Le répertoire localized-files/ ne contient pas en_ca/. en_ALL/ ou en/. Hosting ne fait donc qu'ignorer jusqu'à ce qu'il trouve un sous-dossier correspondant en fonction du pays et de la langue.

  • Même si le répertoire 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. Hosting ne recherche donc pas de "contenu i18n" correspondant à es.

  • Les sous-dossiers fr/ et fr_ALL/ sont équivalents du point de vue de les préférences de pays et de langue d'un utilisateur ; Toutefois, si les deux sous-dossiers existe, Hosting diffusera le contenu fr_ALL/ avant le contenu fr/.

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

Voici quelques façons d'utiliser la fonctionnalité de remplacement des cookies:

  • Testez une fonctionnalité avec différentes combinaisons de langues/pays pour vérifier le contenu diffusé.

  • Permettez à vos utilisateurs de modifier le contenu visible. Par exemple, vous pouvez un outil de sélection de langue, puis définissez firebase-language-override en conséquence.

Pour configurer les remplacements de cookies, définissez des cookies avec les deux noms suivants ou l'un d'entre eux: firebase-country-override et firebase-language-override. Par exemple, l'extrait de code JavaScript suivant remplace le code pays par ca. l'en-tête Accept-Language sur 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 une virgule dans ordre de préférence, sans sous-balises ni valeurs de qualité.

Les forçages de cookies ne sont pas reflétés dans les journaux.