fix(android): expose DV conversion setting

This commit is contained in:
edde746
2026-05-18 16:30:14 +02:00
parent 5a68711f7b
commit a679bae354
36 changed files with 397 additions and 63 deletions
@@ -180,6 +180,7 @@ class ExoPlayerPlugin :
val bufferSizeBytes = call.argument<Int>("bufferSizeBytes")
val tunnelingEnabled = call.argument<Boolean>("tunnelingEnabled") ?: true
val dvConversionMode = call.argument<String>("dvConversionMode") ?: "auto"
configuredBufferSizeBytes = bufferSizeBytes
currentActivity.runOnUiThread {
@@ -201,6 +202,9 @@ class ExoPlayerPlugin :
bufferSizeBytes = bufferSizeBytes,
tunnelingEnabled = tunnelingEnabled
) ?: false
if (success && playerCore?.setDebugDvConversionMode(dvConversionMode) != true) {
Log.w(TAG, "Invalid DV conversion mode during initialize: $dvConversionMode")
}
// Start hidden
playerCore?.setVisible(false)
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Forsinkelse ved skærmskift",
"tunneledPlayback": "Tunneleret afspilning",
"tunneledPlaybackDescription": "Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.",
"dvConversionMode": "Dolby Vision-konvertering",
"dvConversionModeDescription": "Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.",
"dvConversionAuto": "Auto",
"dvConversionNative": "Native / deaktiveret",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Spørg om profil ved åbning",
"requireProfileSelectionOnOpenDescription": "Vis profilvalg hver gang appen åbnes",
"forceTvMode": "Gennemtving TV-tilstand",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Verzögerung beim Displaywechsel",
"tunneledPlayback": "Tunnelwiedergabe",
"tunneledPlaybackDescription": "Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.",
"dvConversionMode": "Dolby-Vision-Konvertierung",
"dvConversionModeDescription": "Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.",
"dvConversionAuto": "Automatisch",
"dvConversionNative": "Nativ / deaktiviert",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Profil beim Öffnen abfragen",
"requireProfileSelectionOnOpenDescription": "Profilauswahl bei jedem Öffnen der App anzeigen",
"forceTvMode": "TV-Modus erzwingen",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Display Switch Delay",
"tunneledPlayback": "Tunneled Playback",
"tunneledPlaybackDescription": "Use video tunneling. Disable if HDR playback shows black video.",
"dvConversionMode": "Dolby Vision Conversion",
"dvConversionModeDescription": "Choose how ExoPlayer handles Dolby Vision Profile 7 files.",
"dvConversionAuto": "Auto",
"dvConversionNative": "Native / Disabled",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Ask for profile on app open",
"requireProfileSelectionOnOpenDescription": "Show profile selection every time the app is opened",
"forceTvMode": "Force TV mode",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Retraso de cambio de pantalla",
"tunneledPlayback": "Reproducción tunelizada",
"tunneledPlaybackDescription": "Usar tunelización de video. Desactívala si HDR muestra video negro.",
"dvConversionMode": "Conversión de Dolby Vision",
"dvConversionModeDescription": "Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.",
"dvConversionAuto": "Automático",
"dvConversionNative": "Nativo / desactivado",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Pedir perfil al abrir la app",
"requireProfileSelectionOnOpenDescription": "Mostrar selección de perfil cada vez que se abre la aplicación",
"forceTvMode": "Forzar modo TV",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Délai de changement d'affichage",
"tunneledPlayback": "Lecture tunnelée",
"tunneledPlaybackDescription": "Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.",
"dvConversionMode": "Conversion Dolby Vision",
"dvConversionModeDescription": "Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.",
"dvConversionAuto": "Auto",
"dvConversionNative": "Natif / désactivé",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Demander le profil à l'ouverture",
"requireProfileSelectionOnOpenDescription": "Afficher la sélection de profil à chaque ouverture de l'application",
"forceTvMode": "Forcer le mode TV",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Ritardo cambio display",
"tunneledPlayback": "Riproduzione tunnelizzata",
"tunneledPlaybackDescription": "Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.",
"dvConversionMode": "Conversione Dolby Vision",
"dvConversionModeDescription": "Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.",
"dvConversionAuto": "Auto",
"dvConversionNative": "Nativo / disattivato",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Chiedi profilo all'apertura",
"requireProfileSelectionOnOpenDescription": "Mostra la selezione del profilo ogni volta che l'app viene aperta",
"forceTvMode": "Forza modalità TV",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "ディスプレイ切り替え遅延",
"tunneledPlayback": "トンネル再生",
"tunneledPlaybackDescription": "動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。",
"dvConversionMode": "Dolby Vision 変換",
"dvConversionModeDescription": "ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。",
"dvConversionAuto": "自動",
"dvConversionNative": "ネイティブ / 無効",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "アプリ起動時にプロフィールを確認",
"requireProfileSelectionOnOpenDescription": "アプリを開くたびにプロフィール選択を表示",
"forceTvMode": "TVモードを強制",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "디스플레이 전환 지연",
"tunneledPlayback": "터널 재생",
"tunneledPlaybackDescription": "비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.",
"dvConversionMode": "Dolby Vision 변환",
"dvConversionModeDescription": "ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.",
"dvConversionAuto": "자동",
"dvConversionNative": "네이티브 / 비활성화",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "앱 실행 시 프로필 선택",
"requireProfileSelectionOnOpenDescription": "앱을 열 때마다 프로필 선택 화면을 표시합니다",
"forceTvMode": "TV 모드 강제 사용",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Forsinkelse ved skjermbytte",
"tunneledPlayback": "Tunnelert avspilling",
"tunneledPlaybackDescription": "Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.",
"dvConversionMode": "Dolby Vision-konvertering",
"dvConversionModeDescription": "Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.",
"dvConversionAuto": "Auto",
"dvConversionNative": "Innebygd / deaktivert",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Spør om profil ved appåpning",
"requireProfileSelectionOnOpenDescription": "Vis profilvalg hver gang appen åpnes",
"forceTvMode": "Tving TV-modus",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Vertraging bij schermwisseling",
"tunneledPlayback": "Getunnelde weergave",
"tunneledPlaybackDescription": "Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.",
"dvConversionMode": "Dolby Vision-conversie",
"dvConversionModeDescription": "Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.",
"dvConversionAuto": "Auto",
"dvConversionNative": "Native / uitgeschakeld",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Vraag om profiel bij openen",
"requireProfileSelectionOnOpenDescription": "Toon profielselectie telkens wanneer de app wordt geopend",
"forceTvMode": "TV-modus forceren",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Opóźnienie przełączania ekranu",
"tunneledPlayback": "Tunelowane odtwarzanie",
"tunneledPlaybackDescription": "Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.",
"dvConversionMode": "Konwersja Dolby Vision",
"dvConversionModeDescription": "Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.",
"dvConversionAuto": "Automatycznie",
"dvConversionNative": "Natywnie / wyłączone",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Pytaj o profil przy otwarciu aplikacji",
"requireProfileSelectionOnOpenDescription": "Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana",
"forceTvMode": "Wymuś tryb TV",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Atraso na Troca de Tela",
"tunneledPlayback": "Reprodução Tunelizada",
"tunneledPlaybackDescription": "Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.",
"dvConversionMode": "Conversão Dolby Vision",
"dvConversionModeDescription": "Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.",
"dvConversionAuto": "Automático",
"dvConversionNative": "Nativo / desativado",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Pedir perfil ao abrir o app",
"requireProfileSelectionOnOpenDescription": "Mostrar seleção de perfil toda vez que o app for aberto",
"forceTvMode": "Forçar modo TV",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Задержка переключения дисплея",
"tunneledPlayback": "Туннельное воспроизведение",
"tunneledPlaybackDescription": "Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.",
"dvConversionMode": "Преобразование Dolby Vision",
"dvConversionModeDescription": "Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.",
"dvConversionAuto": "Авто",
"dvConversionNative": "Нативно / отключено",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Запрашивать профиль при запуске",
"requireProfileSelectionOnOpenDescription": "Показывать выбор профиля при каждом открытии приложения",
"forceTvMode": "Принудительный режим ТВ",
+2 -2
View File
@@ -4,9 +4,9 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 15
/// Strings: 17490 (1166 per locale)
/// Strings: 17580 (1172 per locale)
///
/// Built on 2026-05-16 at 21:43 UTC
/// Built on 2026-05-18 at 14:26 UTC
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Forsinkelse ved skærmskift';
@override String get tunneledPlayback => 'Tunneleret afspilning';
@override String get tunneledPlaybackDescription => 'Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.';
@override String get dvConversionMode => 'Dolby Vision-konvertering';
@override String get dvConversionModeDescription => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.';
@override String get dvConversionAuto => 'Auto';
@override String get dvConversionNative => 'Native / deaktiveret';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Spørg om profil ved åbning';
@override String get requireProfileSelectionOnOpenDescription => 'Vis profilvalg hver gang appen åbnes';
@override String get forceTvMode => 'Gennemtving TV-tilstand';
@@ -2033,6 +2039,12 @@ extension on TranslationsDa {
'settings.displaySwitchDelay' => 'Forsinkelse ved skærmskift',
'settings.tunneledPlayback' => 'Tunneleret afspilning',
'settings.tunneledPlaybackDescription' => 'Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.',
'settings.dvConversionMode' => 'Dolby Vision-konvertering',
'settings.dvConversionModeDescription' => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.',
'settings.dvConversionAuto' => 'Auto',
'settings.dvConversionNative' => 'Native / deaktiveret',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Spørg om profil ved åbning',
'settings.requireProfileSelectionOnOpenDescription' => 'Vis profilvalg hver gang appen åbnes',
'settings.forceTvMode' => 'Gennemtving TV-tilstand',
@@ -2301,14 +2313,14 @@ extension on TranslationsDa {
'profiles.signOut' => 'Log ud',
'profiles.signOutPlexTitle' => 'Log ud af Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Fjern ${displayName} og alle Plex Home-brugere? Log ind igen når som helst.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Logget ud af Plex.',
'profiles.signOutFailed' => 'Log ud mislykkedes.',
'profiles.sectionTitle' => 'Profiler',
'profiles.summarySingle' => 'Tilføj profiler for at blande administrerede brugere og lokale identiteter',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profiler · aktiv: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} profiler',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Fjern forbindelse?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Fjern ${displayName}s adgang til ${connectionLabel}. Andre profiler beholder den.',
'profiles.deleteProfileTitle' => 'Slet profil?',
@@ -2815,14 +2827,14 @@ extension on TranslationsDa {
'metadataEdit.summary' => 'Resumé',
'metadataEdit.poster' => 'Plakat',
'metadataEdit.background' => 'Baggrund',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Kvadratisk billede',
'metadataEdit.selectPoster' => 'Vælg plakat',
'metadataEdit.selectBackground' => 'Vælg baggrund',
'metadataEdit.selectLogo' => 'Vælg logo',
'metadataEdit.selectSquareArt' => 'Vælg kvadratisk billede',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Fra URL',
'metadataEdit.uploadFile' => 'Upload fil',
'metadataEdit.enterImageUrl' => 'Indtast billed-URL',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Verzögerung beim Displaywechsel';
@override String get tunneledPlayback => 'Tunnelwiedergabe';
@override String get tunneledPlaybackDescription => 'Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.';
@override String get dvConversionMode => 'Dolby-Vision-Konvertierung';
@override String get dvConversionModeDescription => 'Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.';
@override String get dvConversionAuto => 'Automatisch';
@override String get dvConversionNative => 'Nativ / deaktiviert';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Profil beim Öffnen abfragen';
@override String get requireProfileSelectionOnOpenDescription => 'Profilauswahl bei jedem Öffnen der App anzeigen';
@override String get forceTvMode => 'TV-Modus erzwingen';
@@ -2033,6 +2039,12 @@ extension on TranslationsDe {
'settings.displaySwitchDelay' => 'Verzögerung beim Displaywechsel',
'settings.tunneledPlayback' => 'Tunnelwiedergabe',
'settings.tunneledPlaybackDescription' => 'Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.',
'settings.dvConversionMode' => 'Dolby-Vision-Konvertierung',
'settings.dvConversionModeDescription' => 'Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.',
'settings.dvConversionAuto' => 'Automatisch',
'settings.dvConversionNative' => 'Nativ / deaktiviert',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Profil beim Öffnen abfragen',
'settings.requireProfileSelectionOnOpenDescription' => 'Profilauswahl bei jedem Öffnen der App anzeigen',
'settings.forceTvMode' => 'TV-Modus erzwingen',
@@ -2301,14 +2313,14 @@ extension on TranslationsDe {
'profiles.signOut' => 'Abmelden',
'profiles.signOutPlexTitle' => 'Von Plex abmelden?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => '${displayName} und alle Plex Home-Benutzer entfernen? Du kannst dich jederzeit wieder anmelden.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Von Plex abgemeldet.',
'profiles.signOutFailed' => 'Abmeldung fehlgeschlagen.',
'profiles.sectionTitle' => 'Profile',
'profiles.summarySingle' => 'Profile hinzufügen, um verwaltete Benutzer und lokale Identitäten zu mischen',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} Profile · aktiv: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} Profile',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Verbindung entfernen?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Zugriff von ${displayName} auf ${connectionLabel} entfernen. Andere Profile behalten ihn.',
'profiles.deleteProfileTitle' => 'Profil löschen?',
@@ -2815,14 +2827,14 @@ extension on TranslationsDe {
'metadataEdit.summary' => 'Zusammenfassung',
'metadataEdit.poster' => 'Poster',
'metadataEdit.background' => 'Hintergrund',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Quadratisches Bild',
'metadataEdit.selectPoster' => 'Poster auswählen',
'metadataEdit.selectBackground' => 'Hintergrund auswählen',
'metadataEdit.selectLogo' => 'Logo auswählen',
'metadataEdit.selectSquareArt' => 'Quadratisches Bild auswählen',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Von URL',
'metadataEdit.uploadFile' => 'Datei hochladen',
'metadataEdit.enterImageUrl' => 'Bild-URL eingeben',
+28 -4
View File
@@ -854,6 +854,24 @@ class TranslationsSettingsEn {
/// en: 'Use video tunneling. Disable if HDR playback shows black video.'
String get tunneledPlaybackDescription => 'Use video tunneling. Disable if HDR playback shows black video.';
/// en: 'Dolby Vision Conversion'
String get dvConversionMode => 'Dolby Vision Conversion';
/// en: 'Choose how ExoPlayer handles Dolby Vision Profile 7 files.'
String get dvConversionModeDescription => 'Choose how ExoPlayer handles Dolby Vision Profile 7 files.';
/// en: 'Auto'
String get dvConversionAuto => 'Auto';
/// en: 'Native / Disabled'
String get dvConversionNative => 'Native / Disabled';
/// en: 'P7 → P8.1'
String get dvConversionDv81 => 'P7 → P8.1';
/// en: 'P7 → HEVC'
String get dvConversionHevcStrip => 'P7 → HEVC';
/// en: 'Ask for profile on app open'
String get requireProfileSelectionOnOpen => 'Ask for profile on app open';
@@ -4371,6 +4389,12 @@ extension on Translations {
'settings.displaySwitchDelay' => 'Display Switch Delay',
'settings.tunneledPlayback' => 'Tunneled Playback',
'settings.tunneledPlaybackDescription' => 'Use video tunneling. Disable if HDR playback shows black video.',
'settings.dvConversionMode' => 'Dolby Vision Conversion',
'settings.dvConversionModeDescription' => 'Choose how ExoPlayer handles Dolby Vision Profile 7 files.',
'settings.dvConversionAuto' => 'Auto',
'settings.dvConversionNative' => 'Native / Disabled',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Ask for profile on app open',
'settings.requireProfileSelectionOnOpenDescription' => 'Show profile selection every time the app is opened',
'settings.forceTvMode' => 'Force TV mode',
@@ -4639,14 +4663,14 @@ extension on Translations {
'profiles.signOut' => 'Sign out',
'profiles.signOutPlexTitle' => 'Sign out of Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Remove ${displayName} and all Plex Home users? Sign back in anytime.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Signed out of Plex.',
'profiles.signOutFailed' => 'Sign out failed.',
'profiles.sectionTitle' => 'Profiles',
'profiles.summarySingle' => 'Add profiles to mix managed users and local identities',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profiles · active: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} profiles',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Remove connection?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Remove ${displayName}\'s access to ${connectionLabel}. Other profiles keep it.',
'profiles.deleteProfileTitle' => 'Delete profile?',
@@ -5153,14 +5177,14 @@ extension on Translations {
'metadataEdit.summary' => 'Summary',
'metadataEdit.poster' => 'Poster',
'metadataEdit.background' => 'Background',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Square Art',
'metadataEdit.selectPoster' => 'Select Poster',
'metadataEdit.selectBackground' => 'Select Background',
'metadataEdit.selectLogo' => 'Select Logo',
'metadataEdit.selectSquareArt' => 'Select Square Art',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'From URL',
'metadataEdit.uploadFile' => 'Upload File',
'metadataEdit.enterImageUrl' => 'Enter image URL',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Retraso de cambio de pantalla';
@override String get tunneledPlayback => 'Reproducción tunelizada';
@override String get tunneledPlaybackDescription => 'Usar tunelización de video. Desactívala si HDR muestra video negro.';
@override String get dvConversionMode => 'Conversión de Dolby Vision';
@override String get dvConversionModeDescription => 'Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.';
@override String get dvConversionAuto => 'Automático';
@override String get dvConversionNative => 'Nativo / desactivado';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Pedir perfil al abrir la app';
@override String get requireProfileSelectionOnOpenDescription => 'Mostrar selección de perfil cada vez que se abre la aplicación';
@override String get forceTvMode => 'Forzar modo TV';
@@ -2033,6 +2039,12 @@ extension on TranslationsEs {
'settings.displaySwitchDelay' => 'Retraso de cambio de pantalla',
'settings.tunneledPlayback' => 'Reproducción tunelizada',
'settings.tunneledPlaybackDescription' => 'Usar tunelización de video. Desactívala si HDR muestra video negro.',
'settings.dvConversionMode' => 'Conversión de Dolby Vision',
'settings.dvConversionModeDescription' => 'Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.',
'settings.dvConversionAuto' => 'Automático',
'settings.dvConversionNative' => 'Nativo / desactivado',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Pedir perfil al abrir la app',
'settings.requireProfileSelectionOnOpenDescription' => 'Mostrar selección de perfil cada vez que se abre la aplicación',
'settings.forceTvMode' => 'Forzar modo TV',
@@ -2301,14 +2313,14 @@ extension on TranslationsEs {
'profiles.signOut' => 'Cerrar sesión',
'profiles.signOutPlexTitle' => '¿Cerrar sesión de Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => '¿Eliminar ${displayName} y todos los usuarios de Plex Home? Puedes iniciar sesión de nuevo cuando quieras.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Sesión de Plex cerrada.',
'profiles.signOutFailed' => 'Error al cerrar sesión.',
'profiles.sectionTitle' => 'Perfiles',
'profiles.summarySingle' => 'Añade perfiles para mezclar usuarios gestionados e identidades locales',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} perfiles · activo: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} perfiles',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => '¿Eliminar conexión?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Eliminar el acceso de ${displayName} a ${connectionLabel}. Los demás perfiles lo conservan.',
'profiles.deleteProfileTitle' => '¿Eliminar perfil?',
@@ -2815,14 +2827,14 @@ extension on TranslationsEs {
'metadataEdit.summary' => 'Resumen',
'metadataEdit.poster' => 'Póster',
'metadataEdit.background' => 'Fondo',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Imagen cuadrada',
'metadataEdit.selectPoster' => 'Seleccionar póster',
'metadataEdit.selectBackground' => 'Seleccionar fondo',
'metadataEdit.selectLogo' => 'Seleccionar logo',
'metadataEdit.selectSquareArt' => 'Seleccionar imagen cuadrada',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Desde URL',
'metadataEdit.uploadFile' => 'Subir archivo',
'metadataEdit.enterImageUrl' => 'Introducir URL de imagen',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Délai de changement d\'affichage';
@override String get tunneledPlayback => 'Lecture tunnelée';
@override String get tunneledPlaybackDescription => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.';
@override String get dvConversionMode => 'Conversion Dolby Vision';
@override String get dvConversionModeDescription => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.';
@override String get dvConversionAuto => 'Auto';
@override String get dvConversionNative => 'Natif / désactivé';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Demander le profil à l\'ouverture';
@override String get requireProfileSelectionOnOpenDescription => 'Afficher la sélection de profil à chaque ouverture de l\'application';
@override String get forceTvMode => 'Forcer le mode TV';
@@ -2033,6 +2039,12 @@ extension on TranslationsFr {
'settings.displaySwitchDelay' => 'Délai de changement d\'affichage',
'settings.tunneledPlayback' => 'Lecture tunnelée',
'settings.tunneledPlaybackDescription' => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.',
'settings.dvConversionMode' => 'Conversion Dolby Vision',
'settings.dvConversionModeDescription' => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.',
'settings.dvConversionAuto' => 'Auto',
'settings.dvConversionNative' => 'Natif / désactivé',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Demander le profil à l\'ouverture',
'settings.requireProfileSelectionOnOpenDescription' => 'Afficher la sélection de profil à chaque ouverture de l\'application',
'settings.forceTvMode' => 'Forcer le mode TV',
@@ -2301,14 +2313,14 @@ extension on TranslationsFr {
'profiles.signOut' => 'Se déconnecter',
'profiles.signOutPlexTitle' => 'Se déconnecter de Plex ?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Supprimer ${displayName} et tous les utilisateurs Plex Home ? Reconnexion possible à tout moment.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Déconnecté de Plex.',
'profiles.signOutFailed' => 'Échec de la déconnexion.',
'profiles.sectionTitle' => 'Profils',
'profiles.summarySingle' => 'Ajoutez des profils pour mélanger utilisateurs gérés et identités locales',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profils · actif : ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} profils',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Retirer la connexion ?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Supprimer l\'accès de ${displayName} à ${connectionLabel}. Les autres profils le conservent.',
'profiles.deleteProfileTitle' => 'Supprimer le profil ?',
@@ -2815,14 +2827,14 @@ extension on TranslationsFr {
'metadataEdit.summary' => 'Résumé',
'metadataEdit.poster' => 'Affiche',
'metadataEdit.background' => 'Arrière-plan',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Image carrée',
'metadataEdit.selectPoster' => 'Sélectionner l\'affiche',
'metadataEdit.selectBackground' => 'Sélectionner l\'arrière-plan',
'metadataEdit.selectLogo' => 'Sélectionner le logo',
'metadataEdit.selectSquareArt' => 'Sélectionner l\'image carrée',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Depuis une URL',
'metadataEdit.uploadFile' => 'Importer un fichier',
'metadataEdit.enterImageUrl' => 'Entrer l\'URL de l\'image',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Ritardo cambio display';
@override String get tunneledPlayback => 'Riproduzione tunnelizzata';
@override String get tunneledPlaybackDescription => 'Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.';
@override String get dvConversionMode => 'Conversione Dolby Vision';
@override String get dvConversionModeDescription => 'Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.';
@override String get dvConversionAuto => 'Auto';
@override String get dvConversionNative => 'Nativo / disattivato';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Chiedi profilo all\'apertura';
@override String get requireProfileSelectionOnOpenDescription => 'Mostra la selezione del profilo ogni volta che l\'app viene aperta';
@override String get forceTvMode => 'Forza modalità TV';
@@ -2033,6 +2039,12 @@ extension on TranslationsIt {
'settings.displaySwitchDelay' => 'Ritardo cambio display',
'settings.tunneledPlayback' => 'Riproduzione tunnelizzata',
'settings.tunneledPlaybackDescription' => 'Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.',
'settings.dvConversionMode' => 'Conversione Dolby Vision',
'settings.dvConversionModeDescription' => 'Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.',
'settings.dvConversionAuto' => 'Auto',
'settings.dvConversionNative' => 'Nativo / disattivato',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Chiedi profilo all\'apertura',
'settings.requireProfileSelectionOnOpenDescription' => 'Mostra la selezione del profilo ogni volta che l\'app viene aperta',
'settings.forceTvMode' => 'Forza modalità TV',
@@ -2301,14 +2313,14 @@ extension on TranslationsIt {
'profiles.signOut' => 'Esci',
'profiles.signOutPlexTitle' => 'Uscire da Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Rimuovere ${displayName} e tutti gli utenti Plex Home? Puoi accedere di nuovo quando vuoi.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Uscito da Plex.',
'profiles.signOutFailed' => 'Uscita non riuscita.',
'profiles.sectionTitle' => 'Profili',
'profiles.summarySingle' => 'Aggiungi profili per combinare utenti gestiti e identità locali',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profili · attivo: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} profili',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Rimuovere la connessione?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Rimuovi l\'accesso di ${displayName} a ${connectionLabel}. Gli altri profili lo mantengono.',
'profiles.deleteProfileTitle' => 'Eliminare il profilo?',
@@ -2815,14 +2827,14 @@ extension on TranslationsIt {
'metadataEdit.summary' => 'Trama',
'metadataEdit.poster' => 'Poster',
'metadataEdit.background' => 'Sfondo',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Immagine quadrata',
'metadataEdit.selectPoster' => 'Seleziona poster',
'metadataEdit.selectBackground' => 'Seleziona sfondo',
'metadataEdit.selectLogo' => 'Seleziona logo',
'metadataEdit.selectSquareArt' => 'Seleziona immagine quadrata',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Da URL',
'metadataEdit.uploadFile' => 'Carica file',
'metadataEdit.enterImageUrl' => 'Inserisci URL immagine',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'ディスプレイ切り替え遅延';
@override String get tunneledPlayback => 'トンネル再生';
@override String get tunneledPlaybackDescription => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。';
@override String get dvConversionMode => 'Dolby Vision 変換';
@override String get dvConversionModeDescription => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。';
@override String get dvConversionAuto => '自動';
@override String get dvConversionNative => 'ネイティブ / 無効';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'アプリ起動時にプロフィールを確認';
@override String get requireProfileSelectionOnOpenDescription => 'アプリを開くたびにプロフィール選択を表示';
@override String get forceTvMode => 'TVモードを強制';
@@ -2033,6 +2039,12 @@ extension on TranslationsJa {
'settings.displaySwitchDelay' => 'ディスプレイ切り替え遅延',
'settings.tunneledPlayback' => 'トンネル再生',
'settings.tunneledPlaybackDescription' => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。',
'settings.dvConversionMode' => 'Dolby Vision 変換',
'settings.dvConversionModeDescription' => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。',
'settings.dvConversionAuto' => '自動',
'settings.dvConversionNative' => 'ネイティブ / 無効',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'アプリ起動時にプロフィールを確認',
'settings.requireProfileSelectionOnOpenDescription' => 'アプリを開くたびにプロフィール選択を表示',
'settings.forceTvMode' => 'TVモードを強制',
@@ -2301,14 +2313,14 @@ extension on TranslationsJa {
'profiles.signOut' => 'サインアウト',
'profiles.signOutPlexTitle' => 'Plex からサインアウトしますか?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => '${displayName}とすべてのPlex Homeユーザーを削除しますか?いつでも再サインインできます。',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Plex からサインアウトしました。',
'profiles.signOutFailed' => 'サインアウトに失敗しました。',
'profiles.sectionTitle' => 'プロファイル',
'profiles.summarySingle' => 'プロファイルを追加して、管理対象ユーザーとローカルIDを混在させます',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count}個のプロファイル · アクティブ: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count}個のプロファイル',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => '接続を削除しますか?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => '${displayName}${connectionLabel}へのアクセスを削除します。他のプロフィールには残ります。',
'profiles.deleteProfileTitle' => 'プロファイルを削除しますか?',
@@ -2815,14 +2827,14 @@ extension on TranslationsJa {
'metadataEdit.summary' => 'あらすじ',
'metadataEdit.poster' => 'ポスター',
'metadataEdit.background' => '背景',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'ロゴ',
'metadataEdit.squareArt' => '正方形アート',
'metadataEdit.selectPoster' => 'ポスターを選択',
'metadataEdit.selectBackground' => '背景を選択',
'metadataEdit.selectLogo' => 'ロゴを選択',
'metadataEdit.selectSquareArt' => '正方形アートを選択',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'URLから',
'metadataEdit.uploadFile' => 'ファイルをアップロード',
'metadataEdit.enterImageUrl' => '画像URLを入力',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn {
@override String get displaySwitchDelay => '디스플레이 전환 지연';
@override String get tunneledPlayback => '터널 재생';
@override String get tunneledPlaybackDescription => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.';
@override String get dvConversionMode => 'Dolby Vision 변환';
@override String get dvConversionModeDescription => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.';
@override String get dvConversionAuto => '자동';
@override String get dvConversionNative => '네이티브 / 비활성화';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => '앱 실행 시 프로필 선택';
@override String get requireProfileSelectionOnOpenDescription => '앱을 열 때마다 프로필 선택 화면을 표시합니다';
@override String get forceTvMode => 'TV 모드 강제 사용';
@@ -2033,6 +2039,12 @@ extension on TranslationsKo {
'settings.displaySwitchDelay' => '디스플레이 전환 지연',
'settings.tunneledPlayback' => '터널 재생',
'settings.tunneledPlaybackDescription' => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.',
'settings.dvConversionMode' => 'Dolby Vision 변환',
'settings.dvConversionModeDescription' => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.',
'settings.dvConversionAuto' => '자동',
'settings.dvConversionNative' => '네이티브 / 비활성화',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => '앱 실행 시 프로필 선택',
'settings.requireProfileSelectionOnOpenDescription' => '앱을 열 때마다 프로필 선택 화면을 표시합니다',
'settings.forceTvMode' => 'TV 모드 강제 사용',
@@ -2301,14 +2313,14 @@ extension on TranslationsKo {
'profiles.signOut' => '로그아웃',
'profiles.signOutPlexTitle' => 'Plex에서 로그아웃하시겠습니까?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => '${displayName} 및 모든 Plex Home 사용자를 제거할까요? 언제든 다시 로그인할 수 있습니다.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Plex에서 로그아웃되었습니다.',
'profiles.signOutFailed' => '로그아웃에 실패했습니다.',
'profiles.sectionTitle' => '프로필',
'profiles.summarySingle' => '관리되는 사용자와 로컬 ID를 혼합하려면 프로필을 추가하세요',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count}개 프로필 · 활성: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count}개 프로필',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => '연결을 제거하시겠습니까?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => '${displayName}${connectionLabel} 접근 권한을 제거합니다. 다른 프로필에는 유지됩니다.',
'profiles.deleteProfileTitle' => '프로필을 삭제하시겠습니까?',
@@ -2815,14 +2827,14 @@ extension on TranslationsKo {
'metadataEdit.summary' => '줄거리',
'metadataEdit.poster' => '포스터',
'metadataEdit.background' => '배경',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => '로고',
'metadataEdit.squareArt' => '정사각형 아트',
'metadataEdit.selectPoster' => '포스터 선택',
'metadataEdit.selectBackground' => '배경 선택',
'metadataEdit.selectLogo' => '로고 선택',
'metadataEdit.selectSquareArt' => '정사각형 아트 선택',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'URL에서',
'metadataEdit.uploadFile' => '파일 업로드',
'metadataEdit.enterImageUrl' => '이미지 URL 입력',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Forsinkelse ved skjermbytte';
@override String get tunneledPlayback => 'Tunnelert avspilling';
@override String get tunneledPlaybackDescription => 'Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.';
@override String get dvConversionMode => 'Dolby Vision-konvertering';
@override String get dvConversionModeDescription => 'Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.';
@override String get dvConversionAuto => 'Auto';
@override String get dvConversionNative => 'Innebygd / deaktivert';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Spør om profil ved appåpning';
@override String get requireProfileSelectionOnOpenDescription => 'Vis profilvalg hver gang appen åpnes';
@override String get forceTvMode => 'Tving TV-modus';
@@ -2033,6 +2039,12 @@ extension on TranslationsNb {
'settings.displaySwitchDelay' => 'Forsinkelse ved skjermbytte',
'settings.tunneledPlayback' => 'Tunnelert avspilling',
'settings.tunneledPlaybackDescription' => 'Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.',
'settings.dvConversionMode' => 'Dolby Vision-konvertering',
'settings.dvConversionModeDescription' => 'Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.',
'settings.dvConversionAuto' => 'Auto',
'settings.dvConversionNative' => 'Innebygd / deaktivert',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Spør om profil ved appåpning',
'settings.requireProfileSelectionOnOpenDescription' => 'Vis profilvalg hver gang appen åpnes',
'settings.forceTvMode' => 'Tving TV-modus',
@@ -2301,14 +2313,14 @@ extension on TranslationsNb {
'profiles.signOut' => 'Logg ut',
'profiles.signOutPlexTitle' => 'Logge ut av Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Fjerne ${displayName} og alle Plex Home-brukere? Du kan logge inn igjen når som helst.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Logget ut av Plex.',
'profiles.signOutFailed' => 'Utlogging mislyktes.',
'profiles.sectionTitle' => 'Profiler',
'profiles.summarySingle' => 'Legg til profiler for å blande administrerte brukere og lokale identiteter',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profiler · aktiv: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} profiler',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Fjerne tilkobling?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Fjern ${displayName}s tilgang til ${connectionLabel}. Andre profiler beholder den.',
'profiles.deleteProfileTitle' => 'Slette profil?',
@@ -2815,14 +2827,14 @@ extension on TranslationsNb {
'metadataEdit.summary' => 'Sammendrag',
'metadataEdit.poster' => 'Plakat',
'metadataEdit.background' => 'Bakgrunn',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Kvadratisk bilde',
'metadataEdit.selectPoster' => 'Velg plakat',
'metadataEdit.selectBackground' => 'Velg bakgrunn',
'metadataEdit.selectLogo' => 'Velg logo',
'metadataEdit.selectSquareArt' => 'Velg kvadratisk bilde',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Fra URL',
'metadataEdit.uploadFile' => 'Last opp fil',
'metadataEdit.enterImageUrl' => 'Skriv inn bilde-URL',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Vertraging bij schermwisseling';
@override String get tunneledPlayback => 'Getunnelde weergave';
@override String get tunneledPlaybackDescription => 'Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.';
@override String get dvConversionMode => 'Dolby Vision-conversie';
@override String get dvConversionModeDescription => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.';
@override String get dvConversionAuto => 'Auto';
@override String get dvConversionNative => 'Native / uitgeschakeld';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Vraag om profiel bij openen';
@override String get requireProfileSelectionOnOpenDescription => 'Toon profielselectie telkens wanneer de app wordt geopend';
@override String get forceTvMode => 'TV-modus forceren';
@@ -2033,6 +2039,12 @@ extension on TranslationsNl {
'settings.displaySwitchDelay' => 'Vertraging bij schermwisseling',
'settings.tunneledPlayback' => 'Getunnelde weergave',
'settings.tunneledPlaybackDescription' => 'Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.',
'settings.dvConversionMode' => 'Dolby Vision-conversie',
'settings.dvConversionModeDescription' => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.',
'settings.dvConversionAuto' => 'Auto',
'settings.dvConversionNative' => 'Native / uitgeschakeld',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Vraag om profiel bij openen',
'settings.requireProfileSelectionOnOpenDescription' => 'Toon profielselectie telkens wanneer de app wordt geopend',
'settings.forceTvMode' => 'TV-modus forceren',
@@ -2301,14 +2313,14 @@ extension on TranslationsNl {
'profiles.signOut' => 'Afmelden',
'profiles.signOutPlexTitle' => 'Afmelden bij Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => '${displayName} en alle Plex Home-gebruikers verwijderen? Je kunt altijd opnieuw inloggen.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Afgemeld bij Plex.',
'profiles.signOutFailed' => 'Afmelden mislukt.',
'profiles.sectionTitle' => 'Profielen',
'profiles.summarySingle' => 'Voeg profielen toe om beheerde gebruikers en lokale identiteiten te combineren',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profielen · actief: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} profielen',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Verbinding verwijderen?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Verwijder ${displayName}s toegang tot ${connectionLabel}. Andere profielen behouden die.',
'profiles.deleteProfileTitle' => 'Profiel verwijderen?',
@@ -2815,14 +2827,14 @@ extension on TranslationsNl {
'metadataEdit.summary' => 'Samenvatting',
'metadataEdit.poster' => 'Poster',
'metadataEdit.background' => 'Achtergrond',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Vierkante afbeelding',
'metadataEdit.selectPoster' => 'Poster selecteren',
'metadataEdit.selectBackground' => 'Achtergrond selecteren',
'metadataEdit.selectLogo' => 'Logo selecteren',
'metadataEdit.selectSquareArt' => 'Vierkante afbeelding selecteren',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Vanaf URL',
'metadataEdit.uploadFile' => 'Bestand uploaden',
'metadataEdit.enterImageUrl' => 'Voer afbeeldings-URL in',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Opóźnienie przełączania ekranu';
@override String get tunneledPlayback => 'Tunelowane odtwarzanie';
@override String get tunneledPlaybackDescription => 'Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.';
@override String get dvConversionMode => 'Konwersja Dolby Vision';
@override String get dvConversionModeDescription => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.';
@override String get dvConversionAuto => 'Automatycznie';
@override String get dvConversionNative => 'Natywnie / wyłączone';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Pytaj o profil przy otwarciu aplikacji';
@override String get requireProfileSelectionOnOpenDescription => 'Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana';
@override String get forceTvMode => 'Wymuś tryb TV';
@@ -2033,6 +2039,12 @@ extension on TranslationsPl {
'settings.displaySwitchDelay' => 'Opóźnienie przełączania ekranu',
'settings.tunneledPlayback' => 'Tunelowane odtwarzanie',
'settings.tunneledPlaybackDescription' => 'Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.',
'settings.dvConversionMode' => 'Konwersja Dolby Vision',
'settings.dvConversionModeDescription' => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.',
'settings.dvConversionAuto' => 'Automatycznie',
'settings.dvConversionNative' => 'Natywnie / wyłączone',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Pytaj o profil przy otwarciu aplikacji',
'settings.requireProfileSelectionOnOpenDescription' => 'Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana',
'settings.forceTvMode' => 'Wymuś tryb TV',
@@ -2301,14 +2313,14 @@ extension on TranslationsPl {
'profiles.signOut' => 'Wyloguj się',
'profiles.signOutPlexTitle' => 'Wylogować się z Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Usunąć ${displayName} i wszystkich użytkowników Plex Home? Możesz zalogować się ponownie w każdej chwili.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Wylogowano z Plex.',
'profiles.signOutFailed' => 'Wylogowanie nie powiodło się.',
'profiles.sectionTitle' => 'Profile',
'profiles.summarySingle' => 'Dodaj profile, aby łączyć zarządzanych użytkowników i tożsamości lokalne',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profili · aktywny: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} profili',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Usunąć połączenie?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Usuń dostęp ${displayName} do ${connectionLabel}. Inne profile go zachowają.',
'profiles.deleteProfileTitle' => 'Usunąć profil?',
@@ -2815,14 +2827,14 @@ extension on TranslationsPl {
'metadataEdit.summary' => 'Opis',
'metadataEdit.poster' => 'Plakat',
'metadataEdit.background' => 'Tło',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Kwadratowy obraz',
'metadataEdit.selectPoster' => 'Wybierz plakat',
'metadataEdit.selectBackground' => 'Wybierz tło',
'metadataEdit.selectLogo' => 'Wybierz logo',
'metadataEdit.selectSquareArt' => 'Wybierz kwadratowy obraz',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Z URL',
'metadataEdit.uploadFile' => 'Prześlij plik',
'metadataEdit.enterImageUrl' => 'Wprowadź URL obrazu',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Atraso na Troca de Tela';
@override String get tunneledPlayback => 'Reprodução Tunelizada';
@override String get tunneledPlaybackDescription => 'Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.';
@override String get dvConversionMode => 'Conversão Dolby Vision';
@override String get dvConversionModeDescription => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.';
@override String get dvConversionAuto => 'Automático';
@override String get dvConversionNative => 'Nativo / desativado';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Pedir perfil ao abrir o app';
@override String get requireProfileSelectionOnOpenDescription => 'Mostrar seleção de perfil toda vez que o app for aberto';
@override String get forceTvMode => 'Forçar modo TV';
@@ -2033,6 +2039,12 @@ extension on TranslationsPt {
'settings.displaySwitchDelay' => 'Atraso na Troca de Tela',
'settings.tunneledPlayback' => 'Reprodução Tunelizada',
'settings.tunneledPlaybackDescription' => 'Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.',
'settings.dvConversionMode' => 'Conversão Dolby Vision',
'settings.dvConversionModeDescription' => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.',
'settings.dvConversionAuto' => 'Automático',
'settings.dvConversionNative' => 'Nativo / desativado',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Pedir perfil ao abrir o app',
'settings.requireProfileSelectionOnOpenDescription' => 'Mostrar seleção de perfil toda vez que o app for aberto',
'settings.forceTvMode' => 'Forçar modo TV',
@@ -2301,14 +2313,14 @@ extension on TranslationsPt {
'profiles.signOut' => 'Sair',
'profiles.signOutPlexTitle' => 'Sair do Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Remover ${displayName} e todos os usuários Plex Home? Você pode entrar novamente quando quiser.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Saiu do Plex.',
'profiles.signOutFailed' => 'Falha ao sair.',
'profiles.sectionTitle' => 'Perfis',
'profiles.summarySingle' => 'Adicione perfis para mesclar usuários gerenciados e identidades locais',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} perfis · ativo: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} perfis',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Remover conexão?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Remover acesso de ${displayName} a ${connectionLabel}. Outros perfis mantêm o acesso.',
'profiles.deleteProfileTitle' => 'Excluir perfil?',
@@ -2815,14 +2827,14 @@ extension on TranslationsPt {
'metadataEdit.summary' => 'Sinopse',
'metadataEdit.poster' => 'Poster',
'metadataEdit.background' => 'Plano de Fundo',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logo',
'metadataEdit.squareArt' => 'Imagem Quadrada',
'metadataEdit.selectPoster' => 'Selecionar Poster',
'metadataEdit.selectBackground' => 'Selecionar Plano de Fundo',
'metadataEdit.selectLogo' => 'Selecionar Logo',
'metadataEdit.selectSquareArt' => 'Selecionar Imagem Quadrada',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Da URL',
'metadataEdit.uploadFile' => 'Enviar Arquivo',
'metadataEdit.enterImageUrl' => 'Insira a URL da imagem',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Задержка переключения дисплея';
@override String get tunneledPlayback => 'Туннельное воспроизведение';
@override String get tunneledPlaybackDescription => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.';
@override String get dvConversionMode => 'Преобразование Dolby Vision';
@override String get dvConversionModeDescription => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.';
@override String get dvConversionAuto => 'Авто';
@override String get dvConversionNative => 'Нативно / отключено';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Запрашивать профиль при запуске';
@override String get requireProfileSelectionOnOpenDescription => 'Показывать выбор профиля при каждом открытии приложения';
@override String get forceTvMode => 'Принудительный режим ТВ';
@@ -2033,6 +2039,12 @@ extension on TranslationsRu {
'settings.displaySwitchDelay' => 'Задержка переключения дисплея',
'settings.tunneledPlayback' => 'Туннельное воспроизведение',
'settings.tunneledPlaybackDescription' => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.',
'settings.dvConversionMode' => 'Преобразование Dolby Vision',
'settings.dvConversionModeDescription' => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.',
'settings.dvConversionAuto' => 'Авто',
'settings.dvConversionNative' => 'Нативно / отключено',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Запрашивать профиль при запуске',
'settings.requireProfileSelectionOnOpenDescription' => 'Показывать выбор профиля при каждом открытии приложения',
'settings.forceTvMode' => 'Принудительный режим ТВ',
@@ -2301,14 +2313,14 @@ extension on TranslationsRu {
'profiles.signOut' => 'Выйти',
'profiles.signOutPlexTitle' => 'Выйти из Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Удалить ${displayName} и всех пользователей Plex Home? Вы сможете войти снова в любое время.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Вы вышли из Plex.',
'profiles.signOutFailed' => 'Не удалось выйти.',
'profiles.sectionTitle' => 'Профили',
'profiles.summarySingle' => 'Добавьте профили, чтобы смешать управляемых пользователей и локальные идентификаторы',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} профилей · активный: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} профилей',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Удалить соединение?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Удалить доступ ${displayName} к ${connectionLabel}. У других профилей он останется.',
'profiles.deleteProfileTitle' => 'Удалить профиль?',
@@ -2815,14 +2827,14 @@ extension on TranslationsRu {
'metadataEdit.summary' => 'Описание',
'metadataEdit.poster' => 'Постер',
'metadataEdit.background' => 'Фон',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Логотип',
'metadataEdit.squareArt' => 'Квадратное изображение',
'metadataEdit.selectPoster' => 'Выбрать постер',
'metadataEdit.selectBackground' => 'Выбрать фон',
'metadataEdit.selectLogo' => 'Выбрать логотип',
'metadataEdit.selectSquareArt' => 'Выбрать квадратное изображение',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'По URL',
'metadataEdit.uploadFile' => 'Загрузить файл',
'metadataEdit.enterImageUrl' => 'Введите URL изображения',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn {
@override String get displaySwitchDelay => 'Fördröjning vid skärmbyte';
@override String get tunneledPlayback => 'Tunneluppspelning';
@override String get tunneledPlaybackDescription => 'Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.';
@override String get dvConversionMode => 'Dolby Vision-konvertering';
@override String get dvConversionModeDescription => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.';
@override String get dvConversionAuto => 'Auto';
@override String get dvConversionNative => 'Inbyggt / inaktiverat';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => 'Fråga efter profil vid appstart';
@override String get requireProfileSelectionOnOpenDescription => 'Visa profilval varje gång appen öppnas';
@override String get forceTvMode => 'Tvinga TV-läge';
@@ -2033,6 +2039,12 @@ extension on TranslationsSv {
'settings.displaySwitchDelay' => 'Fördröjning vid skärmbyte',
'settings.tunneledPlayback' => 'Tunneluppspelning',
'settings.tunneledPlaybackDescription' => 'Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.',
'settings.dvConversionMode' => 'Dolby Vision-konvertering',
'settings.dvConversionModeDescription' => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.',
'settings.dvConversionAuto' => 'Auto',
'settings.dvConversionNative' => 'Inbyggt / inaktiverat',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => 'Fråga efter profil vid appstart',
'settings.requireProfileSelectionOnOpenDescription' => 'Visa profilval varje gång appen öppnas',
'settings.forceTvMode' => 'Tvinga TV-läge',
@@ -2301,14 +2313,14 @@ extension on TranslationsSv {
'profiles.signOut' => 'Logga ut',
'profiles.signOutPlexTitle' => 'Logga ut från Plex?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Ta bort ${displayName} och alla Plex Home-användare? Du kan logga in igen när som helst.',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => 'Utloggad från Plex.',
'profiles.signOutFailed' => 'Utloggningen misslyckades.',
'profiles.sectionTitle' => 'Profiler',
'profiles.summarySingle' => 'Lägg till profiler för att blanda hanterade användare och lokala identiteter',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profiler · aktiv: ${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} profiler',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => 'Ta bort anslutning?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Ta bort ${displayName}s åtkomst till ${connectionLabel}. Andra profiler behåller den.',
'profiles.deleteProfileTitle' => 'Ta bort profil?',
@@ -2815,14 +2827,14 @@ extension on TranslationsSv {
'metadataEdit.summary' => 'Sammanfattning',
'metadataEdit.poster' => 'Poster',
'metadataEdit.background' => 'Bakgrund',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => 'Logotyp',
'metadataEdit.squareArt' => 'Kvadratisk bild',
'metadataEdit.selectPoster' => 'Välj poster',
'metadataEdit.selectBackground' => 'Välj bakgrund',
'metadataEdit.selectLogo' => 'Välj logotyp',
'metadataEdit.selectSquareArt' => 'Välj kvadratisk bild',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => 'Från URL',
'metadataEdit.uploadFile' => 'Ladda upp fil',
'metadataEdit.enterImageUrl' => 'Ange bild-URL',
+16 -4
View File
@@ -376,6 +376,12 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn {
@override String get displaySwitchDelay => '显示切换延迟';
@override String get tunneledPlayback => '通道化播放';
@override String get tunneledPlaybackDescription => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。';
@override String get dvConversionMode => 'Dolby Vision 转换';
@override String get dvConversionModeDescription => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。';
@override String get dvConversionAuto => '自动';
@override String get dvConversionNative => '原生 / 禁用';
@override String get dvConversionDv81 => 'P7 → P8.1';
@override String get dvConversionHevcStrip => 'P7 → HEVC';
@override String get requireProfileSelectionOnOpen => '打开应用时询问配置文件';
@override String get requireProfileSelectionOnOpenDescription => '每次打开应用时显示配置文件选择';
@override String get forceTvMode => '强制 TV 模式';
@@ -2033,6 +2039,12 @@ extension on TranslationsZh {
'settings.displaySwitchDelay' => '显示切换延迟',
'settings.tunneledPlayback' => '通道化播放',
'settings.tunneledPlaybackDescription' => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。',
'settings.dvConversionMode' => 'Dolby Vision 转换',
'settings.dvConversionModeDescription' => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。',
'settings.dvConversionAuto' => '自动',
'settings.dvConversionNative' => '原生 / 禁用',
'settings.dvConversionDv81' => 'P7 → P8.1',
'settings.dvConversionHevcStrip' => 'P7 → HEVC',
'settings.requireProfileSelectionOnOpen' => '打开应用时询问配置文件',
'settings.requireProfileSelectionOnOpenDescription' => '每次打开应用时显示配置文件选择',
'settings.forceTvMode' => '强制 TV 模式',
@@ -2301,14 +2313,14 @@ extension on TranslationsZh {
'profiles.signOut' => '退出登录',
'profiles.signOutPlexTitle' => '退出 Plex 登录?',
'profiles.signOutPlexMessage' => ({required Object displayName}) => '要移除 ${displayName} 和所有 Plex Home 用户吗?可随时重新登录。',
_ => null,
} ?? switch (path) {
'profiles.signedOutPlex' => '已退出 Plex 登录。',
'profiles.signOutFailed' => '退出登录失败。',
'profiles.sectionTitle' => '配置文件',
'profiles.summarySingle' => '添加配置文件以混合托管用户和本地身份',
'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} 个配置文件 · 活跃:${activeName}',
'profiles.summaryMultiple' => ({required Object count}) => '${count} 个配置文件',
_ => null,
} ?? switch (path) {
'profiles.removeConnectionTitle' => '移除连接?',
'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => '移除 ${displayName}${connectionLabel} 的访问。其他个人资料仍保留。',
'profiles.deleteProfileTitle' => '删除配置文件?',
@@ -2815,14 +2827,14 @@ extension on TranslationsZh {
'metadataEdit.summary' => '简介',
'metadataEdit.poster' => '海报',
'metadataEdit.background' => '背景',
_ => null,
} ?? switch (path) {
'metadataEdit.logo' => '标志',
'metadataEdit.squareArt' => '方形图片',
'metadataEdit.selectPoster' => '选择海报',
'metadataEdit.selectBackground' => '选择背景',
'metadataEdit.selectLogo' => '选择标志',
'metadataEdit.selectSquareArt' => '选择方形图片',
_ => null,
} ?? switch (path) {
'metadataEdit.fromUrl' => '从 URL',
'metadataEdit.uploadFile' => '上传文件',
'metadataEdit.enterImageUrl' => '输入图片 URL',
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "Fördröjning vid skärmbyte",
"tunneledPlayback": "Tunneluppspelning",
"tunneledPlaybackDescription": "Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.",
"dvConversionMode": "Dolby Vision-konvertering",
"dvConversionModeDescription": "Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.",
"dvConversionAuto": "Auto",
"dvConversionNative": "Inbyggt / inaktiverat",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "Fråga efter profil vid appstart",
"requireProfileSelectionOnOpenDescription": "Visa profilval varje gång appen öppnas",
"forceTvMode": "Tvinga TV-läge",
+6
View File
@@ -248,6 +248,12 @@
"displaySwitchDelay": "显示切换延迟",
"tunneledPlayback": "通道化播放",
"tunneledPlaybackDescription": "使用视频隧道。若 HDR 播放出现黑屏,请禁用。",
"dvConversionMode": "Dolby Vision 转换",
"dvConversionModeDescription": "选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。",
"dvConversionAuto": "自动",
"dvConversionNative": "原生 / 禁用",
"dvConversionDv81": "P7 → P8.1",
"dvConversionHevcStrip": "P7 → HEVC",
"requireProfileSelectionOnOpen": "打开应用时询问配置文件",
"requireProfileSelectionOnOpenDescription": "每次打开应用时显示配置文件选择",
"forceTvMode": "强制 TV 模式",
+4 -1
View File
@@ -11,6 +11,7 @@ class PlayerAndroid extends PlayerBase {
int? _bufferSizeBytes;
bool _tunnelingEnabled = true;
String _dvConversionMode = 'auto';
String? _hiddenSubtitleTrackId;
@@ -60,6 +61,7 @@ class PlayerAndroid extends PlayerBase {
final result = await invoke<bool>('initialize', {
'bufferSizeBytes': _bufferSizeBytes,
'tunnelingEnabled': _tunnelingEnabled,
'dvConversionMode': _dvConversionMode,
});
if (result != true) {
throw Exception('Failed to initialize ExoPlayer');
@@ -192,7 +194,8 @@ class PlayerAndroid extends PlayerBase {
_tunnelingEnabled = value != 'no';
break;
case 'dv-conversion-mode':
await invoke('setDvConversionMode', {'mode': value});
_dvConversionMode = value;
if (initialized) await invoke('setDvConversionMode', {'mode': value});
break;
case 'sub-visibility':
if (value == 'no') {
@@ -59,6 +59,7 @@ class _PlaybackSettingsScreenState extends State<PlaybackSettingsScreen> {
if (Platform.isWindows) _matchDynamicRangeTile(),
_displaySwitchDelayTile(),
_tunneledPlaybackTile(),
_dvConversionModeTile(),
_bufferSizeTile(),
_defaultQualityTile(),
@@ -311,6 +312,31 @@ class _PlaybackSettingsScreenState extends State<PlaybackSettingsScreen> {
},
);
Widget _dvConversionModeTile() => SettingValueBuilder<bool>(
pref: SettingsService.useExoPlayer,
builder: (_, useExo, _) {
if (!Platform.isAndroid || !useExo) return const SizedBox.shrink();
return SettingSelectionTile<DvConversionModePreference, DvConversionModePreference>(
pref: SettingsService.dvConversionMode,
icon: Symbols.hdr_strong_rounded,
title: t.settings.dvConversionMode,
subtitleBuilder: (mode) => '${_dvConversionModeLabel(mode)} · ${t.settings.dvConversionModeDescription}',
options: DvConversionModePreference.values
.map((m) => DialogOption(value: m, title: _dvConversionModeLabel(m)))
.toList(),
decode: (m) => m,
encode: (m) => m,
);
},
);
String _dvConversionModeLabel(DvConversionModePreference mode) => switch (mode) {
DvConversionModePreference.auto => t.settings.dvConversionAuto,
DvConversionModePreference.disabled => t.settings.dvConversionNative,
DvConversionModePreference.dv81 => t.settings.dvConversionDv81,
DvConversionModePreference.hevcStrip => t.settings.dvConversionHevcStrip,
};
Widget _bufferSizeTile() {
final bufferOptions = const [0, 64, 128, 256, 512, 1024];
return SettingSelectionTile<int, int>(
+2
View File
@@ -627,6 +627,8 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> with WidgetsBindin
if (Platform.isAndroid && useExoPlayer) {
final tunneledPlayback = settingsService.read(SettingsService.tunneledPlayback);
await currentPlayer.setProperty('tunneled-playback', tunneledPlayback ? 'yes' : 'no');
final dvConversionMode = settingsService.read(SettingsService.dvConversionMode);
await currentPlayer.setProperty('dv-conversion-mode', dvConversionMode.nativeValue);
}
if (bufferSizeMB > 0) {
final bufferSizeBytes = bufferSizeMB * 1024 * 1024;
+17
View File
@@ -35,6 +35,17 @@ enum EpisodePosterMode { seriesPoster, seasonPoster, episodeThumbnail }
enum SubAssOverride { no, yes, scale, force, strip }
enum DvConversionModePreference { auto, disabled, dv81, hevcStrip }
extension DvConversionModePreferenceNativeValue on DvConversionModePreference {
String get nativeValue => switch (this) {
DvConversionModePreference.auto => 'auto',
DvConversionModePreference.disabled => 'disabled',
DvConversionModePreference.dv81 => 'dv81',
DvConversionModePreference.hevcStrip => 'hevc_strip',
};
}
const String _bufferSizeMigratedKey = 'buffer_size_migrated_to_auto';
const String _legacyUseSeasonPosterKey = 'use_season_poster';
const String _legacyMpvConfigEntriesKey = 'mpv_config_entries';
@@ -313,6 +324,11 @@ class SettingsService extends BaseSharedPreferencesService {
static const enableSimklScrobble = BoolPref('enable_simkl_scrobble', defaultValue: true);
static const matchContentFrameRate = BoolPref('match_content_frame_rate');
static const tunneledPlayback = BoolPref('tunneled_playback', defaultValue: true);
static const dvConversionMode = EnumPref<DvConversionModePreference>(
'dv_conversion_mode',
values: DvConversionModePreference.values,
defaultValue: DvConversionModePreference.auto,
);
static const defaultQualityPreset = EnumPref<TranscodeQualityPreset>(
'default_quality_preset',
values: TranscodeQualityPreset.values,
@@ -686,6 +702,7 @@ class SettingsService extends BaseSharedPreferencesService {
enableSimklScrobble,
matchContentFrameRate,
tunneledPlayback,
dvConversionMode,
defaultPlaybackSpeed,
defaultBoxFitMode,
autoPlayNextEpisode,