Files
ChrisandClaude Opus 4.6 0263c75804 Refactor discovery rows: remove master toggle, simplify defaults, and fix bugs
- Remove Discovery Mixes master toggle entirely
- Discovery rows now auto-appear based on provider availability (e.g., Tidal)
- Discovery rows are off by default on first launch
- All rows (discovery and static) now behave consistently:
  * Enabled rows are added to end of list, not inserted at fixed positions
  * Users can drag rows to any position and they stay there
- Simplified default row order to only include: recently played,
  discover artists, and discover albums
- Fixed critical bug: discovery rows now correctly default to false
- Fixed SharedPreferences variable shadowing bug in setDiscoveryRowPreferences
- Fixed grey section in settings draggable list by filtering discovery-mixes
- Added localization strings for discovery rows UI
- Removed debug print statements

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 22:57:02 +00:00

1773 lines
42 KiB
Plaintext

{
"@@locale": "en",
"appTitle": "Ensemble",
"@appTitle": {
"description": "The application title"
},
"connecting": "Connecting...",
"@connecting": {
"description": "Connection status when connecting"
},
"connected": "Connected",
"@connected": {
"description": "Connection status when connected"
},
"disconnected": "Disconnected",
"@disconnected": {
"description": "Connection status when disconnected"
},
"serverAddress": "Server Address",
"@serverAddress": {
"description": "Login screen server address field label"
},
"serverAddressHint": "e.g., music.example.com or 192.168.1.100",
"@serverAddressHint": {
"description": "Hint text for server address field"
},
"yourName": "Your Name",
"@yourName": {
"description": "Login screen name field label"
},
"yourFirstName": "Your first name",
"@yourFirstName": {
"description": "Hint for name field"
},
"portOptional": "Port (Optional)",
"@portOptional": {
"description": "Port field label"
},
"portHint": "e.g., 8095 or leave blank",
"@portHint": {
"description": "Hint for port field"
},
"portDescription": "Leave blank unless using a custom port",
"@portDescription": {
"description": "Description for port field"
},
"username": "Username",
"@username": {
"description": "Username field label"
},
"password": "Password",
"@password": {
"description": "Password field label"
},
"detectAndConnect": "Detect & Connect",
"@detectAndConnect": {
"description": "Button to detect auth and connect"
},
"connect": "Connect",
"@connect": {
"description": "Connect button label"
},
"disconnect": "Disconnect",
"@disconnect": {
"description": "Disconnect button label"
},
"authServerUrlOptional": "Auth Server URL (Optional)",
"@authServerUrlOptional": {
"description": "Auth server URL field label"
},
"authServerUrlHint": "e.g., auth.example.com (if different from server)",
"@authServerUrlHint": {
"description": "Hint for auth server URL"
},
"authServerUrlDescription": "Leave empty if authentication is on the same server",
"@authServerUrlDescription": {
"description": "Description for auth server URL field"
},
"detectedAuthType": "Detected: {authType}",
"@detectedAuthType": {
"description": "Shows detected authentication type",
"placeholders": {
"authType": {
"type": "String"
}
}
},
"serverRequiresAuth": "This server requires authentication",
"@serverRequiresAuth": {
"description": "Message when server requires auth"
},
"tailscaleVpnConnection": "Tailscale VPN Connection",
"@tailscaleVpnConnection": {
"description": "Tailscale connection type"
},
"unencryptedConnection": "Unencrypted Connection",
"@unencryptedConnection": {
"description": "Unencrypted connection warning"
},
"usingHttpOverTailscale": "Using HTTP over Tailscale (encrypted tunnel)",
"@usingHttpOverTailscale": {
"description": "HTTP over Tailscale description"
},
"httpsFailedUsingHttp": "HTTPS failed, using HTTP fallback",
"@httpsFailedUsingHttp": {
"description": "HTTP fallback message"
},
"httpNotEncrypted": "HTTP connection - data is not encrypted",
"@httpNotEncrypted": {
"description": "HTTP not encrypted warning"
},
"pleaseEnterServerAddress": "Please enter your Music Assistant server address",
"@pleaseEnterServerAddress": {
"description": "Validation message for server address"
},
"pleaseEnterName": "Please enter your name",
"@pleaseEnterName": {
"description": "Validation message for name"
},
"pleaseEnterValidPort": "Please enter a valid port number (1-65535)",
"@pleaseEnterValidPort": {
"description": "Validation message for port"
},
"pleaseEnterCredentials": "Please enter username and password",
"@pleaseEnterCredentials": {
"description": "Validation message for credentials"
},
"authFailed": "Authentication failed. Please check your credentials.",
"@authFailed": {
"description": "Authentication failed error"
},
"maLoginFailed": "Music Assistant login failed. Please check your credentials.",
"@maLoginFailed": {
"description": "MA login failed error"
},
"connectionFailed": "Could not connect to server. Please check the address and try again.",
"@connectionFailed": {
"description": "Connection failed error"
},
"detectingAuth": "Detecting authentication...",
"@detectingAuth": {
"description": "Status when detecting auth"
},
"cannotDetermineAuth": "Cannot determine authentication requirements. Please check server URL.",
"@cannotDetermineAuth": {
"description": "Error when auth detection fails"
},
"noAuthentication": "No Authentication",
"@noAuthentication": {
"description": "Auth type: none"
},
"httpBasicAuth": "HTTP Basic Auth",
"@httpBasicAuth": {
"description": "Auth type: HTTP Basic"
},
"authelia": "Authelia",
"@authelia": {
"description": "Auth type: Authelia"
},
"musicAssistantLogin": "Music Assistant Login",
"@musicAssistantLogin": {
"description": "Auth type: MA Login"
},
"pressBackToMinimize": "Press back again to minimize",
"@pressBackToMinimize": {
"description": "Back button toast message"
},
"recentlyPlayed": "Recently Played",
"@recentlyPlayed": {
"description": "Home screen section title"
},
"discoverArtists": "Discover Artists",
"@discoverArtists": {
"description": "Home screen section title"
},
"discoverAlbums": "Discover Albums",
"@discoverAlbums": {
"description": "Home screen section title"
},
"discoveryMixes": "Discovery Mixes",
"@discoveryMixes": {
"description": "Provider discovery mixes (e.g., Tidal playlists)"
},
"discoveryMixesDescription": "Show provider recommendation mixes (e.g., Tidal Daily Mixes, Discover Weekly) on home screen",
"@discoveryMixesDescription": {
"description": "Description for discovery mixes setting"
},
"discoveryRows": "Discovery rows from Music Assistant",
"@discoveryRows": {
"description": "Label for discovery rows section"
},
"refreshDiscoveryRows": "Refresh available rows",
"@refreshDiscoveryRows": {
"description": "Button to refresh discovery rows"
},
"noDiscoveryRows": "No discovery rows available",
"@noDiscoveryRows": {
"description": "Empty state when no discovery rows available"
},
"discoveryRowBadge": "Music Assistant",
"@discoveryRowBadge": {
"description": "Badge label for discovery rows"
},
"continueListening": "Continue Listening",
"@continueListening": {
"description": "Home screen section title"
},
"discoverAudiobooks": "Discover Audiobooks",
"@discoverAudiobooks": {
"description": "Home screen section title"
},
"discoverSeries": "Discover Series",
"@discoverSeries": {
"description": "Home screen section title"
},
"favoriteAlbums": "Favorite Albums",
"@favoriteAlbums": {
"description": "Home screen section title"
},
"favoriteArtists": "Favorite Artists",
"@favoriteArtists": {
"description": "Home screen section title"
},
"favoriteTracks": "Favorite Tracks",
"@favoriteTracks": {
"description": "Home screen section title"
},
"favoritePlaylists": "Favorite Playlists",
"@favoritePlaylists": {
"description": "Home screen section title"
},
"favoriteRadioStations": "Favorite Radio Stations",
"@favoriteRadioStations": {
"description": "Home screen section title"
},
"favoritePodcasts": "Favorite Podcasts",
"@favoritePodcasts": {
"description": "Home screen section title"
},
"searchMusic": "Search music...",
"@searchMusic": {
"description": "Search placeholder text"
},
"searchForContent": "Search for artists, albums, or tracks",
"@searchForContent": {
"description": "Search hint text"
},
"recentSearches": "Recent Searches",
"@recentSearches": {
"description": "Label for recent search history section"
},
"clearSearchHistory": "Clear Search History",
"@clearSearchHistory": {
"description": "Button to clear search history"
},
"searchHistoryCleared": "Search history cleared",
"@searchHistoryCleared": {
"description": "Confirmation message after clearing search history"
},
"libraryOnly": "Library only",
"@libraryOnly": {
"description": "Toggle to search only in library"
},
"retry": "Retry",
"@retry": {
"description": "Retry button label"
},
"all": "All",
"@all": {
"description": "Filter option: All"
},
"artists": "Artists",
"@artists": {
"description": "Artists category"
},
"albums": "Albums",
"@albums": {
"description": "Albums category"
},
"tracks": "Tracks",
"@tracks": {
"description": "Tracks category"
},
"playlists": "Playlists",
"@playlists": {
"description": "Playlists category"
},
"audiobooks": "Audiobooks",
"@audiobooks": {
"description": "Audiobooks category"
},
"music": "Music",
"@music": {
"description": "Music category"
},
"radio": "Radio",
"@radio": {
"description": "Radio category"
},
"stations": "Stations",
"@stations": {
"description": "Radio stations subcategory"
},
"selectLibrary": "Select Library",
"@selectLibrary": {
"description": "Title for library type selection bottom sheet"
},
"noRadioStations": "No radio stations",
"@noRadioStations": {
"description": "Empty state when no radio stations are available"
},
"addRadioStationsHint": "Add radio stations in Music Assistant",
"@addRadioStationsHint": {
"description": "Hint for adding radio stations"
},
"searchFailed": "Search failed. Please check your connection.",
"@searchFailed": {
"description": "Search error message"
},
"queue": "Queue",
"@queue": {
"description": "Queue screen title"
},
"playerQueue": "{playerName} Queue",
"@playerQueue": {
"description": "Queue title with player name",
"placeholders": {
"playerName": {
"type": "String"
}
}
},
"noPlayerSelected": "No player selected",
"@noPlayerSelected": {
"description": "Message when no player is selected"
},
"undo": "Undo",
"@undo": {
"description": "Undo action"
},
"removedItem": "Removed {itemName}",
"@removedItem": {
"description": "Snackbar message when item removed",
"placeholders": {
"itemName": {
"type": "String"
}
}
},
"settings": "Settings",
"@settings": {
"description": "Settings screen title"
},
"debugLogs": "Debug Logs",
"@debugLogs": {
"description": "Debug logs section"
},
"themeMode": "Theme Mode",
"@themeMode": {
"description": "Theme mode setting"
},
"light": "Light",
"@light": {
"description": "Light theme"
},
"dark": "Dark",
"@dark": {
"description": "Dark theme"
},
"system": "System",
"@system": {
"description": "System theme"
},
"pullToRefresh": "Pull to refresh the library to apply changes",
"@pullToRefresh": {
"description": "Refresh hint message"
},
"viewDebugLogs": "View Debug Logs",
"@viewDebugLogs": {
"description": "Button to view debug logs"
},
"viewAllPlayers": "View All Players",
"@viewAllPlayers": {
"description": "Button to view all players"
},
"copyLogs": "Copy Logs",
"@copyLogs": {
"description": "Button to copy logs"
},
"clearLogs": "Clear Logs",
"@clearLogs": {
"description": "Button to clear logs"
},
"copyList": "Copy List",
"@copyList": {
"description": "Button to copy list"
},
"close": "Close",
"@close": {
"description": "Close button"
},
"allPlayersCount": "All Players ({count})",
"@allPlayersCount": {
"description": "Dialog title with player count",
"placeholders": {
"count": {
"type": "int"
}
}
},
"errorLoadingPlayers": "Error loading players: {error}",
"@errorLoadingPlayers": {
"description": "Error loading players",
"placeholders": {
"error": {
"type": "String"
}
}
},
"logsCopied": "Logs copied to clipboard",
"@logsCopied": {
"description": "Confirmation when logs copied"
},
"logsCleared": "Logs cleared",
"@logsCleared": {
"description": "Confirmation when logs cleared"
},
"playerListCopied": "Player list copied to clipboard!",
"@playerListCopied": {
"description": "Confirmation when player list copied"
},
"noLogsYet": "No logs yet",
"@noLogsYet": {
"description": "Empty logs message"
},
"infoPlus": "Info+",
"@infoPlus": {
"description": "Log filter: Info+"
},
"warnings": "Warnings",
"@warnings": {
"description": "Log filter: Warnings"
},
"errors": "Errors",
"@errors": {
"description": "Log filter: Errors"
},
"showingEntries": "Showing {filtered} of {total} entries",
"@showingEntries": {
"description": "Entries count display",
"placeholders": {
"filtered": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"thisDevice": "This device",
"@thisDevice": {
"description": "Label for current device"
},
"ghostPlayer": "Ghost player (duplicate)",
"@ghostPlayer": {
"description": "Warning for ghost player"
},
"unavailableCorrupt": "Unavailable/Corrupt",
"@unavailableCorrupt": {
"description": "Warning for corrupt player"
},
"playerId": "ID: {id}",
"@playerId": {
"description": "Player ID display",
"placeholders": {
"id": {
"type": "String"
}
}
},
"playerInfo": "Available: {available} | Provider: {provider}",
"@playerInfo": {
"description": "Player info display",
"placeholders": {
"available": {
"type": "String"
},
"provider": {
"type": "String"
}
}
},
"shareBugReport": "Share bug report",
"@shareBugReport": {
"description": "Share bug report option"
},
"moreOptions": "More options",
"@moreOptions": {
"description": "More options menu"
},
"failedToUpdateFavorite": "Failed to update favorite: {error}",
"@failedToUpdateFavorite": {
"description": "Error updating favorite",
"placeholders": {
"error": {
"type": "String"
}
}
},
"noPlayersAvailable": "No players available",
"@noPlayersAvailable": {
"description": "Message when no players available"
},
"albumAddedToQueue": "Album added to queue",
"@albumAddedToQueue": {
"description": "Confirmation when album added"
},
"tracksAddedToQueue": "Tracks added to queue",
"@tracksAddedToQueue": {
"description": "Snackbar message for tracks added to queue"
},
"trackAddedToQueue": "Track added to queue",
"@trackAddedToQueue": {
"description": "Confirmation when tracks added"
},
"play": "Play",
"@play": {
"description": "Play button label"
},
"noPlayersFound": "No players found",
"@noPlayersFound": {
"description": "Message when no players found"
},
"startingRadio": "Starting {name} radio",
"@startingRadio": {
"description": "Status when starting radio",
"placeholders": {
"name": {
"type": "String"
}
}
},
"failedToStartRadio": "Failed to start radio: {error}",
"@failedToStartRadio": {
"description": "Error starting radio",
"placeholders": {
"error": {
"type": "String"
}
}
},
"startingRadioOnPlayer": "Starting {name} radio on {playerName}",
"@startingRadioOnPlayer": {
"description": "Status when starting radio on player",
"placeholders": {
"name": {
"type": "String"
},
"playerName": {
"type": "String"
}
}
},
"addedRadioToQueue": "Added {name} radio to queue",
"@addedRadioToQueue": {
"description": "Confirmation when radio added to queue",
"placeholders": {
"name": {
"type": "String"
}
}
},
"failedToAddToQueue": "Failed to add to queue: {error}",
"@failedToAddToQueue": {
"description": "Error adding to queue",
"placeholders": {
"error": {
"type": "String"
}
}
},
"radio": "Radio",
"@radio": {
"description": "Radio button label"
},
"playingRadioStation": "Playing {name}",
"@playingRadioStation": {
"description": "Status when playing radio station",
"placeholders": {
"name": {
"type": "String"
}
}
},
"addedToQueue": "Added to queue",
"@addedToQueue": {
"description": "Confirmation when item added to queue"
},
"inLibrary": "In Library",
"@inLibrary": {
"description": "In library section title"
},
"noAlbumsFound": "No albums found",
"@noAlbumsFound": {
"description": "Empty albums message"
},
"playing": "Playing {name}",
"@playing": {
"description": "Status when playing",
"placeholders": {
"name": {
"type": "String"
}
}
},
"playingTrack": "Playing track",
"@playingTrack": {
"description": "Status when playing track"
},
"nowPlaying": "Now playing",
"@nowPlaying": {
"description": "Label shown when device selector is open to indicate current player"
},
"markedAsFinished": "{name} marked as finished",
"@markedAsFinished": {
"description": "Audiobook marked finished",
"placeholders": {
"name": {
"type": "String"
}
}
},
"failedToMarkFinished": "Failed to mark as finished: {error}",
"@failedToMarkFinished": {
"description": "Error marking finished",
"placeholders": {
"error": {
"type": "String"
}
}
},
"markedAsUnplayed": "{name} marked as unplayed",
"@markedAsUnplayed": {
"description": "Audiobook marked unplayed",
"placeholders": {
"name": {
"type": "String"
}
}
},
"failedToMarkUnplayed": "Failed to mark as unplayed: {error}",
"@failedToMarkUnplayed": {
"description": "Error marking unplayed",
"placeholders": {
"error": {
"type": "String"
}
}
},
"failedToPlay": "Failed to play: {error}",
"@failedToPlay": {
"description": "Error playing",
"placeholders": {
"error": {
"type": "String"
}
}
},
"markAsFinished": "Mark as Finished",
"@markAsFinished": {
"description": "Button to mark as finished"
},
"markAsUnplayed": "Mark as Unplayed",
"@markAsUnplayed": {
"description": "Button to mark as unplayed"
},
"byAuthor": "By {author}",
"@byAuthor": {
"description": "Author attribution",
"placeholders": {
"author": {
"type": "String"
}
}
},
"audiobookCount": "{count} audiobook(s)",
"@audiobookCount": {
"description": "Audiobook count",
"placeholders": {
"count": {
"type": "int"
}
}
},
"loading": "Loading...",
"@loading": {
"description": "Loading state"
},
"bookCount": "{count} book(s)",
"@bookCount": {
"description": "Book count",
"placeholders": {
"count": {
"type": "int"
}
}
},
"books": "Books",
"@books": {
"description": "Books section title"
},
"noFavoriteAudiobooks": "No favorite audiobooks",
"@noFavoriteAudiobooks": {
"description": "Empty favorite audiobooks"
},
"tapHeartAudiobook": "Tap the heart on an audiobook to add it to favorites",
"@tapHeartAudiobook": {
"description": "Hint to add audiobook favorite"
},
"noAudiobooks": "No audiobooks",
"@noAudiobooks": {
"description": "Empty audiobooks"
},
"addAudiobooksHint": "Add audiobooks to your library to see them here",
"@addAudiobooksHint": {
"description": "Hint to add audiobooks"
},
"noFavoriteArtists": "No favorite artists",
"@noFavoriteArtists": {
"description": "Empty favorite artists"
},
"tapHeartArtist": "Tap the heart on an artist to add them to favorites",
"@tapHeartArtist": {
"description": "Hint to add artist favorite"
},
"noFavoriteAlbums": "No favorite albums",
"@noFavoriteAlbums": {
"description": "Empty favorite albums"
},
"tapHeartAlbum": "Tap the heart on an album to add it to favorites",
"@tapHeartAlbum": {
"description": "Hint to add album favorite"
},
"noFavoritePlaylists": "No favorite playlists",
"@noFavoritePlaylists": {
"description": "Empty favorite playlists"
},
"tapHeartPlaylist": "Tap the heart on a playlist to add it to favorites",
"@tapHeartPlaylist": {
"description": "Hint to add playlist favorite"
},
"noFavoriteTracks": "No favorite tracks",
"@noFavoriteTracks": {
"description": "Empty favorite tracks"
},
"longPressTrackHint": "Long-press a track and tap the heart to add it to favorites",
"@longPressTrackHint": {
"description": "Hint to add track favorite"
},
"loadSeries": "Load Series",
"@loadSeries": {
"description": "Button to load series"
},
"notConnected": "Not connected to Music Assistant",
"@notConnected": {
"description": "Disconnected state title"
},
"notConnectedTitle": "Not Connected",
"@notConnectedTitle": {
"description": "Disconnected state short title"
},
"connectHint": "Connect to your Music Assistant server to start listening",
"@connectHint": {
"description": "Hint to connect"
},
"configureServer": "Configure Server",
"@configureServer": {
"description": "Button to configure server"
},
"noArtistsFound": "No artists found",
"@noArtistsFound": {
"description": "Empty artists"
},
"noTracksFound": "No tracks found",
"@noTracksFound": {
"description": "Empty tracks"
},
"noPlaylistsFound": "No playlists found",
"@noPlaylistsFound": {
"description": "Empty playlists"
},
"queueIsEmpty": "Queue is empty",
"@queueIsEmpty": {
"description": "Empty queue"
},
"noResultsFound": "No results found",
"@noResultsFound": {
"description": "Empty search results"
},
"refresh": "Refresh",
"@refresh": {
"description": "Refresh button"
},
"debugConsole": "Debug Console",
"@debugConsole": {
"description": "Debug console title"
},
"copy": "Copy",
"@copy": {
"description": "Copy button"
},
"clear": "Clear",
"@clear": {
"description": "Clear button"
},
"noLogsToCopy": "No logs to copy",
"@noLogsToCopy": {
"description": "Message when no logs to copy"
},
"noDebugLogsYet": "No debug logs yet. Try detecting auth.",
"@noDebugLogsYet": {
"description": "Empty debug logs hint"
},
"showDebug": "Show Debug",
"@showDebug": {
"description": "Button to show debug"
},
"hideDebug": "Hide Debug",
"@hideDebug": {
"description": "Button to hide debug"
},
"chapters": "Chapters",
"@chapters": {
"description": "Chapters panel title"
},
"noChapters": "No chapters",
"@noChapters": {
"description": "Empty chapters title"
},
"noChapterInfo": "This audiobook has no chapter information",
"@noChapterInfo": {
"description": "Empty chapters message"
},
"errorSeeking": "Error seeking: {error}",
"@errorSeeking": {
"description": "Error when seeking",
"placeholders": {
"error": {
"type": "String"
}
}
},
"error": "Error: {error}",
"@error": {
"description": "Generic error message",
"placeholders": {
"error": {
"type": "String"
}
}
},
"home": "Home",
"@home": {
"description": "Home navigation label"
},
"library": "Library",
"@library": {
"description": "Library navigation label"
},
"homeScreen": "Home Screen",
"@homeScreen": {
"description": "Home screen settings section"
},
"metadataApis": "Metadata APIs",
"@metadataApis": {
"description": "Metadata APIs settings section"
},
"theme": "Theme",
"@theme": {
"description": "Theme settings section"
},
"materialYou": "Material You",
"@materialYou": {
"description": "Material You theme option"
},
"adaptiveTheme": "Adaptive Theme",
"@adaptiveTheme": {
"description": "Adaptive theme option"
},
"language": "Language",
"@language": {
"description": "Language setting"
},
"english": "English",
"@english": {
"description": "English language"
},
"german": "German",
"@german": {
"description": "German language"
},
"spanish": "Spanish",
"@spanish": {
"description": "Spanish language"
},
"french": "French",
"@french": {
"description": "French language"
},
"noTracksInPlaylist": "No tracks in playlist",
"sortAlphabetically": "Sort alphabetically",
"sortByYear": "Sort by year",
"sortBySeriesOrder": "Sort by series order",
"sortByDuration": "Sort by duration",
"newestFirst": "Newest first",
"oldestFirst": "Oldest first",
"viewDetails": "View details",
"listView": "List view",
"gridView": "Grid view",
"noBooksInSeries": "No books found in this series",
"artist": "Artist",
"showRecentlyPlayedAlbums": "Show recently played albums",
"showRandomArtists": "Show random artists to discover",
"showRandomAlbums": "Show random albums to discover",
"showAudiobooksInProgress": "Show audiobooks in progress",
"showRandomAudiobooks": "Show random audiobooks to discover",
"showRandomSeries": "Show random audiobook series to discover",
"showFavoriteAlbums": "Show a row of your favorite albums",
"showFavoriteArtists": "Show a row of your favorite artists",
"showFavoriteTracks": "Show a row of your favorite tracks",
"showFavoritePlaylists": "Show a row of your favorite playlists",
"showFavoriteRadioStations": "Show a row of your favorite radio stations",
"showFavoritePodcasts": "Show a row of your favorite podcasts",
"extractColorsFromArtwork": "Extract colors from album and artist artwork",
"chooseHomeScreenRows": "Choose which rows to display on the home screen",
"favorite": "Favorite",
"addedToFavorites": "Added to favorites",
"removedFromFavorites": "Removed from favorites",
"addedToLibrary": "Added to library",
"removedFromLibrary": "Removed from library",
"addToLibrary": "Add",
"unknown": "Unknown",
"noUpcomingTracks": "No upcoming tracks",
"showAll": "Show all",
"showFavoritesOnly": "Show favorites only",
"changeView": "Change view",
"authors": "Authors",
"series": "Series",
"shows": "Shows",
"podcasts": "Podcasts",
"podcastSupportComingSoon": "Podcast support coming soon",
"noPodcasts": "No podcasts",
"addPodcastsHint": "Subscribe to podcasts in Music Assistant",
"episodes": "Episodes",
"episode": "Episode",
"playlist": "Playlist",
"connectionError": "Connection Error",
"twoColumnGrid": "2-column grid",
"threeColumnGrid": "3-column grid",
"fromProviders": "From Providers",
"resume": "Resume",
"about": "About",
"inProgress": "In progress",
"narratedBy": "Narrated by {narrators}",
"@narratedBy": {
"placeholders": {
"narrators": {
"type": "String"
}
}
},
"unknownNarrator": "Unknown Narrator",
"unknownAuthor": "Unknown Author",
"loadingChapters": "Loading chapters...",
"noChapterInfoAvailable": "No chapter information available",
"percentComplete": "{percent}% complete",
"@percentComplete": {
"placeholders": {
"percent": {
"type": "int"
}
}
},
"theAudioDbApiKey": "TheAudioDB API Key",
"theAudioDbApiKeyHint": "Use \"2\" for free tier or premium key",
"audiobookLibraries": "Audiobook Libraries",
"chooseAudiobookLibraries": "Choose which Audiobookshelf libraries to include",
"unknownLibrary": "Unknown Library",
"musicProviders": "Music Providers",
"musicProvidersDescription": "Choose which accounts to show in your library",
"libraryRefreshing": "Refreshing library...",
"cannotDisableLastProvider": "Cannot disable the last provider",
"noSeriesFound": "No Series Found",
"ensembleBugReport": "Ensemble Bug Report",
"byOwner": "By {owner}",
"@byOwner": {
"placeholders": {
"owner": {
"type": "String"
}
}
},
"noSeriesAvailable": "No series available from your audiobook library.\nPull to refresh.",
"pullToLoadSeries": "Pull down to load series\nfrom Music Assistant",
"search": "Search",
"@search": {
"description": "Search navigation label"
},
"metadataApisDescription": "Artist images are automatically fetched from Deezer. Add API keys below for artist biographies and album descriptions.",
"@metadataApisDescription": {
"description": "Description for metadata APIs section"
},
"lastFmApiKey": "Last.fm API Key",
"@lastFmApiKey": {
"description": "Last.fm API key field label"
},
"lastFmApiKeyHint": "Get free key at last.fm/api",
"@lastFmApiKeyHint": {
"description": "Hint for Last.fm API key field"
},
"swipeToSwitchDevice": "Swipe to change player",
"@swipeToSwitchDevice": {
"description": "Hint for device switching gesture"
},
"chapterNumber": "Chapter {number}",
"@chapterNumber": {
"description": "Chapter number display",
"placeholders": {
"number": {
"type": "int"
}
}
},
"pcmAudio": "PCM Audio",
"@pcmAudio": {
"description": "PCM audio format label"
},
"playOn": "Play on...",
"@playOn": {
"description": "Bottom sheet title for selecting player"
},
"addAlbumToQueueOn": "Add album to queue on...",
"@addAlbumToQueueOn": {
"description": "Bottom sheet title for adding album to queue"
},
"addToQueue": "Add to queue",
"@addToQueue": {
"description": "Add item to queue on selected player"
},
"addToQueueOn": "Add to queue on...",
"@addToQueueOn": {
"description": "Bottom sheet title for adding to queue"
},
"startRadio": "Start radio",
"@startRadio": {
"description": "Start radio on selected player"
},
"startRadioOn": "Start {name} radio on...",
"@startRadioOn": {
"description": "Bottom sheet title for starting radio",
"placeholders": {
"name": {
"type": "String"
}
}
},
"book": "book",
"@book": {
"description": "Singular form of book"
},
"audiobookSingular": "audiobook",
"@audiobookSingular": {
"description": "Singular form of audiobook"
},
"albumSingular": "Album",
"@albumSingular": {
"description": "Singular form of album for search type indicator"
},
"trackSingular": "Track",
"@trackSingular": {
"description": "Singular form of track for search type indicator"
},
"podcastSingular": "Podcast",
"@podcastSingular": {
"description": "Singular form of podcast for search type indicator"
},
"trackCount": "{count} {count, plural, =1{track} other{tracks}}",
"@trackCount": {
"description": "Track count with plural",
"placeholders": {
"count": {
"type": "int"
}
}
},
"materialYouDescription": "Use system colors (Android 12+)",
"@materialYouDescription": {
"description": "Description for Material You theme option"
},
"accentColor": "Accent Color",
"@accentColor": {
"description": "Accent color selection label"
},
"players": "Players",
"@players": {
"description": "Players settings section title"
},
"preferLocalPlayer": "Prefer Local Player",
"@preferLocalPlayer": {
"description": "Setting to always prefer local player"
},
"preferLocalPlayerDescription": "Always select this device first when available",
"@preferLocalPlayerDescription": {
"description": "Description for prefer local player setting"
},
"smartSortPlayers": "Smart Sort",
"@smartSortPlayers": {
"description": "Setting to sort players by status"
},
"smartSortPlayersDescription": "Sort by status (playing, on, off) instead of alphabetically",
"@smartSortPlayersDescription": {
"description": "Description for smart sort players setting"
},
"disableAutoSwitch": "Disable Auto-Switch",
"@disableAutoSwitch": {
"description": "Setting to disable automatic player switching"
},
"disableAutoSwitchDescription": "Never automatically switch to a different player",
"@disableAutoSwitchDescription": {
"description": "Description for disable auto-switch setting"
},
"playerStateUnavailable": "Unavailable",
"@playerStateUnavailable": {
"description": "Player state when unavailable"
},
"playerStateOff": "Off",
"@playerStateOff": {
"description": "Player state when powered off"
},
"playerStateIdle": "Idle",
"@playerStateIdle": {
"description": "Player state when idle"
},
"playerStateExternalSource": "External Source",
"@playerStateExternalSource": {
"description": "Player state when playing from external source (optical, Spotify, etc.)"
},
"playerSelected": "Selected",
"@playerSelected": {
"description": "Label for selected player"
},
"actionQueuedForSync": "Will sync when online",
"@actionQueuedForSync": {
"description": "Message when action is queued for sync while offline"
},
"pendingOfflineActions": "{count} pending sync",
"@pendingOfflineActions": {
"description": "Shows number of pending offline actions",
"placeholders": {
"count": {
"type": "int"
}
}
},
"hintsAndTips": "Hints & Tips",
"@hintsAndTips": {
"description": "Settings section title for hints"
},
"showHints": "Show Hints",
"@showHints": {
"description": "Toggle label for showing hints"
},
"showHintsDescription": "Display helpful tips for discovering features",
"@showHintsDescription": {
"description": "Description for show hints toggle"
},
"volumePrecisionMode": "Volume Precision Mode",
"@volumePrecisionMode": {
"description": "Setting for fine volume control"
},
"volumePrecisionModeDescription": "Hold still while adjusting volume for fine control",
"@volumePrecisionModeDescription": {
"description": "Description for volume precision mode setting"
},
"display": "Display",
"@display": {
"description": "Settings section title for display options"
},
"showProviderIcons": "Show Provider Icons",
"@showProviderIcons": {
"description": "Toggle label for showing provider icons on album art"
},
"showProviderIconsDescription": "Display provider logos on album art",
"@showProviderIconsDescription": {
"description": "Description for show provider icons toggle"
},
"pullToSelectPlayers": "Pull to select players",
"@pullToSelectPlayers": {
"description": "Hint shown when mini player bounces"
},
"holdToSync": "Long-press to sync",
"@holdToSync": {
"description": "Hint for long-press to sync players"
},
"swipeToAdjustVolume": "Swipe to adjust volume",
"@swipeToAdjustVolume": {
"description": "Hint for swiping left/right to adjust player volume"
},
"selectPlayerHint": "Choose a player, or dismiss by swiping down",
"@selectPlayerHint": {
"description": "First-time hint for selecting a player in device selector"
},
"welcomeToEnsemble": "Welcome to Ensemble",
"@welcomeToEnsemble": {
"description": "Welcome message title for onboarding"
},
"welcomeMessage": "By default your phone is the selected player.\nPull the mini player down to select another player.",
"@welcomeMessage": {
"description": "Welcome message body explaining how to select players"
},
"skip": "Skip",
"@skip": {
"description": "Button to skip onboarding or hints"
},
"dismissPlayerHint": "Swipe down, tap outside, or press back to return",
"@dismissPlayerHint": {
"description": "Hint explaining how to dismiss the player selector"
},
"playingAlbum": "Playing {albumName}",
"@playingAlbum": {
"description": "Message shown when starting to play an album",
"placeholders": {
"albumName": {
"type": "String"
}
}
},
"playingPlaylist": "Playing {playlistName}",
"@playingPlaylist": {
"description": "Message shown when starting to play a playlist",
"placeholders": {
"playlistName": {
"type": "String"
}
}
},
"noTracks": "No tracks",
"@noTracks": {
"description": "Empty state title when no tracks exist in library"
},
"addTracksHint": "Add some music to your library to see tracks here",
"@addTracksHint": {
"description": "Hint for adding tracks to library"
},
"noFavoriteRadioStations": "No favorite radio stations",
"@noFavoriteRadioStations": {
"description": "Empty state when no favorite radio stations"
},
"longPressRadioHint": "Long-press a station and tap the heart to add it to favorites",
"@longPressRadioHint": {
"description": "Hint for favoriting radio stations"
},
"noFavoritePodcasts": "No favorite podcasts",
"@noFavoritePodcasts": {
"description": "Empty state when no favorite podcasts"
},
"longPressPodcastHint": "Long-press a podcast and tap the heart to add it to favorites",
"@longPressPodcastHint": {
"description": "Hint for favoriting podcasts"
},
"failedToPlayRadioStation": "Failed to play radio station: {error}",
"@failedToPlayRadioStation": {
"description": "Error when playing radio station fails",
"placeholders": {
"error": {
"type": "String"
}
}
},
"itemAlreadyInLibrary": "Item is already in library",
"@itemAlreadyInLibrary": {
"description": "Message when trying to add item already in library"
},
"failedToAddToLibrary": "Failed to add to library",
"@failedToAddToLibrary": {
"description": "Error when adding to library fails"
},
"cannotFindLibraryId": "Cannot find library ID for removal",
"@cannotFindLibraryId": {
"description": "Error when library ID not found for removal"
},
"failedToRemoveFromLibrary": "Failed to remove from library",
"@failedToRemoveFromLibrary": {
"description": "Error when removing from library fails"
},
"failedToPlayAlbum": "Failed to play album: {error}",
"@failedToPlayAlbum": {
"description": "Error when playing album fails",
"placeholders": {
"error": {
"type": "String"
}
}
},
"playingOnPlayer": "Playing {name} on {playerName}",
"@playingOnPlayer": {
"description": "Status when playing item on specific player",
"placeholders": {
"name": {
"type": "String"
},
"playerName": {
"type": "String"
}
}
},
"failedToPlayPlaylist": "Failed to play playlist: {error}",
"@failedToPlayPlaylist": {
"description": "Error when playing playlist fails",
"placeholders": {
"error": {
"type": "String"
}
}
},
"failedToPlayAudiobook": "Failed to play audiobook: {error}",
"@failedToPlayAudiobook": {
"description": "Error when playing audiobook fails",
"placeholders": {
"error": {
"type": "String"
}
}
},
"noOtherPlayersAvailable": "No other players available",
"@noOtherPlayersAvailable": {
"description": "Message when no other players available for transfer"
},
"transferQueue": "Transfer queue",
"@transferQueue": {
"description": "Tooltip for transfer queue button"
},
"clearQueue": "Clear queue",
"@clearQueue": {
"description": "Tooltip for clear queue button"
},
"syncingPlayer": "Syncing {playerName}...",
"@syncingPlayer": {
"description": "Status when syncing player",
"placeholders": {
"playerName": {
"type": "String"
}
}
},
"switchPlayer": "Switch Player",
"@switchPlayer": {
"description": "Label for switch player action"
},
"logsCopiedToClipboard": "Logs copied to clipboard",
"@logsCopiedToClipboard": {
"description": "Confirmation when logs copied"
},
"auto": "Auto",
"@auto": {
"description": "Auto option for language selection"
},
"transferQueueTo": "Transfer Queue To",
"@transferQueueTo": {
"description": "Title for transfer queue dialog"
},
"queueTransferredTo": "Queue transferred to {playerName}",
"@queueTransferredTo": {
"description": "Success message when queue transferred",
"placeholders": {
"playerName": {
"type": "String"
}
}
},
"failedToTransferQueue": "Failed to transfer queue: {error}",
"@failedToTransferQueue": {
"description": "Error when queue transfer fails",
"placeholders": {
"error": {
"type": "String"
}
}
},
"failedToLoadQueue": "Failed to load queue: {error}",
"@failedToLoadQueue": {
"description": "Error when queue loading fails",
"placeholders": {
"error": {
"type": "String"
}
}
},
"transferTo": "Transfer to...",
"@transferTo": {
"description": "Label for transfer destination selection"
},
"transferQueueToPlayer": "Transfer queue to another player",
"@transferQueueToPlayer": {
"description": "Tooltip for transfer queue button"
},
"selectPlayerToPlay": "Select a player",
"@selectPlayerToPlay": {
"description": "Generic hint for selecting a player in player selector"
},
"selectPlayerToPlayAlbum": "Select player to play album",
"@selectPlayerToPlayAlbum": {
"description": "Hint for selecting player to play album"
},
"selectPlayerToPlayPlaylist": "Select player to play playlist",
"@selectPlayerToPlayPlaylist": {
"description": "Hint for selecting player to play playlist"
},
"selectPlayerForRadio": "Select player for radio",
"@selectPlayerForRadio": {
"description": "Hint for selecting player to start radio"
},
"selectPlayerForEpisode": "Select player for episode",
"@selectPlayerForEpisode": {
"description": "Hint for selecting player to play episode"
},
"selectPlayerForAudiobook": "Select player for audiobook",
"@selectPlayerForAudiobook": {
"description": "Hint for selecting player to play audiobook"
},
"selectPlayerToAddToQueue": "Select player to add to queue",
"@selectPlayerToAddToQueue": {
"description": "Hint for selecting player to add to queue"
},
"aboutAndSupport": "About & Support",
"@aboutAndSupport": {
"description": "About and support section title"
},
"supportDevelopment": "Support Development",
"@supportDevelopment": {
"description": "Support development section"
},
"ensembleIsUnofficial": "Ensemble is an unofficial, community-built client. Consider supporting its development.",
"@ensembleIsUnofficial": {
"description": "Description about Ensemble being unofficial"
},
"sponsorOnGitHub": "Sponsor on GitHub",
"@sponsorOnGitHub": {
"description": "GitHub Sponsors button label"
},
"buyMeAKoFi": "Buy me a Ko-fi",
"@buyMeAKoFi": {
"description": "Ko-fi donation button label"
},
"aboutEnsemble": "About Ensemble",
"@aboutEnsemble": {
"description": "About Ensemble section"
},
"version": "Version",
"@version": {
"description": "Version label"
},
"visitGitHubRepo": "Visit GitHub Repository",
"@visitGitHubRepo": {
"description": "Link to GitHub repo"
},
"reportABug": "Report a Bug",
"@reportABug": {
"description": "Link to report issues"
},
"noRowsEnabled": "No rows enabled",
"@noRowsEnabled": {
"description": "Empty state when no home screen rows are enabled"
},
"pullToRefreshHint": "Pull down to refresh or enable rows in settings",
"@pullToRefreshHint": {
"description": "Hint when home screen is empty"
}
}