Повідомлення про переклад ШІ
Ця документація була автоматично перекладена штучним інтелектом.
I18n
Плагіни NocoBase підтримують багатомовну міжнародналізацію (i18n) як для фронтенду, так і для бекенду. Завдяки єдиному механізму ви можете легко реалізувати багатомовний контент у плагінах.
Управління багатомовними файлами
Багатомовні файли плагінів зберігаються в каталозі src/locale. Рекомендується називати їх відповідно до мови, наприклад:
|- /plugin-hello
|- /src
|- /locale
|- en-US.json # Англійська мова
|- zh-CN.json # Китайська мова
Кожен мовний файл експортує JSON-об'єкт, що містить усі переклади для цієї мови, наприклад:
// 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}}"
}
При першому додаванні мовних файлів потрібно перезапустити застосунок, щоб вони набули чинності. Ви можете перевірити записи перекладу через API:
http://localhost:13000/api/app:getLang?locale=zh-CN
Глобальний екземпляр i18n
app.i18n — це глобальний екземпляр i18n, який підходить для CLI або глобальних сценаріїв плагінів. Його можна поєднати з inquirer для реалізації взаємодії в командному рядку:
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) використовується для перекладу тексту та підтримує змінні шаблонів.
i18n контексту запиту
ctx.i18n кожного запиту є клоном глобального екземпляра i18n, який незалежно відповідає багатомовною інформацією на основі мови клієнта.
Встановлення мови клієнта
GET /?locale=en-US HTTP/1.1
Host: localhost:13000
- Заголовок запиту (рекомендовано):
GET / HTTP/1.1
Host: localhost:13000
X-Locale: en-US
Використання в проміжному ПЗ
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();
});
}
}
При зверненні до http://localhost:13000/api/test-i18n?locale=zh-CN буде повернуто 你好 (що означає "Привіт" китайською).
Внутрішній i18n плагіна
Плагіни можуть безпосередньо використовувати plugin.t(key, options) для отримання перекладів:
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) еквівалентно ctx.t(text, { ns })
Пов'язані API
app.i18n
app.t(text, options)
ctx.i18n
ctx.t(text, options)
plugin.t()
tExpr(text, options)