40 lines
3.8 KiB
Markdown
40 lines
3.8 KiB
Markdown
|
|
# 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
|
||
|
|
|
||
|
|
1. Elegir el módulo propietario del texto y una clave en inglés que describa su finalidad.
|
||
|
|
2. Añadir la misma clave en `es.json` y `en.json`, dentro de la sección correspondiente.
|
||
|
|
3. Utilizar `t("clave")` en el espacio del módulo. Conservar los parámetros `{{nombre}}` idénticos en ambos idiomas.
|
||
|
|
4. 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.
|