Utilizza le riscritture per l'internazionalizzazione ("riscritture i18n") per offrire contenuti diversi a seconda del paese o della lingua preferita dell'utente. Di seguito sono riportate alcune configurazioni di esempio che è possibile configurare:
Offri lo stesso contenuto francese a tutti gli utenti che preferiscono il francese (indipendentemente dal paese).
Esempio: una homepage con testo franceseOffri 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 frasi in francese standard rispetto a una home page con frasi in francese canadeseOffri lo stesso contenuto a tutti gli utenti canadesi (indipendentemente dalla lingua preferita).
Esempio: una home page con la lingua "predefinita" del tuo sito ma con una funzione 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 funzione 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 di un utente dall'intestazione della richiesta Accept-Language
(di solito impostata automaticamente dal browser web ).
Imposta 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:
All'interno della cartella
public
della tua directory dell'app locale, crea una directory separata per il tuo "contenuto i18n", quindi crea sottocartelle per ogni combinazione di lingua e paese supportata dal tuo sito.In ogni 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
public/ // matches requests that aren't specified by your "i18n content" subfolders // example: display your homepage in the "default" language for your site with no country-specific features index.html // your site's default homepage 404.html // your site's custom 404 page localized-files/ // matches requests from Canada with any language preference // example: display your homepage in the "default" language for your site with a Canada-specific feature ALL_ca/ index.html // matches requests from any country with a language preference of `es` or `es-foo` // example: display your homepage in Spanish with no country-specific features es_ALL/ index.html 404.html // your site's custom 404 page in Spanish // matches requests from any country with a language preference of `fr` or `fr-foo` // example: display your homepage in Standard French with no country-specific features fr/ index.html 404.html // your site's custom 404 page in French // matches requests from Canada with a language preference of `fr` or `fr-foo` // example: display your homepage in Canadian French and/or with a Canada-specific feature fr_ca/ index.html
La directory
localized-files/
contiene sottocartelle separate per ogni combinazione di lingua e paese supportata dal tuo sito. Il modello di denominazione per ogni sottocartella deve seguire uno di questi formati:languageCode_countryCode
: contiene contenuti specifici per gli utenti che hanno quella preferenza di lingua e quel codice paeselanguageCode
: contiene contenuto specifico per gli utenti che hanno quella preferenza di lingua, ma il contenuto non è specifico del paese; sostanzialmente equivalente alanguageCode_ALL
Fare riferimento alla sottosezione Codici paese e lingua di seguito per maggiori dettagli su questi codici. Puoi utilizzare il valore di
ALL
(con distinzione tra maiuscole e minuscole) per indicare qualsiasi paese (comees_ALL/
) o qualsiasi lingua (comeALL_ca/
).I file in una sottocartella non devono avere file analoghi nella directory
public
o in altre sottocartelle. Puoi creare contenuti completamente specifici per una lingua e/o un paese.Aggiungi l'attributo
i18n
al tuo filefirebase.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 "i18n content". Se hai inserito tutte le tue sottocartelle "contenuto i18n" nella radice della tua directorypublic
, usa/
per il valore diroot
. Le barre iniziali e finali nel valoreroot
sono facoltative.Distribuisci il tuo "contenuto i18n" e configura il tuo sito di hosting.
Puoi testare la tua configurazione utilizzando le sostituzioni dei cookie .
Codici paese e lingua
Quando si denominano le sottocartelle "contenuto i18n", è necessario utilizzare lettere minuscole sia per il codice del paese che per quello della lingua. Puoi utilizzare il valore di 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 sono ottenuti dall'intestazione della richiesta Accept-Language
dell'utente (solitamente impostata automaticamente dal browser web ). Sono codici ISO 639-1 . Tenere presente quanto segue quando si utilizzano 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 di una sottocartella "i18n content" non può contenere questi sottotag. Ad esempio, non puoi utilizzarees-419
oes-US
come codice lingua nel nome di una sottocartella, ma puoi utilizzarees
.Se desideri servire contenuti regionali o nazionali specifici, puoi creare sottocartelle che contengano i contenuti specifici della lingua e del paese che desideri supportare.
In questo esempio, una richiesta dalla Spagna con la preferenza di lingua
es
,es-es
o anchees-419
riceverebbe contenuto dalla sottocartellaes_es/
perché Hosting tratta tutti quei codici lingua comees
.Una richiesta dagli Stati Uniti, dal Messico o da qualsiasi altro paese con la lingua preferita
es-419
riceverebbe contenuto dalla sottocartellaes_ALL/
perché l'hosting trattaes-419
comees
.public/ // matches requests that aren't specified by your "i18n content" subfolders index.html // the site's default homepage localized-files/ // matches requests from Spain with a language preference of `es` or `es-foo` es_es/ index.html // matches requests from any other country with a language preference of `es` or `es-foo` es_ALL/ index.html
In questo esempio, una richiesta dal Messico con la lingua preferita
es-419
riceverebbe contenuto dalla sottocartellaes_mx/
perché l'hosting tratta il codice linguaes-419
comees
.Tuttavia, una richiesta dagli Stati Uniti con la lingua preferita
es-419
riceverebbe contenuto dalla sottocartellaes_ALL/
perché l'hosting trattaes-419
comees
e non esiste alcuna sottocartellaes_us/
.public/ // matches requests that aren't specified by your "i18n content" subfolders index.html // the site's default homepage localized-files/ // matches requests from Argentina with a language preference of `es` or `es-foo` (mimics behavior of `es-ar` header tag) es_ar/ index.html // matches requests from Spain with a language preference of `es` or `es-foo` (mimics behavior of `es-es` header tag) es_es/ index.html // matches requests from Mexico with a language preference of `es` or `es-foo` (mimics behavior of `es-mx` header tag) es_mx/ index.html // matches requests from any other country with a language preference of `es` or `es-foo` (mimics behavior of `es-419` header tag) es_ALL/ index.html
Ordine di priorità per "contenuti i18n"
Se imposti le riscritture i18n, l'hosting serve i contenuti in base al seguente ordine di priorità:
Spazi dei nomi riservati che iniziano con un segmento di percorso
/__/*
Reindirizzamenti configurati
Contenuto statico con corrispondenza esatta
Codice lingua + codice paese (ad esempio, contenuto da
fr_ca/
)
L'ordine segue i valori di qualità per ogni lingua nell'intestazioneAccept-Language
della richiesta.Solo codice paese (ad esempio, contenuto da
ALL_ca/
)Solo codice lingua (ad esempio, contenuto da
fr/
oes_ALL/
)
L'ordine segue i valori di qualità per ogni lingua nell'intestazioneAccept-Language
della richiesta.Contenuto statico con corrispondenza esatta "predefinito".
Questo è il contenuto che si trova al di fuori della directory "i18n content", come nella root della directorypublic
.
Riscritture configurate
404 gestione
i18n 404 pagine
Questo segue lo stesso ordine di priorità sopra elencato per i contenuti statici con corrispondenza esatta.Pagina 404 personalizzata
Pagina 404 predefinita (fornita da Firebase)
Esempio di ordine di priorità
Continuiamo il nostro esempio dall'alto. Useremo la stessa directory di esempio e una richiesta di esempio.
Esempio di directory di progetto locale con una 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
Esempio richiesta informazioni
Codici lingua:
fr
,en
(francese, poi inglese)
I codici lingua sono ordinati in base ai valori di qualità nell'intestazioneAccept-Language
.Prefisso internazionale:
ca
(Canada)
In base all'ordine di priorità della corrispondenza esatta e ai valori di qualità per le preferenze della lingua, Hosting cercherà nelle directory una pagina richiesta nel seguente ordine.
public/localized-files/fr_ca/
public/localized-files/en_ca/
public/localized-files/ALL_ca/
public/localized-files/fr_ALL/
public/localized-files/fr/
public/localized-files/en_ALL/
public/localized-files/en/
public/
404 gestione
Quale pagina verrà offerta all'utente?
Pagina richiesta:
index.html
index.html
dalla sottocartellafr_ca/
Poiché Hosting cerca prima nella sottocartella
fr_ca/
, troverà la corrispondenza esatta perindex.html
in quella sottocartella.Pagina richiesta:
awesome-page.html
404.html
dalla sottocartellafr/
L'hosting cerca prima l'intera directory (incluse tutte le sottocartelle "contenuto i18n" e la directory principale) in ordine di priorità per una corrispondenza esatta, ma non esiste una corrispondenza esatta per
awesome-page.html
.Quindi, Hosting inizierà la sua gestione 404, che segue lo stesso ordine di priorità i18n delle ricerche con corrispondenza esatta. La sottocartella
fr/
è la prima sottocartella cercata che contiene una pagina 404.
Nota quanto segue su questa ricerca e pubblicazione della directory "i18n content":
La directory
localized-files/
in realtà non contiene le sottocartelleen_ca/
,en_ALL/
oen/
, quindi l'hosting salterà semplicemente l'elenco delle priorità finché non trova una sottocartella corrispondente per la combinazione lingua-paese della richiesta.Anche se la directory
localized-files/
contiene una sottocartellaes_ALL/
, la richiesta di esempio precedente non include un codice linguaes
oes-foo
, quindi Hosting non cercherà "i18n content" che corrispondees
.Le sottocartelle denominate
fr/
efr_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 difr/
content.
Sostituisci i codici lingua e paese con i cookie
È possibile modificare il contenuto offerto utilizzando i cookie per ignorare le intestazioni del paese e della lingua.
Ecco alcuni modi in cui puoi utilizzare le sostituzioni dei cookie:
Prova una funzione con diverse combinazioni di lingua/paese per verificare quali contenuti vengono offerti.
Consenti ai tuoi utenti di modificare i contenuti che vedono. Ad esempio, puoi implementare un selettore di lingua, quindi impostare il cookie
firebase-language-override
dell'utente di conseguenza.
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 frammento di codice JavaScript sostituisce il codice del 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 separato da virgole di codici di lingua in ordine di preferenza, senza sottotag o valori di qualità.
Le sostituzioni dei cookie non si riflettono nei log.