Internationalisation i18n
Les plugins NocoBase gèrent les fichiers multilingues via le répertoire src/locale/. Une fois les fichiers de traduction écrits, vous pouvez utiliser this.t() dans le Plugin, le hook useT() dans les composants et tExpr() dans les définitions FlowModel pour récupérer le texte traduit.
Fichiers de traduction
Sous src/locale/ du plugin, créez un fichier JSON par langue. La clé est le texte source en anglais, la valeur est la traduction dans la langue correspondante :
Quelques points à noter :
- Utilisez le texte anglais comme clé, ainsi même si une traduction manque, le repli vers l'anglais reste possible
- Les variables utilisent les doubles accolades
{{name}}, conformément à la syntaxe d'i18next - L'ajout initial des fichiers de langue nécessite un redémarrage de l'application ; les modifications ultérieures sont prises en compte par hot reload
- NocoBase utilise automatiquement le nom du package du plugin comme namespace de traduction, les traductions des différents plugins n'entrent donc pas en conflit
Utilisation dans le Plugin : this.t()
Dans la classe Plugin, this.t() injecte automatiquement le nom du package du plugin courant comme namespace, vous n'avez pas à passer ns manuellement :
Utilisation dans un composant : useT()
Dans un composant React, on ne peut pas utiliser directement this.t(). Le squelette de plugin génère automatiquement un fichier locale.ts qui fournit le hook useT() :
Utilisation dans un composant :
La fonction t renvoyée par useT() est déjà liée au namespace du plugin, il suffit de passer la clé.
Utilisation dans FlowModel : tExpr()
FlowModel.define() et registerFlow() s'exécutent au chargement du module ; à ce moment, i18n n'est pas encore initialisé et on ne peut pas appeler t() directement. Dans ce cas, utilisez tExpr() — il génère une chaîne d'expression de traduction différée, résolue à l'exécution :
En résumé : this.t() et useT() servent à la traduction au runtime, tExpr() à la traduction différée pour les définitions statiques.
tExpr a deux origines : le locale.ts généré automatiquement par le plugin et @nocobase/flow-engine. La différence : le tExpr de locale.ts est déjà lié au nom du package comme namespace, tandis que le tExpr importé directement depuis @nocobase/flow-engine n'a pas de namespace. Dans le code de plugin, utilisez toujours le tExpr exporté par locale.ts afin que les traductions correspondent correctement aux fichiers de langue propres au plugin.
Aide-mémoire des trois usages
Liens connexes
- Context → Capacités courantes → Internationalisation — référence API complète pour ctx.t et ctx.i18n
- Liste des langues — liste complète des codes de langue supportés par NocoBase
- Développement de composants Component — utilisation de useFlowContext dans les composants
- Aperçu de FlowEngine — utilisation de tExpr dans FlowModel

