From 848deb1c248d08316e09f9cc3f10f89294fc6e7f Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Sun, 26 Jul 2026 15:22:13 +0200 Subject: [PATCH] fix(ui): Sprachnamen auf Deutsch - "Undetermined" versteht niemand An der echten Akira-Blu-ray gemessen, nachdem die Sprachauswahl live lief: Ton: deu 4x, jpn 2x, und 4x Untertitel: deu 4x, und 8x MakeMKV liefert die Namen englisch ("German", "Japanese") und fuer Spuren ohne Sprach-Kennzeichnung "Undetermined" - das sind typischerweise Audiokommentare. Der Commander liest alles auf Deutsch (AGENTS Grundregel 4), und "Undetermined" ist fuer einen Nicht-Entwickler schlicht keine Auskunft. Jetzt steht dort "Ohne Sprachangabe", und die zwei Dutzend haeufigsten Codes haben deutsche Namen. Unbekannte Codes behalten MakeMKVs Namen - geraten wird nichts. Co-Authored-By: Claude Opus 5 --- docker/ui/src/components/RipTargetModal.tsx | 4 +-- docker/ui/src/lib/encoder.ts | 40 +++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/docker/ui/src/components/RipTargetModal.tsx b/docker/ui/src/components/RipTargetModal.tsx index ef3b413..0aca650 100644 --- a/docker/ui/src/components/RipTargetModal.tsx +++ b/docker/ui/src/components/RipTargetModal.tsx @@ -4,7 +4,7 @@ import { api } from '../lib/api' import { Modal } from './ui/Modal' import { Button } from './ui/Button' import { Input, Select } from './ui/Input' -import { automatikWarnung, externWarnung } from '../lib/encoder' +import { automatikWarnung, externWarnung, sprachName } from '../lib/encoder' interface TargetConfig { id: string @@ -524,7 +524,7 @@ export default function RipTargetModal({ isOpen, initialType, discTitle, deviceI : 'bg-slate-100 dark:bg-slate-900 border-slate-200 dark:border-slate-700 text-slate-600 dark:text-slate-300 hover:border-slate-300 dark:hover:border-slate-600' }`} > - {s.sprache} + {sprachName(s.lang, s.sprache)} ({s.lang}) {s.spuren > 1 && · {s.spuren}×} diff --git a/docker/ui/src/lib/encoder.ts b/docker/ui/src/lib/encoder.ts index ee59a52..28e3ea2 100644 --- a/docker/ui/src/lib/encoder.ts +++ b/docker/ui/src/lib/encoder.ts @@ -33,6 +33,46 @@ interface WorkerFuerBewertung { info?: { cpu_simd?: string } } +// --- Sprachnamen für die Auswahl vor dem Rip --------------------------------- +// +// MakeMKV liefert die Namen auf ENGLISCH („German", „Japanese") und für Spuren +// ohne Sprach-Kennzeichnung „Undetermined". Beides an der Akira-Blu-ray gemessen +// (26.07.2026): Ton deu 4×, jpn 2×, und 4× — die „und"-Spuren sind typischerweise +// Audiokommentare, die kein Sprachfeld tragen. +// +// „Undetermined" versteht ein Nicht-Entwickler nicht, und der Commander liest +// alles auf Deutsch (AGENTS Grundregel 4). Unbekannte Codes behalten MakeMKVs +// Namen — geraten wird nichts. +const SPRACHNAMEN: Record = { + und: 'Ohne Sprachangabe', + deu: 'Deutsch', ger: 'Deutsch', + eng: 'Englisch', + jpn: 'Japanisch', + fra: 'Französisch', fre: 'Französisch', + spa: 'Spanisch', + ita: 'Italienisch', + nld: 'Niederländisch', dut: 'Niederländisch', + rus: 'Russisch', + kor: 'Koreanisch', + zho: 'Chinesisch', chi: 'Chinesisch', + pol: 'Polnisch', + tur: 'Türkisch', + ces: 'Tschechisch', cze: 'Tschechisch', + por: 'Portugiesisch', + swe: 'Schwedisch', + dan: 'Dänisch', + nor: 'Norwegisch', + fin: 'Finnisch', + hun: 'Ungarisch', + ara: 'Arabisch', + mul: 'Mehrsprachig', +} + +/** Sprachname auf Deutsch — sonst der Name, den MakeMKV geliefert hat. */ +export function sprachName(lang: string, makemkvName?: string): string { + return SPRACHNAMEN[(lang || '').toLowerCase()] || makemkvName || lang || '?' +} + // --- Erreicht ein EXTERNER Worker die Pfade? --------------------------------- // // Befund 26.07.2026, live am Job 95afdc89: Das Routing an den Windows-PC des