Тексты и языки

Приложение говорит по-английски и по-русски. Каждое слово на экране берётся из одного каталога; ничего не загружается из интернета.

Где лежат слова

ЧтоГде
Тексты интерфейсаsrc/shared/i18n/catalog.ts: два объекта, en и ru, с одинаковыми ключами. Читаются через i18next и react-i18next (src/renderer/i18n.ts); для собственных диалогов main берёт createTranslator из src/shared/i18n/index.ts.
Тексты уроковsrc/shared/lessons/texts.en.ts, texts.ru.ts.
Встроенные знанияsrc/shared/knowledge/coreKnowledge.en.ts, coreKnowledge.ru.ts.
Ошибки из mainMain присылает постоянные английские предложения; ERROR_KEYS в src/shared/i18n/index.ts сопоставляет каждому ключ каталога.
Справкаdocs/wiki/: Page.md по-английски, Page.ru.md по-русски. Как писать страницы справки
Заметки к выпускамdocs/releases/vX.Y.Z.md и vX.Y.Z.ru.md.

Правила для текста

  • Пишите то предложение, которое нужно человеку, простыми словами, и называйте действие так, как его называет меню.
  • Значение вставляется через {{name}}, а не приклеивается в компоненте. Числа через {{count, number}}.
  • Множественное число через суффиксы i18next _one, _few, _many и _other; в обоих языках есть все четыре ключа.
  • Ключ, пароль или токен никогда не попадают в текст.
  • То, что написал человек, JSON workflow, имена классов нод, типы портов, имена моделей и файлов остаются как есть на любом языке.

Настройка языка

  • Новый профиль начинает по-русски (nonSecretDefaults.language = 'ru' в src/shared/config/schema.ts). Человек переключает язык в «Настройки ▸ Оформление и анимация ▸ Язык»; окно меняется сразу, «Сохранить» запоминает выбор.
  • Помощник отвечает на языке интерфейса, если в «Настройки ▸ Помощник ▸ Язык ответов» не выбрано иное.
  • Диалоги файлов берут сохранённый язык.

Проверки

  • tests/unit/locale.test.ts: у обоих языков одинаковые ключи; множественное число и разряды чисел работают; ошибки очищены от секретов.
  • tests/unit/i18nUsage.test.ts: каждое место, где заполняется шаблон, передаёт ему все значения, поэтому {{done}} не попадает на экран.
  • tests/e2e/locale.test.ts: окно на обоих языках, ни на одной вкладке нет чужого слова или голого ключа.
  • Обход экранов (Тесты) проходит каждый экран на обоих языках.

Как добавить язык

  1. Добавьте код языка в AppLanguage и в перечисление language в src/shared/config/schema.ts, с миграцией, если сохранённое значение её требует (База данных и миграции).
  2. Добавьте третий объект в catalog.ts со всеми ключами; locale.test.ts перечислит недостающие.
  3. Добавьте тексты уроков и встроенные знания на этом языке (LessonLanguage, KNOWLEDGE_LANGUAGES).
  4. Добавьте вариант в настройку «Язык», а язык в окно справки (HelpLanguage в src/shared/contracts/about.ts, scripts/build-assets.js).
  5. Добавьте Page.<код>.md для каждой страницы вики и расширьте tests/unit/wiki.test.ts.
  6. Пройдите обход экранов на новом языке: более длинные слова найдут каждое место, где текст не помещается.

См. также

Страница перенесена из wiki репозитория приложения (docs/wiki/dev/Texts-And-Languages.ru.md, ревизия b8e3f71). То же руководство встроено в приложение: «Справка ▸ Руководство».

Чтобы обновить её, выполните npm run import, а затем npm run build в папке сайта.