Internacionalización (i18n)
Los plugins de NocoBase gestionan los archivos multilingües en el directorio src/locale/. Una vez escritos los archivos de traducción, puede obtener los textos con this.t() en el Plugin, con el hook useT() en los componentes y con tExpr() en las definiciones de FlowModel.
Archivos de traducción
Cree archivos JSON por idioma bajo src/locale/ del plugin. La clave es el texto original en inglés y el valor es la traducción correspondiente:
Algunas consideraciones:
- Use el texto original en inglés como clave, así, aunque falte una traducción, se mostrará el inglés.
- Use dobles llaves para las variables,
{{name}}, igual que en la sintaxis de i18next. - La primera vez que añada un archivo de idioma debe reiniciar la aplicación para que surta efecto; los cambios posteriores se aplican con hot reload.
- NocoBase usa automáticamente el nombre del paquete del plugin como namespace de las traducciones, por lo que las traducciones de plugins distintos no chocan.
Uso en el Plugin: this.t()
Dentro de la clase Plugin, this.t() inyecta automáticamente el nombre del paquete del plugin actual como namespace, sin necesidad de pasar ns manualmente:
Uso en componentes: useT()
En los componentes React no se puede usar this.t() directamente. El scaffold del plugin genera automáticamente un archivo locale.ts que expone el hook useT():
En el componente se utiliza así:
La función t que devuelve useT() ya tiene asociado el namespace del plugin; basta con pasarle la clave.
Uso en FlowModel: tExpr()
FlowModel.define() y registerFlow() se ejecutan al cargar el módulo, momento en el que i18n aún no se ha inicializado, por lo que no se puede llamar a t() directamente. En este escenario se utiliza tExpr(), que genera una expresión de traducción diferida que se resuelve en tiempo de ejecución:
En resumen: this.t() y useT() son para traducción en tiempo de ejecución; tExpr() es para traducción diferida en definiciones estáticas.
tExpr proviene de dos sitios: el locale.ts autogenerado del plugin y @nocobase/flow-engine. La diferencia es que el tExpr de locale.ts ya tiene asociado el nombre del paquete del plugin como namespace, mientras que el importado directamente desde @nocobase/flow-engine no tiene ningún namespace asociado. En el código del plugin, utilice siempre el tExpr exportado por locale.ts para que las traducciones se asocien correctamente con los archivos de idioma propios del plugin.
Tabla rápida de los tres usos
Enlaces relacionados
- Context → Capacidades comunes → Internacionalización: referencia completa de
ctx.tyctx.i18n. - Lista de idiomas: lista completa de los códigos de idioma compatibles con NocoBase.
- Desarrollo de Component: uso de
useFlowContexten componentes. - Visión general de FlowEngine: uso de
tExpren FlowModel.

