Configurare le riscritture di internazionalizzazione (i18n)

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

  • Pubblica gli stessi contenuti in francese per tutti gli utenti che preferiscono il francese (indipendentemente del paese).
    Esempio: una home page con testo in francese

  • Pubblica contenuti in francese standard per gli utenti che preferiscono il francese, ma per gli utenti canadesi che preferiscono il francese, pubblica contenuti in francese canadese.
    Esempio: una home page con una frase in francese standard o una home page con Frase francese canadese

  • Pubblicare gli stessi contenuti per tutti gli utenti canadesi (indipendentemente dai loro preferenza della lingua).
    Esempio: una home page con il valore "predefinito" del tuo sito ma con un Funzionalità specifica per il Canada (ad esempio, tema relativa alle festività)

  • Offri contenuti in francese canadese a utenti canadesi che preferiscono il francese.
    Esempio: una home page con una frase in francese canadese e una home page specifica per il Canada funzionalità (ad es. tema festivo)

Firebase Hosting determina il paese di un utente in base all'indirizzo IP e a un preferenze di lingua dell'utente dall'intestazione della richiesta Accept-Language (di solito impostate automaticamente dal browser web).

Configurare le riscritture i18n

Per configurare le riscritture i18n per il tuo sito Hosting, devi creare un "i18n" contenuti". directory per tutti i contenuti localizzati, quindi aggiungi l'attributo i18n al file firebase.json per indirizzare ai nuovi "contenuti i18n" .

Ecco la procedura dettagliata:

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

    In ogni sottocartella, aggiungi i contenuti specifici della combinazione, ad esempio home page a tema festivo o pagine 404 specifiche per lingua.

    Ecco un esempio di "contenuti i18n" directory 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 combinazione di lingua e paese supportata dal tuo sito. Il pattern di denominazione per ogni sottocartella deve seguire uno di questi formati:

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

    • languageCode: include contenuti specifici per gli utenti che hanno questo preferenza della lingua, ma i contenuti non sono specifici per paese; fondamentalmente equivalente a languageCode_ALL

    Fai riferimento alla sottosezione I codici di paese e lingua riportati di seguito per ulteriori dettagli su questi codici. Puoi utilizzare il valore ALL (sensibile alle maiuscole) per indicare qualsiasi paese (ad es. es_ALL/) o qualsiasi (ad es. ALL_ca/).

    I file in una sottocartella non devono avere 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 file firebase.json e specifica il che contiene i tuoi "contenuti i18n". Per continuare con 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 include tutti i tuoi "contenuti i18n" sottocartelle. Se hai inserito tutti i tuoi "contenuti i18n" sottocartelle nella directory principale della directory public, usa / per il valore di root. Barre iniziali e finali nel valore root sono facoltativi.

  3. Esegui il deployment dei "contenuti i18n" e della configurazione sul tuo sito Hosting.

Puoi verificare la configurazione utilizzando gli override dei cookie.

Codici paese e lingua

Quando viene denominato "contenuti i18n" nelle sottocartelle, devi usare le lettere minuscole per entrambi i paesi e codici lingua. Puoi utilizzare il valore di ALL (sensibile alle maiuscole) per indicare qualsiasi paese (ad es. es_ALL/) o qualsiasi lingua (ad es. ALL_ca/).

Hosting ottiene il codice paese dall'indirizzo IP dell'utente. Codici paese sono di due lettere Codici ISO 3166-1 alpha-2.

I codici lingua vengono ottenuti dall'Accept-Language intestazione della richiesta dell'utente (in genere impostata automaticamente dal browser web). Si tratta dei codici ISO 639-1. Quando utilizzi i codici lingua, tieni presente quanto segue:

  • Quando Hosting cerca i "contenuti i18n" da pubblicare, ordina le lingue in base ai valori di qualità nell'intestazione Accept-Language.

  • Hosting elimina tutti i sottotag regionali e dei paesi nell'Accept-Language header, pertanto il codice lingua nel nome di una sottocartella "contenuti i18n" non può contienere questi sottotag. Ad esempio, non puoi utilizzare es-419 o es-US come del codice lingua in una sottocartella, ma puoi usare es.

    Se vuoi pubblicare contenuti specifici per regione o paese, puoi creare a sottocartelle con i contenuti specifici per lingua e paese assistenza in tempo reale.

Ordine di priorità per "contenuti i18n"

Se configuri le riscritture i18n, Hosting pubblica i contenuti in base a quanto segue ordine di priorità:

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

  2. Reindirizzamenti configurati

  3. Contenuti statici con corrispondenza esatta

    1. Codice lingua + Codice paese (ad es. contenuti di fr_ca/)
      L'ordine segue i valori di qualità per ogni lingua nel campo Accept-Language.

    2. Solo codice paese (ad es. contenuti di ALL_ca/)

    3. Solo codice lingua (ad es. contenuti di fr/ o es_ALL/)
      L'ordine segue i valori di qualità per ogni lingua nel campo Accept-Language intestazione.

    4. "Predefinito" contenuti statici con corrispondenza esatta
      Questi sono contenuti non inclusi nei "contenuti i18n" come nella directory principale della directory public.

  4. Riscritture configurate

  5. Gestione delle pagine 404

    1. Pagine 404 i18n
      Segue lo stesso ordine di priorità indicato sopra per la corrispondenza esatta. contenuti statici.

    2. Pagina 404 personalizzata

    3. Pagina 404 predefinita (fornita da Firebase)

Esempio di ordine di priorità

Continuiamo con l'esempio riportato sopra. Useremo la stessa directory di esempio una richiesta di esempio.

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

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

    • Codice paese: ca (Canada)

In base all'ordine di priorità della corrispondenza esatta e ai valori di qualità per le preferenze linguistiche, Hosting cercherà nelle directory una 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 Gestione

Quale pagina verrà mostrata all'utente?

  • Pagina richiesta: index.html

  • Pagina richiesta: awesome-page.html

Tieni presente quanto segue per quanto riguarda la ricerca e la pubblicazione della directory "contenuti i18n":

  • La directory localized-files/ in realtà non contiene en_ca/, en_ALL/ o en/, quindi Hosting ignorerà semplicemente le priorità finché non trova una sottocartella corrispondente lingua-paese.

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

  • Le sottocartelle denominate fr/ e fr_ALL/ sono equivalenti dal punto di vista preferenze di paese e lingua di un utente. Tuttavia, se entrambe le sottocartelle esistono, Hosting pubblicherà contenuti fr_ALL/ prima dei contenuti fr/.

Puoi modificare quali contenuti vengono pubblicati usando i cookie per eseguire l'override del paese. e intestazioni di lingua.

Ecco alcuni modi in cui puoi utilizzare l'override dei cookie:

  • Testa una funzionalità con combinazioni di lingua/paese diverse per verificare quale vengono pubblicati i contenuti.

  • Consenti agli utenti di modificare i contenuti visualizzati. Ad esempio, puoi implementare un selettore lingua, quindi impostare firebase-language-override di conseguenza.

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

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

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

Gli override dei cookie non vengono indicati nei log.