Files
bare/docs/decisions/021-ui-language.md
T
mayatnikovandClaude Fable 5 a898347005 Закрыть открытые вопросы: ADR-015…022, бриф айдентики
Регистрация открытая (015), контакты и приглашения по нику с
закреплением ключа и блокировкой (016), лимиты (017), идентификация
устройства через случайный deviceId в IndexedDB и серверный fan-out
(018), отказ от серверного перца (019), смена пароля не в v1 (020),
интерфейс ru/en (021), айдентика «Скобы» по turn 2 канваса (022).

Архитектура, модель угроз и README обновлены. В открытых вопросах
остались два: моногарнитура с кириллицей (Fragment Mono её не
содержит) и удаление аккаунта.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R2pCJkWyG2aYu48u1Vp1A1
2026-08-20 22:42:20 +03:00

1.9 KiB

ADR-021: Интерфейс на русском и английском, i18n своими руками

Закрывает открытый вопрос о языке интерфейса.

Контекст

Аудитория Bare двуязычна. Библиотеки i18n на клиенте невозможны (ADR-001), и они не нужны: интерфейс чата — несколько десятков строк.

Решение

  • Два языка: русский и английский. Других в v1 нет.
  • Все строки интерфейса — в одном ES-модуле, два плоских словаря с одинаковыми ключами. Ничего сверх: никаких форматов файлов переводов, никаких внешних инструментов.
  • Язык при первом запуске — из navigator.language (ru → русский, всё остальное → английский). Переключатель в настройках, выбор хранится в localStorage.
  • Склонения и множественные формы — руками, через Intl.PluralRules. Даты и время — через Intl.DateTimeFormat с выбранной локалью.
  • Документация остаётся на русском.

Следствия

  • Добавить язык — добавить словарь; удалить — удалить. Ключи проверяются на полноту простым скриптом при желании, не сборкой.
  • Ники и содержимое сообщений языком интерфейса не затрагиваются.
  • Текст в UI короткий и строчный — по голосу бренда (ADR-022). Переводить надо в том же регистре и тоне.