Summary
Add proper i18n support using the official VS Code localization stack. Russian translations (provided by @gogi-eng in #45) should be the first non-English locale.
Requirements
- Use
@vscode/l10n (extension host) and @vscode/l10n-web (webviews) — no custom t() functions or hardcoded dictionaries
- Translations live in external
.l10n.<locale>.json bundle files, not in TypeScript source
- All UI strings must be localized before merging — no partial/incremental state with mixed languages
- Locale type should be open-ended (not hardcoded to
en | ru)
- Keep
package.nls.json / package.nls.<locale>.json for manifest strings (already correct pattern)
Russian translations (from #45)
These strings were provided by @gogi-eng and should be used as input for the .l10n.ru.json bundle:
{
"nav.observe": "Наблюдение",
"nav.measure": "Метрики",
"nav.improve": "Улучшение",
"nav.levelUp": "Развитие",
"nav.dashboard": "Обзор",
"nav.timeline": "Таймлайн",
"nav.codingMoments": "Моменты кода",
"nav.output": "Выработка",
"nav.burndown": "Расход токенов",
"nav.patterns": "Паттерны",
"nav.antiPatterns": "Антипаттерны",
"nav.skillFinder": "Поиск навыков",
"nav.contextHealth": "Контекст",
"nav.levelUpPage": "Обучение",
"filter.workspace": "Проект",
"filter.current": "Текущий",
"filter.all": "Все",
"filter.searchWs": "Поиск проектов...",
"filter.harness": "Среда ИИ",
"filter.allHarnesses": "Все среды",
"sidebar.title": "AI Engineer Coach",
"sidebar.noData": "Пока нет данных — синхронизируйте сессии.",
"sidebar.harnesses": "Обнаруженные среды",
"sidebar.lastSync": "Обновлено",
"sidebar.explore": "Открыть аналитику",
"sidebar.sync": "Синхронизировать",
"dash.calibrating": "Считаем сводку…",
"dash.vibes": "Сводка по {n} направлениям",
"dash.requests": "Запросы",
"dash.sessions": "Сессии",
"dash.loc": "Строк ИИ",
"dash.workspaces": "Проекты",
"dash.tokenHidden": "Токены и Burndown временно скрыты",
"dash.tokenHiddenDesc": "Раздел отключён, пока не сверим цифры с биллингом GitHub.",
"dash.apSummary": "Сводка антипаттернов",
"dash.viewAllAp": "Все антипаттерны →",
"dash.skillFinder": "Поиск навыков",
"dash.openSkills": "Полный вид →",
"dash.skillDesc": "Ищет повторяющиеся промпты, чтобы оформить их в навыки и не объяснять одно и то же.",
"dash.skillAnalyze": "Проанализируйте историю промптов и найдите полезные навыки.",
"dash.scanSkills": "Сканировать навыки",
"dash.dailyActivity": "Активность по дням",
"dash.topWs": "Топ проектов по запросам",
"dash.byHarness": "Запросы по среде ИИ",
"dash.close": "Закрыть",
"score.mergeWizard": "Мастер слияний",
"score.shipGoblin": "Гоблин релизов",
"score.vibeGremlin": "Гремлин рефакторинга",
"score.rubberDuck": "Утконаводитель",
"score.stackTrace": "Выживший в стектрейсе"
}
Summary
Add proper i18n support using the official VS Code localization stack. Russian translations (provided by @gogi-eng in #45) should be the first non-English locale.
Requirements
@vscode/l10n(extension host) and@vscode/l10n-web(webviews) — no customt()functions or hardcoded dictionaries.l10n.<locale>.jsonbundle files, not in TypeScript sourceen | ru)package.nls.json/package.nls.<locale>.jsonfor manifest strings (already correct pattern)Russian translations (from #45)
These strings were provided by @gogi-eng and should be used as input for the
.l10n.ru.jsonbundle:{ "nav.observe": "Наблюдение", "nav.measure": "Метрики", "nav.improve": "Улучшение", "nav.levelUp": "Развитие", "nav.dashboard": "Обзор", "nav.timeline": "Таймлайн", "nav.codingMoments": "Моменты кода", "nav.output": "Выработка", "nav.burndown": "Расход токенов", "nav.patterns": "Паттерны", "nav.antiPatterns": "Антипаттерны", "nav.skillFinder": "Поиск навыков", "nav.contextHealth": "Контекст", "nav.levelUpPage": "Обучение", "filter.workspace": "Проект", "filter.current": "Текущий", "filter.all": "Все", "filter.searchWs": "Поиск проектов...", "filter.harness": "Среда ИИ", "filter.allHarnesses": "Все среды", "sidebar.title": "AI Engineer Coach", "sidebar.noData": "Пока нет данных — синхронизируйте сессии.", "sidebar.harnesses": "Обнаруженные среды", "sidebar.lastSync": "Обновлено", "sidebar.explore": "Открыть аналитику", "sidebar.sync": "Синхронизировать", "dash.calibrating": "Считаем сводку…", "dash.vibes": "Сводка по {n} направлениям", "dash.requests": "Запросы", "dash.sessions": "Сессии", "dash.loc": "Строк ИИ", "dash.workspaces": "Проекты", "dash.tokenHidden": "Токены и Burndown временно скрыты", "dash.tokenHiddenDesc": "Раздел отключён, пока не сверим цифры с биллингом GitHub.", "dash.apSummary": "Сводка антипаттернов", "dash.viewAllAp": "Все антипаттерны →", "dash.skillFinder": "Поиск навыков", "dash.openSkills": "Полный вид →", "dash.skillDesc": "Ищет повторяющиеся промпты, чтобы оформить их в навыки и не объяснять одно и то же.", "dash.skillAnalyze": "Проанализируйте историю промптов и найдите полезные навыки.", "dash.scanSkills": "Сканировать навыки", "dash.dailyActivity": "Активность по дням", "dash.topWs": "Топ проектов по запросам", "dash.byHarness": "Запросы по среде ИИ", "dash.close": "Закрыть", "score.mergeWizard": "Мастер слияний", "score.shipGoblin": "Гоблин релизов", "score.vibeGremlin": "Гремлин рефакторинга", "score.rubberDuck": "Утконаводитель", "score.stackTrace": "Выживший в стектрейсе" }