Issue #44: Language now correctly falls back to English instead of German for unsupported locales (e.g., French system language before this update). Added localeListResolutionCallback to MaterialApp that: - Respects user's explicit locale choice - Falls back to matching system locale if available - Defaults to English when no match found Added complete French (fr) translation: - All 200+ strings translated - Proper French accents (é, è, ê, à, etc.) - Added to settings language picker Updated: - lib/main.dart: localeListResolutionCallback for fallback logic - lib/l10n/app_fr.arb: New French translation file - lib/l10n/app_en.arb: Added "french" string - lib/l10n/app_de.arb: Added "french" string (Französisch) - lib/l10n/app_es.arb: Added "french" string (Francés) - lib/providers/locale_provider.dart: Added French display name - lib/screens/settings_screen.dart: Added French option Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
300 lines
13 KiB
Plaintext
300 lines
13 KiB
Plaintext
{
|
|
"@@locale": "de",
|
|
|
|
"appTitle": "Ensemble",
|
|
"connecting": "Verbinde...",
|
|
"connected": "Verbunden",
|
|
"disconnected": "Getrennt",
|
|
|
|
"serverAddress": "Serveradresse",
|
|
"serverAddressHint": "z.B. music.example.com oder 192.168.1.100",
|
|
"yourName": "Dein Name",
|
|
"yourFirstName": "Dein Vorname",
|
|
"portOptional": "Port (Optional)",
|
|
"portHint": "z.B. 8095 oder leer lassen",
|
|
"portDescription": "Leer lassen bei Reverse Proxy oder Standardports. 8095 eingeben bei Direktverbindung.",
|
|
|
|
"username": "Benutzername",
|
|
"password": "Passwort",
|
|
"detectAndConnect": "Erkennen & Verbinden",
|
|
"connect": "Verbinden",
|
|
"disconnect": "Trennen",
|
|
|
|
"authServerUrlOptional": "Auth-Server URL (Optional)",
|
|
"authServerUrlHint": "z.B. auth.example.com (wenn abweichend vom Server)",
|
|
"authServerUrlDescription": "Leer lassen, wenn Authentifizierung auf demselben Server",
|
|
"detectedAuthType": "Erkannt: {authType}",
|
|
"serverRequiresAuth": "Dieser Server erfordert Authentifizierung",
|
|
|
|
"tailscaleVpnConnection": "Tailscale VPN-Verbindung",
|
|
"unencryptedConnection": "Unverschlusselte Verbindung",
|
|
"usingHttpOverTailscale": "HTTP uber Tailscale (verschlusselter Tunnel)",
|
|
"httpsFailedUsingHttp": "HTTPS fehlgeschlagen, verwende HTTP",
|
|
"httpNotEncrypted": "HTTP-Verbindung - Daten sind nicht verschlusselt",
|
|
|
|
"pleaseEnterServerAddress": "Bitte gib deine Music Assistant Serveradresse ein",
|
|
"pleaseEnterName": "Bitte gib deinen Namen ein",
|
|
"pleaseEnterValidPort": "Bitte gib eine gultige Portnummer ein (1-65535)",
|
|
"pleaseEnterCredentials": "Bitte gib Benutzername und Passwort ein",
|
|
"authFailed": "Authentifizierung fehlgeschlagen. Bitte uberprufe deine Anmeldedaten.",
|
|
"maLoginFailed": "Music Assistant Anmeldung fehlgeschlagen. Bitte uberprufe deine Anmeldedaten.",
|
|
"connectionFailed": "Verbindung zum Server fehlgeschlagen. Bitte uberprufe die Adresse und versuche es erneut.",
|
|
"detectingAuth": "Erkenne Authentifizierung...",
|
|
"cannotDetermineAuth": "Authentifizierungsanforderungen konnten nicht ermittelt werden. Bitte uberprufe die Server-URL.",
|
|
|
|
"noAuthentication": "Keine Authentifizierung",
|
|
"httpBasicAuth": "HTTP Basic Auth",
|
|
"authelia": "Authelia",
|
|
"musicAssistantLogin": "Music Assistant Anmeldung",
|
|
|
|
"pressBackToMinimize": "Erneut drucken zum Minimieren",
|
|
|
|
"recentlyPlayed": "Zuletzt gespielt",
|
|
"discoverArtists": "Kunstler entdecken",
|
|
"discoverAlbums": "Alben entdecken",
|
|
"continueListening": "Weiterhoren",
|
|
"discoverAudiobooks": "Horbücher entdecken",
|
|
"discoverSeries": "Serien entdecken",
|
|
"favoriteAlbums": "Lieblingsalben",
|
|
"favoriteArtists": "Lieblingskünstler",
|
|
"favoriteTracks": "Lieblingssongs",
|
|
|
|
"searchMusic": "Musik suchen...",
|
|
"searchForContent": "Nach Künstlern, Alben oder Songs suchen",
|
|
"retry": "Wiederholen",
|
|
"all": "Alle",
|
|
"artists": "Künstler",
|
|
"albums": "Alben",
|
|
"tracks": "Songs",
|
|
"playlists": "Wiedergabelisten",
|
|
"audiobooks": "Hörbücher",
|
|
"music": "Musik",
|
|
"radio": "Radio",
|
|
"stations": "Sender",
|
|
"selectLibrary": "Bibliothek auswählen",
|
|
"noRadioStations": "Keine Radiosender",
|
|
"addRadioStationsHint": "Füge Radiosender in Music Assistant hinzu",
|
|
"searchFailed": "Suche fehlgeschlagen. Bitte überprüfe deine Verbindung.",
|
|
|
|
"queue": "Warteschlange",
|
|
"playerQueue": "{playerName} Warteschlange",
|
|
"noPlayerSelected": "Kein Player ausgewählt",
|
|
"undo": "Rückgängig",
|
|
"removedItem": "{itemName} entfernt",
|
|
|
|
"settings": "Einstellungen",
|
|
"debugLogs": "Debug-Protokolle",
|
|
"themeMode": "Design",
|
|
"light": "Hell",
|
|
"dark": "Dunkel",
|
|
"system": "System",
|
|
"pullToRefresh": "Ziehe zum Aktualisieren der Bibliothek",
|
|
"viewDebugLogs": "Debug-Protokolle anzeigen",
|
|
|
|
"viewAllPlayers": "Alle Player anzeigen",
|
|
"copyLogs": "Protokolle kopieren",
|
|
"clearLogs": "Protokolle löschen",
|
|
"copyList": "Liste kopieren",
|
|
"close": "Schließen",
|
|
"allPlayersCount": "Alle Player ({count})",
|
|
"errorLoadingPlayers": "Fehler beim Laden der Player: {error}",
|
|
"logsCopied": "Protokolle in Zwischenablage kopiert",
|
|
"logsCleared": "Protokolle gelöscht",
|
|
"playerListCopied": "Playerliste in Zwischenablage kopiert!",
|
|
"noLogsYet": "Noch keine Protokolle",
|
|
"infoPlus": "Info+",
|
|
"warnings": "Warnungen",
|
|
"errors": "Fehler",
|
|
"showingEntries": "Zeige {filtered} von {total} Einträgen",
|
|
"thisDevice": "Dieses Gerät",
|
|
"ghostPlayer": "Geist-Player (Duplikat)",
|
|
"unavailableCorrupt": "Nicht verfügbar/Beschädigt",
|
|
"playerId": "ID: {id}",
|
|
"playerInfo": "Verfügbar: {available} | Anbieter: {provider}",
|
|
"shareBugReport": "Fehlerbericht teilen",
|
|
"moreOptions": "Weitere Optionen",
|
|
|
|
"failedToUpdateFavorite": "Favorit konnte nicht aktualisiert werden: {error}",
|
|
"noPlayersAvailable": "Keine Player verfügbar",
|
|
"albumAddedToQueue": "Album zur Warteschlange hinzugefügt",
|
|
"tracksAddedToQueue": "Songs zur Warteschlange hinzugefügt",
|
|
"play": "Abspielen",
|
|
"noPlayersFound": "Keine Player gefunden",
|
|
|
|
"startingRadio": "Starte {name} Radio",
|
|
"failedToStartRadio": "Radio konnte nicht gestartet werden: {error}",
|
|
"startingRadioOnPlayer": "Starte {name} Radio auf {playerName}",
|
|
"addedRadioToQueue": "{name} Radio zur Warteschlange hinzugefügt",
|
|
"failedToAddToQueue": "Konnte nicht zur Warteschlange hinzufügen: {error}",
|
|
"radio": "Radio",
|
|
"inLibrary": "In Bibliothek",
|
|
"noAlbumsFound": "Keine Alben gefunden",
|
|
|
|
"playing": "Spiele {name}",
|
|
"playingTrack": "Spiele Song",
|
|
"nowPlaying": "Wird gespielt",
|
|
|
|
"markedAsFinished": "{name} als beendet markiert",
|
|
"failedToMarkFinished": "Konnte nicht als beendet markieren: {error}",
|
|
"markedAsUnplayed": "{name} als ungespielt markiert",
|
|
"failedToMarkUnplayed": "Konnte nicht als ungespielt markieren: {error}",
|
|
"failedToPlay": "Abspielen fehlgeschlagen: {error}",
|
|
"markAsFinished": "Als beendet markieren",
|
|
"markAsUnplayed": "Als ungespielt markieren",
|
|
"byAuthor": "Von {author}",
|
|
|
|
"audiobookCount": "{count} Hörbuch/Hörbücher",
|
|
"loading": "Laden...",
|
|
"bookCount": "{count} Buch/Bücher",
|
|
"books": "Bücher",
|
|
|
|
"noFavoriteAudiobooks": "Keine Lieblingshörbücher",
|
|
"tapHeartAudiobook": "Tippe auf das Herz bei einem Hörbuch, um es zu Favoriten hinzuzufügen",
|
|
"noAudiobooks": "Keine Hörbücher",
|
|
"addAudiobooksHint": "Füge Hörbücher zu deiner Bibliothek hinzu, um sie hier zu sehen",
|
|
|
|
"noFavoriteArtists": "Keine Lieblingskünstler",
|
|
"tapHeartArtist": "Tippe auf das Herz bei einem Künstler, um ihn zu Favoriten hinzuzufügen",
|
|
"noFavoriteAlbums": "Keine Lieblingsalben",
|
|
"tapHeartAlbum": "Tippe auf das Herz bei einem Album, um es zu Favoriten hinzuzufügen",
|
|
"noFavoritePlaylists": "Keine Lieblings-Wiedergabelisten",
|
|
"tapHeartPlaylist": "Tippe auf das Herz bei einer Wiedergabeliste, um sie zu Favoriten hinzuzufügen",
|
|
"noFavoriteTracks": "Keine Lieblingssongs",
|
|
"longPressTrackHint": "Halte einen Song gedrückt und tippe auf das Herz, um ihn zu Favoriten hinzuzufügen",
|
|
"loadSeries": "Serien laden",
|
|
|
|
"notConnected": "Nicht mit Music Assistant verbunden",
|
|
"notConnectedTitle": "Nicht verbunden",
|
|
"connectHint": "Verbinde dich mit deinem Music Assistant Server, um Musik zu hören",
|
|
"configureServer": "Server konfigurieren",
|
|
|
|
"noArtistsFound": "Keine Künstler gefunden",
|
|
"noTracksFound": "Keine Songs gefunden",
|
|
"noPlaylistsFound": "Keine Wiedergabelisten gefunden",
|
|
"queueIsEmpty": "Warteschlange ist leer",
|
|
"noResultsFound": "Keine Ergebnisse gefunden",
|
|
"refresh": "Aktualisieren",
|
|
|
|
"debugConsole": "Debug-Konsole",
|
|
"copy": "Kopieren",
|
|
"clear": "Löschen",
|
|
"noLogsToCopy": "Keine Protokolle zum Kopieren",
|
|
"noDebugLogsYet": "Noch keine Debug-Protokolle. Versuche Authentifizierung zu erkennen.",
|
|
"showDebug": "Debug anzeigen",
|
|
"hideDebug": "Debug ausblenden",
|
|
|
|
"chapters": "Kapitel",
|
|
"noChapters": "Keine Kapitel",
|
|
"noChapterInfo": "Dieses Hörbuch hat keine Kapitelinformationen",
|
|
|
|
"errorSeeking": "Fehler beim Spulen: {error}",
|
|
"error": "Fehler: {error}",
|
|
|
|
"home": "Start",
|
|
"library": "Bibliothek",
|
|
|
|
"homeScreen": "Startbildschirm",
|
|
"metadataApis": "Metadaten-APIs",
|
|
"theme": "Design",
|
|
"materialYou": "Material You",
|
|
"adaptiveTheme": "Adaptives Design",
|
|
|
|
"language": "Sprache",
|
|
"english": "Englisch",
|
|
"german": "Deutsch",
|
|
"spanish": "Spanisch",
|
|
"french": "Französisch",
|
|
|
|
"noTracksInPlaylist": "Keine Songs in Wiedergabeliste",
|
|
"sortAlphabetically": "Alphabetisch sortieren",
|
|
"sortByYear": "Nach Jahr sortieren",
|
|
"sortBySeriesOrder": "Nach Serienreihenfolge sortieren",
|
|
"listView": "Listenansicht",
|
|
"gridView": "Rasteransicht",
|
|
"noBooksInSeries": "Keine Bücher in dieser Serie gefunden",
|
|
"artist": "Künstler",
|
|
"showRecentlyPlayedAlbums": "Kürzlich gespielte Alben anzeigen",
|
|
"showRandomArtists": "Zufällige Künstler zum Entdecken anzeigen",
|
|
"showRandomAlbums": "Zufällige Alben zum Entdecken anzeigen",
|
|
"showAudiobooksInProgress": "Hörbücher in Bearbeitung anzeigen",
|
|
"showRandomAudiobooks": "Zufällige Hörbücher zum Entdecken anzeigen",
|
|
"showRandomSeries": "Zufällige Hörbuchserien zum Entdecken anzeigen",
|
|
"showFavoriteAlbums": "Lieblingsalben anzeigen",
|
|
"showFavoriteArtists": "Lieblingskünstler anzeigen",
|
|
"showFavoriteTracks": "Lieblingssongs anzeigen",
|
|
"extractColorsFromArtwork": "Farben aus Album- und Künstlercover extrahieren",
|
|
"chooseHomeScreenRows": "Wähle welche Zeilen auf dem Startbildschirm angezeigt werden",
|
|
"addedToFavorites": "Zu Favoriten hinzugefügt",
|
|
"removedFromFavorites": "Aus Favoriten entfernt",
|
|
"unknown": "Unbekannt",
|
|
"noUpcomingTracks": "Keine weiteren Songs",
|
|
"showAll": "Alle anzeigen",
|
|
"showFavoritesOnly": "Nur Favoriten anzeigen",
|
|
"changeView": "Ansicht ändern",
|
|
"authors": "Autoren",
|
|
"series": "Serien",
|
|
"shows": "Sendungen",
|
|
"podcasts": "Podcasts",
|
|
"podcastSupportComingSoon": "Podcast-Unterstützung kommt bald",
|
|
"playlist": "Wiedergabeliste",
|
|
"connectionError": "Verbindungsfehler",
|
|
"twoColumnGrid": "2-Spalten-Raster",
|
|
"threeColumnGrid": "3-Spalten-Raster",
|
|
"fromProviders": "Von Anbietern",
|
|
|
|
"resume": "Fortsetzen",
|
|
"about": "Über",
|
|
"inProgress": "In Bearbeitung",
|
|
"narratedBy": "Gesprochen von {narrators}",
|
|
"unknownNarrator": "Unbekannter Sprecher",
|
|
"unknownAuthor": "Unbekannter Autor",
|
|
"loadingChapters": "Lade Kapitel...",
|
|
"noChapterInfoAvailable": "Keine Kapitelinformationen verfügbar",
|
|
"percentComplete": "{percent}% abgeschlossen",
|
|
"theAudioDbApiKey": "TheAudioDB API-Schlüssel",
|
|
"theAudioDbApiKeyHint": "\"2\" für kostenlosen Zugang oder Premium-Schlüssel",
|
|
"audiobookLibraries": "Hörbuch-Bibliotheken",
|
|
"chooseAudiobookLibraries": "Wähle welche Audiobookshelf-Bibliotheken einbezogen werden",
|
|
"unknownLibrary": "Unbekannte Bibliothek",
|
|
"noSeriesFound": "Keine Serien gefunden",
|
|
"ensembleBugReport": "Ensemble Fehlerbericht",
|
|
"byOwner": "Von {owner}",
|
|
"noSeriesAvailable": "Keine Serien in deiner Hörbuch-Bibliothek verfügbar.\nZiehe zum Aktualisieren.",
|
|
"pullToLoadSeries": "Ziehe nach unten um Serien\nvon Music Assistant zu laden",
|
|
|
|
"search": "Suche",
|
|
"metadataApisDescription": "Künstlerbilder werden automatisch von Deezer abgerufen. Füge unten API-Schlüssel für Künstlerbiografien und Albenbeschreibungen hinzu.",
|
|
"lastFmApiKey": "Last.fm API-Schlüssel",
|
|
"lastFmApiKeyHint": "Kostenlosen Schlüssel auf last.fm/api holen",
|
|
"swipeToSwitchDevice": "Wischen um Gerät zu wechseln",
|
|
"chapterNumber": "Kapitel {number}",
|
|
"pcmAudio": "PCM-Audio",
|
|
"playOn": "Abspielen auf...",
|
|
"addAlbumToQueueOn": "Album zur Warteschlange hinzufügen auf...",
|
|
"addToQueueOn": "Zur Warteschlange hinzufügen auf...",
|
|
"startRadioOn": "{name} Radio starten auf...",
|
|
"book": "Buch",
|
|
"audiobookSingular": "Hörbuch",
|
|
"trackCount": "{count} {count, plural, =1{Song} other{Songs}}",
|
|
"materialYouDescription": "Systemfarben verwenden (Android 12+)",
|
|
"accentColor": "Akzentfarbe",
|
|
"players": "Geräte",
|
|
"preferLocalPlayer": "Lokales Gerät bevorzugen",
|
|
"preferLocalPlayerDescription": "Dieses Gerät immer zuerst auswählen, wenn verfügbar",
|
|
"smartSortPlayers": "Intelligente Sortierung",
|
|
"smartSortPlayersDescription": "Nach Status sortieren (spielt, an, aus) statt alphabetisch",
|
|
"playerStateUnavailable": "Nicht verfügbar",
|
|
"playerStateOff": "Aus",
|
|
"playerStateIdle": "Inaktiv",
|
|
"playerStateExternalSource": "Externe Quelle",
|
|
"playerSelected": "Ausgewählt",
|
|
"actionQueuedForSync": "Wird synchronisiert wenn online",
|
|
"pendingOfflineActions": "{count} ausstehende Synchronisierung",
|
|
"hintsAndTips": "Tipps & Hinweise",
|
|
"showHints": "Hinweise anzeigen",
|
|
"showHintsDescription": "Hilfreiche Tipps zum Entdecken von Funktionen anzeigen",
|
|
"pullToSelectPlayers": "Ziehen um Geräte auszuwählen",
|
|
"holdToSync": "Gedrückt halten zum Sync",
|
|
"swipeToAdjustVolume": "Wischen für Lautstärke"
|
|
}
|