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

Rychlý start

Přehled vývoje pluginů
Vytvoření prvního pluginu
Struktura adresářů projektu

Vývoj na straně serveru

Přehled
Plugin
Kolekce
Databázové operace
Správa zdrojů dat (DataSourceManager)
Správa zdrojů (ResourceManager)
Řízení přístupu (ACL)
Middleware
Cache
Události
Kontext požadavku
Migrace
Protokoly
Internacionalizace (I18n)
Příkazový řádek (Command)
Správa plánovaných úloh (CronJobManager)
Testování

Vývoj na straně klienta

Přehled
Plugin
Kontext
Router
Řízení přístupu (ACL)
Správa zdrojů dat (DataSourceManager)
Zdroje
Požadavky
Styly a motivy
Protokoly
Internacionalizace (I18n)
Testování

Ostatní

Průvodce aktualizací pluginů
Seznam jazyků
Správa závislostí
Sestavení
Previous PageProtokoly
Next PagePříkazový řádek (Command)
TIP

Tento dokument byl přeložen umělou inteligencí. V případě nepřesností se prosím obraťte na anglickou verzi

#I18n Internacionalizace

Pluginy NocoBase podporují vícejazyčnou internacionalizaci (i18n) pro frontend i backend. Díky jednotnému mechanismu můžete v pluginech snadno implementovat vícejazyčný obsah.

#Správa vícejazyčných souborů

Vícejazyčné soubory pluginů jsou jednotně uloženy v adresáři src/locale. Doporučujeme je pojmenovávat podle jazyka, například:

|- /plugin-hello
  |- /src
    |- /locale
      |- en-US.json   # Anglický jazyk
      |- zh-CN.json   # Čínský jazyk

Každý jazykový soubor exportuje JSON objekt obsahující všechny překladové položky pro daný jazyk, například:

// 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}}"
}

Při prvním přidání jazykových souborů je potřeba restartovat aplikaci, aby se změny projevily. Platnost překladových položek můžete ověřit pomocí API:
http://localhost:13000/api/app:getLang?locale=zh-CN

#Globální instance i18n

app.i18n je globální instance i18n, vhodná pro CLI nebo globální scénáře pluginů. Lze ji kombinovat s knihovnou inquirer pro implementaci interakcí v příkazovém řádku:

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 }));
    });
  }
}

Metoda app.i18n.t(text, options) slouží k překladu textu a podporuje šablonové proměnné.

#i18n v kontextu požadavku

Instance ctx.i18n každého požadavku je klonem globální instance i18n, která nezávisle reaguje vícejazyčnými informacemi na základě jazyka klienta.

Nastavení jazyka klienta

  • Parametr URL (Query String):
GET /?locale=en-US HTTP/1.1
Host: localhost:13000
  • Hlavička požadavku (doporučeno):
GET / HTTP/1.1
Host: localhost:13000
X-Locale: en-US

Použití v 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();
    });
  }
}

Přístup na http://localhost:13000/api/test-i18n?locale=zh-CN vrátí 你好.

#i18n uvnitř pluginu

Pluginy mohou přímo používat metodu plugin.t(key, options) k získání překladů:

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();
    });
  }
}

Metoda plugin.t(text) je ekvivalentní s ctx.t(text, { ns })

#Související API

  • app.i18n
  • app.t(text, options)
  • ctx.i18n
  • ctx.t(text, options)
  • plugin.t()
  • tExpr(text, options)