Configurare le riscritture di internazionalizzazione (i18n).

Utilizzare le riscritture di internazionalizzazione ("riscritture i18n") per offrire contenuti diversi a seconda del paese o della lingua preferita dell'utente. Ecco alcune configurazioni di esempio che potresti impostare:

  • Offri gli stessi contenuti francesi a tutti gli utenti che preferiscono il francese (indipendentemente dal Paese).
    Esempio: una home page con testo in francese

  • Offri contenuti in francese standard agli utenti che preferiscono il francese, ma per gli utenti canadesi che preferiscono il francese, offri invece contenuti in francese canadese.
    Esempio: una home page con una frase in francese standard rispetto a una home page con una frase in francese canadese

  • Offri gli stessi contenuti a tutti gli utenti canadesi (indipendentemente dalla loro preferenza linguistica).
    Esempio: una home page con la lingua "predefinita" del tuo sito ma con una funzionalità specifica per il Canada (come un tema festivo)

  • Offri contenuti in francese canadese agli utenti canadesi che preferiscono il francese.
    Esempio: una home page con frasi in francese canadese e una funzionalità specifica per il Canada (come un tema festivo)

Firebase Hosting determina il Paese di un utente dal suo indirizzo IP e le preferenze di lingua dell'utente dall'intestazione della richiesta Accept-Language (solitamente impostata automaticamente dal browser web ).

Configura le riscritture i18n

Per impostare le riscritture i18n per il tuo sito di hosting, devi creare una directory "i18n content" per tutti i tuoi contenuti localizzati, quindi aggiungere l'attributo i18n al tuo file firebase.json per puntare alla tua nuova directory "i18n content".

Ecco i passaggi dettagliati:

  1. All'interno della cartella public della directory dell'app locale, crea una directory separata per i tuoi "contenuti i18n", quindi crea sottocartelle per ciascuna combinazione di lingua e paese supportata dal tuo sito.

    In ciascuna sottocartella, aggiungi il contenuto specifico per quella combinazione, come home page a tema festivo o pagine 404 specifiche per la lingua.

    Ecco un esempio di directory "i18n content" chiamata 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
    

    La directory localized-files/ contiene sottocartelle separate per ciascuna combinazione di lingua e paese supportata dal tuo sito. Il modello di denominazione per ciascuna sottocartella deve seguire uno di questi formati:

    • languageCode_countryCode : contiene contenuti specifici per gli utenti che hanno quella preferenza di lingua e quel codice paese

    • languageCode : contiene contenuti specifici per gli utenti che hanno tale preferenza linguistica, ma i contenuti non sono specifici del Paese; sostanzialmente equivalente a languageCode_ALL

    Fare riferimento alla sottosezione Codici paese e lingua di seguito per maggiori dettagli su questi codici. Puoi utilizzare il valore ALL (con distinzione tra maiuscole e minuscole) per indicare qualsiasi paese (come es_ALL/ ) o qualsiasi lingua (come ALL_ca/ ).

    Non è necessario che i file in una sottocartella contengano file analoghi nella directory public o in altre sottocartelle. Puoi creare contenuti interamente specifici per una lingua e/o un Paese.

  2. Aggiungi l'attributo i18n al tuo file firebase.json e specifica la directory che contiene il tuo "contenuto i18n". Continuando il nostro esempio:

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

    La directory specificata per root deve essere il nome della directory che contiene tutte le sottocartelle "contenuto i18n". Se hai posizionato tutte le sottocartelle "contenuto i18n" nella radice della directory public , utilizza / per il valore di root . Le barre iniziali e finali nel valore root sono facoltative.

  3. Distribuisci il tuo "contenuto i18n" e configuralo sul tuo sito di hosting.

Puoi testare la tua configurazione utilizzando l'override dei cookie .

Codici di paese e lingua

Quando si denominano le sottocartelle "contenuto i18n", è necessario utilizzare lettere minuscole sia per i codici del paese che per quelli della lingua. Puoi utilizzare il valore ALL (con distinzione tra maiuscole e minuscole) per indicare qualsiasi paese (come es_ALL/ ) o qualsiasi lingua (come ALL_ca/ ).

L'hosting ottiene il codice del paese dall'indirizzo IP dell'utente. I codici paese sono codici ISO 3166-1 alpha-2 di due lettere .

I codici della lingua vengono ottenuti dall'intestazione della richiesta Accept-Language dell'utente (solitamente impostata automaticamente dal browser web ). Sono codici ISO 639-1 . Tieni presente quanto segue quando usi i codici lingua:

  • Quando Hosting cerca quale "contenuto i18n" servire, ordina le lingue in base ai valori di qualità nell'intestazione Accept-Language .

  • L'hosting elimina eventuali sottotag regionali e nazionali nell'intestazione Accept-Language , quindi il codice della lingua nel nome della sottocartella "contenuto i18n" non può contenere questi sottotag. Ad esempio, non puoi utilizzare es-419 o es-US come codice lingua nel nome di una sottocartella, ma puoi utilizzare es .

    Se desideri offrire contenuti regionali o nazionali specifici, puoi creare sottocartelle che contengono i contenuti specifici della lingua e del paese che desideri supportare.

Ordine di priorità per i "contenuti i18n"

Se imposti le riscritture i18n, Hosting fornisce i contenuti in base al seguente ordine di priorità:

  1. Spazi dei nomi riservati che iniziano con un segmento di percorso /__/*

  2. Reindirizzamenti configurati

  3. Contenuto statico con corrispondenza esatta

    1. Codice lingua + Codice paese (ad esempio, contenuto da fr_ca/ )
      L'ordine segue i valori di qualità per ogni lingua nell'intestazione Accept-Language della richiesta.

    2. Solo codice paese (ad esempio, contenuto di ALL_ca/ )

    3. Solo codice lingua (ad esempio, contenuto da fr/ o es_ALL/ )
      L'ordine segue i valori di qualità per ogni lingua nell'intestazione Accept-Language della richiesta.

    4. Contenuto statico con corrispondenza esatta "predefinita".
      Si tratta di contenuti esterni alla directory "i18n content", come nella directory principale della directory public .

  4. Riscritture configurate

  5. 404 movimentazione

    1. i18n 404 pagine
      Segue lo stesso ordine di priorità elencato sopra per il contenuto statico con corrispondenza esatta.

    2. Pagina 404 personalizzata

    3. Pagina 404 predefinita (fornita da Firebase)

Esempio di ordine di priorità

Continuiamo il nostro esempio dall'alto. Utilizzeremo la stessa directory di esempio e una richiesta di esempio.

  • Esempio di directory di progetto locale con una directory "contenuto i18n" (chiamata 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
    
  • Esempio richiesta informazioni

    • Codici lingua: fr , en (francese, poi inglese)
      I codici lingua sono ordinati in base ai valori di qualità nell'intestazione Accept-Language .

    • Prefisso internazionale: ca (Canada)

In base all'ordine di priorità della corrispondenza esatta e ai valori di qualità per le preferenze della lingua, l'Hosting cercherà nelle directory la pagina richiesta nel seguente ordine.

  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 movimentazione

Quale pagina verrà servita all'utente?

  • Pagina richiesta: index.html

  • Pagina richiesta: awesome-page.html

Tieni presente quanto segue riguardo alla ricerca e al servizio della directory "i18n content":

  • La directory localized-files/ in realtà non contiene sottocartelle en_ca/ , en_ALL/ o en/ , quindi Hosting salterà semplicemente l'elenco delle priorità finché non troverà una sottocartella corrispondente per la combinazione lingua-paese della richiesta.

  • Anche se la directory localized-files/ contiene una sottocartella es_ALL/ , la richiesta di esempio sopra non include un codice della lingua es o es-foo , quindi Hosting non cercherà "contenuto i18n" che corrisponde es .

  • Le sottocartelle denominate fr/ e fr_ALL/ sono equivalenti dal punto di vista del paese e delle preferenze della lingua dell'utente. Tuttavia, se esistono entrambe le sottocartelle, Hosting servirà fr_ALL/ content prima di fr/ content.

Puoi modificare il contenuto offerto utilizzando i cookie per sovrascrivere le intestazioni del paese e della lingua.

Ecco alcuni modi in cui puoi utilizzare le sovrascritture dei cookie:

  • Prova una funzionalità con diverse combinazioni di lingua/paese per verificare quali contenuti vengono offerti.

  • Consenti ai tuoi utenti di modificare il contenuto che vedono. Ad esempio, puoi implementare un selettore di lingua, quindi impostare di conseguenza il cookie firebase-language-override dell'utente.

Per configurare le sostituzioni dei cookie, imposta i cookie con entrambi o uno di questi nomi: firebase-country-override e firebase-language-override . Ad esempio, il seguente snippet di codice JavaScript sovrascrive il codice paese in ca e l'intestazione Accept-Language in fr,en :

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

Le sostituzioni dei cookie di lingua devono essere un elenco di codici di lingua separati da virgole in ordine di preferenza, senza sottotag o valori di qualità.

Le sostituzioni dei cookie non si riflettono nei log.