Files
jellybit/openspec/changes/archive/2026-07-24-content-language-switch/tasks.md
T
av a2d8140e22 recognition: глобальный переключатель языка вывода [general].language
- новое поле [general].language (ru|en, дефолт en) — единый источник языка
  локализованного title детектора и локали запросов к метабазам; original_title
  всегда на языке оригинала
- локаль TMDB (поиск + credits) выводится из него, [metadata.tmdb].language убран
- промпт LLM явно задаёт язык title с fallback на оригинал
2026-07-24 14:09:04 +03:00

3.2 KiB
Raw Blame History

1. Конфиг

  • 1.1 Добавить поле Language string в [general]-секцию internal/config (рядом с Timezone), парсинг из TOML
  • 1.2 Default() сеет Language = "en"; validate() остаётся чистым (не мутирует Config), только отвергает значение вне {ru,en} по образцу llm.type — сообщение unsupported language %q (supported: ru, en)
  • 1.3 Нормализацию «пусто → en» и выдачу абстрактного кода вынести в аксессор Config по образцу DisplayLocation() (не в validate())
  • 1.4 Удалить поле Language из MetadataProvider/TMDB-секции и его дефолт ru-RU в Default()
  • 1.5 Обновить config.example.toml: добавить [general].language с комментарием, убрать [metadata.tmdb].language
  • 1.6 Обновить docs/conventions/config.md, если там упомянута локаль TMDB
  • 1.7 Тесты config: дефолт en (пустой конфиг → en); приём ru/en; отказ старта на значении вне ru/en (напр. de → ошибка конфига)

2. Локаль TMDB из глобального языка

  • 2.1 TMDBConfig принимает абстрактный ru/en; диалект ruru-RU, enen-US выводит сам tmdb.go тотальным switch с default-веткой en-US
  • 2.2 Удалить остаточный tmdbDefaultLanguage = "ru-RU" и его fallback в NewTMDB (скрытый второй дефолт); поправить комментарии, ссылающиеся на дефолт ru-RU
  • 2.3 Прокинуть абстрактный language из конфига в конструктор TMDB-клиента (cmd/jellybit/serve.go)
  • 2.4 Передавать выведенную локаль в запрос credits (Director), не только в поиск
  • 2.5 Тесты TMDB: enen-US и ruru-RU в параметрах Search и Director; пустой/непокрытый вход → en-US (default-ветка)

3. Язык title в промпте LLM

  • 3.1 Прокинуть абстрактный language из конфига в Recognizer (поле recognize.Config, дефолт в New) и в сборку промпта (systemPrompt const → builder-функция с параметром языка)
  • 3.2 Директива в промпте: title на выбранном языке, при отсутствии перевода — оригинал (не выдумывать); original_title не трогать
  • 3.3 Тесты: промпт содержит корректную языковую директиву при en и при ru; при незаданном языке — английскую (дефолт)

4. Верификация

  • 4.1 task gate зелёный (build/vet/lint/test/race/покрытие/секреты)
  • 4.2 openspec validate content-language-switch --strict проходит