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

Avvio Rapido

Panoramica Sviluppo Plugin
Scrivere il Primo Plugin
Struttura Directory Progetto

Sviluppo Server-side

Panoramica
Plugin
Collezioni (Tabelle Dati)
Operazioni Database
Gestione Origini Dati (DataSourceManager)
Gestione Risorse (ResourceManager)
Controllo Accessi (ACL)
Middleware
Cache
Eventi
Contesto Richiesta
Script di Migrazione
Logger
Internazionalizzazione (I18n)
Comando
Gestione Cron Job
Test

Sviluppo Client-side

Panoramica
Plugin
Contesto
Router
Controllo Accessi (ACL)
Gestione Origini Dati (DataSourceManager)
Risorse
Richieste
Stili e Temi
Logger
Internazionalizzazione (I18n)
Test

Altro

Guida all'Aggiornamento Plugin
Elenco Lingue
Gestione Dipendenze
Build
Previous PageLogger
Next PageComando
Avviso di traduzione IA

Questa documentazione è stata tradotta automaticamente dall'IA.

#I18n Internazionalizzazione

I plugin di NocoBase supportano l'internazionalizzazione (i18n) multilingue sia per il frontend che per il backend. Grazie a un meccanismo unificato, è possibile implementare facilmente contenuti multilingue nei plugin.

#Gestione dei File Multilingue

I file multilingue dei plugin sono archiviati in modo uniforme nella directory src/locale. Si consiglia di nominarli in base alla lingua, ad esempio:

|- /plugin-hello
  |- /src
    |- /locale
      |- en-US.json   # Lingua inglese
      |- zh-CN.json   # Lingua cinese

Ogni file di lingua esporta un oggetto JSON che contiene tutte le voci di traduzione per quella lingua, ad esempio:

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

Quando aggiunge file di lingua per la prima volta, deve riavviare l'applicazione affinché abbiano effetto. Può verificare le voci di traduzione tramite l'API:
http://localhost:13000/api/app:getLang?locale=zh-CN

#Istanza i18n Globale

app.i18n è l'istanza i18n globale, adatta per scenari CLI o globali dei plugin. Può essere combinata con inquirer per implementare interazioni da riga di comando:

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) viene utilizzato per tradurre il testo e supporta le variabili di template.

#i18n del Contesto della Richiesta

Ogni richiesta ctx.i18n è un'istanza clone dell'i18n globale, che risponde in modo indipendente con informazioni multilingue basate sulla lingua del client.

#Impostare la Lingua del Client

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

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

Accedendo a http://localhost:13000/api/test-i18n?locale=zh-CN verrà restituito 你好.

#i18n Interno del Plugin

I plugin possono utilizzare direttamente plugin.t(key, options) per ottenere le traduzioni:

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) è equivalente a ctx.t(text, { ns })

#API Correlate

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