- новое поле [general].language (ru|en, дефолт en) — единый источник языка локализованного title детектора и локали запросов к метабазам; original_title всегда на языке оригинала - локаль TMDB (поиск + credits) выводится из него, [metadata.tmdb].language убран - промпт LLM явно задаёт язык title с fallback на оригинал
29 lines
3.2 KiB
Markdown
29 lines
3.2 KiB
Markdown
## 1. Конфиг
|
||
|
||
- [x] 1.1 Добавить поле `Language string` в `[general]`-секцию `internal/config` (рядом с `Timezone`), парсинг из TOML
|
||
- [x] 1.2 `Default()` сеет `Language = "en"`; `validate()` остаётся чистым (не мутирует Config), только отвергает значение вне {`ru`,`en`} по образцу `llm.type` — сообщение `unsupported language %q (supported: ru, en)`
|
||
- [x] 1.3 Нормализацию «пусто → `en`» и выдачу абстрактного кода вынести в аксессор `Config` по образцу `DisplayLocation()` (не в `validate()`)
|
||
- [x] 1.4 Удалить поле `Language` из `MetadataProvider`/TMDB-секции и его дефолт `ru-RU` в `Default()`
|
||
- [x] 1.5 Обновить `config.example.toml`: добавить `[general].language` с комментарием, убрать `[metadata.tmdb].language`
|
||
- [x] 1.6 Обновить `docs/conventions/config.md`, если там упомянута локаль TMDB
|
||
- [x] 1.7 Тесты config: дефолт `en` (пустой конфиг → `en`); приём `ru`/`en`; **отказ старта на значении вне ru/en** (напр. `de` → ошибка конфига)
|
||
|
||
## 2. Локаль TMDB из глобального языка
|
||
|
||
- [x] 2.1 `TMDBConfig` принимает абстрактный `ru`/`en`; диалект `ru`→`ru-RU`, `en`→`en-US` выводит сам `tmdb.go` тотальным `switch` с default-веткой `en-US`
|
||
- [x] 2.2 Удалить остаточный `tmdbDefaultLanguage = "ru-RU"` и его fallback в `NewTMDB` (скрытый второй дефолт); поправить комментарии, ссылающиеся на дефолт `ru-RU`
|
||
- [x] 2.3 Прокинуть абстрактный `language` из конфига в конструктор TMDB-клиента (`cmd/jellybit/serve.go`)
|
||
- [x] 2.4 Передавать выведенную локаль в запрос credits (`Director`), не только в поиск
|
||
- [x] 2.5 Тесты TMDB: `en`→`en-US` и `ru`→`ru-RU` в параметрах `Search` и `Director`; пустой/непокрытый вход → `en-US` (default-ветка)
|
||
|
||
## 3. Язык title в промпте LLM
|
||
|
||
- [x] 3.1 Прокинуть абстрактный `language` из конфига в `Recognizer` (поле `recognize.Config`, дефолт в `New`) и в сборку промпта (`systemPrompt` const → builder-функция с параметром языка)
|
||
- [x] 3.2 Директива в промпте: `title` на выбранном языке, при отсутствии перевода — оригинал (не выдумывать); `original_title` не трогать
|
||
- [x] 3.3 Тесты: промпт содержит корректную языковую директиву при `en` и при `ru`; при незаданном языке — английскую (дефолт)
|
||
|
||
## 4. Верификация
|
||
|
||
- [x] 4.1 `task gate` зелёный (build/vet/lint/test/race/покрытие/секреты)
|
||
- [x] 4.2 `openspec validate content-language-switch --strict` проходит
|