logologo
Початок
Посібник
Розробка
Плагіни
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Початок
Посібник
Розробка
Плагіни
API
logologo

Швидкий старт

Огляд розробки плагінів
Написання першого плагіна
Структура каталогу проєкту

Серверна розробка

Огляд
Плагін (Plugin)
Колекції (таблиці даних)
Операції з базою даних (Database)
Керування джерелами даних (DataSourceManager)
Керування ресурсами (ResourceManager)
Контроль доступу (ACL)
Проміжне ПЗ (Middleware)
Кеш (Cache)
Подія (Event)
Контекст запиту (Context)
Скрипт оновлення (Migration)
Логи (Logger)
Інтернаціоналізація (I18n)
Командний рядок (Command)
Керування завданнями за розкладом (CronJobManager)
Тестування (Test)

Клієнтська розробка

Огляд
Плагін (Plugin)
Контекст (Context)
Маршрутизатор (Router)
Контроль доступу (ACL)
Керування джерелами даних (DataSourceManager)
Ресурс (Resource)
Запит (Request)
Стилі та теми (Styles & Themes)
Логи (Logger)
Інтернаціоналізація (I18n)
Тестування (Test)

Інше

Посібник з оновлення плагінів
Список мов
Керування залежностями
Збірка
Previous PageЛоги (Logger)
Next PageКомандний рядок (Command)
Повідомлення про переклад ШІ

Ця документація була автоматично перекладена штучним інтелектом.

#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)