diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 148fbd13..562073ff 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -175,6 +175,22 @@ "@optionsAutoFallback": {"description": "Auto-retry with other services"}, "optionsAutoFallbackSubtitle": "Try other services if download fails", "@optionsAutoFallbackSubtitle": {"description": "Subtitle for auto fallback"}, + "optionsAutoSkipUnavailableTracks": "Auto Skip Unavailable Tracks", + "@optionsAutoSkipUnavailableTracks": {"description": "Toggle to skip to the next queue track when current track stream resolution fails"}, + "optionsAutoSkipUnavailableTracksSubtitleOn": "Automatically skip to the next queue track when a stream cannot be resolved.", + "@optionsAutoSkipUnavailableTracksSubtitleOn": {"description": "Subtitle when auto skip on resolve failure is enabled"}, + "optionsAutoSkipUnavailableTracksSubtitleOff": "Stop on failed track resolution and show an error.", + "@optionsAutoSkipUnavailableTracksSubtitleOff": {"description": "Subtitle when auto skip on resolve failure is disabled"}, + "optionsInteractionMode": "Interaction Mode", + "@optionsInteractionMode": {"description": "Tap behavior mode for track lists"}, + "modeDownloader": "Downloader Mode", + "@modeDownloader": {"description": "Interaction mode where taps queue downloads"}, + "modeDownloaderSubtitle": "Tap tracks to add them to download queue", + "@modeDownloaderSubtitle": {"description": "Subtitle for downloader interaction mode"}, + "modeStreaming": "Streaming Mode", + "@modeStreaming": {"description": "Interaction mode where taps start playback"}, + "modeStreamingSubtitle": "Tap tracks to play instantly", + "@modeStreamingSubtitle": {"description": "Subtitle for streaming interaction mode"}, "optionsUseExtensionProviders": "Use Extension Providers", "@optionsUseExtensionProviders": {"description": "Enable extension download providers"}, "optionsUseExtensionProvidersOn": "Extensions will be tried first", @@ -759,6 +775,8 @@ }, "errorNoTracksFound": "No tracks found", "@errorNoTracksFound": {"description": "Error - search returned no results"}, + "errorSeekNotSupported": "Seeking is not supported for this live stream", + "@errorSeekNotSupported": {"description": "Error - seek disabled for live decrypted stream"}, "errorMissingExtensionSource": "Cannot load {item}: missing extension source", "@errorMissingExtensionSource": { "description": "Error - extension source not available", @@ -1151,6 +1169,13 @@ "count": {"type": "int"} } }, + "playAllCount": "Play All ({count})", + "@playAllCount": { + "description": "Play all button with count", + "placeholders": { + "count": {"type": "int"} + } + }, "tracksCount": "{count, plural, =1{1 track} other{{count} tracks}}", "@tracksCount": { "description": "Track count display", @@ -1669,8 +1694,12 @@ "discographyDownload": "Download Discography", "@discographyDownload": {"description": "Button - download artist discography"}, + "discographyPlay": "Play Discography", + "@discographyPlay": {"description": "Button - play artist discography"}, "discographyDownloadAll": "Download All", "@discographyDownloadAll": {"description": "Option - download entire discography"}, + "discographyPlayAll": "Play All", + "@discographyPlayAll": {"description": "Option - play entire discography"}, "discographyDownloadAllSubtitle": "{count} tracks from {albumCount} releases", "@discographyDownloadAllSubtitle": { "description": "Subtitle showing total tracks and albums", @@ -1722,6 +1751,8 @@ }, "discographyDownloadSelected": "Download Selected", "@discographyDownloadSelected": {"description": "Button - download selected albums"}, + "discographyPlaySelected": "Play Selected", + "@discographyPlaySelected": {"description": "Button - play selected albums"}, "discographyAddedToQueue": "Added {count} tracks to queue", "@discographyAddedToQueue": { "description": "Snackbar - tracks added from discography", @@ -1814,6 +1845,13 @@ "count": {"type": "int"} } }, + "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": {"type": "int"} + } + }, "libraryLastScanned": "Last scanned: {time}", "@libraryLastScanned": { "description": "Last scan time display", @@ -2187,7 +2225,7 @@ "@trackSaveLyricsSubtitle": {"description": "Subtitle for save lyrics action"}, "trackSaveLyricsProgress": "Saving lyrics...", "@trackSaveLyricsProgress": {"description": "Snackbar while saving lyrics to file"}, - "trackReEnrich": "Re-enrich Metadata", + "trackReEnrich": "Re-enrich", "@trackReEnrich": {"description": "Menu action - re-embed metadata into audio file"}, "trackReEnrichSubtitle": "Re-embed metadata without re-downloading", "@trackReEnrichSubtitle": {"description": "Subtitle for re-enrich metadata action"}, @@ -2258,5 +2296,316 @@ } }, "trackConvertFailed": "Conversion failed", - "@trackConvertFailed": {"description": "Snackbar when conversion fails"} + "@trackConvertFailed": {"description": "Snackbar when conversion fails"}, + + "actionCreate": "Create", + "@actionCreate": {"description": "Generic action button - create"}, + + "collectionFoldersTitle": "My folders", + "@collectionFoldersTitle": {"description": "Library section title for custom folders"}, + "collectionWishlist": "Wishlist", + "@collectionWishlist": {"description": "Custom folder for saved tracks to download later"}, + "collectionLoved": "Loved", + "@collectionLoved": {"description": "Custom folder for favorite tracks"}, + "collectionPlaylists": "Playlists", + "@collectionPlaylists": {"description": "Custom user playlists folder"}, + "collectionPlaylist": "Playlist", + "@collectionPlaylist": {"description": "Single playlist label"}, + "collectionAddToPlaylist": "Add to playlist", + "@collectionAddToPlaylist": {"description": "Action to add a track to user playlist"}, + "collectionCreatePlaylist": "Create playlist", + "@collectionCreatePlaylist": {"description": "Action to create a new playlist"}, + "collectionNoPlaylistsYet": "No playlists yet", + "@collectionNoPlaylistsYet": {"description": "Empty state title when user has no playlists"}, + "collectionNoPlaylistsSubtitle": "Create a playlist to start categorizing tracks", + "@collectionNoPlaylistsSubtitle": {"description": "Empty state subtitle when user has no playlists"}, + "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", + "placeholders": { + "count": {"type": "int"} + } + }, + "collectionAddedToPlaylist": "Added to \"{playlistName}\"", + "@collectionAddedToPlaylist": { + "description": "Snackbar after adding track to playlist", + "placeholders": { + "playlistName": {"type": "String"} + } + }, + "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", + "placeholders": { + "playlistName": {"type": "String"} + } + }, + "collectionPlaylistCreated": "Playlist created", + "@collectionPlaylistCreated": {"description": "Snackbar after creating playlist"}, + "collectionPlaylistNameHint": "Playlist name", + "@collectionPlaylistNameHint": {"description": "Hint text for playlist name input"}, + "collectionPlaylistNameRequired": "Playlist name is required", + "@collectionPlaylistNameRequired": {"description": "Validation error for empty playlist name"}, + "collectionRenamePlaylist": "Rename playlist", + "@collectionRenamePlaylist": {"description": "Action to rename playlist"}, + "collectionDeletePlaylist": "Delete playlist", + "@collectionDeletePlaylist": {"description": "Action to delete playlist"}, + "collectionDeletePlaylistMessage": "Delete \"{playlistName}\" and all tracks inside it?", + "@collectionDeletePlaylistMessage": { + "description": "Confirmation message for deleting playlist", + "placeholders": { + "playlistName": {"type": "String"} + } + }, + "collectionPlaylistDeleted": "Playlist deleted", + "@collectionPlaylistDeleted": {"description": "Snackbar after deleting playlist"}, + "collectionPlaylistRenamed": "Playlist renamed", + "@collectionPlaylistRenamed": {"description": "Snackbar after renaming playlist"}, + "collectionWishlistEmptyTitle": "Wishlist is empty", + "@collectionWishlistEmptyTitle": {"description": "Wishlist empty state title"}, + "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", + "@collectionWishlistEmptySubtitle": {"description": "Wishlist empty state subtitle"}, + "collectionLovedEmptyTitle": "Loved folder is empty", + "@collectionLovedEmptyTitle": {"description": "Loved empty state title"}, + "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", + "@collectionLovedEmptySubtitle": {"description": "Loved empty state subtitle"}, + "collectionPlaylistEmptyTitle": "Playlist is empty", + "@collectionPlaylistEmptyTitle": {"description": "Playlist empty state title"}, + "collectionPlaylistEmptySubtitle": "Long-press + on any track to add it here", + "@collectionPlaylistEmptySubtitle": {"description": "Playlist empty state subtitle"}, + "collectionRemoveFromPlaylist": "Remove from playlist", + "@collectionRemoveFromPlaylist": {"description": "Tooltip for removing track from playlist"}, + "collectionRemoveFromFolder": "Remove from folder", + "@collectionRemoveFromFolder": {"description": "Tooltip for removing track from wishlist/loved folder"}, + "collectionRemoved": "\"{trackName}\" removed", + "@collectionRemoved": { + "description": "Snackbar after removing a track from a collection", + "placeholders": { + "trackName": {"type": "String"} + } + }, + "collectionAddedToLoved": "\"{trackName}\" added to Loved", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", + "placeholders": { + "trackName": {"type": "String"} + } + }, + "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": {"type": "String"} + } + }, + "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", + "placeholders": { + "trackName": {"type": "String"} + } + }, + "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", + "placeholders": { + "trackName": {"type": "String"} + } + }, + + "trackOptionAddToLoved": "Add to Loved", + "@trackOptionAddToLoved": {"description": "Bottom sheet action label - add track to loved folder"}, + "trackOptionRemoveFromLoved": "Remove from Loved", + "@trackOptionRemoveFromLoved": {"description": "Bottom sheet action label - remove track from loved folder"}, + "trackOptionAddToWishlist": "Add to Wishlist", + "@trackOptionAddToWishlist": {"description": "Bottom sheet action label - add track to wishlist"}, + "trackOptionRemoveFromWishlist": "Remove from Wishlist", + "@trackOptionRemoveFromWishlist": {"description": "Bottom sheet action label - remove track from wishlist"}, + + "collectionPlaylistChangeCover": "Change cover image", + "@collectionPlaylistChangeCover": {"description": "Bottom sheet action to pick a custom cover image for a playlist"}, + "collectionPlaylistRemoveCover": "Remove cover image", + "@collectionPlaylistRemoveCover": {"description": "Bottom sheet action to remove custom cover image from a playlist"}, + + "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", + "placeholders": { + "count": {"type": "int"} + } + }, + "selectionShareNoFiles": "No shareable files found", + "@selectionShareNoFiles": {"description": "Snackbar when no selected files exist on disk"}, + "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": {"type": "int"} + } + }, + "selectionConvertNoConvertible": "No convertible tracks selected", + "@selectionConvertNoConvertible": {"description": "Snackbar when no selected tracks support conversion"}, + "selectionBatchConvertConfirmTitle": "Batch Convert", + "@selectionBatchConvertConfirmTitle": {"description": "Confirmation dialog title for batch conversion"}, + "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": {"type": "int"}, + "format": {"type": "String"}, + "bitrate": {"type": "String"} + } + }, + "selectionBatchConvertProgress": "Converting {current} of {total}...", + "@selectionBatchConvertProgress": { + "description": "Snackbar during batch conversion progress", + "placeholders": { + "current": {"type": "int"}, + "total": {"type": "int"} + } + }, + "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": {"type": "int"}, + "total": {"type": "int"}, + "format": {"type": "String"} + } + }, + + "setupModeSelectionTitle": "Choose Your Mode", + "@setupModeSelectionTitle": {"description": "Title for mode selection step in setup wizard"}, + "setupModeSelectionDescription": "How would you like to use SpotiFLAC? You can always change this later in Settings.", + "@setupModeSelectionDescription": {"description": "Description for mode selection step"}, + "setupModeDownloaderTitle": "Downloader", + "@setupModeDownloaderTitle": {"description": "Title for downloader mode option"}, + "setupModeDownloaderFeature1": "Download tracks in lossless FLAC quality", + "@setupModeDownloaderFeature1": {"description": "Downloader mode feature 1"}, + "setupModeDownloaderFeature2": "Save music to your device for offline listening", + "@setupModeDownloaderFeature2": {"description": "Downloader mode feature 2"}, + "setupModeDownloaderFeature3": "Manage your local music library", + "@setupModeDownloaderFeature3": {"description": "Downloader mode feature 3"}, + "setupModeStreamingTitle": "Streaming", + "@setupModeStreamingTitle": {"description": "Title for streaming mode option"}, + "setupModeStreamingFeature1": "Stream tracks instantly without downloading", + "@setupModeStreamingFeature1": {"description": "Streaming mode feature 1"}, + "setupModeStreamingFeature2": "Smart Queue auto-discovers new music for you", + "@setupModeStreamingFeature2": {"description": "Streaming mode feature 2"}, + "setupModeStreamingFeature3": "Play any track on demand with playback controls", + "@setupModeStreamingFeature3": {"description": "Streaming mode feature 3"}, + "setupModeChangeableLater": "You can switch between modes anytime in Settings.", + "@setupModeChangeableLater": {"description": "Hint that mode can be changed later"}, + + "settingsSmartQueueTitle": "Smart Queue", + "@settingsSmartQueueTitle": {"description": "Title for Smart Queue toggle in settings"}, + "settingsSmartQueueSubtitle": "Automatically discover and add similar tracks to your queue", + "@settingsSmartQueueSubtitle": {"description": "Subtitle for Smart Queue toggle in settings"}, + + "whatsNewTitle": "What's New in 4.0", + "@whatsNewTitle": {"description": "Title for the What's New screen"}, + "whatsNewSubtitle": "SpotiFLAC has evolved — here's what changed since 3.x", + "@whatsNewSubtitle": {"description": "Subtitle for the What's New screen"}, + "whatsNewWelcomeTitle": "SpotiFLAC Mobile 4.0", + "@whatsNewWelcomeTitle": {"description": "Welcome page title in What's New screen"}, + "whatsNewWelcomeDesc": "Welcome back! This is a major update packed with new features. Swipe through to see what's changed.", + "@whatsNewWelcomeDesc": {"description": "Welcome page description in What's New screen"}, + "whatsNewWelcomeTip1": "New streaming mode with instant playback", + "@whatsNewWelcomeTip1": {"description": "Welcome page tip 1"}, + "whatsNewWelcomeTip2": "Redesigned library and full-screen player", + "@whatsNewWelcomeTip2": {"description": "Welcome page tip 2"}, + "whatsNewWelcomeTip3": "Batch tools, performance boosts, and more", + "@whatsNewWelcomeTip3": {"description": "Welcome page tip 3"}, + "whatsNewStreamingTitle": "Streaming Mode", + "@whatsNewStreamingTitle": {"description": "What's New feature: Streaming Mode title"}, + "whatsNewStreamingDesc": "Tap any track to play instantly — no download needed. Full-screen player with synced lyrics and media controls.", + "@whatsNewStreamingDesc": {"description": "What's New feature: Streaming Mode description"}, + "whatsNewSmartQueueTitle": "Smart Queue", + "@whatsNewSmartQueueTitle": {"description": "What's New feature: Smart Queue title"}, + "whatsNewSmartQueueDesc": "Your queue auto-curates with related tracks and artist discovery. Never run out of music.", + "@whatsNewSmartQueueDesc": {"description": "What's New feature: Smart Queue description"}, + "whatsNewDualModeTitle": "Dual Mode", + "@whatsNewDualModeTitle": {"description": "What's New feature: Dual Mode title"}, + "whatsNewDualModeDesc": "Switch between Downloader and Streaming modes anytime. All buttons adapt automatically.", + "@whatsNewDualModeDesc": {"description": "What's New feature: Dual Mode description"}, + "whatsNewLibraryTitle": "Redesigned Library", + "@whatsNewLibraryTitle": {"description": "What's New feature: Library redesign title"}, + "whatsNewLibraryDesc": "Playlist-first layout with drag-and-drop categorization, custom covers, and multi-select batch actions.", + "@whatsNewLibraryDesc": {"description": "What's New feature: Library redesign description"}, + "whatsNewPlayerTitle": "Full-Screen Player", + "@whatsNewPlayerTitle": {"description": "What's New feature: Full-Screen Player title"}, + "whatsNewPlayerDesc": "Cover art parallax, synced lyrics, playback persistence across restarts, and download button in player.", + "@whatsNewPlayerDesc": {"description": "What's New feature: Full-Screen Player description"}, + "whatsNewContextMenuTitle": "Long-Press Menus", + "@whatsNewContextMenuTitle": {"description": "What's New feature: Context Menus title"}, + "whatsNewContextMenuDesc": "Long-press any track for quick actions — add to playlist, share, convert, or re-enrich metadata.", + "@whatsNewContextMenuDesc": {"description": "What's New feature: Context Menus description"}, + "whatsNewPerformanceTitle": "Performance", + "@whatsNewPerformanceTitle": {"description": "What's New feature: Performance title"}, + "whatsNewPerformanceDesc": "Faster startup, reduced memory usage, SQLite-backed persistence, and granular UI updates.", + "@whatsNewPerformanceDesc": {"description": "What's New feature: Performance description"}, + "whatsNewBatchToolsTitle": "Batch Tools", + "@whatsNewBatchToolsTitle": {"description": "What's New feature: Batch Tools title"}, + "whatsNewBatchToolsDesc": "Multi-select share, batch convert to MP3/Opus, and batch re-enrich metadata across your library.", + "@whatsNewBatchToolsDesc": {"description": "What's New feature: Batch Tools description"}, + "whatsNewStreamingTip1": "Tap any track to start playing instantly", + "@whatsNewStreamingTip1": {"description": "What's New tip: streaming instant play"}, + "whatsNewStreamingTip2": "Synced lyrics in the full-screen player", + "@whatsNewStreamingTip2": {"description": "What's New tip: streaming synced lyrics"}, + "whatsNewStreamingTip3": "Download tracks directly from the player", + "@whatsNewStreamingTip3": {"description": "What's New tip: streaming download from player"}, + "whatsNewSmartQueueTip1": "Queue auto-fills with related tracks", + "@whatsNewSmartQueueTip1": {"description": "What's New tip: smart queue auto-fill"}, + "whatsNewSmartQueueTip2": "Discover new artists as you listen", + "@whatsNewSmartQueueTip2": {"description": "What's New tip: smart queue artist discovery"}, + "whatsNewSmartQueueTip3": "Never run out of music to play", + "@whatsNewSmartQueueTip3": {"description": "What's New tip: smart queue endless"}, + "whatsNewDualModeTip1": "Switch modes anytime in Settings", + "@whatsNewDualModeTip1": {"description": "What's New tip: dual mode switch"}, + "whatsNewDualModeTip2": "UI buttons adapt to your current mode", + "@whatsNewDualModeTip2": {"description": "What's New tip: dual mode adaptive UI"}, + "whatsNewDualModeTip3": "Download for offline, stream for instant play", + "@whatsNewDualModeTip3": {"description": "What's New tip: dual mode use cases"}, + "whatsNewLibraryTip1": "Drag and drop to organize playlists", + "@whatsNewLibraryTip1": {"description": "What's New tip: library drag and drop"}, + "whatsNewLibraryTip2": "Set custom cover images for playlists", + "@whatsNewLibraryTip2": {"description": "What's New tip: library custom covers"}, + "whatsNewLibraryTip3": "Multi-select tracks for batch actions", + "@whatsNewLibraryTip3": {"description": "What's New tip: library multi-select"}, + "whatsNewPlayerTip1": "Cover art with parallax scrolling effect", + "@whatsNewPlayerTip1": {"description": "What's New tip: player parallax"}, + "whatsNewPlayerTip2": "Playback persists across app restarts", + "@whatsNewPlayerTip2": {"description": "What's New tip: player persistence"}, + "whatsNewPlayerTip3": "Synced lyrics while you listen", + "@whatsNewPlayerTip3": {"description": "What's New tip: player lyrics"}, + "whatsNewContextMenuTip1": "Add tracks to any playlist instantly", + "@whatsNewContextMenuTip1": {"description": "What's New tip: context menu add to playlist"}, + "whatsNewContextMenuTip2": "Share or convert with one tap", + "@whatsNewContextMenuTip2": {"description": "What's New tip: context menu share/convert"}, + "whatsNewContextMenuTip3": "Re-enrich metadata when needed", + "@whatsNewContextMenuTip3": {"description": "What's New tip: context menu re-enrich"}, + "whatsNewBatchToolsTip1": "Share multiple tracks at once", + "@whatsNewBatchToolsTip1": {"description": "What's New tip: batch share"}, + "whatsNewBatchToolsTip2": "Batch convert to MP3 or Opus format", + "@whatsNewBatchToolsTip2": {"description": "What's New tip: batch convert"}, + "whatsNewBatchToolsTip3": "Re-enrich metadata across your library", + "@whatsNewBatchToolsTip3": {"description": "What's New tip: batch re-enrich"}, + "whatsNewPerformanceTip1": "Faster app startup time", + "@whatsNewPerformanceTip1": {"description": "What's New tip: performance startup"}, + "whatsNewPerformanceTip2": "Reduced memory usage during playback", + "@whatsNewPerformanceTip2": {"description": "What's New tip: performance memory"}, + "whatsNewPerformanceTip3": "SQLite-backed storage for reliability", + "@whatsNewPerformanceTip3": {"description": "What's New tip: performance SQLite"}, + "whatsNewReadyMessage": "You're all set — enjoy the new SpotiFLAC!", + "@whatsNewReadyMessage": {"description": "Ready card message on last What's New page"}, + "whatsNewGetStarted": "Let's Go", + "@whatsNewGetStarted": {"description": "Button text to dismiss What's New screen"}, + "whatsNewPageIndicator": "{current} of {total}", + "@whatsNewPageIndicator": { + "description": "Page indicator text in What's New screen", + "placeholders": { + "current": {"type": "int"}, + "total": {"type": "int"} + } + } }