logologo
Começar
Manual
Desenvolvimento
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
Começar
Manual
Desenvolvimento
Plugins
API
logologo

Início rápido

Visão geral do desenvolvimento de plugins
Escrever o primeiro plugin
Estrutura de diretórios do projeto

Desenvolvimento do lado do servidor

Visão Geral
Plugin
Collections (Tabelas de dados)
Database (Operações de banco de dados)
DataSourceManager (Gerenciamento de fontes de dados)
ResourceManager (Gerenciamento de recursos)
ACL (Controle de acesso)
Middleware
Cache
Event (Evento)
Context (Contexto da requisição)
Migration (Script de atualização)
Logger (Log)
I18n (Internacionalização)
Command (Linha de comando)
CronJobManager (Gerenciamento de tarefas agendadas)
Test (Teste)

Desenvolvimento do lado do cliente

Visão Geral
Plugin
Context (Contexto)
Router (Rotas)
ACL (Controle de acesso)
DataSourceManager (Gerenciamento de fontes de dados)
Resource (Recurso)
Request (Requisição)
Estilos e temas
Logger (Log)
I18n (Internacionalização)
Test (Teste)

Outros

Guia de atualização de plugins
Lista de idiomas
Gerenciamento de dependências
Build
Previous PageLogger (Log)
Next PageCommand (Linha de comando)
Aviso de tradução por IA

Esta documentação foi traduzida automaticamente por IA.

#I18n Internacionalização

Os plugins do NocoBase suportam internacionalização (i18n) multilíngue tanto para o frontend quanto para o backend. Com um mecanismo unificado, você pode implementar conteúdo multilíngue facilmente nos seus plugins.

#Gerenciamento de Arquivos Multilíngues

Os arquivos multilíngues dos plugins são armazenados de forma padronizada no diretório src/locale. É recomendado nomeá-los pelo idioma, por exemplo:

|- /plugin-hello
  |- /src
    |- /locale
      |- en-US.json   # Idioma inglês
      |- zh-CN.json   # Idioma chinês

Cada arquivo de idioma exporta um objeto JSON contendo todas as entradas de tradução para aquele idioma, por exemplo:

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

Ao adicionar arquivos de idioma pela primeira vez, você precisa reiniciar a aplicação para que eles tenham efeito. Você pode verificar as entradas de tradução através da API:
http://localhost:13000/api/app:getLang?locale=zh-CN

#Instância Global de i18n

app.i18n é a instância global de i18n, adequada para cenários globais de CLI ou de plugins. Ela pode ser combinada com o inquirer para implementar interações de linha de 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) é usado para traduzir texto e suporta variáveis de template.

#i18n no Contexto da Requisição

O ctx.i18n de cada requisição é um clone da instância global de i18n, respondendo de forma independente com informações multilíngues com base no idioma do cliente.

#Definir Idioma do Cliente

  • Query String:
GET /?locale=en-US HTTP/1.1
Host: localhost:13000
  • Cabeçalho da Requisição (Recomendado):
GET / HTTP/1.1
Host: localhost:13000
X-Locale: en-US

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

Acessar http://localhost:13000/api/test-i18n?locale=zh-CN retornará 你好.

#i18n Interno do Plugin

Os plugins podem usar diretamente plugin.t(key, options) para obter traduções:

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

#APIs Relacionadas

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