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