Check out what’s new from Firebase at Google I/O 2022. Learn more

Configurar reescritas de internacionalização (i18n)

Use reescritas de internacionalização ("regravações de i18n") para veicular conteúdo diferente dependendo do país do usuário ou do idioma preferido. Aqui estão alguns exemplos de configurações que você pode configurar:

  • Exiba o mesmo conteúdo em francês para todos os usuários que preferem francês (independentemente do país).
    Exemplo: uma página inicial com texto em francês

  • Exiba conteúdo em francês padrão para usuários que preferem francês, mas para usuários canadenses que preferem francês, veicule conteúdo em francês canadense.
    Exemplo: uma página inicial com frases em francês padrão versus uma página inicial com frases em francês canadense

  • Exiba o mesmo conteúdo para todos os usuários canadenses (independentemente de sua 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 feriado)

  • Exiba conteúdo em francês canadense para usuários canadenses que preferem 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 de um usuário a partir do endereço IP e as preferências de idioma do usuário a partir do cabeçalho de solicitação Accept-Language (geralmente definido automaticamente pelo navegador da Web ).

Configurar reescritas i18n

Para configurar a regravação de i18n para seu site do Hosting, você precisa criar um diretório "i18n content" para todo o conteúdo localizado e adicionar o atributo i18n ao arquivo firebase.json para apontar para o novo diretório "i18n content".

Aqui estão os passos detalhados:

  1. Na pasta public do diretório de aplicativos local, crie um diretório separado para o "conteúdo i18n" e crie subpastas para cada combinação de idioma e país compatível com seu site.

    Em cada subpasta, adicione o conteúdo específico para essa combinação, como páginas iniciais com temas de feriados ou páginas 404 específicas de 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
    

    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ís

    • languageCode : 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 a languageCode_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 ALL (sensível a maiúsculas e minúsculas) para indicar qualquer país (como es_ALL/ ) ou qualquer idioma (como ALL_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.

  2. Adicione o atributo i18n ao seu arquivo firebase.json e especifique o diretório que contém seu "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 "i18n content". Se você colocou todas as suas subpastas "i18n content" na raiz do seu diretório public , use / para o valor de root . As barras à esquerda e à direita no valor root são opcionais.

  3. Implante seu "conteúdo i18n" e configure 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 os códigos de país e idioma. Você pode usar o valor ALL (sensível a maiúsculas e 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 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 por qual "conteúdo i18n" servir, ele ordena os idiomas com base nos valores de qualidade no cabeçalho Accept-Language .

  • A hospedagem descarta todas as subtags regionais e de país no cabeçalho Accept-Language , portanto, o código de idioma em um nome de subpasta "conteúdo i18n" não pode conter essas subtags. Por exemplo, você não pode usar es-419 ou es-US como um código de idioma em um nome de subpasta, mas pode usar es .

    Se você quiser fornecer conteúdo regional ou de país específico, poderá criar subpastas que contenham o conteúdo de idioma-país específico ao qual deseja oferecer suporte.

Ordem de prioridade para "conteúdo i18n"

Se você configurar regravações de i18n, o Hosting fornecerá conteúdo com base na seguinte ordem de prioridade:

  1. Namespaces reservados que começam com um segmento de caminho /__/*

  2. Redirecionamentos configurados

  3. Conteúdo estático de correspondência exata

    1. 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çalho Accept-Language da solicitação.

    2. Somente código do país (por exemplo, conteúdo de ALL_ca/ )

    3. Somente código de idioma (por exemplo, conteúdo de fr/ ou es_ALL/ )
      A ordem segue os valores de qualidade para cada idioma no cabeçalho Accept-Language da solicitação.

    4. Conteúdo estático de correspondência exata "padrão"
      Este é o conteúdo que está fora do diretório "conteúdo i18n", como na raiz do diretório public .

  4. Reescritas configuradas

  5. manuseio 404

    1. i18n 404 páginas
      Isso segue a mesma ordem de prioridade listada acima para conteúdo estático de correspondência exata.

    2. Página 404 personalizada

    3. Página 404 padrão (fornecida pelo Firebase)

Exemplo de ordem de prioridade

Vamos continuar nosso exemplo de cima. Usaremos o mesmo diretório de exemplo e uma solicitação de exemplo.

  • Exemplo de diretório de projeto local com um 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
    
  • Informações de solicitação de exemplo

    • Códigos de idioma: fr , en (francês e depois inglês)
      Os códigos de idioma são ordenados com base nos valores de qualidade no cabeçalho Accept-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.

  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. manuseio 404

Qual página será exibida ao usuário?

  • Página solicitada: index.html

  • Página solicitada: awesome-page.html

Observe o seguinte sobre esta pesquisa e veiculação do diretório "i18n content":

  • O diretório localized-files/ na verdade não contém en_ca/ , en_ALL/ ou en/ , 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.

  • Mesmo que o diretório localized-files/ contenha uma subpasta es_ALL/ , a solicitação de exemplo acima não inclui um código de idioma es ou es-foo , portanto, o Hosting não pesquisará "conteúdo i18n" que corresponda a es .

  • As subpastas chamadas fr/ e fr_ALL/ são equivalentes do ponto de vista das preferências de país e idioma de um usuário. No entanto, se ambas as subpastas existirem, o Hosting servirá fr_ALL/ content antes fr/ content.

Você pode alterar o conteúdo 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 um destes nomes: firebase-country-override e firebase-language-override . Por exemplo, o snippet de código JavaScript a seguir substitui o código do país para ca e o cabeçalho Accept-Language para 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 de códigos de idioma separados por vírgulas em ordem de preferência, sem subtags ou valores de qualidade.

As substituições de cookies não são refletidas nos logs.