backlog: добавлена задача про локаль названий TVDB

- [general].language доезжает только до TMDB и промпта LLM: клиент TVDB читает
  primary name и отдаёт название на языке оригинала
- в охвате также OriginalTitle, который TVDB не заполняет вовсе
This commit is contained in:
av
2026-08-06 12:49:45 +03:00
parent a4f5faae47
commit 905a1ee4d3
2 changed files with 53 additions and 0 deletions
+1
View File
@@ -34,6 +34,7 @@
- [Современный Web-UI как PWA](items/web-ui-pwa.md) — текущий server-rendered UI функционален — PWA (устанавливаемое, удобное с телефона) это улучшение большого объёма, не блокер
- [Полный редактор маппинга «файл → серия» и ручной режим ревью](items/review-mapping-editor.md) — правка S·E, «нумеровать подряд» и ручной режим при полном провале LLM были запланированы объёмом Ф5 и не заведены задачей — в ревью сегодня можно только подсказать текстом
- [Крайние случаи именования: многофайловый фильм, редакции, двойная серия](items/naming-edge-cases.md) — стэкинг частей (part1/cd1), редакции [edition-…] и двойная серия SxxEyy-Eyy описаны нарративом, но в file-layout не заказаны — раскладка таких раздач не определена
- [Локаль TVDB: перевод названия и оригинальное название](items/tvdb-title-locale.md) — [general].language правит только TMDB и промпт LLM — TVDB отдаёт primary name, и при language=ru в карточку ревью и имя папки попадает 哪吒之魔童降世 вместо «Нэчжа»
## Инфраструктура
- [Агенты-ревьюверы качества (наименования, архитектура, конвенции, стиль)](items/quality-review-agents.md) — конвейер ревью переехал в плагин `av-dev-pipeline`; осталась калибровка проходов на этом проекте и ревьювер наименований (ждёт словарь единого языка)
+52
View File
@@ -0,0 +1,52 @@
# Локаль TVDB: перевод названия и оригинальное название
- **Секция:** Ядро продукта
- **Зачем:** [general].language правит только TMDB и промпт LLM — TVDB отдаёт primary name, и при language=ru в карточку ревью и имя папки попадает 哪吒之魔童降世 вместо «Нэчжа»
- **Теги:** goal:recognition-accuracy
Кандидат от TVDB начинает приходить с названием на языке `[general].language`
и с отдельно заполненным оригинальным названием — как это уже делает TMDB.
Сегодня глобальная настройка до клиента TVDB не доезжает вовсе:
`TVDBConfig` (`internal/metadata/tvdb.go`) поля языка не имеет, `serve.go`
собирает провайдер без него, `Search` шлёт только `query`/`type`/`year`, а из
ответа разбирает единственное поле `name` — это primary name записи, то есть
название на языке оригинала. Блок переводов не читается, `OriginalTitle` TVDB
не заполняет вовсе, хотя это ось сравнения при матче. Наблюдаемый случай —
[movie 131155](https://www.thetvdb.com/movies/131155-): primary name
`哪吒之魔童降世`, русский перевод у записи есть («Нэчжа»), но до нас не доходит.
Что сделать:
- прокинуть локаль в `TVDBConfig` из `cfg.ContentLanguage()`, диалект вывести
внутри `tvdb.go` — знание диалекта принадлежит тому, кто на нём говорит
([ADR решения 2 в архиве](../../../openspec/changes/archive/2026-07-24-content-language-switch/design.md));
- разобрать переводы в выдаче поиска (точные имена полей — `name_translated` и
блок `translations`; форму сверить с живым API через `TVDB_API_KEY=… go test
./internal/metadata/ -run Integration`, наугад не писать);
- фолбэк на primary name, когда перевода на нужный язык нет, — молчаливой
пустоты в `Title` быть не должно;
- заполнить `OriginalTitle` primary name'ом;
- заказать поведение спекой: требование «Локаль запроса к TMDB»
([metadata-match](../../../openspec/specs/metadata-match/spec.md)) написано
только под TMDB — либо обобщается на провайдеров, либо получает соседа.
## Критерии приёмки
- Запрос поиска TVDB содержит параметр языка, выведенный из `[general].language`
(оракул: тест на `httptest`-сервере в `tvdb_test.go` — проверяет строку
запроса при `language = ru` и при незаданном, как это сделано для TMDB).
- При наличии перевода `Candidate.Title` приходит на языке настройки, при
отсутствии — равен primary name (оракул: два случая в одном табличном тесте на
фикстуре ответа).
- `Candidate.OriginalTitle` у TVDB непуст и равен primary name (оракул: тот же
тест; плюс интеграционный прогон за `TVDB_API_KEY` печатает оба поля).
- Дельта-спека `metadata-match` заказывает локаль TVDB и фолбэк на оригинал
(оракул: `openspec validate --strict`).
## Рамки
Матч и гейт авто-раскладки не трогаются — локализованное название косметическое,
сравнение идёт по оригинальному; менять из-за него поведение выборки нельзя.
Живой API дёргается только вручную под env-гейтом, лимиты ключа беречь. TVMaze
вне охвата — переводов не отдаёт.