microsoft / microsoft/AI-Engineering-Coach

feat(i18n): implement localization using @vscode/l10n

Open
#58 1 comment 0 reactions 1 assignee View on GitHub

@aymenfurter is already working on this.

Since Jun 7, 2026.

Dominant language
TypeScript
Stars
4.2k
Forks
585
Avg merge
22h 5m
Merged PRs (30d)
16

Description

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": "Выживший в стектрейсе"
}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.