i18n internacionalização
Os plugins do NocoBase gerenciam arquivos multilíngues através do diretório src/locale/. Após criar os arquivos de tradução, você pode obter os textos traduzidos usando this.t() no Plugin, o hook useT() em componentes e tExpr() nas definições de FlowModel.
Arquivos de tradução
Em src/locale/ do plugin, crie arquivos JSON por idioma. As chaves são os textos originais em inglês e os valores, as traduções no idioma correspondente:
Algumas observações:
- Use o texto original em inglês como chave, assim, mesmo que a tradução esteja faltando, há fallback para o inglês
- Variáveis usam chaves duplas
{{name}}, com a mesma sintaxe do i18next - Adicionar um novo arquivo de idioma pela primeira vez requer reiniciar a aplicação para ter efeito; depois disso, as alterações de conteúdo terão hot reload
- O NocoBase usa automaticamente o nome do pacote do plugin como namespace de tradução, evitando que traduções de plugins diferentes entrem em conflito
Uso no Plugin: this.t()
Na classe Plugin, this.t() injeta automaticamente o nome do pacote do plugin atual como namespace, sem precisar passar ns manualmente:
Uso em componentes: useT()
Em componentes React, você não pode usar this.t() diretamente. O scaffold de plugins gera automaticamente um arquivo locale.ts que fornece o hook useT():
Use assim no componente:
A função t retornada por useT() já tem o namespace do plugin vinculado; basta passar a chave.
Uso em FlowModel: tExpr()
FlowModel.define() e registerFlow() são executados no momento de carregamento do módulo, quando o i18n ainda não foi inicializado, então t() não pode ser chamado diretamente. Para esses cenários, use tExpr() — ele gera uma string de expressão de tradução adiada, resolvida em tempo de execução:
Em resumo: this.t() e useT() são para tradução em tempo de execução; tExpr() é para tradução adiada em definições estáticas.
tExpr tem duas origens: o locale.ts gerado automaticamente pelo plugin e @nocobase/flow-engine. A diferença é que o tExpr em locale.ts já tem o nome do pacote do plugin vinculado como namespace, enquanto o tExpr importado diretamente de @nocobase/flow-engine não tem namespace vinculado. No código do plugin, sempre use o tExpr exportado por locale.ts, para que a tradução seja corretamente correlacionada com os arquivos de idioma do próprio plugin.
Resumo dos três usos
Links relacionados
- Context → Capacidades comuns → Internacionalização — referência completa de API de ctx.t e ctx.i18n
- Lista de idiomas — lista completa de códigos de idioma suportados pelo NocoBase
- Desenvolvimento de Component — uso de useFlowContext em componentes
- Visão geral do FlowEngine — uso de tExpr em FlowModel

