@@ -172,7 +172,9 @@
|
||||
"discordRichPresence": "Discord Rich Presence",
|
||||
"discordRichPresenceDescription": "Zeige auf Discord, was du gerade schaust",
|
||||
"matchContentFrameRate": "Inhalts-Bildrate anpassen",
|
||||
"matchContentFrameRateDescription": "Bildwiederholfrequenz des Displays an den Videoinhalt anpassen, reduziert Ruckeln und spart Akku"
|
||||
"matchContentFrameRateDescription": "Bildwiederholfrequenz des Displays an den Videoinhalt anpassen, reduziert Ruckeln und spart Akku",
|
||||
"requireProfileSelectionOnOpen": "Profil beim Öffnen abfragen",
|
||||
"requireProfileSelectionOnOpenDescription": "Profilauswahl bei jedem Öffnen der App anzeigen"
|
||||
},
|
||||
"search": {
|
||||
"hint": "Filme, Serien, Musik suchen...",
|
||||
|
||||
@@ -172,7 +172,9 @@
|
||||
"discordRichPresence": "Discord Rich Presence",
|
||||
"discordRichPresenceDescription": "Show what you're watching on Discord",
|
||||
"matchContentFrameRate": "Match Content Frame Rate",
|
||||
"matchContentFrameRateDescription": "Adjust display refresh rate to match video content, reducing judder and saving battery"
|
||||
"matchContentFrameRateDescription": "Adjust display refresh rate to match video content, reducing judder and saving battery",
|
||||
"requireProfileSelectionOnOpen": "Ask for profile on app open",
|
||||
"requireProfileSelectionOnOpenDescription": "Show profile selection every time the app is opened"
|
||||
},
|
||||
"search": {
|
||||
"hint": "Search movies, shows, music...",
|
||||
|
||||
@@ -172,7 +172,9 @@
|
||||
"discordRichPresence": "Presencia de Discord",
|
||||
"discordRichPresenceDescription": "Mostrar lo que estás viendo en Discord",
|
||||
"matchContentFrameRate": "Ajustar frecuencia de actualización",
|
||||
"matchContentFrameRateDescription": "Ajustar la frecuencia de actualización de la pantalla para que coincida con el video, reduciendo tirones y ahorrando batería"
|
||||
"matchContentFrameRateDescription": "Ajustar la frecuencia de actualización de la pantalla para que coincida con el video, reduciendo tirones y ahorrando batería",
|
||||
"requireProfileSelectionOnOpen": "Pedir perfil al abrir la app",
|
||||
"requireProfileSelectionOnOpenDescription": "Mostrar selección de perfil cada vez que se abre la aplicación"
|
||||
},
|
||||
"search": {
|
||||
"hint": "Buscar películas, series, música...",
|
||||
|
||||
@@ -172,7 +172,9 @@
|
||||
"discordRichPresence": "Discord Rich Presence",
|
||||
"discordRichPresenceDescription": "Montrez ce que vous regardez sur Discord",
|
||||
"matchContentFrameRate": "Fréquence d'images du contenu correspondant",
|
||||
"matchContentFrameRateDescription": "Ajustez la fréquence de rafraîchissement de l'écran en fonction du contenu vidéo, ce qui réduit les saccades et économise la batterie"
|
||||
"matchContentFrameRateDescription": "Ajustez la fréquence de rafraîchissement de l'écran en fonction du contenu vidéo, ce qui réduit les saccades et économise la batterie",
|
||||
"requireProfileSelectionOnOpen": "Demander le profil à l'ouverture",
|
||||
"requireProfileSelectionOnOpenDescription": "Afficher la sélection de profil à chaque ouverture de l'application"
|
||||
},
|
||||
"search": {
|
||||
"hint": "Rechercher des films, des séries, de la musique...",
|
||||
|
||||
@@ -172,7 +172,9 @@
|
||||
"discordRichPresence": "Discord Rich Presence",
|
||||
"discordRichPresenceDescription": "Mostra su Discord cosa stai guardando",
|
||||
"matchContentFrameRate": "Adatta frequenza fotogrammi",
|
||||
"matchContentFrameRateDescription": "Regola la frequenza di aggiornamento del display in base al contenuto video, riducendo i tremolii e risparmiando batteria"
|
||||
"matchContentFrameRateDescription": "Regola la frequenza di aggiornamento del display in base al contenuto video, riducendo i tremolii e risparmiando batteria",
|
||||
"requireProfileSelectionOnOpen": "Chiedi profilo all'apertura",
|
||||
"requireProfileSelectionOnOpenDescription": "Mostra la selezione del profilo ogni volta che l'app viene aperta"
|
||||
},
|
||||
"search": {
|
||||
"hint": "Cerca film. spettacoli, musica...",
|
||||
|
||||
@@ -172,7 +172,9 @@
|
||||
"discordRichPresence": "Discord Rich Presence",
|
||||
"discordRichPresenceDescription": "Discord에서 시청 중인 콘텐츠 표시",
|
||||
"matchContentFrameRate": "콘텐츠 프레임 레이트 맞춤",
|
||||
"matchContentFrameRateDescription": "비디오 콘텐츠에 맞게 디스플레이 주사율을 조정하여 떨림을 줄이고 배터리를 절약합니다"
|
||||
"matchContentFrameRateDescription": "비디오 콘텐츠에 맞게 디스플레이 주사율을 조정하여 떨림을 줄이고 배터리를 절약합니다",
|
||||
"requireProfileSelectionOnOpen": "앱 실행 시 프로필 선택",
|
||||
"requireProfileSelectionOnOpenDescription": "앱을 열 때마다 프로필 선택 화면을 표시합니다"
|
||||
},
|
||||
"search": {
|
||||
"hint": "영화, 시리즈, 음악 등을 검색하세요...",
|
||||
|
||||
@@ -172,7 +172,9 @@
|
||||
"discordRichPresence": "Discord Rich Presence",
|
||||
"discordRichPresenceDescription": "Toon op Discord wat je aan het kijken bent",
|
||||
"matchContentFrameRate": "Inhoudsframesnelheid afstemmen",
|
||||
"matchContentFrameRateDescription": "Pas de schermverversingssnelheid aan op de video-inhoud, vermindert haperingen en bespaart batterij"
|
||||
"matchContentFrameRateDescription": "Pas de schermverversingssnelheid aan op de video-inhoud, vermindert haperingen en bespaart batterij",
|
||||
"requireProfileSelectionOnOpen": "Vraag om profiel bij openen",
|
||||
"requireProfileSelectionOnOpenDescription": "Toon profielselectie telkens wanneer de app wordt geopend"
|
||||
},
|
||||
"search": {
|
||||
"hint": "Zoek films, series, muziek...",
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 9
|
||||
/// Strings: 5103 (567 per locale)
|
||||
/// Strings: 5121 (569 per locale)
|
||||
///
|
||||
/// Built on 2026-02-07 at 18:57 UTC
|
||||
/// Built on 2026-02-08 at 11:03 UTC
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
||||
@@ -287,6 +287,8 @@ class _TranslationsSettingsDe implements TranslationsSettingsEn {
|
||||
@override String get discordRichPresenceDescription => 'Zeige auf Discord, was du gerade schaust';
|
||||
@override String get matchContentFrameRate => 'Inhalts-Bildrate anpassen';
|
||||
@override String get matchContentFrameRateDescription => 'Bildwiederholfrequenz des Displays an den Videoinhalt anpassen, reduziert Ruckeln und spart Akku';
|
||||
@override String get requireProfileSelectionOnOpen => 'Profil beim Öffnen abfragen';
|
||||
@override String get requireProfileSelectionOnOpenDescription => 'Profilauswahl bei jedem Öffnen der App anzeigen';
|
||||
}
|
||||
|
||||
// Path: search
|
||||
@@ -1147,6 +1149,8 @@ extension on TranslationsDe {
|
||||
'settings.discordRichPresenceDescription' => 'Zeige auf Discord, was du gerade schaust',
|
||||
'settings.matchContentFrameRate' => 'Inhalts-Bildrate anpassen',
|
||||
'settings.matchContentFrameRateDescription' => 'Bildwiederholfrequenz des Displays an den Videoinhalt anpassen, reduziert Ruckeln und spart Akku',
|
||||
'settings.requireProfileSelectionOnOpen' => 'Profil beim Öffnen abfragen',
|
||||
'settings.requireProfileSelectionOnOpenDescription' => 'Profilauswahl bei jedem Öffnen der App anzeigen',
|
||||
'search.hint' => 'Filme, Serien, Musik suchen...',
|
||||
'search.tryDifferentTerm' => 'Anderen Suchbegriff versuchen',
|
||||
'search.searchYourMedia' => 'In den eigenen Medien suchen',
|
||||
@@ -1494,10 +1498,10 @@ extension on TranslationsDe {
|
||||
'collections.selectCollection' => 'Sammlung auswählen',
|
||||
'collections.createNewCollection' => 'Neue Sammlung erstellen',
|
||||
'collections.collectionName' => 'Sammlungsname',
|
||||
'collections.enterCollectionName' => 'Sammlungsnamen eingeben',
|
||||
'collections.addedToCollection' => 'Zur Sammlung hinzugefügt',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'collections.enterCollectionName' => 'Sammlungsnamen eingeben',
|
||||
'collections.addedToCollection' => 'Zur Sammlung hinzugefügt',
|
||||
'collections.errorAddingToCollection' => 'Fehler beim Hinzufügen zur Sammlung',
|
||||
'collections.created' => 'Sammlung erstellt',
|
||||
'collections.removeFromCollection' => 'Aus Sammlung entfernen',
|
||||
|
||||
@@ -616,6 +616,12 @@ class TranslationsSettingsEn {
|
||||
|
||||
/// en: 'Adjust display refresh rate to match video content, reducing judder and saving battery'
|
||||
String get matchContentFrameRateDescription => 'Adjust display refresh rate to match video content, reducing judder and saving battery';
|
||||
|
||||
/// en: 'Ask for profile on app open'
|
||||
String get requireProfileSelectionOnOpen => 'Ask for profile on app open';
|
||||
|
||||
/// en: 'Show profile selection every time the app is opened'
|
||||
String get requireProfileSelectionOnOpenDescription => 'Show profile selection every time the app is opened';
|
||||
}
|
||||
|
||||
// Path: search
|
||||
@@ -2287,6 +2293,8 @@ extension on Translations {
|
||||
'settings.discordRichPresenceDescription' => 'Show what you\'re watching on Discord',
|
||||
'settings.matchContentFrameRate' => 'Match Content Frame Rate',
|
||||
'settings.matchContentFrameRateDescription' => 'Adjust display refresh rate to match video content, reducing judder and saving battery',
|
||||
'settings.requireProfileSelectionOnOpen' => 'Ask for profile on app open',
|
||||
'settings.requireProfileSelectionOnOpenDescription' => 'Show profile selection every time the app is opened',
|
||||
'search.hint' => 'Search movies, shows, music...',
|
||||
'search.tryDifferentTerm' => 'Try a different search term',
|
||||
'search.searchYourMedia' => 'Search your media',
|
||||
@@ -2634,10 +2642,10 @@ extension on Translations {
|
||||
'watchTogether.createSession' => 'Create Session',
|
||||
'watchTogether.creating' => 'Creating...',
|
||||
'watchTogether.joinSession' => 'Join Session',
|
||||
'watchTogether.joining' => 'Joining...',
|
||||
'watchTogether.controlMode' => 'Control Mode',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.joining' => 'Joining...',
|
||||
'watchTogether.controlMode' => 'Control Mode',
|
||||
'watchTogether.controlModeQuestion' => 'Who can control playback?',
|
||||
'watchTogether.hostOnly' => 'Host Only',
|
||||
'watchTogether.anyone' => 'Anyone',
|
||||
|
||||
@@ -287,6 +287,8 @@ class _TranslationsSettingsEs implements TranslationsSettingsEn {
|
||||
@override String get discordRichPresenceDescription => 'Mostrar lo que estás viendo en Discord';
|
||||
@override String get matchContentFrameRate => 'Ajustar frecuencia de actualización';
|
||||
@override String get matchContentFrameRateDescription => 'Ajustar la frecuencia de actualización de la pantalla para que coincida con el video, reduciendo tirones y ahorrando batería';
|
||||
@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';
|
||||
}
|
||||
|
||||
// Path: search
|
||||
@@ -1147,6 +1149,8 @@ extension on TranslationsEs {
|
||||
'settings.discordRichPresenceDescription' => 'Mostrar lo que estás viendo en Discord',
|
||||
'settings.matchContentFrameRate' => 'Ajustar frecuencia de actualización',
|
||||
'settings.matchContentFrameRateDescription' => 'Ajustar la frecuencia de actualización de la pantalla para que coincida con el video, reduciendo tirones y ahorrando batería',
|
||||
'settings.requireProfileSelectionOnOpen' => 'Pedir perfil al abrir la app',
|
||||
'settings.requireProfileSelectionOnOpenDescription' => 'Mostrar selección de perfil cada vez que se abre la aplicación',
|
||||
'search.hint' => 'Buscar películas, series, música...',
|
||||
'search.tryDifferentTerm' => 'Prueba con un término de búsqueda diferente',
|
||||
'search.searchYourMedia' => 'Busca en tu contenido',
|
||||
@@ -1494,10 +1498,10 @@ extension on TranslationsEs {
|
||||
'watchTogether.createSession' => 'Crear Sesión',
|
||||
'watchTogether.creating' => 'Creando...',
|
||||
'watchTogether.joinSession' => 'Unirse a Sesión',
|
||||
'watchTogether.joining' => 'Uniendo...',
|
||||
'watchTogether.controlMode' => 'Modo de Control',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.joining' => 'Uniendo...',
|
||||
'watchTogether.controlMode' => 'Modo de Control',
|
||||
'watchTogether.controlModeQuestion' => '¿Quién puede controlar la reproducción?',
|
||||
'watchTogether.hostOnly' => 'Solo el Anfitrión',
|
||||
'watchTogether.anyone' => 'Cualquiera',
|
||||
|
||||
@@ -287,6 +287,8 @@ class _TranslationsSettingsFr implements TranslationsSettingsEn {
|
||||
@override String get discordRichPresenceDescription => 'Montrez ce que vous regardez sur Discord';
|
||||
@override String get matchContentFrameRate => 'Fréquence d\'images du contenu correspondant';
|
||||
@override String get matchContentFrameRateDescription => 'Ajustez la fréquence de rafraîchissement de l\'écran en fonction du contenu vidéo, ce qui réduit les saccades et économise la batterie';
|
||||
@override String get requireProfileSelectionOnOpen => 'Demander le profil à l\'ouverture';
|
||||
@override String get requireProfileSelectionOnOpenDescription => 'Afficher la sélection de profil à chaque ouverture de l\'application';
|
||||
}
|
||||
|
||||
// Path: search
|
||||
@@ -1147,6 +1149,8 @@ extension on TranslationsFr {
|
||||
'settings.discordRichPresenceDescription' => 'Montrez ce que vous regardez sur Discord',
|
||||
'settings.matchContentFrameRate' => 'Fréquence d\'images du contenu correspondant',
|
||||
'settings.matchContentFrameRateDescription' => 'Ajustez la fréquence de rafraîchissement de l\'écran en fonction du contenu vidéo, ce qui réduit les saccades et économise la batterie',
|
||||
'settings.requireProfileSelectionOnOpen' => 'Demander le profil à l\'ouverture',
|
||||
'settings.requireProfileSelectionOnOpenDescription' => 'Afficher la sélection de profil à chaque ouverture de l\'application',
|
||||
'search.hint' => 'Rechercher des films, des séries, de la musique...',
|
||||
'search.tryDifferentTerm' => 'Essayez un autre terme de recherche',
|
||||
'search.searchYourMedia' => 'Rechercher dans vos médias',
|
||||
@@ -1494,10 +1498,10 @@ extension on TranslationsFr {
|
||||
'watchTogether.createSession' => 'Créer une session',
|
||||
'watchTogether.creating' => 'Création...',
|
||||
'watchTogether.joinSession' => 'Rejoindre la session',
|
||||
'watchTogether.joining' => 'Rejoindre...',
|
||||
'watchTogether.controlMode' => 'Mode de contrôle',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.joining' => 'Rejoindre...',
|
||||
'watchTogether.controlMode' => 'Mode de contrôle',
|
||||
'watchTogether.controlModeQuestion' => 'Qui peut contrôler la lecture ?',
|
||||
'watchTogether.hostOnly' => 'Hôte uniquement',
|
||||
'watchTogether.anyone' => 'N\'importe qui',
|
||||
|
||||
@@ -287,6 +287,8 @@ class _TranslationsSettingsIt implements TranslationsSettingsEn {
|
||||
@override String get discordRichPresenceDescription => 'Mostra su Discord cosa stai guardando';
|
||||
@override String get matchContentFrameRate => 'Adatta frequenza fotogrammi';
|
||||
@override String get matchContentFrameRateDescription => 'Regola la frequenza di aggiornamento del display in base al contenuto video, riducendo i tremolii e risparmiando batteria';
|
||||
@override String get requireProfileSelectionOnOpen => 'Chiedi profilo all\'apertura';
|
||||
@override String get requireProfileSelectionOnOpenDescription => 'Mostra la selezione del profilo ogni volta che l\'app viene aperta';
|
||||
}
|
||||
|
||||
// Path: search
|
||||
@@ -1147,6 +1149,8 @@ extension on TranslationsIt {
|
||||
'settings.discordRichPresenceDescription' => 'Mostra su Discord cosa stai guardando',
|
||||
'settings.matchContentFrameRate' => 'Adatta frequenza fotogrammi',
|
||||
'settings.matchContentFrameRateDescription' => 'Regola la frequenza di aggiornamento del display in base al contenuto video, riducendo i tremolii e risparmiando batteria',
|
||||
'settings.requireProfileSelectionOnOpen' => 'Chiedi profilo all\'apertura',
|
||||
'settings.requireProfileSelectionOnOpenDescription' => 'Mostra la selezione del profilo ogni volta che l\'app viene aperta',
|
||||
'search.hint' => 'Cerca film. spettacoli, musica...',
|
||||
'search.tryDifferentTerm' => 'Prova altri termini di ricerca',
|
||||
'search.searchYourMedia' => 'Cerca nei tuoi media',
|
||||
@@ -1494,10 +1498,10 @@ extension on TranslationsIt {
|
||||
'collections.selectCollection' => 'Seleziona raccolta',
|
||||
'collections.createNewCollection' => 'Crea nuova raccolta',
|
||||
'collections.collectionName' => 'Nome raccolta',
|
||||
'collections.enterCollectionName' => 'Inserisci nome raccolta',
|
||||
'collections.addedToCollection' => 'Aggiunto alla raccolta',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'collections.enterCollectionName' => 'Inserisci nome raccolta',
|
||||
'collections.addedToCollection' => 'Aggiunto alla raccolta',
|
||||
'collections.errorAddingToCollection' => 'Errore nell\'aggiunta alla raccolta',
|
||||
'collections.created' => 'Raccolta creata',
|
||||
'collections.removeFromCollection' => 'Rimuovi dalla raccolta',
|
||||
|
||||
@@ -287,6 +287,8 @@ class _TranslationsSettingsKo implements TranslationsSettingsEn {
|
||||
@override String get discordRichPresenceDescription => 'Discord에서 시청 중인 콘텐츠 표시';
|
||||
@override String get matchContentFrameRate => '콘텐츠 프레임 레이트 맞춤';
|
||||
@override String get matchContentFrameRateDescription => '비디오 콘텐츠에 맞게 디스플레이 주사율을 조정하여 떨림을 줄이고 배터리를 절약합니다';
|
||||
@override String get requireProfileSelectionOnOpen => '앱 실행 시 프로필 선택';
|
||||
@override String get requireProfileSelectionOnOpenDescription => '앱을 열 때마다 프로필 선택 화면을 표시합니다';
|
||||
}
|
||||
|
||||
// Path: search
|
||||
@@ -1147,6 +1149,8 @@ extension on TranslationsKo {
|
||||
'settings.discordRichPresenceDescription' => 'Discord에서 시청 중인 콘텐츠 표시',
|
||||
'settings.matchContentFrameRate' => '콘텐츠 프레임 레이트 맞춤',
|
||||
'settings.matchContentFrameRateDescription' => '비디오 콘텐츠에 맞게 디스플레이 주사율을 조정하여 떨림을 줄이고 배터리를 절약합니다',
|
||||
'settings.requireProfileSelectionOnOpen' => '앱 실행 시 프로필 선택',
|
||||
'settings.requireProfileSelectionOnOpenDescription' => '앱을 열 때마다 프로필 선택 화면을 표시합니다',
|
||||
'search.hint' => '영화, 시리즈, 음악 등을 검색하세요...',
|
||||
'search.tryDifferentTerm' => '다른 검색어를 시도해 보세요',
|
||||
'search.searchYourMedia' => '미디어 검색',
|
||||
@@ -1494,10 +1498,10 @@ extension on TranslationsKo {
|
||||
'watchTogether.createSession' => '세션 생성',
|
||||
'watchTogether.creating' => '생성 중...',
|
||||
'watchTogether.joinSession' => '세션 참여',
|
||||
'watchTogether.joining' => '참가 중...',
|
||||
'watchTogether.controlMode' => '제어 모드',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.joining' => '참가 중...',
|
||||
'watchTogether.controlMode' => '제어 모드',
|
||||
'watchTogether.controlModeQuestion' => '누가 재생을 제어할 수 있나요?',
|
||||
'watchTogether.hostOnly' => '호스트만',
|
||||
'watchTogether.anyone' => '누구나',
|
||||
|
||||
@@ -287,6 +287,8 @@ class _TranslationsSettingsNl implements TranslationsSettingsEn {
|
||||
@override String get discordRichPresenceDescription => 'Toon op Discord wat je aan het kijken bent';
|
||||
@override String get matchContentFrameRate => 'Inhoudsframesnelheid afstemmen';
|
||||
@override String get matchContentFrameRateDescription => 'Pas de schermverversingssnelheid aan op de video-inhoud, vermindert haperingen en bespaart batterij';
|
||||
@override String get requireProfileSelectionOnOpen => 'Vraag om profiel bij openen';
|
||||
@override String get requireProfileSelectionOnOpenDescription => 'Toon profielselectie telkens wanneer de app wordt geopend';
|
||||
}
|
||||
|
||||
// Path: search
|
||||
@@ -1147,6 +1149,8 @@ extension on TranslationsNl {
|
||||
'settings.discordRichPresenceDescription' => 'Toon op Discord wat je aan het kijken bent',
|
||||
'settings.matchContentFrameRate' => 'Inhoudsframesnelheid afstemmen',
|
||||
'settings.matchContentFrameRateDescription' => 'Pas de schermverversingssnelheid aan op de video-inhoud, vermindert haperingen en bespaart batterij',
|
||||
'settings.requireProfileSelectionOnOpen' => 'Vraag om profiel bij openen',
|
||||
'settings.requireProfileSelectionOnOpenDescription' => 'Toon profielselectie telkens wanneer de app wordt geopend',
|
||||
'search.hint' => 'Zoek films, series, muziek...',
|
||||
'search.tryDifferentTerm' => 'Probeer een andere zoekterm',
|
||||
'search.searchYourMedia' => 'Zoek in je media',
|
||||
@@ -1494,10 +1498,10 @@ extension on TranslationsNl {
|
||||
'collections.selectCollection' => 'Selecteer collectie',
|
||||
'collections.createNewCollection' => 'Nieuwe collectie maken',
|
||||
'collections.collectionName' => 'Collectienaam',
|
||||
'collections.enterCollectionName' => 'Voer collectienaam in',
|
||||
'collections.addedToCollection' => 'Toegevoegd aan collectie',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'collections.enterCollectionName' => 'Voer collectienaam in',
|
||||
'collections.addedToCollection' => 'Toegevoegd aan collectie',
|
||||
'collections.errorAddingToCollection' => 'Fout bij toevoegen aan collectie',
|
||||
'collections.created' => 'Collectie gemaakt',
|
||||
'collections.removeFromCollection' => 'Verwijderen uit collectie',
|
||||
|
||||
@@ -287,6 +287,8 @@ class _TranslationsSettingsSv implements TranslationsSettingsEn {
|
||||
@override String get discordRichPresenceDescription => 'Visa vad du tittar på i Discord';
|
||||
@override String get matchContentFrameRate => 'Matcha innehållets bildfrekvens';
|
||||
@override String get matchContentFrameRateDescription => 'Justera skärmens uppdateringsfrekvens för att matcha videoinnehållet, minskar hackighet och sparar batteri';
|
||||
@override String get requireProfileSelectionOnOpen => 'Fråga efter profil vid appstart';
|
||||
@override String get requireProfileSelectionOnOpenDescription => 'Visa profilval varje gång appen öppnas';
|
||||
}
|
||||
|
||||
// Path: search
|
||||
@@ -1147,6 +1149,8 @@ extension on TranslationsSv {
|
||||
'settings.discordRichPresenceDescription' => 'Visa vad du tittar på i Discord',
|
||||
'settings.matchContentFrameRate' => 'Matcha innehållets bildfrekvens',
|
||||
'settings.matchContentFrameRateDescription' => 'Justera skärmens uppdateringsfrekvens för att matcha videoinnehållet, minskar hackighet och sparar batteri',
|
||||
'settings.requireProfileSelectionOnOpen' => 'Fråga efter profil vid appstart',
|
||||
'settings.requireProfileSelectionOnOpenDescription' => 'Visa profilval varje gång appen öppnas',
|
||||
'search.hint' => 'Sök filmer, serier, musik...',
|
||||
'search.tryDifferentTerm' => 'Prova en annan sökterm',
|
||||
'search.searchYourMedia' => 'Sök i dina media',
|
||||
@@ -1494,10 +1498,10 @@ extension on TranslationsSv {
|
||||
'collections.selectCollection' => 'Välj samling',
|
||||
'collections.createNewCollection' => 'Skapa ny samling',
|
||||
'collections.collectionName' => 'Samlingsnamn',
|
||||
'collections.enterCollectionName' => 'Ange samlingsnamn',
|
||||
'collections.addedToCollection' => 'Tillagd i samling',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'collections.enterCollectionName' => 'Ange samlingsnamn',
|
||||
'collections.addedToCollection' => 'Tillagd i samling',
|
||||
'collections.errorAddingToCollection' => 'Fel vid tillägg i samling',
|
||||
'collections.created' => 'Samling skapad',
|
||||
'collections.removeFromCollection' => 'Ta bort från samling',
|
||||
|
||||
@@ -287,6 +287,8 @@ class _TranslationsSettingsZh implements TranslationsSettingsEn {
|
||||
@override String get discordRichPresenceDescription => '在 Discord 上显示您正在观看的内容';
|
||||
@override String get matchContentFrameRate => '匹配内容帧率';
|
||||
@override String get matchContentFrameRateDescription => '调整显示刷新率以匹配视频内容,减少画面抖动并节省电量';
|
||||
@override String get requireProfileSelectionOnOpen => '打开应用时询问配置文件';
|
||||
@override String get requireProfileSelectionOnOpenDescription => '每次打开应用时显示配置文件选择';
|
||||
}
|
||||
|
||||
// Path: search
|
||||
@@ -1147,6 +1149,8 @@ extension on TranslationsZh {
|
||||
'settings.discordRichPresenceDescription' => '在 Discord 上显示您正在观看的内容',
|
||||
'settings.matchContentFrameRate' => '匹配内容帧率',
|
||||
'settings.matchContentFrameRateDescription' => '调整显示刷新率以匹配视频内容,减少画面抖动并节省电量',
|
||||
'settings.requireProfileSelectionOnOpen' => '打开应用时询问配置文件',
|
||||
'settings.requireProfileSelectionOnOpenDescription' => '每次打开应用时显示配置文件选择',
|
||||
'search.hint' => '搜索电影、系列、音乐...',
|
||||
'search.tryDifferentTerm' => '尝试不同的搜索词',
|
||||
'search.searchYourMedia' => '搜索媒体',
|
||||
@@ -1494,10 +1498,10 @@ extension on TranslationsZh {
|
||||
'collections.selectCollection' => '选择合集',
|
||||
'collections.createNewCollection' => '创建新合集',
|
||||
'collections.collectionName' => '合集名称',
|
||||
'collections.enterCollectionName' => '输入合集名称',
|
||||
'collections.addedToCollection' => '已添加到合集',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'collections.enterCollectionName' => '输入合集名称',
|
||||
'collections.addedToCollection' => '已添加到合集',
|
||||
'collections.errorAddingToCollection' => '添加到合集失败',
|
||||
'collections.created' => '已创建合集',
|
||||
'collections.removeFromCollection' => '从合集移除',
|
||||
|
||||
@@ -172,7 +172,9 @@
|
||||
"discordRichPresence": "Discord Rich Presence",
|
||||
"discordRichPresenceDescription": "Visa vad du tittar på i Discord",
|
||||
"matchContentFrameRate": "Matcha innehållets bildfrekvens",
|
||||
"matchContentFrameRateDescription": "Justera skärmens uppdateringsfrekvens för att matcha videoinnehållet, minskar hackighet och sparar batteri"
|
||||
"matchContentFrameRateDescription": "Justera skärmens uppdateringsfrekvens för att matcha videoinnehållet, minskar hackighet och sparar batteri",
|
||||
"requireProfileSelectionOnOpen": "Fråga efter profil vid appstart",
|
||||
"requireProfileSelectionOnOpenDescription": "Visa profilval varje gång appen öppnas"
|
||||
},
|
||||
"search": {
|
||||
"hint": "Sök filmer, serier, musik...",
|
||||
|
||||
@@ -172,7 +172,9 @@
|
||||
"discordRichPresence": "Discord 动态状态",
|
||||
"discordRichPresenceDescription": "在 Discord 上显示您正在观看的内容",
|
||||
"matchContentFrameRate": "匹配内容帧率",
|
||||
"matchContentFrameRateDescription": "调整显示刷新率以匹配视频内容,减少画面抖动并节省电量"
|
||||
"matchContentFrameRateDescription": "调整显示刷新率以匹配视频内容,减少画面抖动并节省电量",
|
||||
"requireProfileSelectionOnOpen": "打开应用时询问配置文件",
|
||||
"requireProfileSelectionOnOpenDescription": "每次打开应用时显示配置文件选择"
|
||||
},
|
||||
"search": {
|
||||
"hint": "搜索电影、系列、音乐...",
|
||||
|
||||
@@ -24,6 +24,7 @@ import '../providers/playback_state_provider.dart';
|
||||
import '../providers/settings_provider.dart';
|
||||
import '../providers/user_profile_provider.dart';
|
||||
import '../services/offline_watch_sync_service.dart';
|
||||
import '../services/settings_service.dart';
|
||||
import '../providers/offline_mode_provider.dart';
|
||||
import '../services/plex_auth_service.dart';
|
||||
import '../services/storage_service.dart';
|
||||
@@ -74,7 +75,7 @@ class MainScreen extends StatefulWidget {
|
||||
State<MainScreen> createState() => _MainScreenState();
|
||||
}
|
||||
|
||||
class _MainScreenState extends State<MainScreen> with RouteAware, WindowListener {
|
||||
class _MainScreenState extends State<MainScreen> with RouteAware, WindowListener, WidgetsBindingObserver {
|
||||
late int _currentIndex;
|
||||
String? _selectedLibraryGlobalKey;
|
||||
|
||||
@@ -89,6 +90,9 @@ class _MainScreenState extends State<MainScreen> with RouteAware, WindowListener
|
||||
|
||||
OfflineModeProvider? _offlineModeProvider;
|
||||
|
||||
/// Prevents double-pushing the profile selection screen
|
||||
bool _isShowingProfileSelection = false;
|
||||
|
||||
late List<Widget> _screens;
|
||||
final GlobalKey<State<DiscoverScreen>> _discoverKey = GlobalKey();
|
||||
final GlobalKey<State<LibrariesScreen>> _librariesKey = GlobalKey();
|
||||
@@ -107,6 +111,8 @@ class _MainScreenState extends State<MainScreen> with RouteAware, WindowListener
|
||||
super.initState();
|
||||
_isOffline = widget.isOfflineMode;
|
||||
|
||||
WidgetsBinding.instance.addObserver(this);
|
||||
|
||||
if (Platform.isLinux || Platform.isWindows || Platform.isMacOS) {
|
||||
windowManager.addListener(this);
|
||||
windowManager.setPreventClose(true);
|
||||
@@ -152,11 +158,20 @@ class _MainScreenState extends State<MainScreen> with RouteAware, WindowListener
|
||||
}
|
||||
|
||||
Future<void> _promptForInitialProfileSelection(UserProfileProvider userProfileProvider) async {
|
||||
if (!mounted || !userProfileProvider.needsInitialProfileSelection) return;
|
||||
if (!mounted || _isShowingProfileSelection) return;
|
||||
|
||||
final needsInitial = userProfileProvider.needsInitialProfileSelection;
|
||||
final settingsService = await SettingsService.getInstance();
|
||||
if (!mounted) return;
|
||||
final requireOnOpen = settingsService.getRequireProfileSelectionOnOpen() && userProfileProvider.hasMultipleUsers;
|
||||
|
||||
if (!needsInitial && !requireOnOpen) return;
|
||||
|
||||
_isShowingProfileSelection = true;
|
||||
await Navigator.of(
|
||||
context,
|
||||
).push(MaterialPageRoute(builder: (context) => const ProfileSwitchScreen(requireSelection: true)));
|
||||
_isShowingProfileSelection = false;
|
||||
}
|
||||
|
||||
Future<void> _checkForUpdatesOnStartup() async {
|
||||
@@ -368,6 +383,7 @@ class _MainScreenState extends State<MainScreen> with RouteAware, WindowListener
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
WidgetsBinding.instance.removeObserver(this);
|
||||
routeObserver.unsubscribe(this);
|
||||
if (Platform.isLinux || Platform.isWindows || Platform.isMacOS) {
|
||||
windowManager.removeListener(this);
|
||||
@@ -384,6 +400,28 @@ class _MainScreenState extends State<MainScreen> with RouteAware, WindowListener
|
||||
exit(0);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||
if (state == AppLifecycleState.resumed && !_isOffline && !_isShowingProfileSelection) {
|
||||
_showProfileSelectionOnResume();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _showProfileSelectionOnResume() async {
|
||||
final settingsService = await SettingsService.getInstance();
|
||||
if (!settingsService.getRequireProfileSelectionOnOpen()) return;
|
||||
if (!mounted) return;
|
||||
|
||||
final userProfileProvider = context.read<UserProfileProvider>();
|
||||
if (!userProfileProvider.hasMultipleUsers) return;
|
||||
|
||||
_isShowingProfileSelection = true;
|
||||
await Navigator.of(
|
||||
context,
|
||||
).push(MaterialPageRoute(builder: (context) => const ProfileSwitchScreen(requireSelection: true)));
|
||||
_isShowingProfileSelection = false;
|
||||
}
|
||||
|
||||
List<Widget> _buildScreens(bool offline) {
|
||||
// In offline mode, only show Downloads and Settings
|
||||
// In online mode, show all 5 screens
|
||||
|
||||
@@ -18,6 +18,7 @@ import '../../services/download_storage_service.dart';
|
||||
import '../../services/saf_storage_service.dart';
|
||||
import '../../providers/settings_provider.dart';
|
||||
import '../../providers/theme_provider.dart';
|
||||
import '../../providers/user_profile_provider.dart';
|
||||
import '../../services/keyboard_shortcuts_service.dart';
|
||||
import '../../services/settings_service.dart' as settings;
|
||||
import '../../services/update_service.dart';
|
||||
@@ -62,6 +63,7 @@ class _SettingsScreenState extends State<SettingsScreen> with FocusableTab {
|
||||
static const _kShowServerNameOnHubs = 'show_server_name_on_hubs';
|
||||
static const _kAlwaysKeepSidebarOpen = 'always_keep_sidebar_open';
|
||||
static const _kShowUnwatchedCount = 'show_unwatched_count';
|
||||
static const _kRequireProfileSelectionOnOpen = 'require_profile_selection_on_open';
|
||||
static const _kPlayerBackend = 'player_backend';
|
||||
static const _kHardwareDecoding = 'hardware_decoding';
|
||||
static const _kMatchContentFrameRate = 'match_content_frame_rate';
|
||||
@@ -109,6 +111,7 @@ class _SettingsScreenState extends State<SettingsScreen> with FocusableTab {
|
||||
bool _enableDiscordRPC = false;
|
||||
bool _matchContentFrameRate = false;
|
||||
bool _useExoPlayer = true; // Android only: ExoPlayer vs MPV
|
||||
bool _requireProfileSelectionOnOpen = false;
|
||||
|
||||
// Update checking state
|
||||
bool _isCheckingForUpdate = false;
|
||||
@@ -175,6 +178,7 @@ class _SettingsScreenState extends State<SettingsScreen> with FocusableTab {
|
||||
_enableDiscordRPC = _settingsService.getEnableDiscordRPC();
|
||||
_matchContentFrameRate = _settingsService.getMatchContentFrameRate();
|
||||
_useExoPlayer = _settingsService.getUseExoPlayer();
|
||||
_requireProfileSelectionOnOpen = _settingsService.getRequireProfileSelectionOnOpen();
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
@@ -357,6 +361,22 @@ class _SettingsScreenState extends State<SettingsScreen> with FocusableTab {
|
||||
);
|
||||
},
|
||||
),
|
||||
Consumer<UserProfileProvider>(
|
||||
builder: (context, userProfileProvider, child) {
|
||||
if (!userProfileProvider.hasMultipleUsers) return const SizedBox.shrink();
|
||||
return SwitchListTile(
|
||||
focusNode: _focusTracker.get(_kRequireProfileSelectionOnOpen),
|
||||
secondary: const AppIcon(Symbols.person_rounded, fill: 1),
|
||||
title: Text(t.settings.requireProfileSelectionOnOpen),
|
||||
subtitle: Text(t.settings.requireProfileSelectionOnOpenDescription),
|
||||
value: _requireProfileSelectionOnOpen,
|
||||
onChanged: (value) async {
|
||||
setState(() => _requireProfileSelectionOnOpen = value);
|
||||
await _settingsService.setRequireProfileSelectionOnOpen(value);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -68,6 +68,7 @@ class SettingsService extends BaseSharedPreferencesService {
|
||||
static const String _keyAlwaysKeepSidebarOpen = 'always_keep_sidebar_open';
|
||||
static const String _keyShowUnwatchedCount = 'show_unwatched_count';
|
||||
static const String _keyGlobalShaderPreset = 'global_shader_preset';
|
||||
static const String _keyRequireProfileSelectionOnOpen = 'require_profile_selection_on_open';
|
||||
|
||||
SettingsService._();
|
||||
|
||||
@@ -1027,6 +1028,15 @@ class SettingsService extends BaseSharedPreferencesService {
|
||||
return prefs.getString(_keyGlobalShaderPreset) ?? 'none'; // Default: no shader
|
||||
}
|
||||
|
||||
// Require Profile Selection on App Open
|
||||
Future<void> setRequireProfileSelectionOnOpen(bool enabled) async {
|
||||
await prefs.setBool(_keyRequireProfileSelectionOnOpen, enabled);
|
||||
}
|
||||
|
||||
bool getRequireProfileSelectionOnOpen() {
|
||||
return prefs.getBool(_keyRequireProfileSelectionOnOpen) ?? false;
|
||||
}
|
||||
|
||||
// Reset all settings to defaults
|
||||
Future<void> resetAllSettings() async {
|
||||
await Future.wait([
|
||||
@@ -1075,6 +1085,7 @@ class SettingsService extends BaseSharedPreferencesService {
|
||||
prefs.remove(_keyAlwaysKeepSidebarOpen),
|
||||
prefs.remove(_keyShowUnwatchedCount),
|
||||
prefs.remove(_keyGlobalShaderPreset),
|
||||
prefs.remove(_keyRequireProfileSelectionOnOpen),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user