Varios idiomas
Servir la interfaz en varios idiomas, y traducir también las páginas.
Las cadenas del tema están traducidas en siete locales. Un sitio sirve el subconjunto que quiere, traduce las cadenas que él mismo configuró y — si le apetece — también las páginas.
Pasos
- Reduce la lista con
duxt.locales.locales: ['en-GB', 'es-ES']
No el arraylocalesde i18n: ese se combina entre capas en lugar de reemplazar, así que declarar dos allí deja las otras cinco enrutadas y anunciadas enhreflang. - Elige la que va sin prefijo en
nuxt.config.tsconi18n.defaultLocale. Es relevante para la URL: cambiarla después mueve todas las páginas en ambos sentidos a la vez. - Traduce tus propias cadenas. Para un puñado, la forma de registro cuesta
menos que un archivo de locale por idioma:
sections: [ { label: { 'en-GB': 'Guides', 'es-ES': 'Guías' }, to: '/guides', icon: 'lucide:book-open' } ]
Para más de un puñado, registra tus propias claves i18n y escribe la clave. No recurras aduxt.defaults.*— son las claves internas de la capa, y un renombrado allí rompería tu sitio en silencio. - Define el origen.
hreflangno vale en relativo, así que necesitai18n.baseUrloNUXT_PUBLIC_I18N_BASE_URL. - Traduce las páginas, si quieres. Una carpeta por idioma dentro de la
fuente; el locale por defecto se queda donde está y no mueve ninguna URL:
sources: [{ path: 'docs', locales: ['en-GB', 'es'] }]
- index.md
- 1.getting-started
- index.md
- es
- index.md
Traduce tan pocas páginas como quieras — todo lo demás recae en el original, con un aviso que le dice al lector por qué.
- Abre una página en cada locale y comprueba que la interfaz cambió de idioma, que la ruta sigue resolviendo y que ninguna etiqueta configurada aparece como clave en crudo.
Solo algunas versiones, u otro repositorio
locales en una ref sobrescribe el de la fuente, que es la forma habitual: la
versión actual está traducida y las dos anteriores no.
{
path: 'docs',
locales: ['en-GB', 'es'],
refs: [
{ tag: 'v2.0.0' }, // ambos idiomas
{ tag: 'v1.0.0', locales: ['en-GB'] } // solo el original
]
}
La forma de objeto mueve un idioma a otro sitio por completo — su propio repositorio, con sus propios responsables y su propio ritmo:
locales: ['en-GB', { locale: 'es', repo: 'acme/docs-es', path: 'docs' }]
Eso es lo que hacen React y Vue fuera de sus herramientas, con de.react.dev y
la organización vuejs-translations, porque quienes traducen trabajan con su
propio calendario y su propia revisión. Aquí es una entrada de fuente en lugar
de un segundo sitio web — un índice de búsqueda, un selector de idioma.
Aproximadamente dos segundos de compilación y 0,6 MB de base de datos por idioma × versión × repositorio, medido lineal hasta al menos 200 colecciones. Traducir todas las versiones de todos los repositorios multiplica las tres; traducir solo la versión actual es lo que hace la mayoría de los proyectos.
Cuando una página no tiene traducción
El lector recibe el idioma más cercano que la tenga, con un aviso, y la página
lleva noindex más un canonical que apunta al idioma en el que realmente está.
La cadena — locale, idioma base, región hermana, fallbackLocale, original —
está en Localización.
Lista de comprobación
-
duxt.localesenumera exactamente los locales que sirves -
/sitemap.xmlcontiene una entrada por página y locale, y ninguna más - Los enlaces
hreflangson absolutos - Ninguna etiqueta configurada aparece como clave en crudo
- Cambiar de locale mantiene al lector en la misma página
- Una página que no tradujiste muestra el aviso de recurso, no un 404
-
duxt.sourceOptions.defaultLocalecoincide coni18n.defaultLocale