Use reescrituras de internacionalización ("reescrituras de i18n") para servir contenido diferente según el país del usuario o el idioma preferido. Estas son algunas configuraciones de ejemplo que podría configurar:
Sirva el mismo contenido en francés a todos los usuarios que prefieran el francés (independientemente del país).
Ejemplo: una página de inicio con texto en francésSirva contenido en francés estándar a los usuarios que prefieren el francés, pero para los usuarios canadienses que prefieren el francés, sirva contenido en francés canadiense en su lugar.
Ejemplo: una página de inicio con redacción en francés estándar frente a una página de inicio con redacción en francés canadienseSirva el mismo contenido a todos los usuarios canadienses (independientemente de su preferencia de idioma).
Ejemplo: una página de inicio con el idioma "predeterminado" de su sitio pero con una característica específica de Canadá (como un tema de vacaciones)Sirva contenido en francés canadiense a los usuarios canadienses que prefieran el francés.
Ejemplo: una página de inicio con frases en francés canadiense y una característica específica de Canadá (como un tema de vacaciones)
Firebase Hosting determina el país de un usuario a partir de su dirección IP y las preferencias de idioma de un usuario a partir del encabezado de solicitud de Accept-Language
(generalmente configurado automáticamente por su navegador web ).
Configurar reescrituras i18n
Para configurar reescrituras de i18n para su sitio de alojamiento, debe crear un directorio de "contenido de i18n" para todo su contenido localizado, luego agregue el atributo i18n
a su archivo firebase.json
para apuntar a su nuevo directorio de "contenido de i18n".
Aquí están los pasos detallados:
Dentro de la carpeta
public
del directorio de su aplicación local, cree un directorio separado para su "contenido i18n", luego cree subcarpetas para cada combinación de idioma y país compatible con su sitio.En cada subcarpeta, agregue el contenido específico para esa combinación, como páginas de inicio con temas festivos o páginas 404 específicas del idioma.
Aquí hay un ejemplo de directorio
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
El directorio
localized-files/
contiene subcarpetas separadas para cada combinación de idioma y país admitida por su sitio. El patrón de nombres para cada subcarpeta debe seguir cualquiera de estos formatos:languageCode_countryCode
: contiene contenido específico para usuarios que tienen esa preferencia de idioma y ese código de paíslanguageCode
: contiene contenido específico para los usuarios que tienen esa preferencia de idioma, pero el contenido no es específico del país; básicamente equivalente alanguageCode_ALL
Consulte la subsección Códigos de país e idioma a continuación para obtener más detalles sobre estos códigos. Puede usar el valor de
ALL
(distingue entre mayúsculas y minúsculas) para indicar cualquier país (comoes_ALL/
) o cualquier idioma (comoALL_ca/
).Los archivos en una subcarpeta no necesitan tener archivos análogos en el directorio
public
u otras subcarpetas. Puede crear contenido que sea completamente específico para un idioma y/o país.Agregue el atributo
i18n
a su archivofirebase.json
y especifique el directorio que contiene su "contenido i18n". Continuando con nuestro ejemplo:// firebase.json "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "i18n": { "root": "/localized-files" // directory that contains your "i18n content" } ... }
El directorio especificado para
root
debe ser el nombre del directorio que contiene todas las subcarpetas de "contenido i18n". Si colocó todas sus subcarpetas de "contenido i18n" en la raíz de su directoriopublic
, use/
para el valor deroot
. Las barras diagonales iniciales y finales en el valorroot
son opcionales.Implemente su "contenido i18n" y configúrelo en su sitio de alojamiento.
Puede probar su configuración mediante anulaciones de cookies .
Códigos de país e idioma
Al nombrar subcarpetas de "contenido i18n", debe usar minúsculas para los códigos de país e idioma. Puede usar el valor de ALL
(distingue entre mayúsculas y minúsculas) para indicar cualquier país (como es_ALL/
) o cualquier idioma (como ALL_ca/
).
Hosting obtiene el código de país de la dirección IP del usuario. Los códigos de país son códigos ISO 3166-1 alfa-2 de dos letras.
Los códigos de idioma se obtienen del encabezado de solicitud Accept-Language
del usuario (generalmente configurado automáticamente por su navegador web ). Son códigos ISO 639-1 . Tenga en cuenta lo siguiente cuando utilice códigos de idioma:
Cuando Hosting busca qué "contenido i18n" servir, ordena los idiomas en función de los valores de calidad en el encabezado
Accept-Language
.Hosting descarta cualquier subetiqueta regional y de país en el encabezado
Accept-Language
, por lo que el código de idioma en un nombre de subcarpeta de "contenido i18n" no puede contener estas subetiquetas. Por ejemplo, no puede usares-419
oes-US
como código de idioma en el nombre de una subcarpeta, pero puede usares
.Si desea ofrecer contenido regional o de país específico, puede crear subcarpetas que contengan el contenido específico de idioma y país que desea admitir.
En este ejemplo, una solicitud de España con la preferencia de idioma de
es
,es-es
, o inclusoes-419
recibiría contenido de la subcarpetaes_es/
porque Hosting trata todos esos códigos de idioma comoes
.Una solicitud de los Estados Unidos, México o cualquier otro país con la preferencia de idioma de
es-419
recibiría contenido de la subcarpetaes_ALL/
porque 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
En este ejemplo, una solicitud de México con la preferencia de idioma de
es-419
recibiría contenido de la subcarpetaes_mx/
porque Hosting trata el código de idiomaes-419
comoes
.Sin embargo, una solicitud de los Estados Unidos con la preferencia de idioma de
es-419
recibiría contenido de la subcarpetaes_ALL/
porque Hosting trataes-419
comoes
y no hay subcarpetaes_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
Orden de prioridad para "contenido i18n"
Si configura reescrituras de i18n, Hosting sirve contenido según el siguiente orden de prioridad:
Espacios de nombres reservados que comienzan con un segmento de ruta
/__/*
Redirecciones configuradas
Contenido estático de coincidencia exacta
Código de idioma + Código de país (por ejemplo, contenido de
fr_ca/
)
El pedido sigue los valores de calidad para cada idioma en el encabezadoAccept-Language
idioma de la solicitud.Solo código de país (por ejemplo, contenido de
ALL_ca/
)Solo código de idioma (por ejemplo, contenido de
fr/
oes_ALL/
)
El pedido sigue los valores de calidad para cada idioma en el encabezadoAccept-Language
idioma de la solicitud.Contenido estático de coincidencia exacta "predeterminado"
Este es contenido que está fuera del directorio "contenido i18n", como en la raíz del directoriopublic
.
Reescrituras configuradas
manejo 404
i18n 404 páginas
Esto sigue el mismo orden de prioridad mencionado anteriormente para el contenido estático de coincidencia exacta.Página 404 personalizada
Página 404 predeterminada (proporcionada por Firebase)
Ejemplo de orden de prioridad
Sigamos con nuestro ejemplo de arriba. Usaremos el mismo directorio de ejemplo y una solicitud de ejemplo.
Ejemplo de directorio de proyecto local con un directorio de "contenido i18n" (llamado
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
Ejemplo de solicitud de información
Códigos de idioma:
fr
,en
(francés, luego inglés)
Los códigos de idioma se ordenan en función de los valores de calidad en el encabezadoAccept-Language
.Código de país:
ca
(Canadá)
De acuerdo con el orden de prioridad de coincidencia exacta y los valores de calidad para las preferencias de idioma, Hosting buscará en los directorios una página solicitada en el siguiente orden.
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/
manejo 404
¿Qué página se servirá al usuario?
Página solicitada:
index.html
index.html
de la subcarpetafr_ca/
Dado que Hosting busca primero en la subcarpeta
fr_ca/
, encontrará la coincidencia exacta paraindex.html
en esa subcarpeta.Página solicitada:
awesome-page.html
404.html
de la subcarpetafr/
Hosting primero busca en todo el directorio (incluidas todas las subcarpetas de "contenido i18n" y el directorio raíz) en orden de prioridad para encontrar una coincidencia exacta, pero no hay una coincidencia exacta para
awesome-page.html
.Entonces, Hosting comenzará su manejo 404, que sigue el mismo orden de prioridad i18n que las búsquedas de coincidencia exacta. La subcarpeta
fr/
es la primera subcarpeta buscada que contiene una página 404.
Tenga en cuenta lo siguiente sobre esta búsqueda y servicio del directorio "contenido i18n":
El directorio
localized-files/
en realidad no contieneen_ca/
,en_ALL/
oen/
, por lo que Hosting simplemente omitirá la lista de prioridades hasta que encuentre una subcarpeta que coincida con la combinación de idioma y país de la solicitud.Aunque el directorio
localized-files/
contiene una subcarpetaes_ALL/
, la solicitud de ejemplo anterior no incluye un código de idiomaes
oes-foo
, por lo que Hosting no buscará "contenido i18n" que coincida cones
.Las subcarpetas denominadas
fr/
yfr_ALL/
son equivalentes desde la perspectiva de las preferencias de país e idioma del usuario. Sin embargo, si existen ambas subcarpetas, Hostingfr_ALL/
content antes quefr/
content.
Anular códigos de idioma y país con cookies
Puede cambiar el contenido que se sirve mediante el uso de cookies para anular los encabezados de país e idioma.
Aquí hay algunas formas en que puede usar anulaciones de cookies:
Pruebe una característica con diferentes combinaciones de idioma/país para verificar qué contenido se sirve.
Permita que sus usuarios cambien el contenido que ven. Por ejemplo, puede implementar un selector de idioma y luego configurar la cookie de
firebase-language-override
de base de fuego del usuario en consecuencia.
Para configurar anulaciones de cookies, configure las cookies con ambos o cualquiera de estos nombres: firebase-country-override
y firebase-language-override
. Por ejemplo, el siguiente fragmento de código JavaScript anula el código de país para que sea ca
y el encabezado Accept-Language
para que sea fr,en
:
document.cookie = "firebase-country-override=ca";
document.cookie = "firebase-language-override=fr,en";
Las anulaciones de cookies de idioma deben ser una lista separada por comas de códigos de idioma en orden de preferencia, sin subetiquetas ni valores de calidad.
Las anulaciones de cookies no se reflejan en los registros.