SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/ Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue, контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер), Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог). Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0, тесты 1340/130/52/38/9 зелёные.
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# SDD ledger — plan: docs/superpowers/plans/2026-09-10-deal-stage11-i18n.md
|
||||
|
||||
Проект НЕ git: фиксация — отчёты задач и этот ledger.
|
||||
|
||||
## Решение владельца (2026-09-10)
|
||||
Только русский; переключатель языка и второй язык на этом этапе НЕ делались — оставлены в бэклоге
|
||||
(делаем при появлении потребности). Задача — вынести строки в
|
||||
ресурсы (архитектура готова к добавлению языка позже). Визуал/тексты — 1:1.
|
||||
|
||||
## Todos
|
||||
- [x] T1: i18n-ядро (t/locale/словари, фолбэк ru)
|
||||
- [x] T2: Словарь ru (инвентаризация по областям)
|
||||
- [x] T3: Миграция основного приложения на t()
|
||||
- [x] T4: Миграция оператор-консоли и /join
|
||||
- [x] T5: Локализация ошибок/статусов
|
||||
- [x] T6: Проверки (линтер кириллицы вне словарей, build)
|
||||
- [x] T7: Доки и STATUS
|
||||
|
||||
## В бэклоге (делаем при появлении потребности)
|
||||
- Переключатель языка в UI и второй язык.
|
||||
- Форматтеры Intl/плюрализация — вместе с языком.
|
||||
|
||||
## Task status
|
||||
- 2026-09-10: этап 11 выполнен (урезанный объём). Ядро `src/frontend/src/i18n/` (index.js, locales/ru.js,
|
||||
locales/ru.data.js, errors.js); строки вынесены: 1039 ключей в 13 областях, 1209 ссылок `t()/$t()` в 65
|
||||
файлах. `npm run build` — зелёный; `npm run lint:i18n` — зелёный. Временные кодимод-скрипты удалены.
|
||||
Переключателя языка в UI нет (по решению владельца). См. task-report.md.
|
||||
@@ -0,0 +1,80 @@
|
||||
# Task report — Дейл, этап 11: локализация (i18n, урезанный объём)
|
||||
|
||||
Дата: 2026-09-10. План: `docs/superpowers/plans/2026-09-10-deal-stage11-i18n.md`.
|
||||
|
||||
## Итог
|
||||
|
||||
Все пользовательские строки фронтенда вынесены из компонентов/вьюх/store в словари-ресурсы.
|
||||
Язык один — русский; **переключателя языка в UI нет и второго языка нет** (решение владельца).
|
||||
Архитектура готова к добавлению языка позже без правок компонентов. Отображаемые тексты — 1:1.
|
||||
|
||||
- `npm run build` — **зелёный** (vite build, `✓ built`).
|
||||
- `npm run lint:i18n` — **зелёный** («кириллических пользовательских строк вне словарей не найдено»).
|
||||
- Словарь: **1039 ключей** в **13 областях**; **1209 ссылок** `t()/$t()` в **65** файлах `src/**/*.{vue,js}`.
|
||||
|
||||
## Структура `src/frontend/src/i18n/`
|
||||
|
||||
```
|
||||
src/i18n/
|
||||
index.js — ядро: t(key, params), реактивный locale (default ru),
|
||||
setLocale(), registerLocale(), availableLocales(), useI18n(),
|
||||
Vue-плагин ($t в шаблонах). Фолбэк: активный язык → ru → сам ключ.
|
||||
errors.js — localizeError(err, fallbackKey): HTTP-статусы/сеть → ключи errors/*,
|
||||
осмысленный {detail} бэка и неизвестное — как есть.
|
||||
locales/
|
||||
ru.js — словарь сообщений (единственный источник текстов).
|
||||
ru.data.js — языковой контент-каталог (валюты, AI-провайдеры, дефолтные
|
||||
промпты, категории/шаблоны промптов), реэкспортируется из src/data.js.
|
||||
```
|
||||
|
||||
Подключение: `main.js` — `createApp(App).use(i18n)`. Алиас Vite `@ → src` (без новых зависимостей)
|
||||
для единого импорта `@/i18n/index.js`.
|
||||
|
||||
## Области ключей (`ru.js`)
|
||||
|
||||
`common/` `nav/` `search/` `cards/` `drawer/` `columns/` `settings/` `channels/` `processing/`
|
||||
`auth/` `operator/` `join/` `errors/` (+ вложенные подразделы). Разбивка по количеству ключей:
|
||||
settings 260, common 156, channels 146, operator 144, cards 75, processing 74, drawer 56,
|
||||
columns 48, nav 30, join 28, auth 7, search 2, errors 13.
|
||||
|
||||
## Что сделано по задачам
|
||||
|
||||
- **T1. Ядро i18n** — `src/i18n/index.js` без внешних зависимостей: `t(key, params)` с подстановкой
|
||||
`{name}`, реактивный `locale` (default `ru`), `setLocale()` (готов, UI нет), `registerLocale()`,
|
||||
загрузка словарей, фолбэк на `ru`. Плагин даёт шаблонам `$t(...)`.
|
||||
- **T2. Словарь ru** — инвентаризация строк по областям; значения 1:1 с исходными. Языковой контент
|
||||
из `src/data.js` (валюты, провайдеры, промпты, категории) перенесён в `locales/ru.data.js`.
|
||||
- **T3. Миграция основного приложения** — компоненты, вьюхи и store-слайсы (`store/*.js`) переведены
|
||||
на `t()`/`$t()`; строки в store тоже вынесены.
|
||||
- **T4. Оператор-консоль и `/join`** — все разделы консоли и `JoinView` мигрированы.
|
||||
- **T5. Ошибки/статусы** — `i18n/errors.js` маппит известные HTTP-статусы и сетевые сбои на `errors/*`;
|
||||
точка применения — `errMsg` в `store/core.js`. Неизвестный текст бэка показывается как есть.
|
||||
- **T6. Проверки** — `scripts/i18n-lint.mjs` + `npm run lint:i18n`: падает на кириллицу в пользовательских
|
||||
строках вне `src/i18n/locales/**`; корректно пропускает JS/HTML-комментарии, regex-литералы и строки
|
||||
с директивой `i18n-ignore`. `npm run build` — зелёный.
|
||||
- **T7. Доки** — обновлены `docs/user-guide/Инструкция-пользователя-Дейл.md` (раздел «Язык интерфейса»,
|
||||
без упоминания переключателя) и `docs/technical/Техническая-документация-Дейл.md` (раздел 14: устройство
|
||||
i18n и пошаговая инструкция «как добавить язык позже»). Это единственные правки вне `src/frontend`.
|
||||
|
||||
## Ключевые решения и нюансы
|
||||
|
||||
- **Технические строки не локализованы**: dev-лог в `Icon.vue` и служебные значения помечены
|
||||
`i18n-ignore`; тексты причин отказа бэкенда в `JoinView` оставлены как данные-ключи карты подсказок.
|
||||
- **Плюрализация не вводилась** (отложено): множественные формы по-прежнему выбираются в коде
|
||||
(`... === 1 ? 'файл' : 'файлов'`), но уже через ключи словаря.
|
||||
- **Дубли значений устранены** переназначением ссылок (общие строки — в `common/`).
|
||||
Единственное «дублирование» — `errors.badGateway`/`errors.network` (разные по смыслу статусы).
|
||||
|
||||
## Осталось / отложено (по решению владельца)
|
||||
|
||||
- Переключатель языка в UI и второй язык (en) — по запросу.
|
||||
- Перевод дат/чисел/валют на `Intl` и плюрализация — вместе с будущим языком.
|
||||
- Константы, вычисляемые один раз при загрузке модуля (контент-каталог `ru.data.js`, карты подсказок),
|
||||
держат язык, выбранный на старте; для полноценного «горячего» переключения их потребуется обернуть
|
||||
в `computed`. На текущем этапе (один язык) поведение идентично прежнему.
|
||||
|
||||
## Валидация
|
||||
|
||||
- `cd C:\telbase\src\frontend && npm run build` → `✓ built in ~1.2s` (единственное замечание — предупреждение
|
||||
Vite о размере чанка >500 kB; словарь расширил бандл, на сборку не влияет).
|
||||
- `npm run lint:i18n` → `✓ i18n: кириллических пользовательских строк вне словарей не найдено.`
|
||||
Reference in New Issue
Block a user