Aviso de traducción por IA
Esta documentación ha sido traducida automáticamente por IA.
I18n
Los plugins de NocoBase son compatibles con la internacionalización (i18n) en múltiples idiomas, tanto para el frontend como para el backend. Gracias a un mecanismo unificado, puede implementar contenido multilingüe en sus plugins de forma sencilla.
Gestión de archivos de idiomas
Los archivos de idiomas de los plugins se almacenan de forma unificada en el directorio src/locale. Le recomendamos nombrarlos según el idioma, por ejemplo:
|- /plugin-hello
|- /src
|- /locale
|- en-US.json # Idioma inglés
|- zh-CN.json # Idioma chino
Cada archivo de idioma exporta un objeto JSON que contiene todas las entradas de traducción para ese idioma, por ejemplo:
// zh-CN.json
{
"Hello": "你好",
"World": "世界",
"Enter your name": "请输入你的名字",
"Your name is {{name}}": "你的名字是 {{name}}"
}
// en-US.json
{
"Hello": "Hello",
"World": "World",
"Enter your name": "Enter your name",
"Your name is {{name}}": "Your name is {{name}}"
}
Cuando añada archivos de idioma por primera vez, deberá reiniciar la aplicación para que surtan efecto. Puede verificar las entradas de traducción a través de la API:
http://localhost:13000/api/app:getLang?locale=zh-CN
Instancia global de i18n
app.i18n es la instancia global de i18n, ideal para escenarios globales de CLI o de plugins. Puede combinarla con inquirer para implementar interacciones de línea de comandos:
import select from '@inquirer/select';
import input from '@inquirer/input';
export class PluginSampleI18nServer extends Plugin {
load() {
this.app.command('test-i18n').action(async () => {
const answer1 = await select({
message: 'Select a language',
choices: [
{ name: '中文', value: 'zh-CN' },
{ name: 'English', value: 'en-US' }
]
});
await this.app.changeLanguage(answer1);
const answer2 = await input({
message: app.i18n.t('Enter your name')
});
console.log(app.i18n.t('Your name is {{name}}', { name: answer2 }));
});
}
}
app.i18n.t(text, options) se utiliza para traducir texto y admite variables de plantilla.
i18n del contexto de la solicitud
El ctx.i18n de cada solicitud es una instancia clonada de la i18n global, que responde de forma independiente con información multilingüe basada en el idioma del cliente.
Configurar el idioma del cliente
GET /?locale=en-US HTTP/1.1
Host: localhost:13000
- Encabezado de la solicitud (Recomendado):
GET / HTTP/1.1
Host: localhost:13000
X-Locale: en-US
Uso en un middleware
export class PluginSampleI18nServer extends Plugin {
load() {
this.app.use(async (ctx, next) => {
if (ctx.path === '/api/test-i18n') {
ctx.body = ctx.t('Hello', { ns: '@my-project/plugin-hello' });
}
await next();
});
}
}
Al acceder a http://localhost:13000/api/test-i18n?locale=zh-CN, se devolverá 你好.
i18n interna del plugin
Los plugins pueden usar directamente plugin.t(key, options) para obtener las traducciones:
export class PluginSampleI18nServer extends Plugin {
load() {
this.app.use(async (ctx, next) => {
if (ctx.path === '/api/plugin-i18n') {
ctx.body = this.plugin.t('Hello');
}
await next();
});
}
}
plugin.t(text) es equivalente a ctx.t(text, { ns }).
APIs relacionadas
- app.i18n
- app.t(text, options)
- ctx.i18n
- ctx.t(text, options)
- plugin.t()
- tExpr(text, options)