feat(subs): render resolution setting for the avfoundation VO

This commit is contained in:
edde746
2026-06-12 21:05:28 +02:00
parent 804261605b
commit 24980aff95
36 changed files with 240 additions and 49 deletions
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Позиция",
"assOverride": "ASS презаписване",
"bold": "Получер",
"italic": "Курсив"
"italic": "Курсив",
"renderResolution": "Резолюция на изобразяване",
"renderResolutionScreen": "Резолюция на екрана",
"renderResolutionVideo": "Резолюция на видеото"
},
"mpvConfig": {
"title": "mpv.conf",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Position",
"assOverride": "ASS-tilsidesættelse",
"bold": "Fed",
"italic": "Kursiv"
"italic": "Kursiv",
"renderResolution": "Gengivelsesopløsning",
"renderResolutionScreen": "Skærmopløsning",
"renderResolutionVideo": "Videoopløsning"
},
"mpvConfig": {
"title": "mpv.conf",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Position",
"assOverride": "ASS-Überschreibung",
"bold": "Fett",
"italic": "Kursiv"
"italic": "Kursiv",
"renderResolution": "Render-Auflösung",
"renderResolutionScreen": "Bildschirmauflösung",
"renderResolutionVideo": "Videoauflösung"
},
"mpvConfig": {
"title": "mpv-Konfiguration",
+4 -1
View File
@@ -563,7 +563,10 @@
"position": "Position",
"assOverride": "ASS Override",
"bold": "Bold",
"italic": "Italic"
"italic": "Italic",
"renderResolution": "Render Resolution",
"renderResolutionScreen": "Screen resolution",
"renderResolutionVideo": "Video resolution"
},
"mpvConfig": {
"title": "mpv.conf",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Posición",
"assOverride": "Sobreescritura ASS",
"bold": "Negrita",
"italic": "Cursiva"
"italic": "Cursiva",
"renderResolution": "Resolución de renderizado",
"renderResolutionScreen": "Resolución de pantalla",
"renderResolutionVideo": "Resolución del vídeo"
},
"mpvConfig": {
"title": "Configuración de mpv",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Position",
"assOverride": "Remplacement ASS",
"bold": "Gras",
"italic": "Italique"
"italic": "Italique",
"renderResolution": "Résolution de rendu",
"renderResolutionScreen": "Résolution de l'écran",
"renderResolutionVideo": "Résolution de la vidéo"
},
"mpvConfig": {
"title": "Configuration mpv",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Posizione",
"assOverride": "Sovrascrittura ASS",
"bold": "Grassetto",
"italic": "Corsivo"
"italic": "Corsivo",
"renderResolution": "Risoluzione di rendering",
"renderResolutionScreen": "Risoluzione dello schermo",
"renderResolutionVideo": "Risoluzione del video"
},
"mpvConfig": {
"title": "Configurazione mpv",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "位置",
"assOverride": "ASSオーバーライド",
"bold": "太字",
"italic": "斜体"
"italic": "斜体",
"renderResolution": "レンダリング解像度",
"renderResolutionScreen": "画面解像度",
"renderResolutionVideo": "動画解像度"
},
"mpvConfig": {
"title": "mpv.conf",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "위치",
"assOverride": "ASS 오버라이드",
"bold": "굵게",
"italic": "기울임꼴"
"italic": "기울임꼴",
"renderResolution": "렌더링 해상도",
"renderResolutionScreen": "화면 해상도",
"renderResolutionVideo": "영상 해상도"
},
"mpvConfig": {
"title": "mpv 설정",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Posisjon",
"assOverride": "ASS-overstyring",
"bold": "Fet",
"italic": "Kursiv"
"italic": "Kursiv",
"renderResolution": "Gjengivelsesoppløsning",
"renderResolutionScreen": "Skjermoppløsning",
"renderResolutionVideo": "Videooppløsning"
},
"mpvConfig": {
"title": "mpv.conf",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Positie",
"assOverride": "ASS-overschrijving",
"bold": "Vet",
"italic": "Cursief"
"italic": "Cursief",
"renderResolution": "Renderresolutie",
"renderResolutionScreen": "Schermresolutie",
"renderResolutionVideo": "Videoresolutie"
},
"mpvConfig": {
"title": "mpv-configuratie",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Pozycja",
"assOverride": "Nadpisywanie ASS",
"bold": "Pogrubienie",
"italic": "Kursywa"
"italic": "Kursywa",
"renderResolution": "Rozdzielczość renderowania",
"renderResolutionScreen": "Rozdzielczość ekranu",
"renderResolutionVideo": "Rozdzielczość wideo"
},
"mpvConfig": {
"title": "mpv.conf",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Posição",
"assOverride": "Substituição ASS",
"bold": "Negrito",
"italic": "Itálico"
"italic": "Itálico",
"renderResolution": "Resolução de renderização",
"renderResolutionScreen": "Resolução da tela",
"renderResolutionVideo": "Resolução do vídeo"
},
"mpvConfig": {
"title": "mpv.conf",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Позиция",
"assOverride": "Переопределение ASS",
"bold": "Жирный",
"italic": "Курсив"
"italic": "Курсив",
"renderResolution": "Разрешение отрисовки",
"renderResolutionScreen": "Разрешение экрана",
"renderResolutionVideo": "Разрешение видео"
},
"mpvConfig": {
"title": "mpv.conf",
+1 -1
View File
@@ -4,7 +4,7 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 16
/// Strings: 20297 (1268 per locale)
/// Strings: 20345 (1271 per locale)
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingBg extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'ASS презаписване';
@override String get bold => 'Получер';
@override String get italic => 'Курсив';
@override String get renderResolution => 'Резолюция на изобразяване';
@override String get renderResolutionScreen => 'Резолюция на екрана';
@override String get renderResolutionVideo => 'Резолюция на видеото';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsBg {
'subtitlingStyling.assOverride' => 'ASS презаписване',
'subtitlingStyling.bold' => 'Получер',
'subtitlingStyling.italic' => 'Курсив',
'subtitlingStyling.renderResolution' => 'Резолюция на изобразяване',
'subtitlingStyling.renderResolutionScreen' => 'Резолюция на екрана',
'subtitlingStyling.renderResolutionVideo' => 'Резолюция на видеото',
'mpvConfig.title' => 'mpv.conf',
'mpvConfig.description' => 'Разширени настройки на видео плейъра',
'mpvConfig.presets' => 'Пресети',
@@ -2940,11 +2946,11 @@ extension on TranslationsBg {
'companionRemote.remote.retryNow' => 'Опитай сега',
'companionRemote.remote.tabRemote' => 'Дистанционно',
'companionRemote.remote.tabPlay' => 'Пускане',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Още',
'companionRemote.remote.menu' => 'Меню',
'companionRemote.remote.tabNavigation' => 'Навигация с Tab',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Открий',
'companionRemote.remote.tabLibraries' => 'Библиотеки',
'companionRemote.remote.tabSearch' => 'Търсене',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingDa extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'ASS-tilsidesættelse';
@override String get bold => 'Fed';
@override String get italic => 'Kursiv';
@override String get renderResolution => 'Gengivelsesopløsning';
@override String get renderResolutionScreen => 'Skærmopløsning';
@override String get renderResolutionVideo => 'Videoopløsning';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsDa {
'subtitlingStyling.assOverride' => 'ASS-tilsidesættelse',
'subtitlingStyling.bold' => 'Fed',
'subtitlingStyling.italic' => 'Kursiv',
'subtitlingStyling.renderResolution' => 'Gengivelsesopløsning',
'subtitlingStyling.renderResolutionScreen' => 'Skærmopløsning',
'subtitlingStyling.renderResolutionVideo' => 'Videoopløsning',
'mpvConfig.title' => 'mpv.conf',
'mpvConfig.description' => 'Avancerede videoafspillerindstillinger',
'mpvConfig.presets' => 'Forudindstillinger',
@@ -2940,11 +2946,11 @@ extension on TranslationsDa {
'companionRemote.remote.retryNow' => 'Prøv igen nu',
'companionRemote.remote.tabRemote' => 'Fjernbetjening',
'companionRemote.remote.tabPlay' => 'Afspil',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Mere',
'companionRemote.remote.menu' => 'Menu',
'companionRemote.remote.tabNavigation' => 'Fanenavigation',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Opdag',
'companionRemote.remote.tabLibraries' => 'Biblioteker',
'companionRemote.remote.tabSearch' => 'Søg',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingDe extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'ASS-Überschreibung';
@override String get bold => 'Fett';
@override String get italic => 'Kursiv';
@override String get renderResolution => 'Render-Auflösung';
@override String get renderResolutionScreen => 'Bildschirmauflösung';
@override String get renderResolutionVideo => 'Videoauflösung';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsDe {
'subtitlingStyling.assOverride' => 'ASS-Überschreibung',
'subtitlingStyling.bold' => 'Fett',
'subtitlingStyling.italic' => 'Kursiv',
'subtitlingStyling.renderResolution' => 'Render-Auflösung',
'subtitlingStyling.renderResolutionScreen' => 'Bildschirmauflösung',
'subtitlingStyling.renderResolutionVideo' => 'Videoauflösung',
'mpvConfig.title' => 'mpv-Konfiguration',
'mpvConfig.description' => 'Erweiterte Videoplayer-Einstellungen',
'mpvConfig.presets' => 'Voreinstellungen',
@@ -2940,11 +2946,11 @@ extension on TranslationsDe {
'companionRemote.remote.retryNow' => 'Jetzt wiederholen',
'companionRemote.remote.tabRemote' => 'Fernbedienung',
'companionRemote.remote.tabPlay' => 'Wiedergabe',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Mehr',
'companionRemote.remote.menu' => 'Menü',
'companionRemote.remote.tabNavigation' => 'Tab-Navigation',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Entdecken',
'companionRemote.remote.tabLibraries' => 'Mediatheken',
'companionRemote.remote.tabSearch' => 'Suche',
+14 -2
View File
@@ -1731,6 +1731,15 @@ class TranslationsSubtitlingStylingEn {
/// en: 'Italic'
String get italic => 'Italic';
/// en: 'Render Resolution'
String get renderResolution => 'Render Resolution';
/// en: 'Screen resolution'
String get renderResolutionScreen => 'Screen resolution';
/// en: 'Video resolution'
String get renderResolutionVideo => 'Video resolution';
}
// Path: mpvConfig
@@ -5016,6 +5025,9 @@ extension on Translations {
'subtitlingStyling.assOverride' => 'ASS Override',
'subtitlingStyling.bold' => 'Bold',
'subtitlingStyling.italic' => 'Italic',
'subtitlingStyling.renderResolution' => 'Render Resolution',
'subtitlingStyling.renderResolutionScreen' => 'Screen resolution',
'subtitlingStyling.renderResolutionVideo' => 'Video resolution',
'mpvConfig.title' => 'mpv.conf',
'mpvConfig.description' => 'Advanced video player settings',
'mpvConfig.presets' => 'Presets',
@@ -5509,11 +5521,11 @@ extension on Translations {
'companionRemote.pairing.validationHostRequired' => 'Please enter host address',
'companionRemote.pairing.validationHostFormat' => 'Format must be IP:port (e.g., 192.168.1.100:48632)',
'companionRemote.pairing.connectionTimedOut' => 'Connection timed out. Use the same network on both devices.',
_ => null,
} ?? switch (path) {
'companionRemote.pairing.sessionNotFound' => 'Device not found. Make sure Plezy is running on the host.',
'companionRemote.pairing.authFailed' => 'Authentication failed. Both devices need the same Plex account.',
'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Failed to connect: ${error}',
_ => null,
} ?? switch (path) {
'companionRemote.remote.disconnectConfirm' => 'Do you want to disconnect from the remote session?',
'companionRemote.remote.reconnecting' => 'Reconnecting...',
'companionRemote.remote.attemptOf' => ({required Object current}) => 'Attempt ${current} of 5',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingEs extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'Sobreescritura ASS';
@override String get bold => 'Negrita';
@override String get italic => 'Cursiva';
@override String get renderResolution => 'Resolución de renderizado';
@override String get renderResolutionScreen => 'Resolución de pantalla';
@override String get renderResolutionVideo => 'Resolución del vídeo';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsEs {
'subtitlingStyling.assOverride' => 'Sobreescritura ASS',
'subtitlingStyling.bold' => 'Negrita',
'subtitlingStyling.italic' => 'Cursiva',
'subtitlingStyling.renderResolution' => 'Resolución de renderizado',
'subtitlingStyling.renderResolutionScreen' => 'Resolución de pantalla',
'subtitlingStyling.renderResolutionVideo' => 'Resolución del vídeo',
'mpvConfig.title' => 'Configuración de mpv',
'mpvConfig.description' => 'Ajustes avanzados del reproductor de video',
'mpvConfig.presets' => 'Ajustes preestablecidos',
@@ -2940,11 +2946,11 @@ extension on TranslationsEs {
'companionRemote.remote.retryNow' => 'Reintentar ahora',
'companionRemote.remote.tabRemote' => 'Remoto',
'companionRemote.remote.tabPlay' => 'Reproducir',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Más',
'companionRemote.remote.menu' => 'Menú',
'companionRemote.remote.tabNavigation' => 'Navegación por pestañas',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Descubrir',
'companionRemote.remote.tabLibraries' => 'Bibliotecas',
'companionRemote.remote.tabSearch' => 'Buscar',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingFr extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'Remplacement ASS';
@override String get bold => 'Gras';
@override String get italic => 'Italique';
@override String get renderResolution => 'Résolution de rendu';
@override String get renderResolutionScreen => 'Résolution de l\'écran';
@override String get renderResolutionVideo => 'Résolution de la vidéo';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsFr {
'subtitlingStyling.assOverride' => 'Remplacement ASS',
'subtitlingStyling.bold' => 'Gras',
'subtitlingStyling.italic' => 'Italique',
'subtitlingStyling.renderResolution' => 'Résolution de rendu',
'subtitlingStyling.renderResolutionScreen' => 'Résolution de l\'écran',
'subtitlingStyling.renderResolutionVideo' => 'Résolution de la vidéo',
'mpvConfig.title' => 'Configuration mpv',
'mpvConfig.description' => 'Paramètres avancés du lecteur vidéo',
'mpvConfig.presets' => 'Préréglages',
@@ -2940,11 +2946,11 @@ extension on TranslationsFr {
'companionRemote.remote.retryNow' => 'Réessayer maintenant',
'companionRemote.remote.tabRemote' => 'Télécommande',
'companionRemote.remote.tabPlay' => 'Lecture',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Plus',
'companionRemote.remote.menu' => 'Menu',
'companionRemote.remote.tabNavigation' => 'Navigation par onglets',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Découvrir',
'companionRemote.remote.tabLibraries' => 'Bibliothèques',
'companionRemote.remote.tabSearch' => 'Rechercher',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingIt extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'Sovrascrittura ASS';
@override String get bold => 'Grassetto';
@override String get italic => 'Corsivo';
@override String get renderResolution => 'Risoluzione di rendering';
@override String get renderResolutionScreen => 'Risoluzione dello schermo';
@override String get renderResolutionVideo => 'Risoluzione del video';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsIt {
'subtitlingStyling.assOverride' => 'Sovrascrittura ASS',
'subtitlingStyling.bold' => 'Grassetto',
'subtitlingStyling.italic' => 'Corsivo',
'subtitlingStyling.renderResolution' => 'Risoluzione di rendering',
'subtitlingStyling.renderResolutionScreen' => 'Risoluzione dello schermo',
'subtitlingStyling.renderResolutionVideo' => 'Risoluzione del video',
'mpvConfig.title' => 'Configurazione mpv',
'mpvConfig.description' => 'Impostazioni avanzate del lettore video',
'mpvConfig.presets' => 'Preset',
@@ -2940,11 +2946,11 @@ extension on TranslationsIt {
'companionRemote.remote.retryNow' => 'Riprova ora',
'companionRemote.remote.tabRemote' => 'Telecomando',
'companionRemote.remote.tabPlay' => 'Riproduci',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Altro',
'companionRemote.remote.menu' => 'Menu',
'companionRemote.remote.tabNavigation' => 'Navigazione schede',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Esplora',
'companionRemote.remote.tabLibraries' => 'Librerie',
'companionRemote.remote.tabSearch' => 'Cerca',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingJa extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'ASSオーバーライド';
@override String get bold => '太字';
@override String get italic => '斜体';
@override String get renderResolution => 'レンダリング解像度';
@override String get renderResolutionScreen => '画面解像度';
@override String get renderResolutionVideo => '動画解像度';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsJa {
'subtitlingStyling.assOverride' => 'ASSオーバーライド',
'subtitlingStyling.bold' => '太字',
'subtitlingStyling.italic' => '斜体',
'subtitlingStyling.renderResolution' => 'レンダリング解像度',
'subtitlingStyling.renderResolutionScreen' => '画面解像度',
'subtitlingStyling.renderResolutionVideo' => '動画解像度',
'mpvConfig.title' => 'mpv.conf',
'mpvConfig.description' => '高度な動画プレーヤー設定',
'mpvConfig.presets' => 'プリセット',
@@ -2940,11 +2946,11 @@ extension on TranslationsJa {
'companionRemote.remote.retryNow' => '今すぐ再試行',
'companionRemote.remote.tabRemote' => 'リモート',
'companionRemote.remote.tabPlay' => '再生',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'その他',
'companionRemote.remote.menu' => 'メニュー',
'companionRemote.remote.tabNavigation' => 'タブナビゲーション',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => '探す',
'companionRemote.remote.tabLibraries' => 'ライブラリ',
'companionRemote.remote.tabSearch' => '検索',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingKo extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'ASS 오버라이드';
@override String get bold => '굵게';
@override String get italic => '기울임꼴';
@override String get renderResolution => '렌더링 해상도';
@override String get renderResolutionScreen => '화면 해상도';
@override String get renderResolutionVideo => '영상 해상도';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsKo {
'subtitlingStyling.assOverride' => 'ASS 오버라이드',
'subtitlingStyling.bold' => '굵게',
'subtitlingStyling.italic' => '기울임꼴',
'subtitlingStyling.renderResolution' => '렌더링 해상도',
'subtitlingStyling.renderResolutionScreen' => '화면 해상도',
'subtitlingStyling.renderResolutionVideo' => '영상 해상도',
'mpvConfig.title' => 'mpv 설정',
'mpvConfig.description' => '고급 비디오 플레이어 설정',
'mpvConfig.presets' => '사전 설정',
@@ -2940,11 +2946,11 @@ extension on TranslationsKo {
'companionRemote.remote.retryNow' => '지금 재시도',
'companionRemote.remote.tabRemote' => '리모컨',
'companionRemote.remote.tabPlay' => '재생',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => '더 보기',
'companionRemote.remote.menu' => '메뉴',
'companionRemote.remote.tabNavigation' => '탭 탐색',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => '발견',
'companionRemote.remote.tabLibraries' => '미디어 라이브러리',
'companionRemote.remote.tabSearch' => '검색',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingNb extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'ASS-overstyring';
@override String get bold => 'Fet';
@override String get italic => 'Kursiv';
@override String get renderResolution => 'Gjengivelsesoppløsning';
@override String get renderResolutionScreen => 'Skjermoppløsning';
@override String get renderResolutionVideo => 'Videooppløsning';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsNb {
'subtitlingStyling.assOverride' => 'ASS-overstyring',
'subtitlingStyling.bold' => 'Fet',
'subtitlingStyling.italic' => 'Kursiv',
'subtitlingStyling.renderResolution' => 'Gjengivelsesoppløsning',
'subtitlingStyling.renderResolutionScreen' => 'Skjermoppløsning',
'subtitlingStyling.renderResolutionVideo' => 'Videooppløsning',
'mpvConfig.title' => 'mpv.conf',
'mpvConfig.description' => 'Avanserte videospillerinnstillinger',
'mpvConfig.presets' => 'Forhåndsinnstillinger',
@@ -2940,11 +2946,11 @@ extension on TranslationsNb {
'companionRemote.remote.retryNow' => 'Prøv nå',
'companionRemote.remote.tabRemote' => 'Fjernkontroll',
'companionRemote.remote.tabPlay' => 'Spill av',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Mer',
'companionRemote.remote.menu' => 'Meny',
'companionRemote.remote.tabNavigation' => 'Fanenavigering',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Oppdag',
'companionRemote.remote.tabLibraries' => 'Biblioteker',
'companionRemote.remote.tabSearch' => 'Søk',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingNl extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'ASS-overschrijving';
@override String get bold => 'Vet';
@override String get italic => 'Cursief';
@override String get renderResolution => 'Renderresolutie';
@override String get renderResolutionScreen => 'Schermresolutie';
@override String get renderResolutionVideo => 'Videoresolutie';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsNl {
'subtitlingStyling.assOverride' => 'ASS-overschrijving',
'subtitlingStyling.bold' => 'Vet',
'subtitlingStyling.italic' => 'Cursief',
'subtitlingStyling.renderResolution' => 'Renderresolutie',
'subtitlingStyling.renderResolutionScreen' => 'Schermresolutie',
'subtitlingStyling.renderResolutionVideo' => 'Videoresolutie',
'mpvConfig.title' => 'mpv-configuratie',
'mpvConfig.description' => 'Geavanceerde videospeler-instellingen',
'mpvConfig.presets' => 'Voorinstellingen',
@@ -2940,11 +2946,11 @@ extension on TranslationsNl {
'companionRemote.remote.retryNow' => 'Nu opnieuw proberen',
'companionRemote.remote.tabRemote' => 'Afstandsbediening',
'companionRemote.remote.tabPlay' => 'Afspelen',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Meer',
'companionRemote.remote.menu' => 'Menu',
'companionRemote.remote.tabNavigation' => 'Tabnavigatie',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Ontdekken',
'companionRemote.remote.tabLibraries' => 'Bibliotheken',
'companionRemote.remote.tabSearch' => 'Zoeken',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingPl extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'Nadpisywanie ASS';
@override String get bold => 'Pogrubienie';
@override String get italic => 'Kursywa';
@override String get renderResolution => 'Rozdzielczość renderowania';
@override String get renderResolutionScreen => 'Rozdzielczość ekranu';
@override String get renderResolutionVideo => 'Rozdzielczość wideo';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsPl {
'subtitlingStyling.assOverride' => 'Nadpisywanie ASS',
'subtitlingStyling.bold' => 'Pogrubienie',
'subtitlingStyling.italic' => 'Kursywa',
'subtitlingStyling.renderResolution' => 'Rozdzielczość renderowania',
'subtitlingStyling.renderResolutionScreen' => 'Rozdzielczość ekranu',
'subtitlingStyling.renderResolutionVideo' => 'Rozdzielczość wideo',
'mpvConfig.title' => 'mpv.conf',
'mpvConfig.description' => 'Zaawansowane ustawienia odtwarzacza wideo',
'mpvConfig.presets' => 'Presety',
@@ -2940,11 +2946,11 @@ extension on TranslationsPl {
'companionRemote.remote.retryNow' => 'Ponów teraz',
'companionRemote.remote.tabRemote' => 'Pilot',
'companionRemote.remote.tabPlay' => 'Odtwórz',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Więcej',
'companionRemote.remote.menu' => 'Menu',
'companionRemote.remote.tabNavigation' => 'Nawigacja',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Odkryj',
'companionRemote.remote.tabLibraries' => 'Biblioteki',
'companionRemote.remote.tabSearch' => 'Szukaj',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingPt extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'Substituição ASS';
@override String get bold => 'Negrito';
@override String get italic => 'Itálico';
@override String get renderResolution => 'Resolução de renderização';
@override String get renderResolutionScreen => 'Resolução da tela';
@override String get renderResolutionVideo => 'Resolução do vídeo';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsPt {
'subtitlingStyling.assOverride' => 'Substituição ASS',
'subtitlingStyling.bold' => 'Negrito',
'subtitlingStyling.italic' => 'Itálico',
'subtitlingStyling.renderResolution' => 'Resolução de renderização',
'subtitlingStyling.renderResolutionScreen' => 'Resolução da tela',
'subtitlingStyling.renderResolutionVideo' => 'Resolução do vídeo',
'mpvConfig.title' => 'mpv.conf',
'mpvConfig.description' => 'Configurações avançadas do player de vídeo',
'mpvConfig.presets' => 'Predefinições',
@@ -2940,11 +2946,11 @@ extension on TranslationsPt {
'companionRemote.remote.retryNow' => 'Tentar Agora',
'companionRemote.remote.tabRemote' => 'Remoto',
'companionRemote.remote.tabPlay' => 'Reproduzir',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Mais',
'companionRemote.remote.menu' => 'Menu',
'companionRemote.remote.tabNavigation' => 'Navegação',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Descobrir',
'companionRemote.remote.tabLibraries' => 'Bibliotecas',
'companionRemote.remote.tabSearch' => 'Buscar',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingRu extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'Переопределение ASS';
@override String get bold => 'Жирный';
@override String get italic => 'Курсив';
@override String get renderResolution => 'Разрешение отрисовки';
@override String get renderResolutionScreen => 'Разрешение экрана';
@override String get renderResolutionVideo => 'Разрешение видео';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsRu {
'subtitlingStyling.assOverride' => 'Переопределение ASS',
'subtitlingStyling.bold' => 'Жирный',
'subtitlingStyling.italic' => 'Курсив',
'subtitlingStyling.renderResolution' => 'Разрешение отрисовки',
'subtitlingStyling.renderResolutionScreen' => 'Разрешение экрана',
'subtitlingStyling.renderResolutionVideo' => 'Разрешение видео',
'mpvConfig.title' => 'mpv.conf',
'mpvConfig.description' => 'Расширенные настройки видеоплеера',
'mpvConfig.presets' => 'Пресеты',
@@ -2940,11 +2946,11 @@ extension on TranslationsRu {
'companionRemote.remote.retryNow' => 'Повторить сейчас',
'companionRemote.remote.tabRemote' => 'Пульт',
'companionRemote.remote.tabPlay' => 'Воспроизведение',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Ещё',
'companionRemote.remote.menu' => 'Меню',
'companionRemote.remote.tabNavigation' => 'Навигация',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Обзор',
'companionRemote.remote.tabLibraries' => 'Библиотеки',
'companionRemote.remote.tabSearch' => 'Поиск',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingSv extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'ASS-åsidosättning';
@override String get bold => 'Fet';
@override String get italic => 'Kursiv';
@override String get renderResolution => 'Renderingsupplösning';
@override String get renderResolutionScreen => 'Skärmupplösning';
@override String get renderResolutionVideo => 'Videoupplösning';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsSv {
'subtitlingStyling.assOverride' => 'ASS-åsidosättning',
'subtitlingStyling.bold' => 'Fet',
'subtitlingStyling.italic' => 'Kursiv',
'subtitlingStyling.renderResolution' => 'Renderingsupplösning',
'subtitlingStyling.renderResolutionScreen' => 'Skärmupplösning',
'subtitlingStyling.renderResolutionVideo' => 'Videoupplösning',
'mpvConfig.title' => 'mpv-konfiguration',
'mpvConfig.description' => 'Avancerade videospelares inställningar',
'mpvConfig.presets' => 'Förval',
@@ -2940,11 +2946,11 @@ extension on TranslationsSv {
'companionRemote.remote.retryNow' => 'Försök nu',
'companionRemote.remote.tabRemote' => 'Fjärrkontroll',
'companionRemote.remote.tabPlay' => 'Spela',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => 'Mer',
'companionRemote.remote.menu' => 'Meny',
'companionRemote.remote.tabNavigation' => 'Fliknavigering',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => 'Upptäck',
'companionRemote.remote.tabLibraries' => 'Bibliotek',
'companionRemote.remote.tabSearch' => 'Sök',
+8 -2
View File
@@ -730,6 +730,9 @@ class _TranslationsSubtitlingStylingZh extends TranslationsSubtitlingStylingEn {
@override String get assOverride => 'ASS 样式覆盖';
@override String get bold => '粗体';
@override String get italic => '斜体';
@override String get renderResolution => '渲染分辨率';
@override String get renderResolutionScreen => '屏幕分辨率';
@override String get renderResolutionVideo => '视频分辨率';
}
// Path: mpvConfig
@@ -2441,6 +2444,9 @@ extension on TranslationsZh {
'subtitlingStyling.assOverride' => 'ASS 样式覆盖',
'subtitlingStyling.bold' => '粗体',
'subtitlingStyling.italic' => '斜体',
'subtitlingStyling.renderResolution' => '渲染分辨率',
'subtitlingStyling.renderResolutionScreen' => '屏幕分辨率',
'subtitlingStyling.renderResolutionVideo' => '视频分辨率',
'mpvConfig.title' => 'mpv 配置',
'mpvConfig.description' => '高级视频播放器设置',
'mpvConfig.presets' => '预设',
@@ -2940,11 +2946,11 @@ extension on TranslationsZh {
'companionRemote.remote.retryNow' => '立即重试',
'companionRemote.remote.tabRemote' => '遥控',
'companionRemote.remote.tabPlay' => '播放',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabMore' => '更多',
'companionRemote.remote.menu' => '菜单',
'companionRemote.remote.tabNavigation' => '标签导航',
_ => null,
} ?? switch (path) {
'companionRemote.remote.tabDiscover' => '发现',
'companionRemote.remote.tabLibraries' => '媒体库',
'companionRemote.remote.tabSearch' => '搜索',
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "Position",
"assOverride": "ASS-åsidosättning",
"bold": "Fet",
"italic": "Kursiv"
"italic": "Kursiv",
"renderResolution": "Renderingsupplösning",
"renderResolutionScreen": "Skärmupplösning",
"renderResolutionVideo": "Videoupplösning"
},
"mpvConfig": {
"title": "mpv-konfiguration",
+4 -1
View File
@@ -557,7 +557,10 @@
"position": "位置",
"assOverride": "ASS 样式覆盖",
"bold": "粗体",
"italic": "斜体"
"italic": "斜体",
"renderResolution": "渲染分辨率",
"renderResolutionScreen": "屏幕分辨率",
"renderResolutionVideo": "视频分辨率"
},
"mpvConfig": {
"title": "mpv 配置",
@@ -1,3 +1,5 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:material_symbols_icons/symbols.dart';
@@ -27,6 +29,13 @@ class SubtitleStylingScreen extends StatelessWidget {
return '$value%';
}
String _renderResolutionLabel(SubtitleRenderResolution value) {
return switch (value) {
SubtitleRenderResolution.screen => t.subtitlingStyling.renderResolutionScreen,
SubtitleRenderResolution.video => t.subtitlingStyling.renderResolutionVideo,
};
}
@override
Widget build(BuildContext context) {
return SettingsPage(
@@ -42,6 +51,19 @@ class SubtitleStylingScreen extends StatelessWidget {
decode: (v) => v,
encode: (v) => v,
),
// avfoundation VO (iOS/tvOS) only.
if (Platform.isIOS)
SettingSelectionTile<SubtitleRenderResolution, SubtitleRenderResolution>(
pref: SettingsService.subtitleRenderResolution,
icon: Symbols.aspect_ratio_rounded,
title: t.subtitlingStyling.renderResolution,
subtitleBuilder: _renderResolutionLabel,
options: SubtitleRenderResolution.values
.map((v) => DialogOption(value: v, title: _renderResolutionLabel(v)))
.toList(),
decode: (v) => v,
encode: (v) => v,
),
SettingNumberTile(
pref: SettingsService.subtitleFontSize,
icon: Symbols.format_size_rounded,
+9
View File
@@ -796,6 +796,15 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> with WidgetsBindin
if (Platform.isIOS) {
await currentPlayer.setProperty('audio-exclusive', 'yes');
// Rasterize subtitles at the video's resolution instead of the
// display's; the OSD layer upscales them with the video.
await currentPlayer.setProperty(
'avfoundation-osd-video-res',
settingsService.read(SettingsService.subtitleRenderResolution) == SubtitleRenderResolution.video
? 'yes'
: 'no',
);
}
// Audio passthrough (desktop only - sends bitstream to receiver)
+10
View File
@@ -40,6 +40,11 @@ enum ContinueWatchingAction { play, details }
enum SubAssOverride { no, yes, scale, force, strip }
/// Resolution ASS/image subtitles are rasterized at on the avfoundation VO
/// (iOS/tvOS): the display's, or the video's (much cheaper on 4K displays;
/// subs can't carry more detail than the video they're typeset against).
enum SubtitleRenderResolution { screen, video }
enum DvConversionModePreference { auto, disabled, dv81, hevcStrip }
extension DvConversionModePreferenceNativeValue on DvConversionModePreference {
@@ -311,6 +316,11 @@ class SettingsService extends BaseSharedPreferencesService {
values: SubAssOverride.values,
defaultValue: SubAssOverride.no,
);
static const subtitleRenderResolution = EnumPref<SubtitleRenderResolution>(
'subtitle_render_resolution',
values: SubtitleRenderResolution.values,
defaultValue: SubtitleRenderResolution.screen,
);
static const subtitleBold = BoolPref('subtitle_bold');
static const subtitleItalic = BoolPref('subtitle_italic');
static const cleanedOldImageCache = BoolPref('cleaned_old_image_cache');