Flujo de trabajo de mantenimiento de traducciones
Para comandos generales de documentación (compilar, implementar, capturas de pantalla, generación de README), consulte Herramientas de documentación.
Vista general
La documentación utiliza i18n de Docusaurus con inglés como configuración regional predeterminada. La documentación fuente reside en docs/; las traducciones se escriben en i18n/{locale}/. Configuraciones regionales admitidas: en-GB (predeterminada), fr, de, es, pt-BR, hi, zh-Hans.
Traducción por IA para la interfaz de usuario de la aplicación, markdown/JSON de Docusaurus, recursos SVG y plantillas de notificación predeterminadas es manejada por ai-i18n-tools desde la raíz del repositorio, configurada en ai-i18n-tools.config.json (no dentro de documentation/). Establezca OPENROUTER_API_KEY al ejecutar comandos de traducción.
Para probar una versión no publicada en la misma máquina (predeterminado ../ai-i18n-tools), cambie la dependencia con pnpm i18n:tools --local o ./scripts/link-ai-i18n-tools.sh --local. Eso enlaza tanto la CLI (pnpm i18n:*) como la importación ai-i18n-tools/runtime. Vuelva a compilar el paquete de herramientas después de cambios en la fuente (pnpm build en esa versión). Restaure el último paquete npm con --remote. No confirme el especificador link:.
Cuándo cambia la documentación en inglés
- Edite el origen en
documentation/docs/(solo en inglés). El texto de la página de aterrizaje esdocumentation/src/landing/landing.html. - Cadenas de la interfaz de usuario de Docusaurus (etiquetas del tema, barra de navegación, etc.): si es necesario, ejecute
pnpm write-translationsendocumentation/para quei18n/en/*.jsondetecte las nuevas claves. - ID de encabezados:
pnpm write-heading-ids(desdedocumentation/). - Traduzca desde la raíz del repositorio (o use los accesos directos siguientes desde
documentation/):pnpm i18n:extract— actualizarsrc/locales/strings.jsondesdet('…')en la aplicación Next.js.pnpm i18n:translate:docs— traducir markdown, el JSON del shell de Docusaurus y el HTML de aterrizaje adocumentation/i18n/ydocumentation/src/landing/i18n/según la configuración.pnpm i18n:translate:svg— traducir los SVG endocumentation/static/imgsegún la configuración.pnpm i18n:translate:json— traducir las plantillas de notificación predeterminadas ensrc/locales/templates/desdeen-GB.json.- O ejecute todo:
pnpm i18n:translate.
- Compilación:
cd documentation && pnpm build(todos los idiomas).
Desde dentro de documentation/, los mismos flujos están conectados como pnpm translate → raíz i18n:translate, más pnpm translate:docs, translate:ui, translate:svg, translate:status, i18n:extract, i18n:sync.
Plurales de la interfaz de usuario
Los plurales cardinales en la aplicación Next.js utilizan ai-i18n-tools, no claves _one / _other escritas manualmente.
Escriba una cadena fuente en inglés (generalmente el plural) y pase un objeto literal simple con plurals: true y un count numérico:
t("{{count}} backups selected", { plurals: true, count: selectedBackups.size })
Reglas:
- No utilice matices
item(s)ni parescount === 1 ? t('…') : t('…'). - Las cuentas numéricas independientes necesitan llamadas separadas de
t()— un eje plural no puede adaptar dos números (por ejemplo, 1 exitoso y 2 fallidos). Concatene los fragmentos:
`${t("Tested {{count}} connections:", { plurals: true, count: total })} ` +
`${t("{{count}} successful,", { plurals: true, count: successCount })} ` +
`${t("{{count}} failed", { plurals: true, count: failureCount })}`
- Las interpolaciones no numéricas (nombres, etiquetas, etc.) están bien en la misma cadena plural que
{{count}}. pnpm i18n:extractmarca la fila del catálogo"plural": true.pnpm i18n:translate:uicompleta formas CLDR y escribesrc/locales/en-GB.json(solo claves plurales).src/i18n.tsysrc/lib/i18n-server.tscargan ese archivo comosourcePluralFlatBundlepara que los singulares/plurales en inglés se resuelvan en tiempo de ejecución.
Plantillas de notificación predeterminadas
Configuración → Plantillas → Restablecer carga valores predeterminados desde src/locales/templates/{locale}.json (conectado en src/lib/default-notification-templates.ts).
- Edite solo
src/locales/templates/en-GB.json(fuente en inglés). - Ejecute
pnpm i18n:translate:json(opnpm i18n:translate) desde la raíz del repositorio. - Revise diferencias — los marcadores de posición como
{backup_name}y{problem_table}deben permanecer sin cambios;priorityytagsson omitidos porkeyPolicyenai-i18n-tools.config.json. - Ejecute
pnpm i18n:statuspara ver la cobertura de bloques JSON.
Consulte la guía JSON de ai-i18n-tools para indicadores (--locale, --force, etc.).
HTML de la página de aterrizaje
El cuerpo de la página principal de la documentación es un único archivo HTML en inglés, no componentes de sección de React.
- Edite
documentation/src/landing/landing.html(ydocumentation/src/landing/landing.csspara el diseño). Conserve los identificadores de hashfeatures,dashboard,workflow,securityyinstall. - Ejecute
pnpm i18n:translate:docsdesde la raíz del repositorio (opnpm translate:docsdesdedocumentation/). - Las copias generadas se escriben en
documentation/src/landing/i18n/{locale}/landing.html. No edite esos archivos manualmente.
translate-docs utiliza la canalización de páginas HTML: el texto visible y alt / title / aria-label se traducen; <pre> y <code> permanecen en inglés. Las etiquetas de la barra de navegación y el título de la página permanecen en Translate de Docusaurus (homepage.nav.*, homepage.meta.*).
No añada marcadores data-i18n a este archivo ni lo incluya en ui.sourceRoots. El mismo archivo HTML no debe estar en la canalización de documentos y en la canalización de cadenas de interfaz de usuario a la vez.
Glosario
- La terminología de la interfaz de usuario para la documentación procede de cada catálogo
ui[]conuiGlossaryactivado (la opción predeterminada). El catálogo de la aplicación Next.js essrc/locales/strings.json(generado porpnpm i18n:extract). No establezcaglossary.uiGlossary; esa clave se rechaza. - Las invalidaciones residen en
documentation/glossary-user.csv(glossary.userGlossaryen la configuración). Consulte la documentación del glosario de ai-i18n-tools para conocer el formato de las columnas. - Genere una plantilla CSV:
pnpm i18n:glossary-generate(raíz).
Caché
La caché de traducción para ai-i18n-tools está en .translation-cache/ en la raíz del repositorio (cacheDir en ai-i18n-tools.config.json). Está excluida de git. Utilice pnpm i18n:status y las banderas de --force / caché de la CLI según la documentación de ai-i18n-tools cuando necesite una actualización completa.
IDs de encabezado y anclajes
Utilice IDs explícitos para que los enlaces permanezcan estables entre idiomas. Prefiera la sintaxis de comentario MDX (pnpm write-heading-ids usa --syntax mdx-comment):
## This is a heading {/* #this-is-a-heading */}
Coloque IDs en h2 y niveles inferiores. Docusaurus write-heading-ids omite h1 (el título de página/barra lateral). documentation/docusaurus.config.ts también elimina comentarios de ID de encabezado de títulos inferidos, porque la extracción de metadatos de Docusaurus aún solo elimina {#id} clásicos.
cd documentation
pnpm write-heading-ids
Listas de exclusión
Utilice .translate-ignore en la raíz del repositorio (misma idea que .gitignore) para rutas que el traductor de documentación debería omitir, si agrega uno para su flujo de trabajo.
JSON de tema Docusaurus
pnpm write-translations extrae cadenas de interfaz de usuario de Docusaurus en documentation/i18n/en/. El paso ai-i18n-tools translate-docs (con markdownOutput.style: "docusaurus") rellena JSON traducido bajo cada configuración regional junto al markdown, según ai-i18n-tools.config.json.
Solución de problemas
OPENROUTER_API_KEYno establecido — expórtelo o añádalo a.env.localen la raíz del repositorio.- Modelo / calidad — ajuste
openrouter.translationModelsy opciones relacionadas enai-i18n-tools.config.json. - Glosario — edite
documentation/glossary-user.csvo regenere cadenas de interfaz de usuario y vuelva a ejecutar extract + translate.
Añadir un nuevo idioma
- Añada la configuración regional a Docusaurus
i18n.localesylocaleConfigsendocumentation/docusaurus.config.ts. - Añada la misma configuración regional a
targetLocalesenai-i18n-tools.config.json(raíz del repositorio). - Ejecute
pnpm i18n:generate-ui-languagesen la raíz, luegopnpm i18n:extract/ comandos de traducción según sea necesario.