Тексты и языки
Приложение говорит по-английски и по-русски. Каждое слово на экране берётся из одного каталога; ничего не загружается из интернета.
Где лежат слова
| Что | Где |
|---|---|
| Тексты интерфейса | 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. |
| Ошибки из main | Main присылает постоянные английские предложения; 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: окно на обоих языках, ни на одной вкладке нет чужого слова или голого ключа.- Обход экранов (Тесты) проходит каждый экран на обоих языках.
Как добавить язык
- Добавьте код языка в
AppLanguageи в перечислениеlanguageвsrc/shared/config/schema.ts, с миграцией, если сохранённое значение её требует (База данных и миграции). - Добавьте третий объект в
catalog.tsсо всеми ключами;locale.test.tsперечислит недостающие. - Добавьте тексты уроков и встроенные знания на этом языке (
LessonLanguage,KNOWLEDGE_LANGUAGES). - Добавьте вариант в настройку «Язык», а язык в окно справки (
HelpLanguageвsrc/shared/contracts/about.ts,scripts/build-assets.js). - Добавьте
Page.<код>.mdдля каждой страницы вики и расширьтеtests/unit/wiki.test.ts. - Пройдите обход экранов на новом языке: более длинные слова найдут каждое место, где текст не помещается.