fix(nav): improve back exit behavior

This commit is contained in:
edde746
2026-05-07 03:06:04 +02:00
parent 9446f976a4
commit 955c75db60
38 changed files with 297 additions and 462 deletions
@@ -39,6 +39,7 @@ class MainActivity : FlutterActivity() {
private val EXTERNAL_PLAYER_CHANNEL = "com.plezy/external_player"
private val THEME_CHANNEL = "com.plezy/theme"
private val DEVICE_CHANNEL = "com.plezy/device"
private val APP_EXIT_CHANNEL = "com.plezy/app_exit"
private var watchNextPlugin: WatchNextPlugin? = null
// Auto PiP state
@@ -206,6 +207,18 @@ class MainActivity : FlutterActivity() {
}
}
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, APP_EXIT_CHANNEL).setMethodCallHandler { call, result ->
when (call.method) {
"requestExit" -> {
result.success(true)
window.decorView.post {
finishAndRemoveTask()
}
}
else -> result.notImplemented()
}
}
// External player: open local video files with proper content:// URIs
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, EXTERNAL_PLAYER_CHANNEL).setMethodCallHandler { call, result ->
when (call.method) {
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Lydløs",
"ok": "OK",
"reconnect": "Genopret forbindelse",
"exitConfirmTitle": "Luk app?",
"exitConfirmMessage": "Er du sikker på, at du vil afslutte?",
"dontAskAgain": "Spørg ikke igen",
"exit": "Afslut",
"viewAll": "Vis alle",
"checkingNetwork": "Tjekker netværk...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Starter offlinetilstand...",
"loading": "Indlæser...",
"fullscreen": "Fuldskærm",
"exitFullscreen": "Forlad fuldskærm"
"exitFullscreen": "Forlad fuldskærm",
"pressBackAgainToExit": "Tryk tilbage igen for at afslutte"
},
"screens": {
"licenses": "Licenser",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Brug hardwareaccelereret videotunneling. Deaktiver hvis du ser sort skærm med lyd på HDR-indhold",
"requireProfileSelectionOnOpen": "Spørg om profil ved åbning",
"requireProfileSelectionOnOpenDescription": "Vis profilvalg hver gang appen åbnes",
"confirmExitOnBack": "Bekræft før lukning",
"confirmExitOnBackDescription": "Vis bekræftelsesdialog ved tryk på tilbage for at lukke appen",
"forceTvMode": "Gennemtving TV-tilstand",
"forceTvModeDescription": "Brug TV-layoutet uanset automatisk registrering. Nyttigt på Android TV-enheder, der ikke rapporterer leanback-funktionen. Genstarter appen ved ændring.",
"startInFullscreen": "Start i fuldskærm",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Stumm",
"ok": "OK",
"reconnect": "Erneut verbinden",
"exitConfirmTitle": "App beenden?",
"exitConfirmMessage": "Möchtest du die App wirklich beenden?",
"dontAskAgain": "Nicht erneut fragen",
"exit": "Beenden",
"viewAll": "Alle anzeigen",
"checkingNetwork": "Netzwerk wird geprüft...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Offlinemodus wird gestartet...",
"loading": "Laden...",
"fullscreen": "Vollbild",
"exitFullscreen": "Vollbild verlassen"
"exitFullscreen": "Vollbild verlassen",
"pressBackAgainToExit": "Erneut Zurück drücken zum Beenden"
},
"screens": {
"licenses": "Lizenzen",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Hardware-beschleunigte Video-Tunnelierung verwenden. Deaktivieren, wenn bei HDR-Inhalten ein schwarzer Bildschirm mit Ton erscheint",
"requireProfileSelectionOnOpen": "Profil beim Öffnen abfragen",
"requireProfileSelectionOnOpenDescription": "Profilauswahl bei jedem Öffnen der App anzeigen",
"confirmExitOnBack": "Vor dem Beenden bestätigen",
"confirmExitOnBackDescription": "Bestätigungsdialog anzeigen, wenn Zurück zum Beenden der App gedrückt wird",
"forceTvMode": "TV-Modus erzwingen",
"forceTvModeDescription": "TV-Layout unabhängig von der automatischen Erkennung verwenden. Nützlich für Android-TV-Geräte, die das Leanback-Feature nicht melden. Startet die App bei Änderung neu.",
"startInFullscreen": "Im Vollbildmodus starten",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Mute",
"ok": "OK",
"reconnect": "Reconnect",
"exitConfirmTitle": "Exit app?",
"exitConfirmMessage": "Are you sure you want to exit?",
"dontAskAgain": "Don't ask again",
"exit": "Exit",
"viewAll": "View All",
"checkingNetwork": "Checking network...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Starting offline mode...",
"loading": "Loading...",
"fullscreen": "Fullscreen",
"exitFullscreen": "Exit fullscreen"
"exitFullscreen": "Exit fullscreen",
"pressBackAgainToExit": "Press back again to exit"
},
"screens": {
"licenses": "Licenses",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Use hardware-accelerated video tunneling. Disable if you see a black screen with audio on HDR content",
"requireProfileSelectionOnOpen": "Ask for profile on app open",
"requireProfileSelectionOnOpenDescription": "Show profile selection every time the app is opened",
"confirmExitOnBack": "Confirm before exiting",
"confirmExitOnBackDescription": "Show a confirmation dialog when pressing back to exit the app",
"forceTvMode": "Force TV mode",
"forceTvModeDescription": "Use the TV layout regardless of auto-detection. Useful on Android TV devices that don't report the leanback feature. Restarts the app on change.",
"startInFullscreen": "Start in fullscreen",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Silencio",
"ok": "OK",
"reconnect": "Reconectar",
"exitConfirmTitle": "¿Salir de la app?",
"exitConfirmMessage": "¿Estás seguro de que quieres salir?",
"dontAskAgain": "No volver a preguntar",
"exit": "Salir",
"viewAll": "Ver todo",
"checkingNetwork": "Comprobando red...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Iniciando modo sin conexión...",
"loading": "Cargando...",
"fullscreen": "Pantalla completa",
"exitFullscreen": "Salir de pantalla completa"
"exitFullscreen": "Salir de pantalla completa",
"pressBackAgainToExit": "Presiona atrás otra vez para salir"
},
"screens": {
"licenses": "Licencias",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Usar tunelización de video acelerada por hardware. Desactivar si ves una pantalla negra con audio en contenido HDR",
"requireProfileSelectionOnOpen": "Pedir perfil al abrir la app",
"requireProfileSelectionOnOpenDescription": "Mostrar selección de perfil cada vez que se abre la aplicación",
"confirmExitOnBack": "Confirmar antes de salir",
"confirmExitOnBackDescription": "Mostrar un diálogo de confirmación al presionar atrás para salir de la app",
"forceTvMode": "Forzar modo TV",
"forceTvModeDescription": "Usar el diseño de TV independientemente de la detección automática. Útil en dispositivos Android TV que no informan la característica leanback. Reinicia la app al cambiar.",
"startInFullscreen": "Iniciar en pantalla completa",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Muet",
"ok": "OK",
"reconnect": "Reconnecter",
"exitConfirmTitle": "Quitter l'application ?",
"exitConfirmMessage": "Êtes-vous sûr de vouloir quitter ?",
"dontAskAgain": "Ne plus demander",
"exit": "Quitter",
"viewAll": "Tout afficher",
"checkingNetwork": "Vérification du réseau...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Démarrage en mode hors-ligne...",
"loading": "Chargement...",
"fullscreen": "Plein écran",
"exitFullscreen": "Quitter le plein écran"
"exitFullscreen": "Quitter le plein écran",
"pressBackAgainToExit": "Appuyez à nouveau sur retour pour quitter"
},
"screens": {
"licenses": "Licences",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Utiliser le tunnelage vidéo accéléré par matériel. Désactiver si vous voyez un écran noir avec du son sur du contenu HDR",
"requireProfileSelectionOnOpen": "Demander le profil à l'ouverture",
"requireProfileSelectionOnOpenDescription": "Afficher la sélection de profil à chaque ouverture de l'application",
"confirmExitOnBack": "Confirmer avant de quitter",
"confirmExitOnBackDescription": "Afficher une boîte de dialogue de confirmation en appuyant sur retour pour quitter",
"forceTvMode": "Forcer le mode TV",
"forceTvModeDescription": "Utiliser la mise en page TV quelle que soit la détection automatique. Utile sur les appareils Android TV qui ne signalent pas la fonctionnalité leanback. Redémarre l'application lors du changement.",
"startInFullscreen": "Démarrer en plein écran",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Muto",
"ok": "OK",
"reconnect": "Riconnetti",
"exitConfirmTitle": "Uscire dall'app?",
"exitConfirmMessage": "Sei sicuro di voler uscire?",
"dontAskAgain": "Non chiedere più",
"exit": "Esci",
"viewAll": "Mostra tutto",
"checkingNetwork": "Verifica rete...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Avvio modalità offline...",
"loading": "Caricamento...",
"fullscreen": "Schermo intero",
"exitFullscreen": "Esci da schermo intero"
"exitFullscreen": "Esci da schermo intero",
"pressBackAgainToExit": "Premi di nuovo indietro per uscire"
},
"screens": {
"licenses": "Licenze",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Usa il tunneling video accelerato dall'hardware. Disattiva se vedi uno schermo nero con audio su contenuti HDR",
"requireProfileSelectionOnOpen": "Chiedi profilo all'apertura",
"requireProfileSelectionOnOpenDescription": "Mostra la selezione del profilo ogni volta che l'app viene aperta",
"confirmExitOnBack": "Conferma prima di uscire",
"confirmExitOnBackDescription": "Mostra una finestra di conferma quando si preme indietro per uscire dall'app",
"forceTvMode": "Forza modalità TV",
"forceTvModeDescription": "Usa il layout TV indipendentemente dal rilevamento automatico. Utile sui dispositivi Android TV che non segnalano la funzionalità leanback. Riavvia l'app al cambiamento.",
"startInFullscreen": "Avvia a schermo intero",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "ミュート",
"ok": "OK",
"reconnect": "再接続",
"exitConfirmTitle": "アプリを終了しますか?",
"exitConfirmMessage": "終了してもよろしいですか?",
"dontAskAgain": "次回から表示しない",
"exit": "終了",
"viewAll": "すべて表示",
"checkingNetwork": "ネットワークを確認中...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "オフラインモードを開始中...",
"loading": "読み込み中...",
"fullscreen": "フルスクリーン",
"exitFullscreen": "フルスクリーンを終了"
"exitFullscreen": "フルスクリーンを終了",
"pressBackAgainToExit": "もう一度押すと終了します"
},
"screens": {
"licenses": "ライセンス",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "ハードウェアアクセラレーションされたビデオトンネリングを使用。HDRコンテンツで音声のみで画面が黒くなる場合は無効にしてください",
"requireProfileSelectionOnOpen": "アプリ起動時にプロフィールを確認",
"requireProfileSelectionOnOpenDescription": "アプリを開くたびにプロフィール選択を表示",
"confirmExitOnBack": "終了前に確認",
"confirmExitOnBackDescription": "戻るボタンでアプリを終了する際に確認ダイアログを表示",
"forceTvMode": "TVモードを強制",
"forceTvModeDescription": "自動検出に関係なくTVレイアウトを使用します。leanback機能を報告しないAndroid TVデバイスで便利です。変更するとアプリが再起動されます。",
"startInFullscreen": "全画面表示で起動",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "음소거",
"ok": "확인",
"reconnect": "다시 연결",
"exitConfirmTitle": "앱을 종료하시겠습니까?",
"exitConfirmMessage": "정말 종료하시겠습니까?",
"dontAskAgain": "다시 묻지 않기",
"exit": "종료",
"viewAll": "모두 보기",
"checkingNetwork": "네트워크 확인 중...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "오프라인 모드 시작 중...",
"loading": "로딩 중...",
"fullscreen": "전체화면",
"exitFullscreen": "전체화면 종료"
"exitFullscreen": "전체화면 종료",
"pressBackAgainToExit": "한 번 더 누르면 종료됩니다"
},
"screens": {
"licenses": "라이선스",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "하드웨어 가속 비디오 터널링을 사용합니다. HDR 콘텐츠에서 소리만 나고 검은 화면이 보이면 비활성화하세요",
"requireProfileSelectionOnOpen": "앱 실행 시 프로필 선택",
"requireProfileSelectionOnOpenDescription": "앱을 열 때마다 프로필 선택 화면을 표시합니다",
"confirmExitOnBack": "종료 전 확인",
"confirmExitOnBackDescription": "뒤로 버튼을 눌러 앱을 종료할 때 확인 대화상자를 표시합니다",
"forceTvMode": "TV 모드 강제 사용",
"forceTvModeDescription": "자동 감지와 관계없이 TV 레이아웃을 사용합니다. leanback 기능을 보고하지 않는 Android TV 기기에 유용합니다. 변경 시 앱이 다시 시작됩니다.",
"startInFullscreen": "전체화면으로 시작",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Demp",
"ok": "OK",
"reconnect": "Koble til på nytt",
"exitConfirmTitle": "Avslutte appen?",
"exitConfirmMessage": "Er du sikker på at du vil avslutte?",
"dontAskAgain": "Ikke spør igjen",
"exit": "Avslutt",
"viewAll": "Vis alle",
"checkingNetwork": "Sjekker nettverk...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Starter frakoblet modus...",
"loading": "Laster...",
"fullscreen": "Fullskjerm",
"exitFullscreen": "Avslutt fullskjerm"
"exitFullscreen": "Avslutt fullskjerm",
"pressBackAgainToExit": "Trykk tilbake igjen for å avslutte"
},
"screens": {
"licenses": "Lisenser",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Bruk maskinvareakselerert videotunnelering. Deaktiver hvis du ser svart skjerm med lyd på HDR-innhold",
"requireProfileSelectionOnOpen": "Spør om profil ved appåpning",
"requireProfileSelectionOnOpenDescription": "Vis profilvalg hver gang appen åpnes",
"confirmExitOnBack": "Bekreft før avslutning",
"confirmExitOnBackDescription": "Vis en bekreftelsesdialog når du trykker tilbake for å avslutte appen",
"forceTvMode": "Tving TV-modus",
"forceTvModeDescription": "Bruk TV-oppsettet uavhengig av automatisk gjenkjenning. Nyttig på Android TV-enheter som ikke rapporterer leanback-funksjonen. Starter appen på nytt ved endring.",
"startInFullscreen": "Start i fullskjerm",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Dempen",
"ok": "OK",
"reconnect": "Opnieuw verbinden",
"exitConfirmTitle": "App afsluiten?",
"exitConfirmMessage": "Weet je zeker dat je wilt afsluiten?",
"dontAskAgain": "Niet meer vragen",
"exit": "Afsluiten",
"viewAll": "Alles weergeven",
"checkingNetwork": "Netwerk controleren...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Offlinemodus starten...",
"loading": "Laden...",
"fullscreen": "Volledig scherm",
"exitFullscreen": "Volledig scherm verlaten"
"exitFullscreen": "Volledig scherm verlaten",
"pressBackAgainToExit": "Druk nogmaals op terug om af te sluiten"
},
"screens": {
"licenses": "Licenties",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Gebruik hardwareversnelde videotunneling. Schakel uit als je een zwart scherm met geluid ziet bij HDR-content",
"requireProfileSelectionOnOpen": "Vraag om profiel bij openen",
"requireProfileSelectionOnOpenDescription": "Toon profielselectie telkens wanneer de app wordt geopend",
"confirmExitOnBack": "Bevestigen voor afsluiten",
"confirmExitOnBackDescription": "Toon een bevestigingsvenster bij het drukken op terug om de app af te sluiten",
"forceTvMode": "TV-modus forceren",
"forceTvModeDescription": "Gebruik de TV-indeling ongeacht automatische detectie. Handig op Android TV-apparaten die de leanback-functie niet melden. Start de app opnieuw bij wijziging.",
"startInFullscreen": "Starten in volledig scherm",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Wycisz",
"ok": "OK",
"reconnect": "Połącz ponownie",
"exitConfirmTitle": "Zamknąć aplikację?",
"exitConfirmMessage": "Czy na pewno chcesz wyjść?",
"dontAskAgain": "Nie pytaj ponownie",
"exit": "Wyjdź",
"viewAll": "Pokaż wszystko",
"checkingNetwork": "Sprawdzanie sieci...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Uruchamianie trybu offline...",
"loading": "Ładowanie...",
"fullscreen": "Pełny ekran",
"exitFullscreen": "Wyjdź z pełnego ekranu"
"exitFullscreen": "Wyjdź z pełnego ekranu",
"pressBackAgainToExit": "Naciśnij wstecz ponownie, aby wyjść"
},
"screens": {
"licenses": "Licencje",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Użyj sprzętowo przyspieszonego tunelowania wideo. Wyłącz, jeśli widzisz czarny ekran z dźwiękiem przy treściach HDR",
"requireProfileSelectionOnOpen": "Pytaj o profil przy otwarciu aplikacji",
"requireProfileSelectionOnOpenDescription": "Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana",
"confirmExitOnBack": "Potwierdź przed wyjściem",
"confirmExitOnBackDescription": "Pokaż dialog potwierdzenia przy naciśnięciu wstecz, aby wyjść z aplikacji",
"forceTvMode": "Wymuś tryb TV",
"forceTvModeDescription": "Użyj układu TV niezależnie od automatycznego wykrywania. Przydatne na urządzeniach Android TV, które nie zgłaszają funkcji leanback. Po zmianie aplikacja zostanie zrestartowana.",
"startInFullscreen": "Uruchom na pełnym ekranie",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Silenciar",
"ok": "OK",
"reconnect": "Reconectar",
"exitConfirmTitle": "Sair do app?",
"exitConfirmMessage": "Tem certeza que deseja sair?",
"dontAskAgain": "Não perguntar novamente",
"exit": "Sair",
"viewAll": "Ver Tudo",
"checkingNetwork": "Verificando rede...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Iniciando modo offline...",
"loading": "Carregando...",
"fullscreen": "Tela cheia",
"exitFullscreen": "Sair da tela cheia"
"exitFullscreen": "Sair da tela cheia",
"pressBackAgainToExit": "Pressione voltar novamente para sair"
},
"screens": {
"licenses": "Licenças",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Usar tunelamento de vídeo acelerado por hardware. Desative se você vir uma tela preta com áudio em conteúdo HDR",
"requireProfileSelectionOnOpen": "Pedir perfil ao abrir o app",
"requireProfileSelectionOnOpenDescription": "Mostrar seleção de perfil toda vez que o app for aberto",
"confirmExitOnBack": "Confirmar antes de sair",
"confirmExitOnBackDescription": "Mostrar diálogo de confirmação ao pressionar voltar para sair do app",
"forceTvMode": "Forçar modo TV",
"forceTvModeDescription": "Usar o layout de TV independentemente da detecção automática. Útil em dispositivos Android TV que não reportam o recurso leanback. Reinicia o app ao alterar.",
"startInFullscreen": "Iniciar em tela cheia",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Без звука",
"ok": "OK",
"reconnect": "Переподключить",
"exitConfirmTitle": "Выйти из приложения?",
"exitConfirmMessage": "Вы уверены, что хотите выйти?",
"dontAskAgain": "Больше не спрашивать",
"exit": "Выход",
"viewAll": "Показать все",
"checkingNetwork": "Проверка сети...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Запуск автономного режима...",
"loading": "Загрузка...",
"fullscreen": "Полноэкранный режим",
"exitFullscreen": "Выйти из полноэкранного режима"
"exitFullscreen": "Выйти из полноэкранного режима",
"pressBackAgainToExit": "Нажмите ещё раз для выхода"
},
"screens": {
"licenses": "Лицензии",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Использовать аппаратный видеотуннелинг. Отключите, если видите чёрный экран со звуком при HDR-контенте",
"requireProfileSelectionOnOpen": "Запрашивать профиль при запуске",
"requireProfileSelectionOnOpenDescription": "Показывать выбор профиля при каждом открытии приложения",
"confirmExitOnBack": "Подтверждать выход",
"confirmExitOnBackDescription": "Показывать диалог подтверждения при нажатии «назад» для выхода из приложения",
"forceTvMode": "Принудительный режим ТВ",
"forceTvModeDescription": "Использовать макет ТВ независимо от автоматического определения. Полезно на устройствах Android TV, которые не сообщают о функции leanback. Приложение перезапустится при изменении.",
"startInFullscreen": "Запускать в полноэкранном режиме",
+2 -2
View File
@@ -4,9 +4,9 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 15
/// Strings: 16995 (1133 per locale)
/// Strings: 16935 (1129 per locale)
///
/// Built on 2026-05-06 at 03:11 UTC
/// Built on 2026-05-07 at 01:02 UTC
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonDa extends TranslationsCommonEn {
@override String get mute => 'Lydløs';
@override String get ok => 'OK';
@override String get reconnect => 'Genopret forbindelse';
@override String get exitConfirmTitle => 'Luk app?';
@override String get exitConfirmMessage => 'Er du sikker på, at du vil afslutte?';
@override String get dontAskAgain => 'Spørg ikke igen';
@override String get exit => 'Afslut';
@override String get viewAll => 'Vis alle';
@override String get checkingNetwork => 'Tjekker netværk...';
@@ -171,6 +168,7 @@ class _TranslationsCommonDa extends TranslationsCommonEn {
@override String get loading => 'Indlæser...';
@override String get fullscreen => 'Fuldskærm';
@override String get exitFullscreen => 'Forlad fuldskærm';
@override String get pressBackAgainToExit => 'Tryk tilbage igen for at afslutte';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Brug hardwareaccelereret videotunneling. Deaktiver hvis du ser sort skærm med lyd på HDR-indhold';
@override String get requireProfileSelectionOnOpen => 'Spørg om profil ved åbning';
@override String get requireProfileSelectionOnOpenDescription => 'Vis profilvalg hver gang appen åbnes';
@override String get confirmExitOnBack => 'Bekræft før lukning';
@override String get confirmExitOnBackDescription => 'Vis bekræftelsesdialog ved tryk på tilbage for at lukke appen';
@override String get forceTvMode => 'Gennemtving TV-tilstand';
@override String get forceTvModeDescription => 'Brug TV-layoutet uanset automatisk registrering. Nyttigt på Android TV-enheder, der ikke rapporterer leanback-funktionen. Genstarter appen ved ændring.';
@override String get startInFullscreen => 'Start i fuldskærm';
@@ -1800,9 +1796,6 @@ extension on TranslationsDa {
'common.mute' => 'Lydløs',
'common.ok' => 'OK',
'common.reconnect' => 'Genopret forbindelse',
'common.exitConfirmTitle' => 'Luk app?',
'common.exitConfirmMessage' => 'Er du sikker på, at du vil afslutte?',
'common.dontAskAgain' => 'Spørg ikke igen',
'common.exit' => 'Afslut',
'common.viewAll' => 'Vis alle',
'common.checkingNetwork' => 'Tjekker netværk...',
@@ -1813,6 +1806,7 @@ extension on TranslationsDa {
'common.loading' => 'Indlæser...',
'common.fullscreen' => 'Fuldskærm',
'common.exitFullscreen' => 'Forlad fuldskærm',
'common.pressBackAgainToExit' => 'Tryk tilbage igen for at afslutte',
'screens.licenses' => 'Licenser',
'screens.switchProfile' => 'Skift profil',
'screens.subtitleStyling' => 'Undertekststil',
@@ -1994,8 +1988,6 @@ extension on TranslationsDa {
'settings.tunneledPlaybackDescription' => 'Brug hardwareaccelereret videotunneling. Deaktiver hvis du ser sort skærm med lyd på HDR-indhold',
'settings.requireProfileSelectionOnOpen' => 'Spørg om profil ved åbning',
'settings.requireProfileSelectionOnOpenDescription' => 'Vis profilvalg hver gang appen åbnes',
'settings.confirmExitOnBack' => 'Bekræft før lukning',
'settings.confirmExitOnBackDescription' => 'Vis bekræftelsesdialog ved tryk på tilbage for at lukke appen',
'settings.forceTvMode' => 'Gennemtving TV-tilstand',
'settings.forceTvModeDescription' => 'Brug TV-layoutet uanset automatisk registrering. Nyttigt på Android TV-enheder, der ikke rapporterer leanback-funktionen. Genstarter appen ved ændring.',
'settings.startInFullscreen' => 'Start i fuldskærm',
@@ -2264,12 +2256,12 @@ extension on TranslationsDa {
'profiles.pinManagedByPlex' => 'PIN administreres af Plex. Rediger på plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Ingen PIN-kode angivet. For at kræve en, redigér Home-brugeren på plex.tv.',
'profiles.setPin' => 'Angiv PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Forbindelser',
'profiles.add' => 'Tilføj',
'profiles.deleteProfileButton' => 'Slet profil',
'profiles.noConnectionsHint' => 'Ingen forbindelser — tilføj en for at bruge denne profil.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Plex Home-konto',
'profiles.connectionDefault' => 'Standard',
'profiles.makeDefault' => 'Gør til standard',
@@ -2778,12 +2770,12 @@ extension on TranslationsDa {
'metadataEdit.episodeOrdering' => 'Episoderækkefølge',
'metadataEdit.tmdbAiring' => 'The Movie Database (Sendt)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Sendt)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolut)',
'metadataEdit.metadataLanguage' => 'Metadatasprog',
'metadataEdit.useOriginalTitle' => 'Brug originaltitel',
'metadataEdit.preferredAudioLanguage' => 'Foretrukket lydsprog',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Foretrukket undertekstsprog',
'metadataEdit.subtitleMode' => 'Auto-vælg underteksttilstand',
'metadataEdit.manuallySelected' => 'Manuelt valgt',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonDe extends TranslationsCommonEn {
@override String get mute => 'Stumm';
@override String get ok => 'OK';
@override String get reconnect => 'Erneut verbinden';
@override String get exitConfirmTitle => 'App beenden?';
@override String get exitConfirmMessage => 'Möchtest du die App wirklich beenden?';
@override String get dontAskAgain => 'Nicht erneut fragen';
@override String get exit => 'Beenden';
@override String get viewAll => 'Alle anzeigen';
@override String get checkingNetwork => 'Netzwerk wird geprüft...';
@@ -171,6 +168,7 @@ class _TranslationsCommonDe extends TranslationsCommonEn {
@override String get loading => 'Laden...';
@override String get fullscreen => 'Vollbild';
@override String get exitFullscreen => 'Vollbild verlassen';
@override String get pressBackAgainToExit => 'Erneut Zurück drücken zum Beenden';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Hardware-beschleunigte Video-Tunnelierung verwenden. Deaktivieren, wenn bei HDR-Inhalten ein schwarzer Bildschirm mit Ton erscheint';
@override String get requireProfileSelectionOnOpen => 'Profil beim Öffnen abfragen';
@override String get requireProfileSelectionOnOpenDescription => 'Profilauswahl bei jedem Öffnen der App anzeigen';
@override String get confirmExitOnBack => 'Vor dem Beenden bestätigen';
@override String get confirmExitOnBackDescription => 'Bestätigungsdialog anzeigen, wenn Zurück zum Beenden der App gedrückt wird';
@override String get forceTvMode => 'TV-Modus erzwingen';
@override String get forceTvModeDescription => 'TV-Layout unabhängig von der automatischen Erkennung verwenden. Nützlich für Android-TV-Geräte, die das Leanback-Feature nicht melden. Startet die App bei Änderung neu.';
@override String get startInFullscreen => 'Im Vollbildmodus starten';
@@ -1800,9 +1796,6 @@ extension on TranslationsDe {
'common.mute' => 'Stumm',
'common.ok' => 'OK',
'common.reconnect' => 'Erneut verbinden',
'common.exitConfirmTitle' => 'App beenden?',
'common.exitConfirmMessage' => 'Möchtest du die App wirklich beenden?',
'common.dontAskAgain' => 'Nicht erneut fragen',
'common.exit' => 'Beenden',
'common.viewAll' => 'Alle anzeigen',
'common.checkingNetwork' => 'Netzwerk wird geprüft...',
@@ -1813,6 +1806,7 @@ extension on TranslationsDe {
'common.loading' => 'Laden...',
'common.fullscreen' => 'Vollbild',
'common.exitFullscreen' => 'Vollbild verlassen',
'common.pressBackAgainToExit' => 'Erneut Zurück drücken zum Beenden',
'screens.licenses' => 'Lizenzen',
'screens.switchProfile' => 'Profil wechseln',
'screens.subtitleStyling' => 'Untertitel-Stil',
@@ -1994,8 +1988,6 @@ extension on TranslationsDe {
'settings.tunneledPlaybackDescription' => 'Hardware-beschleunigte Video-Tunnelierung verwenden. Deaktivieren, wenn bei HDR-Inhalten ein schwarzer Bildschirm mit Ton erscheint',
'settings.requireProfileSelectionOnOpen' => 'Profil beim Öffnen abfragen',
'settings.requireProfileSelectionOnOpenDescription' => 'Profilauswahl bei jedem Öffnen der App anzeigen',
'settings.confirmExitOnBack' => 'Vor dem Beenden bestätigen',
'settings.confirmExitOnBackDescription' => 'Bestätigungsdialog anzeigen, wenn Zurück zum Beenden der App gedrückt wird',
'settings.forceTvMode' => 'TV-Modus erzwingen',
'settings.forceTvModeDescription' => 'TV-Layout unabhängig von der automatischen Erkennung verwenden. Nützlich für Android-TV-Geräte, die das Leanback-Feature nicht melden. Startet die App bei Änderung neu.',
'settings.startInFullscreen' => 'Im Vollbildmodus starten',
@@ -2264,12 +2256,12 @@ extension on TranslationsDe {
'profiles.pinManagedByPlex' => 'PIN wird von Plex verwaltet. Auf plex.tv bearbeiten.',
'profiles.noPinSetEditOnPlex' => 'Keine PIN festgelegt. Um eine zu verlangen, bearbeite den Home-Benutzer auf plex.tv.',
'profiles.setPin' => 'PIN festlegen',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Verbindungen',
'profiles.add' => 'Hinzufügen',
'profiles.deleteProfileButton' => 'Profil löschen',
'profiles.noConnectionsHint' => 'Keine Verbindungen — füge eine hinzu, um dieses Profil zu nutzen.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Plex Home-Konto',
'profiles.connectionDefault' => 'Standard',
'profiles.makeDefault' => 'Als Standard',
@@ -2778,12 +2770,12 @@ extension on TranslationsDe {
'metadataEdit.episodeOrdering' => 'Episodenreihenfolge',
'metadataEdit.tmdbAiring' => 'The Movie Database (Ausgestrahlt)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Ausgestrahlt)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolut)',
'metadataEdit.metadataLanguage' => 'Metadaten-Sprache',
'metadataEdit.useOriginalTitle' => 'Originaltitel verwenden',
'metadataEdit.preferredAudioLanguage' => 'Bevorzugte Audiosprache',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Bevorzugte Untertitelsprache',
'metadataEdit.subtitleMode' => 'Automatische Untertitelauswahl',
'metadataEdit.manuallySelected' => 'Manuell ausgewählt',
+8 -24
View File
@@ -256,15 +256,6 @@ class TranslationsCommonEn {
/// en: 'Reconnect'
String get reconnect => 'Reconnect';
/// en: 'Exit app?'
String get exitConfirmTitle => 'Exit app?';
/// en: 'Are you sure you want to exit?'
String get exitConfirmMessage => 'Are you sure you want to exit?';
/// en: 'Don't ask again'
String get dontAskAgain => 'Don\'t ask again';
/// en: 'Exit'
String get exit => 'Exit';
@@ -294,6 +285,9 @@ class TranslationsCommonEn {
/// en: 'Exit fullscreen'
String get exitFullscreen => 'Exit fullscreen';
/// en: 'Press back again to exit'
String get pressBackAgainToExit => 'Press back again to exit';
}
// Path: screens
@@ -865,12 +859,6 @@ class TranslationsSettingsEn {
/// en: 'Show profile selection every time the app is opened'
String get requireProfileSelectionOnOpenDescription => 'Show profile selection every time the app is opened';
/// en: 'Confirm before exiting'
String get confirmExitOnBack => 'Confirm before exiting';
/// en: 'Show a confirmation dialog when pressing back to exit the app'
String get confirmExitOnBackDescription => 'Show a confirmation dialog when pressing back to exit the app';
/// en: 'Force TV mode'
String get forceTvMode => 'Force TV mode';
@@ -4072,9 +4060,6 @@ extension on Translations {
'common.mute' => 'Mute',
'common.ok' => 'OK',
'common.reconnect' => 'Reconnect',
'common.exitConfirmTitle' => 'Exit app?',
'common.exitConfirmMessage' => 'Are you sure you want to exit?',
'common.dontAskAgain' => 'Don\'t ask again',
'common.exit' => 'Exit',
'common.viewAll' => 'View All',
'common.checkingNetwork' => 'Checking network...',
@@ -4085,6 +4070,7 @@ extension on Translations {
'common.loading' => 'Loading...',
'common.fullscreen' => 'Fullscreen',
'common.exitFullscreen' => 'Exit fullscreen',
'common.pressBackAgainToExit' => 'Press back again to exit',
'screens.licenses' => 'Licenses',
'screens.switchProfile' => 'Switch Profile',
'screens.subtitleStyling' => 'Subtitle Styling',
@@ -4266,8 +4252,6 @@ extension on Translations {
'settings.tunneledPlaybackDescription' => 'Use hardware-accelerated video tunneling. Disable if you see a black screen with audio on HDR content',
'settings.requireProfileSelectionOnOpen' => 'Ask for profile on app open',
'settings.requireProfileSelectionOnOpenDescription' => 'Show profile selection every time the app is opened',
'settings.confirmExitOnBack' => 'Confirm before exiting',
'settings.confirmExitOnBackDescription' => 'Show a confirmation dialog when pressing back to exit the app',
'settings.forceTvMode' => 'Force TV mode',
'settings.forceTvModeDescription' => 'Use the TV layout regardless of auto-detection. Useful on Android TV devices that don\'t report the leanback feature. Restarts the app on change.',
'settings.startInFullscreen' => 'Start in fullscreen',
@@ -4536,12 +4520,12 @@ extension on Translations {
'profiles.pinManagedByPlex' => 'PIN managed by Plex. Edit on plex.tv.',
'profiles.noPinSetEditOnPlex' => 'No PIN set. To require one, edit the home user on plex.tv.',
'profiles.setPin' => 'Set PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Connections',
'profiles.add' => 'Add',
'profiles.deleteProfileButton' => 'Delete profile',
'profiles.noConnectionsHint' => 'No connections — add one to use this profile.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Plex Home account',
'profiles.connectionDefault' => 'Default',
'profiles.makeDefault' => 'Make default',
@@ -5050,12 +5034,12 @@ extension on Translations {
'metadataEdit.episodeOrdering' => 'Episode Ordering',
'metadataEdit.tmdbAiring' => 'The Movie Database (Aired)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Aired)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolute)',
'metadataEdit.metadataLanguage' => 'Metadata Language',
'metadataEdit.useOriginalTitle' => 'Use Original Title',
'metadataEdit.preferredAudioLanguage' => 'Preferred Audio Language',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Preferred Subtitle Language',
'metadataEdit.subtitleMode' => 'Auto-Select Subtitle Mode',
'metadataEdit.manuallySelected' => 'Manually selected',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonEs extends TranslationsCommonEn {
@override String get mute => 'Silencio';
@override String get ok => 'OK';
@override String get reconnect => 'Reconectar';
@override String get exitConfirmTitle => '¿Salir de la app?';
@override String get exitConfirmMessage => '¿Estás seguro de que quieres salir?';
@override String get dontAskAgain => 'No volver a preguntar';
@override String get exit => 'Salir';
@override String get viewAll => 'Ver todo';
@override String get checkingNetwork => 'Comprobando red...';
@@ -171,6 +168,7 @@ class _TranslationsCommonEs extends TranslationsCommonEn {
@override String get loading => 'Cargando...';
@override String get fullscreen => 'Pantalla completa';
@override String get exitFullscreen => 'Salir de pantalla completa';
@override String get pressBackAgainToExit => 'Presiona atrás otra vez para salir';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Usar tunelización de video acelerada por hardware. Desactivar si ves una pantalla negra con audio en contenido HDR';
@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 confirmExitOnBack => 'Confirmar antes de salir';
@override String get confirmExitOnBackDescription => 'Mostrar un diálogo de confirmación al presionar atrás para salir de la app';
@override String get forceTvMode => 'Forzar modo TV';
@override String get forceTvModeDescription => 'Usar el diseño de TV independientemente de la detección automática. Útil en dispositivos Android TV que no informan la característica leanback. Reinicia la app al cambiar.';
@override String get startInFullscreen => 'Iniciar en pantalla completa';
@@ -1800,9 +1796,6 @@ extension on TranslationsEs {
'common.mute' => 'Silencio',
'common.ok' => 'OK',
'common.reconnect' => 'Reconectar',
'common.exitConfirmTitle' => '¿Salir de la app?',
'common.exitConfirmMessage' => '¿Estás seguro de que quieres salir?',
'common.dontAskAgain' => 'No volver a preguntar',
'common.exit' => 'Salir',
'common.viewAll' => 'Ver todo',
'common.checkingNetwork' => 'Comprobando red...',
@@ -1813,6 +1806,7 @@ extension on TranslationsEs {
'common.loading' => 'Cargando...',
'common.fullscreen' => 'Pantalla completa',
'common.exitFullscreen' => 'Salir de pantalla completa',
'common.pressBackAgainToExit' => 'Presiona atrás otra vez para salir',
'screens.licenses' => 'Licencias',
'screens.switchProfile' => 'Cambiar Perfil',
'screens.subtitleStyling' => 'Estilo de Subtítulos',
@@ -1994,8 +1988,6 @@ extension on TranslationsEs {
'settings.tunneledPlaybackDescription' => 'Usar tunelización de video acelerada por hardware. Desactivar si ves una pantalla negra con audio en contenido HDR',
'settings.requireProfileSelectionOnOpen' => 'Pedir perfil al abrir la app',
'settings.requireProfileSelectionOnOpenDescription' => 'Mostrar selección de perfil cada vez que se abre la aplicación',
'settings.confirmExitOnBack' => 'Confirmar antes de salir',
'settings.confirmExitOnBackDescription' => 'Mostrar un diálogo de confirmación al presionar atrás para salir de la app',
'settings.forceTvMode' => 'Forzar modo TV',
'settings.forceTvModeDescription' => 'Usar el diseño de TV independientemente de la detección automática. Útil en dispositivos Android TV que no informan la característica leanback. Reinicia la app al cambiar.',
'settings.startInFullscreen' => 'Iniciar en pantalla completa',
@@ -2264,12 +2256,12 @@ extension on TranslationsEs {
'profiles.pinManagedByPlex' => 'PIN gestionado por Plex. Edita en plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Sin PIN establecido. Para requerir uno, edita el usuario Home en plex.tv.',
'profiles.setPin' => 'Establecer PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Conexiones',
'profiles.add' => 'Añadir',
'profiles.deleteProfileButton' => 'Eliminar perfil',
'profiles.noConnectionsHint' => 'Sin conexiones — añade una para usar este perfil.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Cuenta Plex Home',
'profiles.connectionDefault' => 'Predeterminada',
'profiles.makeDefault' => 'Establecer como predeterminada',
@@ -2778,12 +2770,12 @@ extension on TranslationsEs {
'metadataEdit.episodeOrdering' => 'Orden de episodios',
'metadataEdit.tmdbAiring' => 'The Movie Database (Emisión)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Emisión)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absoluto)',
'metadataEdit.metadataLanguage' => 'Idioma de metadatos',
'metadataEdit.useOriginalTitle' => 'Usar título original',
'metadataEdit.preferredAudioLanguage' => 'Idioma de audio preferido',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Idioma de subtítulos preferido',
'metadataEdit.subtitleMode' => 'Selección automática de subtítulos',
'metadataEdit.manuallySelected' => 'Seleccionado manualmente',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonFr extends TranslationsCommonEn {
@override String get mute => 'Muet';
@override String get ok => 'OK';
@override String get reconnect => 'Reconnecter';
@override String get exitConfirmTitle => 'Quitter l\'application ?';
@override String get exitConfirmMessage => 'Êtes-vous sûr de vouloir quitter ?';
@override String get dontAskAgain => 'Ne plus demander';
@override String get exit => 'Quitter';
@override String get viewAll => 'Tout afficher';
@override String get checkingNetwork => 'Vérification du réseau...';
@@ -171,6 +168,7 @@ class _TranslationsCommonFr extends TranslationsCommonEn {
@override String get loading => 'Chargement...';
@override String get fullscreen => 'Plein écran';
@override String get exitFullscreen => 'Quitter le plein écran';
@override String get pressBackAgainToExit => 'Appuyez à nouveau sur retour pour quitter';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Utiliser le tunnelage vidéo accéléré par matériel. Désactiver si vous voyez un écran noir avec du son sur du contenu HDR';
@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 confirmExitOnBack => 'Confirmer avant de quitter';
@override String get confirmExitOnBackDescription => 'Afficher une boîte de dialogue de confirmation en appuyant sur retour pour quitter';
@override String get forceTvMode => 'Forcer le mode TV';
@override String get forceTvModeDescription => 'Utiliser la mise en page TV quelle que soit la détection automatique. Utile sur les appareils Android TV qui ne signalent pas la fonctionnalité leanback. Redémarre l\'application lors du changement.';
@override String get startInFullscreen => 'Démarrer en plein écran';
@@ -1800,9 +1796,6 @@ extension on TranslationsFr {
'common.mute' => 'Muet',
'common.ok' => 'OK',
'common.reconnect' => 'Reconnecter',
'common.exitConfirmTitle' => 'Quitter l\'application ?',
'common.exitConfirmMessage' => 'Êtes-vous sûr de vouloir quitter ?',
'common.dontAskAgain' => 'Ne plus demander',
'common.exit' => 'Quitter',
'common.viewAll' => 'Tout afficher',
'common.checkingNetwork' => 'Vérification du réseau...',
@@ -1813,6 +1806,7 @@ extension on TranslationsFr {
'common.loading' => 'Chargement...',
'common.fullscreen' => 'Plein écran',
'common.exitFullscreen' => 'Quitter le plein écran',
'common.pressBackAgainToExit' => 'Appuyez à nouveau sur retour pour quitter',
'screens.licenses' => 'Licences',
'screens.switchProfile' => 'Changer de profil',
'screens.subtitleStyling' => 'Configuration des sous-titres',
@@ -1994,8 +1988,6 @@ extension on TranslationsFr {
'settings.tunneledPlaybackDescription' => 'Utiliser le tunnelage vidéo accéléré par matériel. Désactiver si vous voyez un écran noir avec du son sur du contenu HDR',
'settings.requireProfileSelectionOnOpen' => 'Demander le profil à l\'ouverture',
'settings.requireProfileSelectionOnOpenDescription' => 'Afficher la sélection de profil à chaque ouverture de l\'application',
'settings.confirmExitOnBack' => 'Confirmer avant de quitter',
'settings.confirmExitOnBackDescription' => 'Afficher une boîte de dialogue de confirmation en appuyant sur retour pour quitter',
'settings.forceTvMode' => 'Forcer le mode TV',
'settings.forceTvModeDescription' => 'Utiliser la mise en page TV quelle que soit la détection automatique. Utile sur les appareils Android TV qui ne signalent pas la fonctionnalité leanback. Redémarre l\'application lors du changement.',
'settings.startInFullscreen' => 'Démarrer en plein écran',
@@ -2264,12 +2256,12 @@ extension on TranslationsFr {
'profiles.pinManagedByPlex' => 'PIN géré par Plex. Modifier sur plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Aucun PIN défini. Pour en exiger un, modifiez l\'utilisateur Home sur plex.tv.',
'profiles.setPin' => 'Définir un PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Connexions',
'profiles.add' => 'Ajouter',
'profiles.deleteProfileButton' => 'Supprimer le profil',
'profiles.noConnectionsHint' => 'Aucune connexion — ajoutez-en une pour utiliser ce profil.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Compte Plex Home',
'profiles.connectionDefault' => 'Par défaut',
'profiles.makeDefault' => 'Définir par défaut',
@@ -2778,12 +2770,12 @@ extension on TranslationsFr {
'metadataEdit.episodeOrdering' => 'Ordre des épisodes',
'metadataEdit.tmdbAiring' => 'The Movie Database (Diffusion)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Diffusion)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolu)',
'metadataEdit.metadataLanguage' => 'Langue des métadonnées',
'metadataEdit.useOriginalTitle' => 'Utiliser le titre original',
'metadataEdit.preferredAudioLanguage' => 'Langue audio préférée',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Langue de sous-titres préférée',
'metadataEdit.subtitleMode' => 'Sélection automatique des sous-titres',
'metadataEdit.manuallySelected' => 'Sélectionné manuellement',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonIt extends TranslationsCommonEn {
@override String get mute => 'Muto';
@override String get ok => 'OK';
@override String get reconnect => 'Riconnetti';
@override String get exitConfirmTitle => 'Uscire dall\'app?';
@override String get exitConfirmMessage => 'Sei sicuro di voler uscire?';
@override String get dontAskAgain => 'Non chiedere più';
@override String get exit => 'Esci';
@override String get viewAll => 'Mostra tutto';
@override String get checkingNetwork => 'Verifica rete...';
@@ -171,6 +168,7 @@ class _TranslationsCommonIt extends TranslationsCommonEn {
@override String get loading => 'Caricamento...';
@override String get fullscreen => 'Schermo intero';
@override String get exitFullscreen => 'Esci da schermo intero';
@override String get pressBackAgainToExit => 'Premi di nuovo indietro per uscire';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Usa il tunneling video accelerato dall\'hardware. Disattiva se vedi uno schermo nero con audio su contenuti HDR';
@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 confirmExitOnBack => 'Conferma prima di uscire';
@override String get confirmExitOnBackDescription => 'Mostra una finestra di conferma quando si preme indietro per uscire dall\'app';
@override String get forceTvMode => 'Forza modalità TV';
@override String get forceTvModeDescription => 'Usa il layout TV indipendentemente dal rilevamento automatico. Utile sui dispositivi Android TV che non segnalano la funzionalità leanback. Riavvia l\'app al cambiamento.';
@override String get startInFullscreen => 'Avvia a schermo intero';
@@ -1800,9 +1796,6 @@ extension on TranslationsIt {
'common.mute' => 'Muto',
'common.ok' => 'OK',
'common.reconnect' => 'Riconnetti',
'common.exitConfirmTitle' => 'Uscire dall\'app?',
'common.exitConfirmMessage' => 'Sei sicuro di voler uscire?',
'common.dontAskAgain' => 'Non chiedere più',
'common.exit' => 'Esci',
'common.viewAll' => 'Mostra tutto',
'common.checkingNetwork' => 'Verifica rete...',
@@ -1813,6 +1806,7 @@ extension on TranslationsIt {
'common.loading' => 'Caricamento...',
'common.fullscreen' => 'Schermo intero',
'common.exitFullscreen' => 'Esci da schermo intero',
'common.pressBackAgainToExit' => 'Premi di nuovo indietro per uscire',
'screens.licenses' => 'Licenze',
'screens.switchProfile' => 'Cambia profilo',
'screens.subtitleStyling' => 'Stile sottotitoli',
@@ -1994,8 +1988,6 @@ extension on TranslationsIt {
'settings.tunneledPlaybackDescription' => 'Usa il tunneling video accelerato dall\'hardware. Disattiva se vedi uno schermo nero con audio su contenuti HDR',
'settings.requireProfileSelectionOnOpen' => 'Chiedi profilo all\'apertura',
'settings.requireProfileSelectionOnOpenDescription' => 'Mostra la selezione del profilo ogni volta che l\'app viene aperta',
'settings.confirmExitOnBack' => 'Conferma prima di uscire',
'settings.confirmExitOnBackDescription' => 'Mostra una finestra di conferma quando si preme indietro per uscire dall\'app',
'settings.forceTvMode' => 'Forza modalità TV',
'settings.forceTvModeDescription' => 'Usa il layout TV indipendentemente dal rilevamento automatico. Utile sui dispositivi Android TV che non segnalano la funzionalità leanback. Riavvia l\'app al cambiamento.',
'settings.startInFullscreen' => 'Avvia a schermo intero',
@@ -2264,12 +2256,12 @@ extension on TranslationsIt {
'profiles.pinManagedByPlex' => 'PIN gestito da Plex. Modifica su plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Nessun PIN impostato. Per richiederne uno, modifica l\'utente Home su plex.tv.',
'profiles.setPin' => 'Imposta PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Connessioni',
'profiles.add' => 'Aggiungi',
'profiles.deleteProfileButton' => 'Elimina profilo',
'profiles.noConnectionsHint' => 'Nessuna connessione — aggiungine una per usare questo profilo.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Account Plex Home',
'profiles.connectionDefault' => 'Predefinita',
'profiles.makeDefault' => 'Imposta come predefinita',
@@ -2778,12 +2770,12 @@ extension on TranslationsIt {
'metadataEdit.episodeOrdering' => 'Ordine episodi',
'metadataEdit.tmdbAiring' => 'The Movie Database (In onda)',
'metadataEdit.tvdbAiring' => 'TheTVDB (In onda)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Assoluto)',
'metadataEdit.metadataLanguage' => 'Lingua metadati',
'metadataEdit.useOriginalTitle' => 'Usa titolo originale',
'metadataEdit.preferredAudioLanguage' => 'Lingua audio preferita',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Lingua sottotitoli preferita',
'metadataEdit.subtitleMode' => 'Selezione automatica sottotitoli',
'metadataEdit.manuallySelected' => 'Selezionato manualmente',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonJa extends TranslationsCommonEn {
@override String get mute => 'ミュート';
@override String get ok => 'OK';
@override String get reconnect => '再接続';
@override String get exitConfirmTitle => 'アプリを終了しますか?';
@override String get exitConfirmMessage => '終了してもよろしいですか?';
@override String get dontAskAgain => '次回から表示しない';
@override String get exit => '終了';
@override String get viewAll => 'すべて表示';
@override String get checkingNetwork => 'ネットワークを確認中...';
@@ -171,6 +168,7 @@ class _TranslationsCommonJa extends TranslationsCommonEn {
@override String get loading => '読み込み中...';
@override String get fullscreen => 'フルスクリーン';
@override String get exitFullscreen => 'フルスクリーンを終了';
@override String get pressBackAgainToExit => 'もう一度押すと終了します';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'ハードウェアアクセラレーションされたビデオトンネリングを使用。HDRコンテンツで音声のみで画面が黒くなる場合は無効にしてください';
@override String get requireProfileSelectionOnOpen => 'アプリ起動時にプロフィールを確認';
@override String get requireProfileSelectionOnOpenDescription => 'アプリを開くたびにプロフィール選択を表示';
@override String get confirmExitOnBack => '終了前に確認';
@override String get confirmExitOnBackDescription => '戻るボタンでアプリを終了する際に確認ダイアログを表示';
@override String get forceTvMode => 'TVモードを強制';
@override String get forceTvModeDescription => '自動検出に関係なくTVレイアウトを使用します。leanback機能を報告しないAndroid TVデバイスで便利です。変更するとアプリが再起動されます。';
@override String get startInFullscreen => '全画面表示で起動';
@@ -1800,9 +1796,6 @@ extension on TranslationsJa {
'common.mute' => 'ミュート',
'common.ok' => 'OK',
'common.reconnect' => '再接続',
'common.exitConfirmTitle' => 'アプリを終了しますか?',
'common.exitConfirmMessage' => '終了してもよろしいですか?',
'common.dontAskAgain' => '次回から表示しない',
'common.exit' => '終了',
'common.viewAll' => 'すべて表示',
'common.checkingNetwork' => 'ネットワークを確認中...',
@@ -1813,6 +1806,7 @@ extension on TranslationsJa {
'common.loading' => '読み込み中...',
'common.fullscreen' => 'フルスクリーン',
'common.exitFullscreen' => 'フルスクリーンを終了',
'common.pressBackAgainToExit' => 'もう一度押すと終了します',
'screens.licenses' => 'ライセンス',
'screens.switchProfile' => 'プロフィール切替',
'screens.subtitleStyling' => '字幕スタイル',
@@ -1994,8 +1988,6 @@ extension on TranslationsJa {
'settings.tunneledPlaybackDescription' => 'ハードウェアアクセラレーションされたビデオトンネリングを使用。HDRコンテンツで音声のみで画面が黒くなる場合は無効にしてください',
'settings.requireProfileSelectionOnOpen' => 'アプリ起動時にプロフィールを確認',
'settings.requireProfileSelectionOnOpenDescription' => 'アプリを開くたびにプロフィール選択を表示',
'settings.confirmExitOnBack' => '終了前に確認',
'settings.confirmExitOnBackDescription' => '戻るボタンでアプリを終了する際に確認ダイアログを表示',
'settings.forceTvMode' => 'TVモードを強制',
'settings.forceTvModeDescription' => '自動検出に関係なくTVレイアウトを使用します。leanback機能を報告しないAndroid TVデバイスで便利です。変更するとアプリが再起動されます。',
'settings.startInFullscreen' => '全画面表示で起動',
@@ -2264,12 +2256,12 @@ extension on TranslationsJa {
'profiles.pinManagedByPlex' => 'PINはPlexで管理されています。plex.tvで編集してください。',
'profiles.noPinSetEditOnPlex' => 'PINが設定されていません。要求するには、plex.tvでHomeユーザーを編集してください。',
'profiles.setPin' => 'PINを設定',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => '接続',
'profiles.add' => '追加',
'profiles.deleteProfileButton' => 'プロファイルを削除',
'profiles.noConnectionsHint' => '接続がありません — このプロファイルを使うには1つ追加してください。',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Plex Homeアカウント',
'profiles.connectionDefault' => 'デフォルト',
'profiles.makeDefault' => 'デフォルトに設定',
@@ -2778,12 +2770,12 @@ extension on TranslationsJa {
'metadataEdit.episodeOrdering' => 'エピソードの順序',
'metadataEdit.tmdbAiring' => 'The Movie Database(放送順)',
'metadataEdit.tvdbAiring' => 'TheTVDB(放送順)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB(絶対順)',
'metadataEdit.metadataLanguage' => 'メタデータの言語',
'metadataEdit.useOriginalTitle' => '原題を使用',
'metadataEdit.preferredAudioLanguage' => '優先音声言語',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => '優先字幕言語',
'metadataEdit.subtitleMode' => '字幕自動選択モード',
'metadataEdit.manuallySelected' => '手動選択',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonKo extends TranslationsCommonEn {
@override String get mute => '음소거';
@override String get ok => '확인';
@override String get reconnect => '다시 연결';
@override String get exitConfirmTitle => '앱을 종료하시겠습니까?';
@override String get exitConfirmMessage => '정말 종료하시겠습니까?';
@override String get dontAskAgain => '다시 묻지 않기';
@override String get exit => '종료';
@override String get viewAll => '모두 보기';
@override String get checkingNetwork => '네트워크 확인 중...';
@@ -171,6 +168,7 @@ class _TranslationsCommonKo extends TranslationsCommonEn {
@override String get loading => '로딩 중...';
@override String get fullscreen => '전체화면';
@override String get exitFullscreen => '전체화면 종료';
@override String get pressBackAgainToExit => '한 번 더 누르면 종료됩니다';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => '하드웨어 가속 비디오 터널링을 사용합니다. HDR 콘텐츠에서 소리만 나고 검은 화면이 보이면 비활성화하세요';
@override String get requireProfileSelectionOnOpen => '앱 실행 시 프로필 선택';
@override String get requireProfileSelectionOnOpenDescription => '앱을 열 때마다 프로필 선택 화면을 표시합니다';
@override String get confirmExitOnBack => '종료 전 확인';
@override String get confirmExitOnBackDescription => '뒤로 버튼을 눌러 앱을 종료할 때 확인 대화상자를 표시합니다';
@override String get forceTvMode => 'TV 모드 강제 사용';
@override String get forceTvModeDescription => '자동 감지와 관계없이 TV 레이아웃을 사용합니다. leanback 기능을 보고하지 않는 Android TV 기기에 유용합니다. 변경 시 앱이 다시 시작됩니다.';
@override String get startInFullscreen => '전체화면으로 시작';
@@ -1800,9 +1796,6 @@ extension on TranslationsKo {
'common.mute' => '음소거',
'common.ok' => '확인',
'common.reconnect' => '다시 연결',
'common.exitConfirmTitle' => '앱을 종료하시겠습니까?',
'common.exitConfirmMessage' => '정말 종료하시겠습니까?',
'common.dontAskAgain' => '다시 묻지 않기',
'common.exit' => '종료',
'common.viewAll' => '모두 보기',
'common.checkingNetwork' => '네트워크 확인 중...',
@@ -1813,6 +1806,7 @@ extension on TranslationsKo {
'common.loading' => '로딩 중...',
'common.fullscreen' => '전체화면',
'common.exitFullscreen' => '전체화면 종료',
'common.pressBackAgainToExit' => '한 번 더 누르면 종료됩니다',
'screens.licenses' => '라이선스',
'screens.switchProfile' => '프로필 전환',
'screens.subtitleStyling' => '자막 스타일 설정',
@@ -1994,8 +1988,6 @@ extension on TranslationsKo {
'settings.tunneledPlaybackDescription' => '하드웨어 가속 비디오 터널링을 사용합니다. HDR 콘텐츠에서 소리만 나고 검은 화면이 보이면 비활성화하세요',
'settings.requireProfileSelectionOnOpen' => '앱 실행 시 프로필 선택',
'settings.requireProfileSelectionOnOpenDescription' => '앱을 열 때마다 프로필 선택 화면을 표시합니다',
'settings.confirmExitOnBack' => '종료 전 확인',
'settings.confirmExitOnBackDescription' => '뒤로 버튼을 눌러 앱을 종료할 때 확인 대화상자를 표시합니다',
'settings.forceTvMode' => 'TV 모드 강제 사용',
'settings.forceTvModeDescription' => '자동 감지와 관계없이 TV 레이아웃을 사용합니다. leanback 기능을 보고하지 않는 Android TV 기기에 유용합니다. 변경 시 앱이 다시 시작됩니다.',
'settings.startInFullscreen' => '전체화면으로 시작',
@@ -2264,12 +2256,12 @@ extension on TranslationsKo {
'profiles.pinManagedByPlex' => 'PIN은 Plex에서 관리됩니다. plex.tv에서 편집하세요.',
'profiles.noPinSetEditOnPlex' => '설정된 PIN이 없습니다. 요구하려면 plex.tv에서 Home 사용자를 편집하세요.',
'profiles.setPin' => 'PIN 설정',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => '연결',
'profiles.add' => '추가',
'profiles.deleteProfileButton' => '프로필 삭제',
'profiles.noConnectionsHint' => '연결이 없습니다 — 이 프로필을 사용하려면 하나 추가하세요.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Plex Home 계정',
'profiles.connectionDefault' => '기본값',
'profiles.makeDefault' => '기본값으로 설정',
@@ -2778,12 +2770,12 @@ extension on TranslationsKo {
'metadataEdit.episodeOrdering' => '에피소드 순서',
'metadataEdit.tmdbAiring' => 'The Movie Database (방영순)',
'metadataEdit.tvdbAiring' => 'TheTVDB (방영순)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (절대순)',
'metadataEdit.metadataLanguage' => '메타데이터 언어',
'metadataEdit.useOriginalTitle' => '원제 사용',
'metadataEdit.preferredAudioLanguage' => '선호 오디오 언어',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => '선호 자막 언어',
'metadataEdit.subtitleMode' => '자막 자동 선택 모드',
'metadataEdit.manuallySelected' => '수동 선택',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonNb extends TranslationsCommonEn {
@override String get mute => 'Demp';
@override String get ok => 'OK';
@override String get reconnect => 'Koble til på nytt';
@override String get exitConfirmTitle => 'Avslutte appen?';
@override String get exitConfirmMessage => 'Er du sikker på at du vil avslutte?';
@override String get dontAskAgain => 'Ikke spør igjen';
@override String get exit => 'Avslutt';
@override String get viewAll => 'Vis alle';
@override String get checkingNetwork => 'Sjekker nettverk...';
@@ -171,6 +168,7 @@ class _TranslationsCommonNb extends TranslationsCommonEn {
@override String get loading => 'Laster...';
@override String get fullscreen => 'Fullskjerm';
@override String get exitFullscreen => 'Avslutt fullskjerm';
@override String get pressBackAgainToExit => 'Trykk tilbake igjen for å avslutte';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Bruk maskinvareakselerert videotunnelering. Deaktiver hvis du ser svart skjerm med lyd på HDR-innhold';
@override String get requireProfileSelectionOnOpen => 'Spør om profil ved appåpning';
@override String get requireProfileSelectionOnOpenDescription => 'Vis profilvalg hver gang appen åpnes';
@override String get confirmExitOnBack => 'Bekreft før avslutning';
@override String get confirmExitOnBackDescription => 'Vis en bekreftelsesdialog når du trykker tilbake for å avslutte appen';
@override String get forceTvMode => 'Tving TV-modus';
@override String get forceTvModeDescription => 'Bruk TV-oppsettet uavhengig av automatisk gjenkjenning. Nyttig på Android TV-enheter som ikke rapporterer leanback-funksjonen. Starter appen på nytt ved endring.';
@override String get startInFullscreen => 'Start i fullskjerm';
@@ -1800,9 +1796,6 @@ extension on TranslationsNb {
'common.mute' => 'Demp',
'common.ok' => 'OK',
'common.reconnect' => 'Koble til på nytt',
'common.exitConfirmTitle' => 'Avslutte appen?',
'common.exitConfirmMessage' => 'Er du sikker på at du vil avslutte?',
'common.dontAskAgain' => 'Ikke spør igjen',
'common.exit' => 'Avslutt',
'common.viewAll' => 'Vis alle',
'common.checkingNetwork' => 'Sjekker nettverk...',
@@ -1813,6 +1806,7 @@ extension on TranslationsNb {
'common.loading' => 'Laster...',
'common.fullscreen' => 'Fullskjerm',
'common.exitFullscreen' => 'Avslutt fullskjerm',
'common.pressBackAgainToExit' => 'Trykk tilbake igjen for å avslutte',
'screens.licenses' => 'Lisenser',
'screens.switchProfile' => 'Bytt profil',
'screens.subtitleStyling' => 'Undertekststil',
@@ -1994,8 +1988,6 @@ extension on TranslationsNb {
'settings.tunneledPlaybackDescription' => 'Bruk maskinvareakselerert videotunnelering. Deaktiver hvis du ser svart skjerm med lyd på HDR-innhold',
'settings.requireProfileSelectionOnOpen' => 'Spør om profil ved appåpning',
'settings.requireProfileSelectionOnOpenDescription' => 'Vis profilvalg hver gang appen åpnes',
'settings.confirmExitOnBack' => 'Bekreft før avslutning',
'settings.confirmExitOnBackDescription' => 'Vis en bekreftelsesdialog når du trykker tilbake for å avslutte appen',
'settings.forceTvMode' => 'Tving TV-modus',
'settings.forceTvModeDescription' => 'Bruk TV-oppsettet uavhengig av automatisk gjenkjenning. Nyttig på Android TV-enheter som ikke rapporterer leanback-funksjonen. Starter appen på nytt ved endring.',
'settings.startInFullscreen' => 'Start i fullskjerm',
@@ -2264,12 +2256,12 @@ extension on TranslationsNb {
'profiles.pinManagedByPlex' => 'PIN administreres av Plex. Rediger på plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Ingen PIN er satt. For å kreve én, rediger Home-brukeren på plex.tv.',
'profiles.setPin' => 'Sett PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Tilkoblinger',
'profiles.add' => 'Legg til',
'profiles.deleteProfileButton' => 'Slett profil',
'profiles.noConnectionsHint' => 'Ingen tilkoblinger — legg til én for å bruke denne profilen.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Plex Home-konto',
'profiles.connectionDefault' => 'Standard',
'profiles.makeDefault' => 'Gjør til standard',
@@ -2778,12 +2770,12 @@ extension on TranslationsNb {
'metadataEdit.episodeOrdering' => 'Episoderekkefølge',
'metadataEdit.tmdbAiring' => 'The Movie Database (Sendt)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Sendt)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolutt)',
'metadataEdit.metadataLanguage' => 'Metadataspråk',
'metadataEdit.useOriginalTitle' => 'Bruk originaltittel',
'metadataEdit.preferredAudioLanguage' => 'Foretrukket lydspråk',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Foretrukket undertekstspråk',
'metadataEdit.subtitleMode' => 'Automatisk valg av undertekstmodus',
'metadataEdit.manuallySelected' => 'Manuelt valgt',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonNl extends TranslationsCommonEn {
@override String get mute => 'Dempen';
@override String get ok => 'OK';
@override String get reconnect => 'Opnieuw verbinden';
@override String get exitConfirmTitle => 'App afsluiten?';
@override String get exitConfirmMessage => 'Weet je zeker dat je wilt afsluiten?';
@override String get dontAskAgain => 'Niet meer vragen';
@override String get exit => 'Afsluiten';
@override String get viewAll => 'Alles weergeven';
@override String get checkingNetwork => 'Netwerk controleren...';
@@ -171,6 +168,7 @@ class _TranslationsCommonNl extends TranslationsCommonEn {
@override String get loading => 'Laden...';
@override String get fullscreen => 'Volledig scherm';
@override String get exitFullscreen => 'Volledig scherm verlaten';
@override String get pressBackAgainToExit => 'Druk nogmaals op terug om af te sluiten';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Gebruik hardwareversnelde videotunneling. Schakel uit als je een zwart scherm met geluid ziet bij HDR-content';
@override String get requireProfileSelectionOnOpen => 'Vraag om profiel bij openen';
@override String get requireProfileSelectionOnOpenDescription => 'Toon profielselectie telkens wanneer de app wordt geopend';
@override String get confirmExitOnBack => 'Bevestigen voor afsluiten';
@override String get confirmExitOnBackDescription => 'Toon een bevestigingsvenster bij het drukken op terug om de app af te sluiten';
@override String get forceTvMode => 'TV-modus forceren';
@override String get forceTvModeDescription => 'Gebruik de TV-indeling ongeacht automatische detectie. Handig op Android TV-apparaten die de leanback-functie niet melden. Start de app opnieuw bij wijziging.';
@override String get startInFullscreen => 'Starten in volledig scherm';
@@ -1800,9 +1796,6 @@ extension on TranslationsNl {
'common.mute' => 'Dempen',
'common.ok' => 'OK',
'common.reconnect' => 'Opnieuw verbinden',
'common.exitConfirmTitle' => 'App afsluiten?',
'common.exitConfirmMessage' => 'Weet je zeker dat je wilt afsluiten?',
'common.dontAskAgain' => 'Niet meer vragen',
'common.exit' => 'Afsluiten',
'common.viewAll' => 'Alles weergeven',
'common.checkingNetwork' => 'Netwerk controleren...',
@@ -1813,6 +1806,7 @@ extension on TranslationsNl {
'common.loading' => 'Laden...',
'common.fullscreen' => 'Volledig scherm',
'common.exitFullscreen' => 'Volledig scherm verlaten',
'common.pressBackAgainToExit' => 'Druk nogmaals op terug om af te sluiten',
'screens.licenses' => 'Licenties',
'screens.switchProfile' => 'Wissel van profiel',
'screens.subtitleStyling' => 'Ondertitel opmaak',
@@ -1994,8 +1988,6 @@ extension on TranslationsNl {
'settings.tunneledPlaybackDescription' => 'Gebruik hardwareversnelde videotunneling. Schakel uit als je een zwart scherm met geluid ziet bij HDR-content',
'settings.requireProfileSelectionOnOpen' => 'Vraag om profiel bij openen',
'settings.requireProfileSelectionOnOpenDescription' => 'Toon profielselectie telkens wanneer de app wordt geopend',
'settings.confirmExitOnBack' => 'Bevestigen voor afsluiten',
'settings.confirmExitOnBackDescription' => 'Toon een bevestigingsvenster bij het drukken op terug om de app af te sluiten',
'settings.forceTvMode' => 'TV-modus forceren',
'settings.forceTvModeDescription' => 'Gebruik de TV-indeling ongeacht automatische detectie. Handig op Android TV-apparaten die de leanback-functie niet melden. Start de app opnieuw bij wijziging.',
'settings.startInFullscreen' => 'Starten in volledig scherm',
@@ -2264,12 +2256,12 @@ extension on TranslationsNl {
'profiles.pinManagedByPlex' => 'PIN wordt beheerd door Plex. Bewerk op plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Geen PIN ingesteld. Bewerk de Home-gebruiker op plex.tv om er één te vereisen.',
'profiles.setPin' => 'PIN instellen',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Verbindingen',
'profiles.add' => 'Toevoegen',
'profiles.deleteProfileButton' => 'Profiel verwijderen',
'profiles.noConnectionsHint' => 'Geen verbindingen — voeg er één toe om dit profiel te gebruiken.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Plex Home-account',
'profiles.connectionDefault' => 'Standaard',
'profiles.makeDefault' => 'Als standaard instellen',
@@ -2778,12 +2770,12 @@ extension on TranslationsNl {
'metadataEdit.episodeOrdering' => 'Afleveringsvolgorde',
'metadataEdit.tmdbAiring' => 'The Movie Database (Uitgezonden)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Uitgezonden)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absoluut)',
'metadataEdit.metadataLanguage' => 'Metadatataal',
'metadataEdit.useOriginalTitle' => 'Oorspronkelijke titel gebruiken',
'metadataEdit.preferredAudioLanguage' => 'Voorkeurstaal audio',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Voorkeurstaal ondertiteling',
'metadataEdit.subtitleMode' => 'Automatische ondertitelselectie',
'metadataEdit.manuallySelected' => 'Handmatig geselecteerd',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonPl extends TranslationsCommonEn {
@override String get mute => 'Wycisz';
@override String get ok => 'OK';
@override String get reconnect => 'Połącz ponownie';
@override String get exitConfirmTitle => 'Zamknąć aplikację?';
@override String get exitConfirmMessage => 'Czy na pewno chcesz wyjść?';
@override String get dontAskAgain => 'Nie pytaj ponownie';
@override String get exit => 'Wyjdź';
@override String get viewAll => 'Pokaż wszystko';
@override String get checkingNetwork => 'Sprawdzanie sieci...';
@@ -171,6 +168,7 @@ class _TranslationsCommonPl extends TranslationsCommonEn {
@override String get loading => 'Ładowanie...';
@override String get fullscreen => 'Pełny ekran';
@override String get exitFullscreen => 'Wyjdź z pełnego ekranu';
@override String get pressBackAgainToExit => 'Naciśnij wstecz ponownie, aby wyjść';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Użyj sprzętowo przyspieszonego tunelowania wideo. Wyłącz, jeśli widzisz czarny ekran z dźwiękiem przy treściach HDR';
@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 confirmExitOnBack => 'Potwierdź przed wyjściem';
@override String get confirmExitOnBackDescription => 'Pokaż dialog potwierdzenia przy naciśnięciu wstecz, aby wyjść z aplikacji';
@override String get forceTvMode => 'Wymuś tryb TV';
@override String get forceTvModeDescription => 'Użyj układu TV niezależnie od automatycznego wykrywania. Przydatne na urządzeniach Android TV, które nie zgłaszają funkcji leanback. Po zmianie aplikacja zostanie zrestartowana.';
@override String get startInFullscreen => 'Uruchom na pełnym ekranie';
@@ -1800,9 +1796,6 @@ extension on TranslationsPl {
'common.mute' => 'Wycisz',
'common.ok' => 'OK',
'common.reconnect' => 'Połącz ponownie',
'common.exitConfirmTitle' => 'Zamknąć aplikację?',
'common.exitConfirmMessage' => 'Czy na pewno chcesz wyjść?',
'common.dontAskAgain' => 'Nie pytaj ponownie',
'common.exit' => 'Wyjdź',
'common.viewAll' => 'Pokaż wszystko',
'common.checkingNetwork' => 'Sprawdzanie sieci...',
@@ -1813,6 +1806,7 @@ extension on TranslationsPl {
'common.loading' => 'Ładowanie...',
'common.fullscreen' => 'Pełny ekran',
'common.exitFullscreen' => 'Wyjdź z pełnego ekranu',
'common.pressBackAgainToExit' => 'Naciśnij wstecz ponownie, aby wyjść',
'screens.licenses' => 'Licencje',
'screens.switchProfile' => 'Zmień profil',
'screens.subtitleStyling' => 'Styl napisów',
@@ -1994,8 +1988,6 @@ extension on TranslationsPl {
'settings.tunneledPlaybackDescription' => 'Użyj sprzętowo przyspieszonego tunelowania wideo. Wyłącz, jeśli widzisz czarny ekran z dźwiękiem przy treściach HDR',
'settings.requireProfileSelectionOnOpen' => 'Pytaj o profil przy otwarciu aplikacji',
'settings.requireProfileSelectionOnOpenDescription' => 'Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana',
'settings.confirmExitOnBack' => 'Potwierdź przed wyjściem',
'settings.confirmExitOnBackDescription' => 'Pokaż dialog potwierdzenia przy naciśnięciu wstecz, aby wyjść z aplikacji',
'settings.forceTvMode' => 'Wymuś tryb TV',
'settings.forceTvModeDescription' => 'Użyj układu TV niezależnie od automatycznego wykrywania. Przydatne na urządzeniach Android TV, które nie zgłaszają funkcji leanback. Po zmianie aplikacja zostanie zrestartowana.',
'settings.startInFullscreen' => 'Uruchom na pełnym ekranie',
@@ -2264,12 +2256,12 @@ extension on TranslationsPl {
'profiles.pinManagedByPlex' => 'PIN zarządzany przez Plex. Edytuj na plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Nie ustawiono PIN-u. Aby go wymagać, edytuj użytkownika Home na plex.tv.',
'profiles.setPin' => 'Ustaw PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Połączenia',
'profiles.add' => 'Dodaj',
'profiles.deleteProfileButton' => 'Usuń profil',
'profiles.noConnectionsHint' => 'Brak połączeń — dodaj jedno, aby używać tego profilu.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Konto Plex Home',
'profiles.connectionDefault' => 'Domyślne',
'profiles.makeDefault' => 'Ustaw jako domyślne',
@@ -2778,12 +2770,12 @@ extension on TranslationsPl {
'metadataEdit.episodeOrdering' => 'Kolejność odcinków',
'metadataEdit.tmdbAiring' => 'The Movie Database (Emisja)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Emisja)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolutna)',
'metadataEdit.metadataLanguage' => 'Język metadanych',
'metadataEdit.useOriginalTitle' => 'Użyj oryginalnego tytułu',
'metadataEdit.preferredAudioLanguage' => 'Preferowany język audio',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Preferowany język napisów',
'metadataEdit.subtitleMode' => 'Tryb automatycznego wyboru napisów',
'metadataEdit.manuallySelected' => 'Wybrany ręcznie',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonPt extends TranslationsCommonEn {
@override String get mute => 'Silenciar';
@override String get ok => 'OK';
@override String get reconnect => 'Reconectar';
@override String get exitConfirmTitle => 'Sair do app?';
@override String get exitConfirmMessage => 'Tem certeza que deseja sair?';
@override String get dontAskAgain => 'Não perguntar novamente';
@override String get exit => 'Sair';
@override String get viewAll => 'Ver Tudo';
@override String get checkingNetwork => 'Verificando rede...';
@@ -171,6 +168,7 @@ class _TranslationsCommonPt extends TranslationsCommonEn {
@override String get loading => 'Carregando...';
@override String get fullscreen => 'Tela cheia';
@override String get exitFullscreen => 'Sair da tela cheia';
@override String get pressBackAgainToExit => 'Pressione voltar novamente para sair';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Usar tunelamento de vídeo acelerado por hardware. Desative se você vir uma tela preta com áudio em conteúdo HDR';
@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 confirmExitOnBack => 'Confirmar antes de sair';
@override String get confirmExitOnBackDescription => 'Mostrar diálogo de confirmação ao pressionar voltar para sair do app';
@override String get forceTvMode => 'Forçar modo TV';
@override String get forceTvModeDescription => 'Usar o layout de TV independentemente da detecção automática. Útil em dispositivos Android TV que não reportam o recurso leanback. Reinicia o app ao alterar.';
@override String get startInFullscreen => 'Iniciar em tela cheia';
@@ -1800,9 +1796,6 @@ extension on TranslationsPt {
'common.mute' => 'Silenciar',
'common.ok' => 'OK',
'common.reconnect' => 'Reconectar',
'common.exitConfirmTitle' => 'Sair do app?',
'common.exitConfirmMessage' => 'Tem certeza que deseja sair?',
'common.dontAskAgain' => 'Não perguntar novamente',
'common.exit' => 'Sair',
'common.viewAll' => 'Ver Tudo',
'common.checkingNetwork' => 'Verificando rede...',
@@ -1813,6 +1806,7 @@ extension on TranslationsPt {
'common.loading' => 'Carregando...',
'common.fullscreen' => 'Tela cheia',
'common.exitFullscreen' => 'Sair da tela cheia',
'common.pressBackAgainToExit' => 'Pressione voltar novamente para sair',
'screens.licenses' => 'Licenças',
'screens.switchProfile' => 'Trocar Perfil',
'screens.subtitleStyling' => 'Estilo de Legendas',
@@ -1994,8 +1988,6 @@ extension on TranslationsPt {
'settings.tunneledPlaybackDescription' => 'Usar tunelamento de vídeo acelerado por hardware. Desative se você vir uma tela preta com áudio em conteúdo HDR',
'settings.requireProfileSelectionOnOpen' => 'Pedir perfil ao abrir o app',
'settings.requireProfileSelectionOnOpenDescription' => 'Mostrar seleção de perfil toda vez que o app for aberto',
'settings.confirmExitOnBack' => 'Confirmar antes de sair',
'settings.confirmExitOnBackDescription' => 'Mostrar diálogo de confirmação ao pressionar voltar para sair do app',
'settings.forceTvMode' => 'Forçar modo TV',
'settings.forceTvModeDescription' => 'Usar o layout de TV independentemente da detecção automática. Útil em dispositivos Android TV que não reportam o recurso leanback. Reinicia o app ao alterar.',
'settings.startInFullscreen' => 'Iniciar em tela cheia',
@@ -2264,12 +2256,12 @@ extension on TranslationsPt {
'profiles.pinManagedByPlex' => 'PIN gerenciado pelo Plex. Edite em plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Nenhum PIN definido. Para exigir um, edite o usuário Home em plex.tv.',
'profiles.setPin' => 'Definir PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Conexões',
'profiles.add' => 'Adicionar',
'profiles.deleteProfileButton' => 'Excluir perfil',
'profiles.noConnectionsHint' => 'Sem conexões — adicione uma para usar este perfil.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Conta Plex Home',
'profiles.connectionDefault' => 'Padrão',
'profiles.makeDefault' => 'Definir como padrão',
@@ -2778,12 +2770,12 @@ extension on TranslationsPt {
'metadataEdit.episodeOrdering' => 'Ordenação de Episódios',
'metadataEdit.tmdbAiring' => 'The Movie Database (Exibição)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Exibição)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absoluto)',
'metadataEdit.metadataLanguage' => 'Idioma dos Metadados',
'metadataEdit.useOriginalTitle' => 'Usar Título Original',
'metadataEdit.preferredAudioLanguage' => 'Idioma de Áudio Preferido',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Idioma de Legenda Preferido',
'metadataEdit.subtitleMode' => 'Modo de Seleção Automática de Legendas',
'metadataEdit.manuallySelected' => 'Seleção manual',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonRu extends TranslationsCommonEn {
@override String get mute => 'Без звука';
@override String get ok => 'OK';
@override String get reconnect => 'Переподключить';
@override String get exitConfirmTitle => 'Выйти из приложения?';
@override String get exitConfirmMessage => 'Вы уверены, что хотите выйти?';
@override String get dontAskAgain => 'Больше не спрашивать';
@override String get exit => 'Выход';
@override String get viewAll => 'Показать все';
@override String get checkingNetwork => 'Проверка сети...';
@@ -171,6 +168,7 @@ class _TranslationsCommonRu extends TranslationsCommonEn {
@override String get loading => 'Загрузка...';
@override String get fullscreen => 'Полноэкранный режим';
@override String get exitFullscreen => 'Выйти из полноэкранного режима';
@override String get pressBackAgainToExit => 'Нажмите ещё раз для выхода';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Использовать аппаратный видеотуннелинг. Отключите, если видите чёрный экран со звуком при HDR-контенте';
@override String get requireProfileSelectionOnOpen => 'Запрашивать профиль при запуске';
@override String get requireProfileSelectionOnOpenDescription => 'Показывать выбор профиля при каждом открытии приложения';
@override String get confirmExitOnBack => 'Подтверждать выход';
@override String get confirmExitOnBackDescription => 'Показывать диалог подтверждения при нажатии «назад» для выхода из приложения';
@override String get forceTvMode => 'Принудительный режим ТВ';
@override String get forceTvModeDescription => 'Использовать макет ТВ независимо от автоматического определения. Полезно на устройствах Android TV, которые не сообщают о функции leanback. Приложение перезапустится при изменении.';
@override String get startInFullscreen => 'Запускать в полноэкранном режиме';
@@ -1800,9 +1796,6 @@ extension on TranslationsRu {
'common.mute' => 'Без звука',
'common.ok' => 'OK',
'common.reconnect' => 'Переподключить',
'common.exitConfirmTitle' => 'Выйти из приложения?',
'common.exitConfirmMessage' => 'Вы уверены, что хотите выйти?',
'common.dontAskAgain' => 'Больше не спрашивать',
'common.exit' => 'Выход',
'common.viewAll' => 'Показать все',
'common.checkingNetwork' => 'Проверка сети...',
@@ -1813,6 +1806,7 @@ extension on TranslationsRu {
'common.loading' => 'Загрузка...',
'common.fullscreen' => 'Полноэкранный режим',
'common.exitFullscreen' => 'Выйти из полноэкранного режима',
'common.pressBackAgainToExit' => 'Нажмите ещё раз для выхода',
'screens.licenses' => 'Лицензии',
'screens.switchProfile' => 'Сменить профиль',
'screens.subtitleStyling' => 'Стиль субтитров',
@@ -1994,8 +1988,6 @@ extension on TranslationsRu {
'settings.tunneledPlaybackDescription' => 'Использовать аппаратный видеотуннелинг. Отключите, если видите чёрный экран со звуком при HDR-контенте',
'settings.requireProfileSelectionOnOpen' => 'Запрашивать профиль при запуске',
'settings.requireProfileSelectionOnOpenDescription' => 'Показывать выбор профиля при каждом открытии приложения',
'settings.confirmExitOnBack' => 'Подтверждать выход',
'settings.confirmExitOnBackDescription' => 'Показывать диалог подтверждения при нажатии «назад» для выхода из приложения',
'settings.forceTvMode' => 'Принудительный режим ТВ',
'settings.forceTvModeDescription' => 'Использовать макет ТВ независимо от автоматического определения. Полезно на устройствах Android TV, которые не сообщают о функции leanback. Приложение перезапустится при изменении.',
'settings.startInFullscreen' => 'Запускать в полноэкранном режиме',
@@ -2264,12 +2256,12 @@ extension on TranslationsRu {
'profiles.pinManagedByPlex' => 'PIN управляется Plex. Редактируйте на plex.tv.',
'profiles.noPinSetEditOnPlex' => 'PIN не установлен. Чтобы требовать его, отредактируйте пользователя Home на plex.tv.',
'profiles.setPin' => 'Установить PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Соединения',
'profiles.add' => 'Добавить',
'profiles.deleteProfileButton' => 'Удалить профиль',
'profiles.noConnectionsHint' => 'Нет соединений — добавьте одно, чтобы использовать этот профиль.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Аккаунт Plex Home',
'profiles.connectionDefault' => 'По умолчанию',
'profiles.makeDefault' => 'Сделать по умолчанию',
@@ -2778,12 +2770,12 @@ extension on TranslationsRu {
'metadataEdit.episodeOrdering' => 'Порядок эпизодов',
'metadataEdit.tmdbAiring' => 'The Movie Database (Эфирный)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Эфирный)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Абсолютный)',
'metadataEdit.metadataLanguage' => 'Язык метаданных',
'metadataEdit.useOriginalTitle' => 'Использовать оригинальное название',
'metadataEdit.preferredAudioLanguage' => 'Предпочитаемый язык аудио',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Предпочитаемый язык субтитров',
'metadataEdit.subtitleMode' => 'Автовыбор субтитров',
'metadataEdit.manuallySelected' => 'Выбор вручную',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonSv extends TranslationsCommonEn {
@override String get mute => 'Ljud av';
@override String get ok => 'OK';
@override String get reconnect => 'Återanslut';
@override String get exitConfirmTitle => 'Avsluta appen?';
@override String get exitConfirmMessage => 'Är du säker på att du vill avsluta?';
@override String get dontAskAgain => 'Fråga inte igen';
@override String get exit => 'Avsluta';
@override String get viewAll => 'Visa alla';
@override String get checkingNetwork => 'Kontrollerar nätverk...';
@@ -171,6 +168,7 @@ class _TranslationsCommonSv extends TranslationsCommonEn {
@override String get loading => 'Laddar...';
@override String get fullscreen => 'Helskärm';
@override String get exitFullscreen => 'Avsluta helskärm';
@override String get pressBackAgainToExit => 'Tryck bakåt igen för att avsluta';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => 'Använd hårdvaruaccelererad videotunnling. Inaktivera om du ser en svart skärm med ljud vid HDR-innehåll';
@override String get requireProfileSelectionOnOpen => 'Fråga efter profil vid appstart';
@override String get requireProfileSelectionOnOpenDescription => 'Visa profilval varje gång appen öppnas';
@override String get confirmExitOnBack => 'Bekräfta innan avslut';
@override String get confirmExitOnBackDescription => 'Visa en bekräftelsedialog när du trycker tillbaka för att avsluta appen';
@override String get forceTvMode => 'Tvinga TV-läge';
@override String get forceTvModeDescription => 'Använd TV-layouten oavsett automatisk identifiering. Användbart på Android TV-enheter som inte rapporterar leanback-funktionen. Startar om appen vid ändring.';
@override String get startInFullscreen => 'Starta i helskärm';
@@ -1800,9 +1796,6 @@ extension on TranslationsSv {
'common.mute' => 'Ljud av',
'common.ok' => 'OK',
'common.reconnect' => 'Återanslut',
'common.exitConfirmTitle' => 'Avsluta appen?',
'common.exitConfirmMessage' => 'Är du säker på att du vill avsluta?',
'common.dontAskAgain' => 'Fråga inte igen',
'common.exit' => 'Avsluta',
'common.viewAll' => 'Visa alla',
'common.checkingNetwork' => 'Kontrollerar nätverk...',
@@ -1813,6 +1806,7 @@ extension on TranslationsSv {
'common.loading' => 'Laddar...',
'common.fullscreen' => 'Helskärm',
'common.exitFullscreen' => 'Avsluta helskärm',
'common.pressBackAgainToExit' => 'Tryck bakåt igen för att avsluta',
'screens.licenses' => 'Licenser',
'screens.switchProfile' => 'Byt profil',
'screens.subtitleStyling' => 'Undertext-styling',
@@ -1994,8 +1988,6 @@ extension on TranslationsSv {
'settings.tunneledPlaybackDescription' => 'Använd hårdvaruaccelererad videotunnling. Inaktivera om du ser en svart skärm med ljud vid HDR-innehåll',
'settings.requireProfileSelectionOnOpen' => 'Fråga efter profil vid appstart',
'settings.requireProfileSelectionOnOpenDescription' => 'Visa profilval varje gång appen öppnas',
'settings.confirmExitOnBack' => 'Bekräfta innan avslut',
'settings.confirmExitOnBackDescription' => 'Visa en bekräftelsedialog när du trycker tillbaka för att avsluta appen',
'settings.forceTvMode' => 'Tvinga TV-läge',
'settings.forceTvModeDescription' => 'Använd TV-layouten oavsett automatisk identifiering. Användbart på Android TV-enheter som inte rapporterar leanback-funktionen. Startar om appen vid ändring.',
'settings.startInFullscreen' => 'Starta i helskärm',
@@ -2264,12 +2256,12 @@ extension on TranslationsSv {
'profiles.pinManagedByPlex' => 'PIN hanteras av Plex. Redigera på plex.tv.',
'profiles.noPinSetEditOnPlex' => 'Ingen PIN angiven. För att kräva en, redigera Home-användaren på plex.tv.',
'profiles.setPin' => 'Ange PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => 'Anslutningar',
'profiles.add' => 'Lägg till',
'profiles.deleteProfileButton' => 'Ta bort profil',
'profiles.noConnectionsHint' => 'Inga anslutningar — lägg till en för att använda den här profilen.',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Plex Home-konto',
'profiles.connectionDefault' => 'Standard',
'profiles.makeDefault' => 'Gör till standard',
@@ -2778,12 +2770,12 @@ extension on TranslationsSv {
'metadataEdit.episodeOrdering' => 'Avsnittsordning',
'metadataEdit.tmdbAiring' => 'The Movie Database (Sändning)',
'metadataEdit.tvdbAiring' => 'TheTVDB (Sändning)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolut)',
'metadataEdit.metadataLanguage' => 'Metadataspråk',
'metadataEdit.useOriginalTitle' => 'Använd originaltitel',
'metadataEdit.preferredAudioLanguage' => 'Föredraget ljudspråk',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => 'Föredraget undertextspråk',
'metadataEdit.subtitleMode' => 'Automatiskt val av undertexter',
'metadataEdit.manuallySelected' => 'Manuellt vald',
+6 -14
View File
@@ -158,9 +158,6 @@ class _TranslationsCommonZh extends TranslationsCommonEn {
@override String get mute => '静音';
@override String get ok => '确定';
@override String get reconnect => '重新连接';
@override String get exitConfirmTitle => '退出应用?';
@override String get exitConfirmMessage => '确定要退出吗?';
@override String get dontAskAgain => '不再询问';
@override String get exit => '退出';
@override String get viewAll => '查看全部';
@override String get checkingNetwork => '正在检查网络...';
@@ -171,6 +168,7 @@ class _TranslationsCommonZh extends TranslationsCommonEn {
@override String get loading => '加载中...';
@override String get fullscreen => '全屏';
@override String get exitFullscreen => '退出全屏';
@override String get pressBackAgainToExit => '再按一次返回退出';
}
// Path: screens
@@ -379,8 +377,6 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn {
@override String get tunneledPlaybackDescription => '使用硬件加速视频通道。如果在 HDR 内容上看到黑屏但有声音,请禁用此选项';
@override String get requireProfileSelectionOnOpen => '打开应用时询问配置文件';
@override String get requireProfileSelectionOnOpenDescription => '每次打开应用时显示配置文件选择';
@override String get confirmExitOnBack => '退出前确认';
@override String get confirmExitOnBackDescription => '按返回键退出应用时显示确认对话框';
@override String get forceTvMode => '强制 TV 模式';
@override String get forceTvModeDescription => '无论自动检测结果如何都使用 TV 布局。适用于未报告 leanback 功能的 Android TV 设备。更改后将重启应用。';
@override String get startInFullscreen => '以全屏模式启动';
@@ -1800,9 +1796,6 @@ extension on TranslationsZh {
'common.mute' => '静音',
'common.ok' => '确定',
'common.reconnect' => '重新连接',
'common.exitConfirmTitle' => '退出应用?',
'common.exitConfirmMessage' => '确定要退出吗?',
'common.dontAskAgain' => '不再询问',
'common.exit' => '退出',
'common.viewAll' => '查看全部',
'common.checkingNetwork' => '正在检查网络...',
@@ -1813,6 +1806,7 @@ extension on TranslationsZh {
'common.loading' => '加载中...',
'common.fullscreen' => '全屏',
'common.exitFullscreen' => '退出全屏',
'common.pressBackAgainToExit' => '再按一次返回退出',
'screens.licenses' => '许可证',
'screens.switchProfile' => '切换用户',
'screens.subtitleStyling' => '字幕样式',
@@ -1994,8 +1988,6 @@ extension on TranslationsZh {
'settings.tunneledPlaybackDescription' => '使用硬件加速视频通道。如果在 HDR 内容上看到黑屏但有声音,请禁用此选项',
'settings.requireProfileSelectionOnOpen' => '打开应用时询问配置文件',
'settings.requireProfileSelectionOnOpenDescription' => '每次打开应用时显示配置文件选择',
'settings.confirmExitOnBack' => '退出前确认',
'settings.confirmExitOnBackDescription' => '按返回键退出应用时显示确认对话框',
'settings.forceTvMode' => '强制 TV 模式',
'settings.forceTvModeDescription' => '无论自动检测结果如何都使用 TV 布局。适用于未报告 leanback 功能的 Android TV 设备。更改后将重启应用。',
'settings.startInFullscreen' => '以全屏模式启动',
@@ -2264,12 +2256,12 @@ extension on TranslationsZh {
'profiles.pinManagedByPlex' => 'PIN 由 Plex 管理。在 plex.tv 上编辑。',
'profiles.noPinSetEditOnPlex' => '未设置 PIN。如需要求 PIN,请在 plex.tv 上编辑 Home 用户。',
'profiles.setPin' => '设置 PIN',
_ => null,
} ?? switch (path) {
'profiles.connectionsLabel' => '连接',
'profiles.add' => '添加',
'profiles.deleteProfileButton' => '删除配置文件',
'profiles.noConnectionsHint' => '没有连接 — 添加一个以使用此配置文件。',
_ => null,
} ?? switch (path) {
'profiles.plexHomeAccount' => 'Plex Home 账户',
'profiles.connectionDefault' => '默认',
'profiles.makeDefault' => '设为默认',
@@ -2778,12 +2770,12 @@ extension on TranslationsZh {
'metadataEdit.episodeOrdering' => '剧集排列顺序',
'metadataEdit.tmdbAiring' => 'The Movie Database(播出顺序)',
'metadataEdit.tvdbAiring' => 'TheTVDB(播出顺序)',
_ => null,
} ?? switch (path) {
'metadataEdit.tvdbAbsolute' => 'TheTVDB(绝对顺序)',
'metadataEdit.metadataLanguage' => '元数据语言',
'metadataEdit.useOriginalTitle' => '使用原始标题',
'metadataEdit.preferredAudioLanguage' => '首选音频语言',
_ => null,
} ?? switch (path) {
'metadataEdit.preferredSubtitleLanguage' => '首选字幕语言',
'metadataEdit.subtitleMode' => '自动选择字幕模式',
'metadataEdit.manuallySelected' => '手动选择',
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "Ljud av",
"ok": "OK",
"reconnect": "Återanslut",
"exitConfirmTitle": "Avsluta appen?",
"exitConfirmMessage": "Är du säker på att du vill avsluta?",
"dontAskAgain": "Fråga inte igen",
"exit": "Avsluta",
"viewAll": "Visa alla",
"checkingNetwork": "Kontrollerar nätverk...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "Startar offlineläge...",
"loading": "Laddar...",
"fullscreen": "Helskärm",
"exitFullscreen": "Avsluta helskärm"
"exitFullscreen": "Avsluta helskärm",
"pressBackAgainToExit": "Tryck bakåt igen för att avsluta"
},
"screens": {
"licenses": "Licenser",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "Använd hårdvaruaccelererad videotunnling. Inaktivera om du ser en svart skärm med ljud vid HDR-innehåll",
"requireProfileSelectionOnOpen": "Fråga efter profil vid appstart",
"requireProfileSelectionOnOpenDescription": "Visa profilval varje gång appen öppnas",
"confirmExitOnBack": "Bekräfta innan avslut",
"confirmExitOnBackDescription": "Visa en bekräftelsedialog när du trycker tillbaka för att avsluta appen",
"forceTvMode": "Tvinga TV-läge",
"forceTvModeDescription": "Använd TV-layouten oavsett automatisk identifiering. Användbart på Android TV-enheter som inte rapporterar leanback-funktionen. Startar om appen vid ändring.",
"startInFullscreen": "Starta i helskärm",
+2 -6
View File
@@ -52,9 +52,6 @@
"mute": "静音",
"ok": "确定",
"reconnect": "重新连接",
"exitConfirmTitle": "退出应用?",
"exitConfirmMessage": "确定要退出吗?",
"dontAskAgain": "不再询问",
"exit": "退出",
"viewAll": "查看全部",
"checkingNetwork": "正在检查网络...",
@@ -64,7 +61,8 @@
"startingOfflineMode": "正在启动离线模式...",
"loading": "加载中...",
"fullscreen": "全屏",
"exitFullscreen": "退出全屏"
"exitFullscreen": "退出全屏",
"pressBackAgainToExit": "再按一次返回退出"
},
"screens": {
"licenses": "许可证",
@@ -252,8 +250,6 @@
"tunneledPlaybackDescription": "使用硬件加速视频通道。如果在 HDR 内容上看到黑屏但有声音,请禁用此选项",
"requireProfileSelectionOnOpen": "打开应用时询问配置文件",
"requireProfileSelectionOnOpenDescription": "每次打开应用时显示配置文件选择",
"confirmExitOnBack": "退出前确认",
"confirmExitOnBackDescription": "按返回键退出应用时显示确认对话框",
"forceTvMode": "强制 TV 模式",
"forceTvModeDescription": "无论自动检测结果如何都使用 TV 布局。适用于未报告 leanback 功能的 Android TV 设备。更改后将重启应用。",
"startInFullscreen": "以全屏模式启动",
+124 -80
View File
@@ -3,15 +3,15 @@ import 'dart:io' show Platform, exit;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart'
show HardwareKeyboard, KeyDownEvent, KeyUpEvent, LogicalKeyboardKey, SystemNavigator;
show HardwareKeyboard, KeyDownEvent, KeyRepeatEvent, KeyUpEvent, LogicalKeyboardKey;
import 'package:material_symbols_icons/symbols.dart';
import 'package:provider/provider.dart';
import 'package:window_manager/window_manager.dart';
import '../i18n/strings.g.dart';
import '../services/app_exit_service.dart';
import '../services/update_service.dart';
import '../utils/app_logger.dart';
import '../widgets/auth_error_banner.dart';
import '../utils/dialogs.dart';
import '../utils/provider_extensions.dart';
import '../utils/platform_detector.dart';
import '../utils/snackbar_helper.dart';
@@ -181,6 +181,8 @@ class _MainScreenState extends State<MainScreen>
/// fallback fires the screens render their normal "no servers" state and
/// the user can pull-to-refresh / open settings.
static const _startupSettleFallback = Duration(seconds: 15);
static const _backExitWindow = Duration(seconds: 3);
DateTime? _lastBackPressAt;
@override
void initState() {
@@ -894,6 +896,60 @@ class _MainScreenState extends State<MainScreen>
/// so BackKeySuppressorObserver misses them and they leak into _handleBackKey.
bool _suppressBackAfterPop = false;
KeyEventResult _handleMainBack({bool allowTvSystemExit = false}) {
final tabs = _getVisibleTabs(_isOffline);
if (tabs.isEmpty) return KeyEventResult.handled;
final homeTab = tabs.first.id;
if (_currentTab != homeTab) {
_selectTab(homeTab);
_lastBackPressAt = null;
return KeyEventResult.handled;
}
final now = DateTime.now();
final lastBackPressAt = _lastBackPressAt;
if (lastBackPressAt != null && now.difference(lastBackPressAt) < _backExitWindow) {
_lastBackPressAt = null;
if (allowTvSystemExit && PlatformDetector.isAppleTV()) return KeyEventResult.skipRemainingHandlers;
unawaited(AppExitService.requestExit());
return KeyEventResult.handled;
}
_lastBackPressAt = now;
showMainSnackBar(t.common.pressBackAgainToExit, duration: _backExitWindow);
return KeyEventResult.handled;
}
KeyEventResult _handleMainBackKeyAction(KeyEvent event) {
if (!event.logicalKey.isBackKey) return KeyEventResult.ignored;
if (BackKeyUpSuppressor.consumeIfSuppressed(event)) {
return KeyEventResult.handled;
}
if (PlatformDetector.isAppleTV() && event is KeyDownEvent) {
final result = _handleMainBack(allowTvSystemExit: true);
if (result == KeyEventResult.handled) {
BackKeyCoordinator.markHandled();
BackKeyUpSuppressor.suppressBackUntilKeyUp();
}
return result;
}
if (event is KeyUpEvent) {
final result = _handleMainBack(allowTvSystemExit: PlatformDetector.isAppleTV());
if (result == KeyEventResult.handled) {
BackKeyCoordinator.markHandled();
}
return result;
}
if (event is KeyDownEvent || event is KeyRepeatEvent) {
return KeyEventResult.handled;
}
return KeyEventResult.ignored;
}
KeyEventResult _handleBackKey(KeyEvent event) {
if (ModalRoute.of(context)?.isCurrent != true) {
return KeyEventResult.ignored;
@@ -909,26 +965,7 @@ class _MainScreenState extends State<MainScreen>
return handleBackKeyAction(event, _focusSidebar);
}
// Sidebar focused → exit app
return handleBackKeyAction(event, () async {
if (PlatformDetector.isTV()) {
final settings = await SettingsService.getInstance();
if (settings.read(SettingsService.confirmExitOnBack) && mounted) {
final result = await showConfirmDialogWithCheckbox(
context,
title: t.common.exitConfirmTitle,
message: t.common.exitConfirmMessage,
confirmText: t.common.exit,
checkboxLabel: t.common.dontAskAgain,
);
if (result.checked) {
await settings.write(SettingsService.confirmExitOnBack, false);
}
if (!result.confirmed) return;
}
}
unawaited(SystemNavigator.pop());
});
return _handleMainBackKeyAction(event);
}
/// F11 toggles OS fullscreen from anywhere in the main UI. The in-player
@@ -1245,71 +1282,78 @@ class _MainScreenState extends State<MainScreen>
);
}
return OverlaySheetHost(
child: ScaffoldMessenger(
key: mainScaffoldMessengerKey,
child: Scaffold(
body: _buildTickerAwareStack(),
bottomNavigationBar: Column(
mainAxisSize: MainAxisSize.min,
children: [
// Reconnect bar when offline
if (_isOffline)
Material(
color: Theme.of(context).colorScheme.surfaceContainerHighest,
child: InkWell(
onTap: _isReconnecting ? null : _triggerReconnect,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (_isReconnecting)
SizedBox(
width: 16,
height: 16,
child: CircularProgressIndicator(
strokeWidth: 2,
return PopScope(
canPop: false,
onPopInvokedWithResult: (didPop, result) {
if (didPop) return;
_handleMainBack();
},
child: OverlaySheetHost(
child: ScaffoldMessenger(
key: mainScaffoldMessengerKey,
child: Scaffold(
body: _buildTickerAwareStack(),
bottomNavigationBar: Column(
mainAxisSize: MainAxisSize.min,
children: [
// Reconnect bar when offline
if (_isOffline)
Material(
color: Theme.of(context).colorScheme.surfaceContainerHighest,
child: InkWell(
onTap: _isReconnecting ? null : _triggerReconnect,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (_isReconnecting)
SizedBox(
width: 16,
height: 16,
child: CircularProgressIndicator(
strokeWidth: 2,
color: Theme.of(context).colorScheme.primary,
),
)
else
Icon(Symbols.wifi_rounded, size: 18, color: Theme.of(context).colorScheme.primary),
const SizedBox(width: 8),
Text(
t.common.reconnect,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.primary,
),
)
else
Icon(Symbols.wifi_rounded, size: 18, color: Theme.of(context).colorScheme.primary),
const SizedBox(width: 8),
Text(
t.common.reconnect,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.primary,
),
),
],
],
),
),
),
),
SettingValueBuilder<bool>(
pref: SettingsService.showNavBarLabels,
builder: (context, showNavBarLabels, _) {
final hideLabels = !showNavBarLabels;
return NavigationBarTheme(
data: NavigationBarTheme.of(context).copyWith(height: hideLabels ? 56 : null),
child: NavigationBar(
selectedIndex: _currentIndex,
onDestinationSelected: (i) {
final tabs = _getVisibleTabs(_isOffline);
if (i >= 0 && i < tabs.length) _selectTab(tabs[i].id);
},
labelBehavior: hideLabels
? NavigationDestinationLabelBehavior.alwaysHide
: NavigationDestinationLabelBehavior.alwaysShow,
destinations: _buildNavDestinations(_isOffline),
),
);
},
),
SettingValueBuilder<bool>(
pref: SettingsService.showNavBarLabels,
builder: (context, showNavBarLabels, _) {
final hideLabels = !showNavBarLabels;
return NavigationBarTheme(
data: NavigationBarTheme.of(context).copyWith(height: hideLabels ? 56 : null),
child: NavigationBar(
selectedIndex: _currentIndex,
onDestinationSelected: (i) {
final tabs = _getVisibleTabs(_isOffline);
if (i >= 0 && i < tabs.length) _selectTab(tabs[i].id);
},
labelBehavior: hideLabels
? NavigationDestinationLabelBehavior.alwaysHide
: NavigationDestinationLabelBehavior.alwaysShow,
destinations: _buildNavDestinations(_isOffline),
),
);
},
),
],
],
),
),
),
),
@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:provider/provider.dart';
@@ -20,6 +19,7 @@ import '../../profiles/profile_connection.dart';
import '../../profiles/profile_connection_registry.dart';
import '../../profiles/profile_registry.dart';
import '../../profiles/profiles_view.dart';
import '../../services/app_exit_service.dart';
import '../../services/storage_service.dart';
import '../../utils/app_logger.dart';
import '../../utils/dialogs.dart';
@@ -95,7 +95,7 @@ class _ProfileSwitchScreenState extends State<ProfileSwitchScreen> with MountedS
canPop: !widget.requireSelection || _allowPop,
onPopInvokedWithResult: (didPop, _) {
if (!didPop && widget.requireSelection) {
SystemNavigator.pop();
unawaited(AppExitService.requestExit());
}
},
child: StreamBuilder<ProfilesView>(
@@ -114,7 +114,7 @@ class _ProfileSwitchScreenState extends State<ProfileSwitchScreen> with MountedS
FocusedScrollScaffold(
title: Text(t.screens.switchProfile),
automaticallyImplyLeading: !widget.requireSelection,
onBackPressed: widget.requireSelection ? () => SystemNavigator.pop() : null,
onBackPressed: widget.requireSelection ? () => unawaited(AppExitService.requestExit()) : null,
slivers: [
if (view.profiles.isEmpty)
SliverFillRemaining(
@@ -130,13 +130,6 @@ class AppearanceSettingsScreen extends StatelessWidget {
subtitle: t.settings.hideSpoilersDescription,
),
_requireProfileSelection(),
if (PlatformDetector.isTV())
SettingSwitchTile(
pref: SettingsService.confirmExitOnBack,
icon: Symbols.exit_to_app_rounded,
title: t.settings.confirmExitOnBack,
subtitle: t.settings.confirmExitOnBackDescription,
),
SettingSwitchTile(
pref: SettingsService.autoHidePerformanceOverlay,
icon: Symbols.speed_rounded,
+33
View File
@@ -0,0 +1,33 @@
import 'dart:io' show Platform;
import 'package:flutter/services.dart';
import '../utils/platform_detector.dart';
class AppExitService {
static const bool _tvosBuild = bool.fromEnvironment('TVOS_BUILD');
static const MethodChannel _channel = MethodChannel('com.plezy/app_exit');
/// Requests that the host platform closes or backgrounds the app.
///
/// tvOS has no public API for force-quitting or going Home, so callers that
/// handle a physical back/Menu key should let the event continue instead.
static Future<bool> requestExit() async {
if (_tvosBuild || PlatformDetector.isAppleTV()) return false;
if (Platform.isAndroid) {
try {
return await _channel.invokeMethod<bool>('requestExit') ?? true;
} on MissingPluginException {
await SystemNavigator.pop();
return true;
} on PlatformException {
await SystemNavigator.pop();
return true;
}
}
await SystemNavigator.pop();
return true;
}
}
-2
View File
@@ -325,7 +325,6 @@ class SettingsService extends BaseSharedPreferencesService {
static const globalShaderPreset = StringPref('global_shader_preset', defaultValue: 'none');
static const requireProfileSelectionOnOpen = BoolPref('require_profile_selection_on_open');
static const useExternalPlayer = BoolPref('use_external_player');
static const confirmExitOnBack = BoolPref('confirm_exit_on_back', defaultValue: true);
static const forceTvMode = BoolPref('force_tv_mode');
static const ambientLighting = BoolPref('ambient_lighting');
static const audioPassthrough = BoolPref('audio_passthrough');
@@ -692,7 +691,6 @@ class SettingsService extends BaseSharedPreferencesService {
globalShaderPreset,
requireProfileSelectionOnOpen,
useExternalPlayer,
confirmExitOnBack,
forceTvMode,
ambientLighting,
audioPassthrough,
-58
View File
@@ -91,64 +91,6 @@ Future<void> showServerLimitDialog(BuildContext context) async {
);
}
/// Shows a confirmation dialog with an optional checkbox (e.g. "Don't ask again").
/// Returns a record with [confirmed] and [checked] booleans.
Future<({bool confirmed, bool checked})> showConfirmDialogWithCheckbox(
BuildContext context, {
required String title,
required String message,
required String confirmText,
required String checkboxLabel,
String? cancelText,
}) async {
var checked = false;
final confirmed = await showDialog<bool>(
context: context,
builder: (dialogContext) {
return StatefulBuilder(
builder: (context, setDialogState) {
return AlertDialog(
title: Text(title),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(message),
const SizedBox(height: 12),
CheckboxListTile(
value: checked,
onChanged: (v) => setDialogState(() => checked = v ?? false),
title: Text(checkboxLabel),
contentPadding: EdgeInsets.zero,
controlAffinity: ListTileControlAffinity.leading,
dense: true,
),
],
),
actions: [
FocusableButton(
autofocus: true,
onPressed: () => Navigator.pop(dialogContext, false),
child: TextButton(
onPressed: () => Navigator.pop(dialogContext, false),
style: TextButton.styleFrom(padding: _buttonPadding, shape: _buttonShape),
child: Text(cancelText ?? t.common.cancel),
),
),
FocusableButton(
onPressed: () => Navigator.pop(dialogContext, true),
child: FilledButton(onPressed: () => Navigator.pop(dialogContext, true), child: Text(confirmText)),
),
],
);
},
);
},
);
return (confirmed: confirmed ?? false, checked: checked);
}
/// Shows a delete confirmation dialog.
/// Convenience wrapper around [showConfirmDialog] with destructive styling.
Future<bool> showDeleteConfirmation(