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

Snelstart

Overzicht plug-inontwikkeling
Eerste plug-in schrijven
Projectstructuur

Server-side ontwikkeling

Overzicht
Plug-in
Collecties
Database
DataSourceManager
ResourceManager
ACL
Middleware
Cache
Events
Context
Migratie
Logger
I18n
Commando
CronJobManager
Test

Client-side ontwikkeling

Overzicht
Plug-in
Context
Router
ACL
DataSourceManager
Resource
Request
Stijlen & Thema's
Logger
I18n
Test

Overig

Upgrade-gids voor plug-ins
Talenlijst
Dependency-beheer
Build
Previous PageLogger
Next PageCommando
TIP

Dit document is vertaald door AI. Voor onnauwkeurigheden, raadpleeg de Engelse versie

#I18n

NocoBase plugins ondersteunen meertalige internationalisatie (i18n) voor zowel de frontend als de backend. Dankzij een uniform mechanisme kunt u eenvoudig meertalige content in uw plugins implementeren.

#Meertalig bestandsbeheer

De meertalige bestanden van een plugin worden uniform opgeslagen in de map src/locale. Het wordt aanbevolen om ze te benoemen op basis van de taal, bijvoorbeeld:

|- /plugin-hello
  |- /src
    |- /locale
      |- en-US.json   # Engelse taal
      |- zh-CN.json   # Chinese taal

Elk taalbestand exporteert een JSON-object dat alle vertaalitems voor die taal bevat, bijvoorbeeld:

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

Wanneer u voor het eerst taalbestanden toevoegt, moet u de applicatie opnieuw opstarten om de wijzigingen door te voeren. U kunt de vertaalitems controleren via de API: http://localhost:13000/api/app:getLang?locale=zh-CN

#Globale i18n-instantie

app.i18n is de globale i18n-instantie, geschikt voor CLI- of globale plugin-scenario's. Deze kan worden gecombineerd met Inquirer om interacties via de commandoregel te implementeren:

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) wordt gebruikt om tekst te vertalen en ondersteunt sjabloonvariabelen.

#i18n in de Request Context

De ctx.i18n van elke aanvraag is een kloon van de globale i18n-instantie, die onafhankelijk reageert met meertalige informatie op basis van de taal van de client.

#Clienttaal instellen

  • Query String:
GET /?locale=en-US HTTP/1.1
Host: localhost:13000
  • Request Header (Aanbevolen):
GET / HTTP/1.1
Host: localhost:13000
X-Locale: en-US

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

Als u http://localhost:13000/api/test-i18n?locale=zh-CN bezoekt, krijgt u 你好 terug (het Chinese woord voor "Hello").

#Interne i18n van de plugin

Plugins kunnen direct plugin.t(key, options) gebruiken om vertalingen op te halen:

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) is gelijk aan ctx.t(text, { ns })

#Gerelateerde API's

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