Use reescritas de internacionalização ("reescritas i18n") para fornecer conteúdo diferente dependendo do país ou idioma preferido do usuário. Aqui estão alguns exemplos de configurações que você pode definir:
Sirva o mesmo conteúdo em francês para todos os usuários que preferem o francês (independentemente do país).
Exemplo: uma página inicial com texto em francêsForneça conteúdo em francês padrão para usuários que preferem o francês, mas para usuários canadenses que prefiram o francês, veicule conteúdo em francês canadense.
Exemplo: uma página inicial com fraseado em francês padrão versus uma página inicial com fraseado em francês canadenseSirva o mesmo conteúdo para todos os usuários canadenses (independentemente da preferência de idioma).
Exemplo: uma página inicial com o idioma “padrão” do seu site, mas com um recurso específico do Canadá (como um tema de férias)Forneça conteúdo em francês canadense para usuários canadenses que preferem o francês.
Exemplo: uma página inicial com frases em francês canadense e um recurso específico do Canadá (como um tema de feriado)
O Firebase Hosting determina o país do usuário a partir do endereço IP e as preferências de idioma do usuário no cabeçalho da solicitação Accept-Language
(geralmente definido automaticamente pelo navegador da Web ).
Configurar reescritas i18n
Para configurar reescritas i18n para seu site de hospedagem, você precisa criar um diretório "i18n content" para todo o seu conteúdo localizado e, em seguida, adicionar o atributo i18n
ao seu arquivo firebase.json
para apontar para seu novo diretório "i18n content".
Aqui estão as etapas detalhadas:
Na pasta
public
do diretório local do aplicativo, crie um diretório separado para o seu "conteúdo i18n" e, em seguida, crie subpastas para cada combinação de idioma e país suportada pelo seu site.Em cada subpasta, adicione o conteúdo específico para essa combinação, como páginas iniciais com tema de feriados ou páginas 404 específicas do idioma.
Aqui está um exemplo de diretório "i18n content" chamado
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
O diretório
localized-files/
contém subpastas separadas para cada combinação de idioma e país suportada pelo seu site. O padrão de nomenclatura para cada subpasta deve seguir um destes formatos:languageCode_countryCode
: contém conteúdo específico para usuários que têm essa preferência de idioma e esse código de paíslanguageCode
: contém conteúdo específico para usuários que têm essa preferência de idioma, mas o conteúdo não é específico do país; basicamente equivalente alanguageCode_ALL
Consulte a subseção Códigos de país e idioma abaixo para obter mais detalhes sobre esses códigos. Você pode usar o valor de
ALL
(diferencia maiúsculas de minúsculas) para indicar qualquer país (comoes_ALL/
) ou qualquer idioma (comoALL_ca/
).Os arquivos em uma subpasta não precisam ter arquivos análogos no diretório
public
ou em outras subpastas. Você pode criar conteúdo totalmente específico para um idioma e/ou país.Adicione o atributo
i18n
ao arquivofirebase.json
e especifique o diretório que contém o "conteúdo i18n". Continuando nosso exemplo:// firebase.json "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "i18n": { "root": "/localized-files" // directory that contains your "i18n content" } ... }
O diretório especificado para
root
deve ser o nome do diretório que contém todas as subpastas de "conteúdo i18n". Se você colocou todas as subpastas "conteúdo i18n" na raiz do seu diretóriopublic
, use/
para o valor deroot
. As barras iniciais e finais no valorroot
são opcionais.Implante seu "conteúdo i18n" e configure-o em seu site de hospedagem.
Você pode testar sua configuração usando substituições de cookies .
Códigos de país e idioma
Ao nomear subpastas "conteúdo i18n", você deve usar letras minúsculas para códigos de país e idioma. Você pode usar o valor de ALL
(diferencia maiúsculas de minúsculas) para indicar qualquer país (como es_ALL/
) ou qualquer idioma (como ALL_ca/
).
A hospedagem obtém o código do país a partir do endereço IP do usuário. Os códigos de país são códigos ISO 3166-1 alfa-2 de duas letras.
Os códigos de idioma são obtidos do cabeçalho de solicitação Accept-Language
do usuário (geralmente definido automaticamente pelo navegador da web ). São códigos ISO 639-1 . Lembre-se do seguinte ao usar códigos de idioma:
Quando o Hosting procura qual “conteúdo i18n” servir, ele ordena os idiomas com base nos valores de qualidade no cabeçalho
Accept-Language
.A hospedagem descarta quaisquer subtags regionais e de país no cabeçalho
Accept-Language
, portanto, o código do idioma em um nome de subpasta "i18n content" não pode conter essas subtags. Por exemplo, você não pode usares-419
oues-US
como código de idioma em um nome de subpasta, mas pode usares
.Se quiser fornecer conteúdo regional ou de país específico, você poderá criar subpastas que contenham o conteúdo específico do idioma e do país que deseja oferecer suporte.
Neste exemplo, uma solicitação da Espanha com a preferência de idioma
es
,es-es
ou mesmoes-419
receberia conteúdo da subpastaes_es/
porque o Hosting trata todos esses códigos de idioma comoes
.Uma solicitação dos Estados Unidos, México ou qualquer outro país com a preferência de idioma
es-419
receberia conteúdo da subpastaes_ALL/
porque o Hosting trataes-419
comoes
.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
Neste exemplo, uma solicitação do México com a preferência de idioma
es-419
receberia conteúdo da subpastaes_mx/
porque o Hosting trata o código de idiomaes-419
comoes
.No entanto, uma solicitação dos Estados Unidos com a preferência de idioma
es-419
receberia conteúdo da subpastaes_ALL/
porque o Hosting trataes-419
comoes
e não há subpastaes_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
Ordem de prioridade para "conteúdo i18n"
Se você configurar reescritas i18n, o Hosting servirá conteúdo com base na seguinte ordem de prioridade:
Namespaces reservados que começam com um segmento de caminho
/__/*
Redirecionamentos configurados
Conteúdo estático de correspondência exata
Código do idioma + código do país (por exemplo, conteúdo de
fr_ca/
)
A ordem segue os valores de qualidade para cada idioma no cabeçalhoAccept-Language
da solicitação.Apenas código do país (por exemplo, conteúdo de
ALL_ca/
)Apenas código de idioma (por exemplo, conteúdo de
fr/
oues_ALL/
)
A ordem segue os valores de qualidade para cada idioma no cabeçalhoAccept-Language
da solicitação.Conteúdo estático de correspondência exata "padrão"
Este é o conteúdo que está fora do diretório “i18n content”, como na raiz do diretóriopublic
.
Reescritas configuradas
404 manuseio
i18n 404 páginas
Isso segue a mesma ordem de prioridade listada acima para conteúdo estático de correspondência exata.Página 404 personalizada
Página 404 padrão (fornecida pelo Firebase)
Exemplo de ordem de prioridade
Vamos continuar nosso exemplo acima. Usaremos o mesmo diretório de exemplo e uma solicitação de exemplo.
Exemplo de diretório de projeto local com um diretório "conteúdo i18n" (chamado
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
Exemplo de informações de solicitação
Códigos de idioma:
fr
,en
(francês, depois inglês)
Os códigos de idioma são ordenados com base nos valores de qualidade no cabeçalhoAccept-Language
.Código do país:
ca
(Canadá)
De acordo com a ordem de prioridade de correspondência exata e os valores de qualidade para as preferências de idioma, o Hosting pesquisará nos diretórios uma página solicitada na seguinte ordem.
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 manuseio
Qual página será veiculada ao usuário?
Página solicitada:
index.html
index.html
da subpastafr_ca/
Como o Hosting pesquisa primeiro a subpasta
fr_ca/
, ele encontrará a correspondência exata paraindex.html
nessa subpasta.Página solicitada:
awesome-page.html
404.html
da subpastafr/
A hospedagem primeiro pesquisa o diretório inteiro (incluindo todas as subpastas "i18n content" e o diretório raiz) em ordem de prioridade para uma correspondência exata, mas não há uma correspondência exata para
awesome-page.html
.Assim, a Hosting iniciará seu tratamento 404, que segue a mesma ordem de prioridade i18n das pesquisas de correspondência exata. A subpasta
fr/
é a primeira subpasta pesquisada que contém uma página 404.
Observe o seguinte sobre esta pesquisa e veiculação do diretório "i18n content":
O diretório
localized-files/
na verdade não contémen_ca/
,en_ALL/
ouen/
subpastas, então o Hosting simplesmente pulará a lista de prioridades até encontrar uma subpasta correspondente para a combinação idioma-país da solicitação.Embora o diretório
localized-files/
contenha uma subpastaes_ALL/
, a solicitação de exemplo acima não inclui um código de idiomaes
oues-foo
, portanto, o Hosting não pesquisará "conteúdo i18n" que correspondaes
.As subpastas chamadas
fr/
efr_ALL/
são equivalentes da perspectiva do país e das preferências de idioma do usuário. No entanto, se ambas as subpastas existirem, o Hosting serviráfr_ALL/
content antesfr/
content.
Substituir códigos de idioma e país por cookies
Você pode alterar o conteúdo que é veiculado usando cookies para substituir os cabeçalhos de país e idioma.
Aqui estão algumas maneiras de usar substituições de cookies:
Teste um recurso com diferentes combinações de idioma/país para verificar qual conteúdo é veiculado.
Permita que seus usuários alterem o conteúdo que veem. Por exemplo, você pode implementar um seletor de idioma e definir o cookie
firebase-language-override
do usuário de acordo.
Para configurar substituições de cookies, defina cookies com ambos ou qualquer um destes nomes: firebase-country-override
e firebase-language-override
. Por exemplo, o seguinte snippet de código JavaScript substitui o código do país por ca
e o cabeçalho Accept-Language
por fr,en
:
document.cookie = "firebase-country-override=ca";
document.cookie = "firebase-language-override=fr,en";
As substituições de cookies de idioma devem ser uma lista separada por vírgulas de códigos de idioma em ordem de preferência, sem subtags ou valores de qualidade.
As substituições de cookies não são refletidas nos logs.