Регистрация открытая (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
22 lines
1.9 KiB
Markdown
22 lines
1.9 KiB
Markdown
# ADR-021: Интерфейс на русском и английском, i18n своими руками
|
|
|
|
Закрывает открытый вопрос о языке интерфейса.
|
|
|
|
## Контекст
|
|
|
|
Аудитория Bare двуязычна. Библиотеки i18n на клиенте невозможны (ADR-001), и они не нужны: интерфейс чата — несколько десятков строк.
|
|
|
|
## Решение
|
|
|
|
- Два языка: русский и английский. Других в v1 нет.
|
|
- Все строки интерфейса — в одном ES-модуле, два плоских словаря с одинаковыми ключами. Ничего сверх: никаких форматов файлов переводов, никаких внешних инструментов.
|
|
- Язык при первом запуске — из `navigator.language` (ru → русский, всё остальное → английский). Переключатель в настройках, выбор хранится в `localStorage`.
|
|
- Склонения и множественные формы — руками, через `Intl.PluralRules`. Даты и время — через `Intl.DateTimeFormat` с выбранной локалью.
|
|
- Документация остаётся на русском.
|
|
|
|
## Следствия
|
|
|
|
- Добавить язык — добавить словарь; удалить — удалить. Ключи проверяются на полноту простым скриптом при желании, не сборкой.
|
|
- Ники и содержимое сообщений языком интерфейса не затрагиваются.
|
|
- Текст в UI короткий и строчный — по голосу бренда (ADR-022). Переводить надо в том же регистре и тоне.
|