- Added `useAssetPickerController` for managing asset selection logic. - Created `AssetSelectProps` type for defining asset selection properties. - Implemented `AssetPickerDialog` for displaying the asset selection interface. - Developed `AssetPickerList` for rendering the list of selectable assets. - Introduced `AssetSelect` component for integrating the asset picker into forms. - Created `AssetList` component for shared asset listing functionality. - Added tests for workstation creation logic to ensure proper validation. - Implemented workstation asset fields and association fields for managing workstation assets. - Developed workstation lifecycle dialog for managing work profile states. - Added form progress component for visualizing multi-step forms.
4.2 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.
Terminología de desactivación y eliminación
Desactivar (Deactivate en inglés) indica una baja lógica: el registro se conserva y queda inactivo. Eliminar (Delete en inglés) indica el borrado definitivo, sujeto a las restricciones de cada entidad. Las etiquetas, confirmaciones y errores utilizan estos términos de forma coherente; no se utiliza «Dar de baja» como etiqueta de desactivación.
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.