- новое поле [general].language (ru|en, дефолт en) — единый источник языка локализованного title детектора и локали запросов к метабазам; original_title всегда на языке оригинала - локаль TMDB (поиск + credits) выводится из него, [metadata.tmdb].language убран - промпт LLM явно задаёт язык title с fallback на оригинал
4.5 KiB
4.5 KiB
Why
Приложение и медиатека — на русском, но распознавание и метабазы часто отдают
title и режиссёра на английском (или, наоборот, на русском там, где хочется
латиницу). Сейчас язык локализованного названия задан неявно и вразнобой: LLM
сам решает, на каком языке вернуть title, а TMDB жёстко умолчанием ru-RU.
Нужен один явный переключатель языка вывода, единый для детектора и метабаз, с
предсказуемым дефолтом.
What Changes
- Вводится единый конфиг
[general].languageсо значениямиru|en, по умолчаниюen(рядом с[general].timezone— тот же класс presentation-настройки отображения). Он задаёт язык локализованных полей вывода —titleи режиссёра.original_titleон не затрагивает: оно всегда остаётся на языке оригинала картины. - recognition: промпт LLM явно требует возвращать
titleна выбранном языке (локализованное название с fallback на оригинал, если перевода нет). Контрактoriginal_titleне меняется. - metadata-match: локаль запросов к TMDB (
language) выводится из глобальногоlanguage(ru→ru-RU,en→en-US), а не задаётся отдельно. В запрос credits (режиссёр) тоже передаётся эта локаль — best-effort: имена людей провайдеры локализуют не всегда, где перевода нет, остаётся оригинал. - BREAKING (конфиг): поле
[metadata.tmdb].languageудаляется — теперь это единственный способ задать язык, второго не остаётся. Дефолт локали TMDB меняется сru-RUнаen-US(следствие общего дефолтаen).
Capabilities
New Capabilities
(нет — новых доменов не вводим)
Modified Capabilities
recognition: требование к промпту LLM —titleвозвращается на языке, заданном глобальнымlanguage(fallback на оригинал при отсутствии перевода); контрактoriginal_titleне меняется.metadata-match: локаль запроса к TMDB выводится из глобальногоlanguage(вместо отдельного[metadata.tmdb].language), та же локаль передаётся в запрос режиссёра (best-effort).
Impact
- Конфиг: новое поле
[general].language(валидацияru|en, дефолтen); удаление[metadata.tmdb].language; обновлениеconfig.example.tomlиdocs/conventions/config.md. - Медиатека на диске: имя папки Jellyfin строится из локализованного
title(recognize.goподменяетplan.Titleканоническим именем матча), поэтому дефолтenдаёт английские имена папок. Это косметика: Jellyfin идентифицирует контент по id-тегу метабазы (TVDB/IMDb в имени папки), а не по языку названия, поэтому распознавание медиатеки не ломается. - Код:
internal/config(парсинг/валидация/дефолт нового поля, удаление старого),internal/recognize/prompt.go(языкtitleв промпте),internal/metadata/tmdb.go(локаль из глобального, передача в credits), пробросlanguageиз конфига в recognizer и клиента TMDB. - Поведение: дефолтный язык
title/режиссёра меняется на английский; существующие деплои, полагавшиеся наru-RU, должны выставитьlanguage = "ru".