Configurare le riscritture di internazionalizzazione (i18n)

Utilizza le riscritture di internazionalizzazione ("riscritture i18n") per pubblicare contenuti diversi in base al paese o alla lingua preferita di un utente. Ecco alcuni esempi di configurazioni che puoi impostare:

  • Pubblica gli stessi contenuti in francese per tutti gli utenti che preferiscono il francese (indipendentemente dal 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 frasi in francese standard rispetto a una home page con frasi in francese canadese

  • Pubblica gli stessi contenuti per 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 (ad esempio un tema per le festività)

  • Pubblicare contenuti in francese canadese per gli utenti canadesi che preferiscono il francese.
    Esempio: una home page con frasi in francese canadese e una funzionalità specifica per il Canada (ad esempio un tema per le festività)

Firebase Hosting determina il paese di un utente dal suo indirizzo IP e le preferenze linguistiche di un utente dall'intestazione della richiesta Accept-Language (in genere impostate automaticamente dal browser web).

Configurare le riscritture i18n

Per configurare le riscritture i18n per il tuo sito Hosting, devi creare una directory "contenuti i18n" per tutti i tuoi contenuti localizzati, quindi aggiungere l'attributo i18n al file firebase.json in modo che rimandi alla nuova directory "contenuti i18n".

Ecco la procedura dettagliata:

  1. Nella cartella public della directory dell'app locale, crea una directory distinta per i "contenuti i18n", quindi crea sottocartelle per ogni combinazione di lingua e paese supportata dal tuo sito.

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

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

    La directory localized-files/ contiene sottocartelle separate per ogni 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: contiene contenuti specifici per gli utenti che hanno questa preferenza linguistica, ma i contenuti non sono specifici per il paese; essenzialmente equivale a languageCode_ALL

    Per ulteriori dettagli su questi codici, consulta la sottosezione Codici paese e lingua di seguito. Puoi utilizzare il valore ALL (sensibile alle maiuscole) per indicare qualsiasi paese (ad esempio es_ALL/) o qualsiasi lingua (ad esempio 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 la directory contenente i "contenuti i18n". Per continuare con l'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 sottodirectory "contenuti i18n". Se hai posizionato tutte le sottocartelle "contenuti i18n" nella directory principale di public, utilizza / per il valore di root. Le barre oblique iniziali e finali nel valore root sono facoltative.

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

Puoi testare la configurazione utilizzando le sostituzione dei cookie.

Codici paese e lingua

Quando assegni un nome alle sottocartelle "contenuti i18n", devi utilizzare le lettere minuscole sia per i codici paese sia per i codici lingua. Puoi utilizzare il valore ALL (sensibile alle maiuscole) per indicare qualsiasi paese (ad esempio es_ALL/) o qualsiasi lingua (ad esempio ALL_ca/).

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

I codici lingua vengono ottenuti dall'Accept-Language intestazione della richiesta dell'utente (in genere impostata automaticamente dal browser web). Si tratta di 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 codice lingua nel nome di una sottocartella, ma puoi utilizzare es.

    Se vuoi pubblicare contenuti specifici per regione o paese, puoi creare sottocartelle contenenti i contenuti specifici per lingua e paese che vuoi supportare.

Ordine di priorità per "Contenuti i18n"

Se configuri le riscritture i18n, Hosting pubblica 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. 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 nell'intestazioneAccept-Language della richiesta.

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

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

    4. Contenuti statici con corrispondenza esatta "predefiniti"
      Si tratta di contenuti esterni alla directory "contenuti i18n", ad esempio nella directory principale della directory public.

  4. Riscriviture configurate

  5. Gestione delle pagine 404

    1. Pagine i18n 404
      Questo segue lo stesso ordine di priorità elencato sopra per i contenuti statici con corrispondenza esatta.

    2. Pagina 404 personalizzata

    3. Pagina 404 predefinita (fornita da Firebase)

Esempio di ordine di priorità

Continuiamo con l'esempio precedente. Utilizzeremo la stessa directory di esempio e una richiesta di esempio.

  • Esempio di directory del progetto locale con una directory "contenuti 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
    
  • Informazioni di esempio sulla richiesta

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

    • 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. Gestione delle pagine 404

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/ non contiene effettivamente sottocartelle en_ca/, en_ALL/ o en/, quindi Hosting salterà semplicemente giù nell'elenco di 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/, l'esempio di richiesta riportato sopra non include un codice lingua es o es-foo, pertanto Hosting non cercherà "contenuti i18n" corrispondenti a es.

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

Puoi modificare i contenuti pubblicati utilizzando i cookie per sostituire le intestazioni di paese e lingua.

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

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

  • Consenti agli utenti di modificare i contenuti che vedono. Ad esempio, puoi implementare un selettore di lingue, quindi impostare di conseguenza il cookiefirebase-language-override dell'utente.

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

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

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

Le sostituzioni dei cookie non vengono applicate nei log.