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