i18n Интернационализация
Плагины NocoBase управляют файлами многоязычной локализации через каталог src/locale/. После создания файлов перевода используйте this.t() в Plugin, хук useT() в компонентах, tExpr() в определениях FlowModel — и Вы получите переведённый текст.
Файлы перевода
Создайте JSON-файлы по языкам в src/locale/ плагина: ключ — это английский оригинал, значение — перевод на соответствующий язык:
Несколько важных замечаний:
- В качестве ключа используется английский оригинал, чтобы при отсутствии перевода был fallback на английский
- Переменные оборачиваются двойными фигурными скобками
{{name}}, синтаксис совпадает с i18next - При первом добавлении файла языка нужно перезапустить приложение, чтобы он вступил в силу; последующие изменения содержимого подхватываются через горячую перезагрузку
- NocoBase автоматически использует имя пакета плагина в качестве пространства имён (namespace) перевода, переводы разных плагинов не конфликтуют
Использование в Plugin: this.t()
В классе Plugin метод this.t() автоматически подставляет имя пакета текущего плагина в качестве namespace, передавать ns вручную не нужно:
Использование в компонентах: useT()
В React-компонентах нельзя напрямую использовать this.t(). Каркас плагина автоматически генерирует файл locale.ts, который предоставляет хук useT():
В компоненте используется так:
Возвращае мая useT() функция t уже привязана к namespace плагина — достаточно передать ключ.
Использование в FlowModel: tExpr()
FlowModel.define() и registerFlow() выполняются на этапе загрузки модуля — в этот момент i18n ещё не инициализирован, и нельзя напрямую вызывать t(). В таких сценариях используется tExpr() — он генерирует строку отложенного перевода, которая разрешается во время выполнения:
Проще говоря: this.t() и useT() используются для перевода во время выполнения, а tExpr() — для отложенного перевода при статическом определении.
tExpr имеет два источника: автоматически сгенерированный плагином locale.ts и @nocobase/flow-engine. Разница в том, что tExpr из locale.ts уже привязан к namespace по имени пакета плагина, а tExpr, импортированный напрямую из @nocobase/flow-engine, не имеет привязки к namespace. В коде плагина всегда используйте tExpr, экспортированный из locale.ts — только так перевод будет корректно сопоставляться с языковыми файлами самого плагина.
Краткая таблица трёх вариантов использования
Связанные ссылки
- Context → Распространённые возможности → Интернационализация — полный API-справочник по ctx.t, ctx.i18n
- Список языков — полный список кодов языков, поддерживаемых NocoBase
- Разработка Component-компонентов — использование useFlowContext в компонентах
- Обзор FlowEngine — использование tExpr в FlowModel

