3.8 KiB
Traducciones de la interfaz
Las cadenas de interfaz se mantienen en JSON, con un fichero por idioma y módulo. Los componentes utilizan las claves existentes mediante i18next; no incorporan diccionarios de textos en TypeScript.
Ubicación y espacios de traducción
| Módulo | Ficheros | Espacio de traducción |
|---|---|---|
| Core | modules/core/src/common/locales/es.json, en.json |
core |
| Identidad | modules/identity/src/common/locales/es.json, en.json |
identity |
| Compañías | modules/companies/src/common/locales/es.json, en.json |
companies, access |
| Activos | modules/assets/src/common/locales/es.json, en.json |
assets |
| Recursos | modules/resources/src/common/locales/es.json, en.json |
resources |
| Biblioteca visual | packages/shadcn-ui/src/locales/es.json, en.json |
Textos propios de componentes genéricos |
Compañías conserva sus dos espacios existentes. Cada JSON contiene las propiedades raíz companies y access: la segunda reúne cuentas, accesos y ayuda contextual. Esta organización evita cambiar las claves utilizadas por las pantallas. Los demás módulos conservan su estructura de claves directa, igual que Core.
Los archivos web/i18n.ts solo exportan el contenido JSON. El adaptador de accesos también comprueba que la ayuda cubra todos los tipos previstos. apps/web/src/i18n.ts registra los módulos y mantiene castellano como idioma de reserva.
La biblioteca visual conserva sus textos en su propio paquete, sin depender de módulos de negocio ni de i18next. entityListLabels(locale) selecciona los textos y construye el rango de resultados. Los diálogos aceptan closeLabel para recibir el texto traducido del consumidor; el valor predeterminado procede del JSON inglés. Los formularios de Metis Desk utilizan sus acciones y etiquetas ya traducidas.
Añadir o modificar textos
- Elegir el módulo propietario del texto y una clave en inglés que describa su finalidad.
- Añadir la misma clave en
es.jsonyen.json, dentro de la sección correspondiente. - Utilizar
t("clave")en el espacio del módulo. Conservar los parámetros{{nombre}}idénticos en ambos idiomas. - Ejecutar las pruebas y la comprobación de tipos. Las pruebas de la aplicación comprueban todas las claves cargadas, textos no vacíos y equivalencia de parámetros entre idiomas.
No duplicar textos de componentes genéricos en los módulos. Los textos específicos de una entidad pertenecen al módulo consumidor.
Incorporar un idioma
Crear un JSON junto a los existentes en cada módulo y en la biblioteca visual, conservando las claves y parámetros. Exportar las traducciones desde los adaptadores del módulo, registrarlas en apps/web/src/i18n.ts y ampliar supportedLngs, el selector de apps/web/src/app.tsx y los nombres de idioma de Core. Ampliar también la selección de idioma de entityListLabels y las pruebas de paridad. La carga sigue siendo explícita, sin nuevas dependencias.
Alcance de la auditoría
Se consolidaron 1.350 claves por idioma que estaban distribuidas en Identidad, Compañías, Accesos, Activos y Recursos, incluyendo formularios, estados, errores de interfaz y ayuda contextual. Core ya utilizaba JSON; ahora también contiene los nombres del selector de idioma. Se extrajeron los textos comunes de tablas y el cierre de diálogos de la biblioteca visual.
Se revisaron los textos JSX, etiquetas, placeholders y diccionarios de los módulos y la aplicación. Se mantienen como datos o elementos técnicos los nombres propios, las siglas y protocolos, los símbolos de interfaz, las claves de traducción, los identificadores, las rutas y los datos iniciales de catálogos editables. Los mensajes internos de diagnóstico y los datos de pruebas no son traducciones de interfaz y conservan su ubicación. No se modifican datos persistidos ni valores de negocio.