From 02c803385c9f1ce2e967613580070e6756fea81a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 6 Mar 2026 23:32:33 +0700 Subject: [PATCH] Update source file app_en.arb --- lib/l10n/arb/app_en.arb | 3688 +++++++++++++++++++++++---------------- 1 file changed, 2147 insertions(+), 1541 deletions(-) diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 709c1213..ca416fa0 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -1,897 +1,996 @@ { "@@locale": "en", "@@last_modified": "2026-01-16", - "appName": "SpotiFLAC", - "@appName": {"description": "App name - DO NOT TRANSLATE"}, - "appDescription": "Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.", - "@appDescription": {"description": "App description shown in about page"}, - + "@appName": { + "description": "App name - DO NOT TRANSLATE" + }, "navHome": "Home", - "@navHome": {"description": "Bottom navigation - Home tab"}, + "@navHome": { + "description": "Bottom navigation - Home tab" + }, "navLibrary": "Library", - "@navLibrary": {"description": "Bottom navigation - Library tab"}, - "navHistory": "History", - "@navHistory": {"description": "Bottom navigation - History tab (legacy)"}, + "@navLibrary": { + "description": "Bottom navigation - Library tab" + }, "navSettings": "Settings", - "@navSettings": {"description": "Bottom navigation - Settings tab"}, + "@navSettings": { + "description": "Bottom navigation - Settings tab" + }, "navStore": "Store", - "@navStore": {"description": "Bottom navigation - Extension store tab"}, - + "@navStore": { + "description": "Bottom navigation - Extension store tab" + }, "homeTitle": "Home", - "@homeTitle": {"description": "Home screen title"}, - "homeSearchHint": "Paste Spotify URL or search...", - "@homeSearchHint": {"description": "Placeholder text in search box"}, - "homeSearchHintExtension": "Search with {extensionName}...", - "@homeSearchHintExtension": { - "description": "Placeholder when extension search is active", - "placeholders": { - "extensionName": {"type": "String", "description": "Name of the active extension"} - } + "@homeTitle": { + "description": "Home screen title" }, "homeSubtitle": "Paste a Spotify link or search by name", - "@homeSubtitle": {"description": "Subtitle shown below search box"}, + "@homeSubtitle": { + "description": "Subtitle shown below search box" + }, "homeSupports": "Supports: Track, Album, Playlist, Artist URLs", - "@homeSupports": {"description": "Info text about supported URL types"}, + "@homeSupports": { + "description": "Info text about supported URL types" + }, "homeRecent": "Recent", - "@homeRecent": {"description": "Section header for recent searches"}, - - "historyTitle": "History", - "@historyTitle": {"description": "History screen title"}, - "historyDownloading": "Downloading ({count})", - "@historyDownloading": { - "description": "Tab showing active downloads count", - "placeholders": { - "count": {"type": "int", "description": "Number of active downloads"} - } + "@homeRecent": { + "description": "Section header for recent searches" }, - "historyDownloaded": "Downloaded", - "@historyDownloaded": {"description": "Tab showing completed downloads"}, "historyFilterAll": "All", - "@historyFilterAll": {"description": "Filter chip - show all items"}, + "@historyFilterAll": { + "description": "Filter chip - show all items" + }, "historyFilterAlbums": "Albums", - "@historyFilterAlbums": {"description": "Filter chip - show albums only"}, + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" + }, "historyFilterSingles": "Singles", - "@historyFilterSingles": {"description": "Filter chip - show singles only"}, - "historyTracksCount": "{count, plural, =1{1 track} other{{count} tracks}}", - "@historyTracksCount": { - "description": "Track count with plural form", - "placeholders": { - "count": {"type": "int"} - } + "@historyFilterSingles": { + "description": "Filter chip - show singles only" }, - "historyAlbumsCount": "{count, plural, =1{1 album} other{{count} albums}}", - "@historyAlbumsCount": { - "description": "Album count with plural form", - "placeholders": { - "count": {"type": "int"} - } - }, - "historyNoDownloads": "No download history", - "@historyNoDownloads": {"description": "Empty state title"}, - "historyNoDownloadsSubtitle": "Downloaded tracks will appear here", - "@historyNoDownloadsSubtitle": {"description": "Empty state subtitle"}, - "historyNoAlbums": "No album downloads", - "@historyNoAlbums": {"description": "Empty state when filtering albums"}, - "historyNoAlbumsSubtitle": "Download multiple tracks from an album to see them here", - "@historyNoAlbumsSubtitle": {"description": "Empty state subtitle for albums filter"}, - "historyNoSingles": "No single downloads", - "@historyNoSingles": {"description": "Empty state when filtering singles"}, -"historyNoSinglesSubtitle": "Single track downloads will appear here", - "@historyNoSinglesSubtitle": {"description": "Empty state subtitle for singles filter"}, "historySearchHint": "Search history...", - "@historySearchHint": {"description": "Search bar placeholder in history"}, - + "@historySearchHint": { + "description": "Search bar placeholder in history" + }, "settingsTitle": "Settings", - "@settingsTitle": {"description": "Settings screen title"}, + "@settingsTitle": { + "description": "Settings screen title" + }, "settingsDownload": "Download", - "@settingsDownload": {"description": "Settings section - download options"}, + "@settingsDownload": { + "description": "Settings section - download options" + }, "settingsAppearance": "Appearance", - "@settingsAppearance": {"description": "Settings section - visual customization"}, + "@settingsAppearance": { + "description": "Settings section - visual customization" + }, "settingsOptions": "Options", - "@settingsOptions": {"description": "Settings section - app options"}, + "@settingsOptions": { + "description": "Settings section - app options" + }, "settingsExtensions": "Extensions", - "@settingsExtensions": {"description": "Settings section - extension management"}, + "@settingsExtensions": { + "description": "Settings section - extension management" + }, "settingsAbout": "About", - "@settingsAbout": {"description": "Settings section - app info"}, - + "@settingsAbout": { + "description": "Settings section - app info" + }, "downloadTitle": "Download", - "@downloadTitle": {"description": "Download settings page title"}, - "downloadLocation": "Download Location", - "@downloadLocation": {"description": "Setting for download folder"}, - "downloadLocationSubtitle": "Choose where to save files", - "@downloadLocationSubtitle": {"description": "Subtitle for download location"}, - "downloadLocationDefault": "Default location", - "@downloadLocationDefault": {"description": "Shown when using default folder"}, - "downloadDefaultService": "Default Service", - "@downloadDefaultService": {"description": "Setting for preferred download service (Tidal/Qobuz/Amazon)"}, - "downloadDefaultServiceSubtitle": "Service used for downloads", - "@downloadDefaultServiceSubtitle": {"description": "Subtitle for default service"}, - "downloadDefaultQuality": "Default Quality", - "@downloadDefaultQuality": {"description": "Setting for audio quality"}, - "downloadAskQuality": "Ask Quality Before Download", - "@downloadAskQuality": {"description": "Toggle to show quality picker"}, + "@downloadTitle": { + "description": "Download settings page title" + }, "downloadAskQualitySubtitle": "Show quality picker for each download", - "@downloadAskQualitySubtitle": {"description": "Subtitle for ask quality toggle"}, + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" + }, "downloadFilenameFormat": "Filename Format", - "@downloadFilenameFormat": {"description": "Setting for output filename pattern"}, + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" + }, "downloadFolderOrganization": "Folder Organization", - "@downloadFolderOrganization": {"description": "Setting for folder structure"}, - "downloadSeparateSingles": "Separate Singles", - "@downloadSeparateSingles": {"description": "Toggle to separate single tracks"}, - "downloadSeparateSinglesSubtitle": "Put single tracks in a separate folder", - "@downloadSeparateSinglesSubtitle": {"description": "Subtitle for separate singles toggle"}, - - "qualityBest": "Best Available", - "@qualityBest": {"description": "Audio quality option - highest available"}, - "qualityFlac": "FLAC", - "@qualityFlac": {"description": "Audio quality option - FLAC lossless"}, - "quality320": "320 kbps", - "@quality320": {"description": "Audio quality option - 320kbps MP3"}, - "quality128": "128 kbps", - "@quality128": {"description": "Audio quality option - 128kbps MP3"}, - + "@downloadFolderOrganization": { + "description": "Setting for folder structure" + }, "appearanceTitle": "Appearance", - "@appearanceTitle": {"description": "Appearance settings page title"}, - "appearanceTheme": "Theme", - "@appearanceTheme": {"description": "Theme mode setting"}, + "@appearanceTitle": { + "description": "Appearance settings page title" + }, "appearanceThemeSystem": "System", - "@appearanceThemeSystem": {"description": "Follow system theme"}, + "@appearanceThemeSystem": { + "description": "Follow system theme" + }, "appearanceThemeLight": "Light", - "@appearanceThemeLight": {"description": "Light theme"}, + "@appearanceThemeLight": { + "description": "Light theme" + }, "appearanceThemeDark": "Dark", - "@appearanceThemeDark": {"description": "Dark theme"}, + "@appearanceThemeDark": { + "description": "Dark theme" + }, "appearanceDynamicColor": "Dynamic Color", - "@appearanceDynamicColor": {"description": "Material You dynamic colors"}, + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" + }, "appearanceDynamicColorSubtitle": "Use colors from your wallpaper", - "@appearanceDynamicColorSubtitle": {"description": "Subtitle for dynamic color"}, - "appearanceAccentColor": "Accent Color", - "@appearanceAccentColor": {"description": "Custom accent color picker"}, + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" + }, "appearanceHistoryView": "History View", - "@appearanceHistoryView": {"description": "Layout style for history"}, + "@appearanceHistoryView": { + "description": "Layout style for history" + }, "appearanceHistoryViewList": "List", - "@appearanceHistoryViewList": {"description": "List layout option"}, + "@appearanceHistoryViewList": { + "description": "List layout option" + }, "appearanceHistoryViewGrid": "Grid", - "@appearanceHistoryViewGrid": {"description": "Grid layout option"}, - + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" + }, "optionsTitle": "Options", - "@optionsTitle": {"description": "Options settings page title"}, - "optionsSearchSource": "Search Source", - "@optionsSearchSource": {"description": "Section for search provider settings"}, + "@optionsTitle": { + "description": "Options settings page title" + }, "optionsPrimaryProvider": "Primary Provider", - "@optionsPrimaryProvider": {"description": "Main search provider setting"}, + "@optionsPrimaryProvider": { + "description": "Main search provider setting" + }, "optionsPrimaryProviderSubtitle": "Service used when searching by track name.", - "@optionsPrimaryProviderSubtitle": {"description": "Subtitle for primary provider"}, + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" + }, "optionsUsingExtension": "Using extension: {extensionName}", "@optionsUsingExtension": { "description": "Shows active extension name", "placeholders": { - "extensionName": {"type": "String"} + "extensionName": { + "type": "String" + } } }, "optionsSwitchBack": "Tap Deezer or Spotify to switch back from extension", - "@optionsSwitchBack": {"description": "Hint to switch back to built-in providers"}, + "@optionsSwitchBack": { + "description": "Hint to switch back to built-in providers" + }, "optionsAutoFallback": "Auto Fallback", - "@optionsAutoFallback": {"description": "Auto-retry with other services"}, + "@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"}, + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" + }, "optionsUseExtensionProviders": "Use Extension Providers", - "@optionsUseExtensionProviders": {"description": "Enable extension download providers"}, + "@optionsUseExtensionProviders": { + "description": "Enable extension download providers" + }, "optionsUseExtensionProvidersOn": "Extensions will be tried first", - "@optionsUseExtensionProvidersOn": {"description": "Status when extension providers enabled"}, + "@optionsUseExtensionProvidersOn": { + "description": "Status when extension providers enabled" + }, "optionsUseExtensionProvidersOff": "Using built-in providers only", - "@optionsUseExtensionProvidersOff": {"description": "Status when extension providers disabled"}, + "@optionsUseExtensionProvidersOff": { + "description": "Status when extension providers disabled" + }, "optionsEmbedLyrics": "Embed Lyrics", - "@optionsEmbedLyrics": {"description": "Embed lyrics in audio files"}, + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" + }, "optionsEmbedLyricsSubtitle": "Embed synced lyrics into FLAC files", - "@optionsEmbedLyricsSubtitle": {"description": "Subtitle for embed lyrics"}, + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" + }, "optionsMaxQualityCover": "Max Quality Cover", - "@optionsMaxQualityCover": {"description": "Download highest quality album art"}, + "@optionsMaxQualityCover": { + "description": "Download highest quality album art" + }, "optionsMaxQualityCoverSubtitle": "Download highest resolution cover art", - "@optionsMaxQualityCoverSubtitle": {"description": "Subtitle for max quality cover"}, + "@optionsMaxQualityCoverSubtitle": { + "description": "Subtitle for max quality cover" + }, "optionsConcurrentDownloads": "Concurrent Downloads", - "@optionsConcurrentDownloads": {"description": "Number of parallel downloads"}, + "@optionsConcurrentDownloads": { + "description": "Number of parallel downloads" + }, "optionsConcurrentSequential": "Sequential (1 at a time)", - "@optionsConcurrentSequential": {"description": "Download one at a time"}, + "@optionsConcurrentSequential": { + "description": "Download one at a time" + }, "optionsConcurrentParallel": "{count} parallel downloads", "@optionsConcurrentParallel": { "description": "Multiple parallel downloads", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "optionsConcurrentWarning": "Parallel downloads may trigger rate limiting", - "@optionsConcurrentWarning": {"description": "Warning about rate limits"}, + "@optionsConcurrentWarning": { + "description": "Warning about rate limits" + }, "optionsExtensionStore": "Extension Store", - "@optionsExtensionStore": {"description": "Show/hide store tab"}, + "@optionsExtensionStore": { + "description": "Show/hide store tab" + }, "optionsExtensionStoreSubtitle": "Show Store tab in navigation", - "@optionsExtensionStoreSubtitle": {"description": "Subtitle for extension store toggle"}, + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension store toggle" + }, "optionsCheckUpdates": "Check for Updates", - "@optionsCheckUpdates": {"description": "Auto update check toggle"}, + "@optionsCheckUpdates": { + "description": "Auto update check toggle" + }, "optionsCheckUpdatesSubtitle": "Notify when new version is available", - "@optionsCheckUpdatesSubtitle": {"description": "Subtitle for update check"}, + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" + }, "optionsUpdateChannel": "Update Channel", - "@optionsUpdateChannel": {"description": "Stable vs preview releases"}, + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" + }, "optionsUpdateChannelStable": "Stable releases only", - "@optionsUpdateChannelStable": {"description": "Only stable updates"}, + "@optionsUpdateChannelStable": { + "description": "Only stable updates" + }, "optionsUpdateChannelPreview": "Get preview releases", - "@optionsUpdateChannelPreview": {"description": "Include beta/preview updates"}, + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" + }, "optionsUpdateChannelWarning": "Preview may contain bugs or incomplete features", - "@optionsUpdateChannelWarning": {"description": "Warning about preview channel"}, + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" + }, "optionsClearHistory": "Clear Download History", - "@optionsClearHistory": {"description": "Delete all download history"}, + "@optionsClearHistory": { + "description": "Delete all download history" + }, "optionsClearHistorySubtitle": "Remove all downloaded tracks from history", - "@optionsClearHistorySubtitle": {"description": "Subtitle for clear history"}, + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" + }, "optionsDetailedLogging": "Detailed Logging", - "@optionsDetailedLogging": {"description": "Enable verbose logs for debugging"}, + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" + }, "optionsDetailedLoggingOn": "Detailed logs are being recorded", - "@optionsDetailedLoggingOn": {"description": "Status when logging enabled"}, + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" + }, "optionsDetailedLoggingOff": "Enable for bug reports", - "@optionsDetailedLoggingOff": {"description": "Status when logging disabled"}, + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" + }, "optionsSpotifyCredentials": "Spotify Credentials", - "@optionsSpotifyCredentials": {"description": "Spotify API credentials setting"}, + "@optionsSpotifyCredentials": { + "description": "Spotify API credentials setting" + }, "optionsSpotifyCredentialsConfigured": "Client ID: {clientId}...", "@optionsSpotifyCredentialsConfigured": { "description": "Shows configured client ID preview", "placeholders": { - "clientId": {"type": "String"} + "clientId": { + "type": "String" + } } }, "optionsSpotifyCredentialsRequired": "Required - tap to configure", - "@optionsSpotifyCredentialsRequired": {"description": "Prompt to set up credentials"}, + "@optionsSpotifyCredentialsRequired": { + "description": "Prompt to set up credentials" + }, "optionsSpotifyWarning": "Spotify requires your own API credentials. Get them free from developer.spotify.com", - "@optionsSpotifyWarning": {"description": "Info about Spotify API requirement"}, + "@optionsSpotifyWarning": { + "description": "Info about Spotify API requirement" + }, "optionsSpotifyDeprecationWarning": "Spotify search will be deprecated on March 3, 2026 due to Spotify API changes. Please switch to Deezer.", - "@optionsSpotifyDeprecationWarning": {"description": "Warning about Spotify API deprecation"}, - + "@optionsSpotifyDeprecationWarning": { + "description": "Warning about Spotify API deprecation" + }, "extensionsTitle": "Extensions", - "@extensionsTitle": {"description": "Extensions page title"}, - "extensionsInstalled": "Installed Extensions", - "@extensionsInstalled": {"description": "Section header for installed extensions"}, - "extensionsNone": "No extensions installed", - "@extensionsNone": {"description": "Empty state title"}, - "extensionsNoneSubtitle": "Install extensions from the Store tab", - "@extensionsNoneSubtitle": {"description": "Empty state subtitle"}, - "extensionsEnabled": "Enabled", - "@extensionsEnabled": {"description": "Extension status - active"}, + "@extensionsTitle": { + "description": "Extensions page title" + }, "extensionsDisabled": "Disabled", - "@extensionsDisabled": {"description": "Extension status - inactive"}, + "@extensionsDisabled": { + "description": "Extension status - inactive" + }, "extensionsVersion": "Version {version}", "@extensionsVersion": { "description": "Extension version display", "placeholders": { - "version": {"type": "String"} + "version": { + "type": "String" + } } }, "extensionsAuthor": "by {author}", "@extensionsAuthor": { "description": "Extension author credit", "placeholders": { - "author": {"type": "String"} + "author": { + "type": "String" + } } }, "extensionsUninstall": "Uninstall", - "@extensionsUninstall": {"description": "Uninstall extension button"}, - "extensionsSetAsSearch": "Set as Search Provider", - "@extensionsSetAsSearch": {"description": "Use extension for search"}, - - "storeTitle": "Extension Store", - "@storeTitle": {"description": "Store screen title"}, - "storeSearch": "Search extensions...", - "@storeSearch": {"description": "Store search placeholder"}, - "storeInstall": "Install", - "@storeInstall": {"description": "Install extension button"}, - "storeInstalled": "Installed", - "@storeInstalled": {"description": "Already installed badge"}, - "storeUpdate": "Update", - "@storeUpdate": {"description": "Update available button"}, - - "aboutTitle": "About", - "@aboutTitle": {"description": "About page title"}, - "aboutContributors": "Contributors", - "@aboutContributors": {"description": "Section for contributors"}, - "aboutMobileDeveloper": "Mobile version developer", - "@aboutMobileDeveloper": {"description": "Role description for mobile dev"}, - "aboutOriginalCreator": "Creator of the original SpotiFLAC", - "@aboutOriginalCreator": {"description": "Role description for original creator"}, - "aboutLogoArtist": "The talented artist who created our beautiful app logo!", - "@aboutLogoArtist": {"description": "Role description for logo artist"}, - "aboutTranslators": "Translators", - "@aboutTranslators": {"description": "Section for translators"}, - "aboutSpecialThanks": "Special Thanks", - "@aboutSpecialThanks": {"description": "Section for special thanks"}, - "aboutLinks": "Links", - "@aboutLinks": {"description": "Section for external links"}, - "aboutMobileSource": "Mobile source code", - "@aboutMobileSource": {"description": "Link to mobile GitHub repo"}, - "aboutPCSource": "PC source code", - "@aboutPCSource": {"description": "Link to PC GitHub repo"}, - "aboutReportIssue": "Report an issue", - "@aboutReportIssue": {"description": "Link to report bugs"}, - "aboutReportIssueSubtitle": "Report any problems you encounter", - "@aboutReportIssueSubtitle": {"description": "Subtitle for report issue"}, -"aboutFeatureRequest": "Feature request", - "@aboutFeatureRequest": {"description": "Link to suggest features"}, - "aboutFeatureRequestSubtitle": "Suggest new features for the app", - "@aboutFeatureRequestSubtitle": {"description": "Subtitle for feature request"}, - "aboutTelegramChannel": "Telegram Channel", - "@aboutTelegramChannel": {"description": "Link to Telegram channel"}, - "aboutTelegramChannelSubtitle": "Announcements and updates", - "@aboutTelegramChannelSubtitle": {"description": "Subtitle for Telegram channel"}, - "aboutTelegramChat": "Telegram Community", - "@aboutTelegramChat": {"description": "Link to Telegram chat group"}, - "aboutTelegramChatSubtitle": "Chat with other users", - "@aboutTelegramChatSubtitle": {"description": "Subtitle for Telegram chat"}, - "aboutSocial": "Social", - "@aboutSocial": {"description": "Section for social links"}, - "aboutSupport": "Support", - "@aboutSupport": {"description": "Section for support/donation links"}, - "aboutApp": "App", - "@aboutApp": {"description": "Section for app info"}, - "aboutVersion": "Version", - "@aboutVersion": {"description": "Version info label"}, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn't exist!", - "@aboutBinimumDesc": {"description": "Credit description for binimum"}, - "aboutSachinsenalDesc": "The original HiFi project creator. The foundation of Tidal integration!", - "@aboutSachinsenalDesc": {"description": "Credit description for sachinsenal0x64"}, - "aboutSjdonadoDesc": "Creator of I Don't Have Spotify (IDHS). The fallback link resolver that saves the day!", - "@aboutSjdonadoDesc": {"description": "Credit description for sjdonado"}, - "aboutDoubleDouble": "DoubleDouble", - "@aboutDoubleDouble": {"description": "Name of Amazon API service - DO NOT TRANSLATE"}, - "aboutDoubleDoubleDesc": "Amazing API for Amazon Music downloads. Thank you for making it free!", - "@aboutDoubleDoubleDesc": {"description": "Credit for DoubleDouble API"}, - "aboutDabMusic": "DAB Music", - "@aboutDabMusic": {"description": "Name of Qobuz API service - DO NOT TRANSLATE"}, - "aboutDabMusicDesc": "The best Qobuz streaming API. Hi-Res downloads wouldn't be possible without this!", - "@aboutDabMusicDesc": {"description": "Credit for DAB Music API"}, - "aboutSpotiSaver": "SpotiSaver", - "@aboutSpotiSaver": {"description": "Name of SpotiSaver API service - DO NOT TRANSLATE"}, - "aboutSpotiSaverDesc": "Tidal Hi-Res FLAC streaming endpoints. A key piece of the lossless puzzle!", - "@aboutSpotiSaverDesc": {"description": "Credit for SpotiSaver API"}, - "aboutAppDescription": "Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.", - "@aboutAppDescription": {"description": "App description in header card"}, - - "albumTitle": "Album", - "@albumTitle": {"description": "Album screen title"}, - "albumTracks": "{count, plural, =1{1 track} other{{count} tracks}}", - "@albumTracks": { - "description": "Album track count", - "placeholders": { - "count": {"type": "int"} - } + "@extensionsUninstall": { + "description": "Uninstall extension button" + }, + "storeTitle": "Extension Store", + "@storeTitle": { + "description": "Store screen title" + }, + "storeSearch": "Search extensions...", + "@storeSearch": { + "description": "Store search placeholder" + }, + "storeInstall": "Install", + "@storeInstall": { + "description": "Install extension button" + }, + "storeInstalled": "Installed", + "@storeInstalled": { + "description": "Already installed badge" + }, + "storeUpdate": "Update", + "@storeUpdate": { + "description": "Update available button" + }, + "aboutTitle": "About", + "@aboutTitle": { + "description": "About page title" + }, + "aboutContributors": "Contributors", + "@aboutContributors": { + "description": "Section for contributors" + }, + "aboutMobileDeveloper": "Mobile version developer", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" + }, + "aboutOriginalCreator": "Creator of the original SpotiFLAC", + "@aboutOriginalCreator": { + "description": "Role description for original creator" + }, + "aboutLogoArtist": "The talented artist who created our beautiful app logo!", + "@aboutLogoArtist": { + "description": "Role description for logo artist" + }, + "aboutTranslators": "Translators", + "@aboutTranslators": { + "description": "Section for translators" + }, + "aboutSpecialThanks": "Special Thanks", + "@aboutSpecialThanks": { + "description": "Section for special thanks" + }, + "aboutLinks": "Links", + "@aboutLinks": { + "description": "Section for external links" + }, + "aboutMobileSource": "Mobile source code", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" + }, + "aboutPCSource": "PC source code", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" + }, + "aboutReportIssue": "Report an issue", + "@aboutReportIssue": { + "description": "Link to report bugs" + }, + "aboutReportIssueSubtitle": "Report any problems you encounter", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" + }, + "aboutFeatureRequest": "Feature request", + "@aboutFeatureRequest": { + "description": "Link to suggest features" + }, + "aboutFeatureRequestSubtitle": "Suggest new features for the app", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" + }, + "aboutTelegramChannel": "Telegram Channel", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" + }, + "aboutTelegramChannelSubtitle": "Announcements and updates", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" + }, + "aboutTelegramChat": "Telegram Community", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" + }, + "aboutTelegramChatSubtitle": "Chat with other users", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" + }, + "aboutSocial": "Social", + "@aboutSocial": { + "description": "Section for social links" + }, + "aboutApp": "App", + "@aboutApp": { + "description": "Section for app info" + }, + "aboutVersion": "Version", + "@aboutVersion": { + "description": "Version info label" + }, + "aboutBinimumDesc": "The creator of QQDL & HiFi API. Without this API, Tidal downloads wouldn't exist!", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" + }, + "aboutSachinsenalDesc": "The original HiFi project creator. The foundation of Tidal integration!", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" + }, + "aboutSjdonadoDesc": "Creator of I Don't Have Spotify (IDHS). The fallback link resolver that saves the day!", + "@aboutSjdonadoDesc": { + "description": "Credit description for sjdonado" + }, + "aboutDabMusic": "DAB Music", + "@aboutDabMusic": { + "description": "Name of Qobuz API service - DO NOT TRANSLATE" + }, + "aboutDabMusicDesc": "The best Qobuz streaming API. Hi-Res downloads wouldn't be possible without this!", + "@aboutDabMusicDesc": { + "description": "Credit for DAB Music API" + }, + "aboutSpotiSaver": "SpotiSaver", + "@aboutSpotiSaver": { + "description": "Name of SpotiSaver API service - DO NOT TRANSLATE" + }, + "aboutSpotiSaverDesc": "Tidal Hi-Res FLAC streaming endpoints. A key piece of the lossless puzzle!", + "@aboutSpotiSaverDesc": { + "description": "Credit for SpotiSaver API" + }, + "aboutAppDescription": "Download Spotify tracks in lossless quality from Tidal, Qobuz, and Amazon Music.", + "@aboutAppDescription": { + "description": "App description in header card" }, - "albumDownloadAll": "Download All", - "@albumDownloadAll": {"description": "Button to download all tracks"}, - "albumDownloadRemaining": "Download Remaining", - "@albumDownloadRemaining": {"description": "Button to download remaining tracks"}, - - "playlistTitle": "Playlist", - "@playlistTitle": {"description": "Playlist screen title"}, - "artistTitle": "Artist", - "@artistTitle": {"description": "Artist screen title"}, "artistAlbums": "Albums", - "@artistAlbums": {"description": "Section header for artist albums"}, + "@artistAlbums": { + "description": "Section header for artist albums" + }, "artistSingles": "Singles & EPs", - "@artistSingles": {"description": "Section header for singles/EPs"}, + "@artistSingles": { + "description": "Section header for singles/EPs" + }, "artistCompilations": "Compilations", - "@artistCompilations": {"description": "Section header for compilations"}, - "artistReleases": "{count, plural, =1{1 release} other{{count} releases}}", - "@artistReleases": { - "description": "Artist release count", - "placeholders": { - "count": {"type": "int"} - } + "@artistCompilations": { + "description": "Section header for compilations" }, "artistPopular": "Popular", - "@artistPopular": {"description": "Section header for popular/top tracks"}, + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, "artistMonthlyListeners": "{count} monthly listeners", "@artistMonthlyListeners": { "description": "Monthly listener count display", "placeholders": { - "count": {"type": "String", "description": "Formatted listener count"} + "count": { + "type": "String", + "description": "Formatted listener count" + } } }, - - "trackMetadataTitle": "Track Info", - "@trackMetadataTitle": {"description": "Track metadata screen title"}, - "trackMetadataArtist": "Artist", - "@trackMetadataArtist": {"description": "Metadata field - artist name"}, - "trackMetadataAlbum": "Album", - "@trackMetadataAlbum": {"description": "Metadata field - album name"}, - "trackMetadataDuration": "Duration", - "@trackMetadataDuration": {"description": "Metadata field - track length"}, - "trackMetadataQuality": "Quality", - "@trackMetadataQuality": {"description": "Metadata field - audio quality"}, - "trackMetadataPath": "File Path", - "@trackMetadataPath": {"description": "Metadata field - file location"}, - "trackMetadataDownloadedAt": "Downloaded", - "@trackMetadataDownloadedAt": {"description": "Metadata field - download date"}, "trackMetadataService": "Service", - "@trackMetadataService": {"description": "Metadata field - download service used"}, + "@trackMetadataService": { + "description": "Metadata field - download service used" + }, "trackMetadataPlay": "Play", - "@trackMetadataPlay": {"description": "Action button - play track"}, + "@trackMetadataPlay": { + "description": "Action button - play track" + }, "trackMetadataShare": "Share", - "@trackMetadataShare": {"description": "Action button - share track"}, + "@trackMetadataShare": { + "description": "Action button - share track" + }, "trackMetadataDelete": "Delete", - "@trackMetadataDelete": {"description": "Action button - delete track"}, - "trackMetadataRedownload": "Re-download", - "@trackMetadataRedownload": {"description": "Action button - download again"}, - "trackMetadataOpenFolder": "Open Folder", - "@trackMetadataOpenFolder": {"description": "Action button - open containing folder"}, - - "setupTitle": "Welcome to SpotiFLAC", - "@setupTitle": {"description": "Setup wizard title"}, - "setupSubtitle": "Let's get you started", - "@setupSubtitle": {"description": "Setup wizard subtitle"}, - "setupStoragePermission": "Storage Permission", - "@setupStoragePermission": {"description": "Storage permission step title"}, - "setupStoragePermissionSubtitle": "Required to save downloaded files", - "@setupStoragePermissionSubtitle": {"description": "Explanation for storage permission"}, - "setupStoragePermissionGranted": "Permission granted", - "@setupStoragePermissionGranted": {"description": "Status when permission granted"}, - "setupStoragePermissionDenied": "Permission denied", - "@setupStoragePermissionDenied": {"description": "Status when permission denied"}, + "@trackMetadataDelete": { + "description": "Action button - delete track" + }, "setupGrantPermission": "Grant Permission", - "@setupGrantPermission": {"description": "Button to request permission"}, - "setupDownloadLocation": "Download Location", - "@setupDownloadLocation": {"description": "Download folder step title"}, - "setupChooseFolder": "Choose Folder", - "@setupChooseFolder": {"description": "Button to pick folder"}, - "setupContinue": "Continue", - "@setupContinue": {"description": "Continue to next step button"}, + "@setupGrantPermission": { + "description": "Button to request permission" + }, "setupSkip": "Skip for now", - "@setupSkip": {"description": "Skip current step button"}, + "@setupSkip": { + "description": "Skip current step button" + }, "setupStorageAccessRequired": "Storage Access Required", - "@setupStorageAccessRequired": {"description": "Title when storage access needed"}, - "setupStorageAccessMessage": "SpotiFLAC needs \"All files access\" permission to save music files to your chosen folder.", - "@setupStorageAccessMessage": {"description": "Explanation for storage access"}, + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" + }, "setupStorageAccessMessageAndroid11": "Android 11+ requires \"All files access\" permission to save files to your chosen download folder.", - "@setupStorageAccessMessageAndroid11": {"description": "Android 11+ specific explanation"}, + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" + }, "setupOpenSettings": "Open Settings", - "@setupOpenSettings": {"description": "Button to open system settings"}, + "@setupOpenSettings": { + "description": "Button to open system settings" + }, "setupPermissionDeniedMessage": "Permission denied. Please grant all permissions to continue.", - "@setupPermissionDeniedMessage": {"description": "Error when permission denied"}, + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, "setupPermissionRequired": "{permissionType} Permission Required", "@setupPermissionRequired": { "description": "Generic permission required title", "placeholders": { - "permissionType": {"type": "String", "description": "Type of permission (Storage/Notification)"} + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" + } } }, "setupPermissionRequiredMessage": "{permissionType} permission is required for the best experience. You can change this later in Settings.", "@setupPermissionRequiredMessage": { "description": "Generic permission required message", "placeholders": { - "permissionType": {"type": "String"} + "permissionType": { + "type": "String" + } } }, - "setupSelectDownloadFolder": "Select Download Folder", - "@setupSelectDownloadFolder": {"description": "Folder selection step title"}, "setupUseDefaultFolder": "Use Default Folder?", - "@setupUseDefaultFolder": {"description": "Dialog title for default folder"}, + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" + }, "setupNoFolderSelected": "No folder selected. Would you like to use the default Music folder?", - "@setupNoFolderSelected": {"description": "Prompt when no folder selected"}, + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" + }, "setupUseDefault": "Use Default", - "@setupUseDefault": {"description": "Button to use default folder"}, + "@setupUseDefault": { + "description": "Button to use default folder" + }, "setupDownloadLocationTitle": "Download Location", - "@setupDownloadLocationTitle": {"description": "Download location dialog title"}, + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" + }, "setupDownloadLocationIosMessage": "On iOS, downloads are saved to the app's Documents folder. You can access them via the Files app.", - "@setupDownloadLocationIosMessage": {"description": "iOS-specific folder info"}, + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" + }, "setupAppDocumentsFolder": "App Documents Folder", - "@setupAppDocumentsFolder": {"description": "iOS documents folder option"}, + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" + }, "setupAppDocumentsFolderSubtitle": "Recommended - accessible via Files app", - "@setupAppDocumentsFolderSubtitle": {"description": "Subtitle for documents folder"}, + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" + }, "setupChooseFromFiles": "Choose from Files", - "@setupChooseFromFiles": {"description": "iOS file picker option"}, + "@setupChooseFromFiles": { + "description": "iOS file picker option" + }, "setupChooseFromFilesSubtitle": "Select iCloud or other location", - "@setupChooseFromFilesSubtitle": {"description": "Subtitle for file picker"}, -"setupIosEmptyFolderWarning": "iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.", - "@setupIosEmptyFolderWarning": {"description": "iOS folder selection warning"}, + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" + }, + "setupIosEmptyFolderWarning": "iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" + }, "setupIcloudNotSupported": "iCloud Drive is not supported. Please use the app Documents folder.", - "@setupIcloudNotSupported": {"description": "Error when user selects iCloud Drive on iOS"}, + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" + }, "setupDownloadInFlac": "Download Spotify tracks in FLAC", - "@setupDownloadInFlac": {"description": "App tagline in setup"}, - "setupStepStorage": "Storage", - "@setupStepStorage": {"description": "Setup step indicator - storage"}, - "setupStepNotification": "Notification", - "@setupStepNotification": {"description": "Setup step indicator - notification"}, - "setupStepFolder": "Folder", - "@setupStepFolder": {"description": "Setup step indicator - folder"}, - "setupStepSpotify": "Spotify", - "@setupStepSpotify": {"description": "Setup step indicator - Spotify API"}, - "setupStepPermission": "Permission", - "@setupStepPermission": {"description": "Setup step indicator - permission"}, + "@setupDownloadInFlac": { + "description": "App tagline in setup" + }, "setupStorageGranted": "Storage Permission Granted!", - "@setupStorageGranted": {"description": "Success message for storage permission"}, + "@setupStorageGranted": { + "description": "Success message for storage permission" + }, "setupStorageRequired": "Storage Permission Required", - "@setupStorageRequired": {"description": "Title when storage permission needed"}, + "@setupStorageRequired": { + "description": "Title when storage permission needed" + }, "setupStorageDescription": "SpotiFLAC needs storage permission to save your downloaded music files.", - "@setupStorageDescription": {"description": "Explanation for storage permission"}, + "@setupStorageDescription": { + "description": "Explanation for storage permission" + }, "setupNotificationGranted": "Notification Permission Granted!", - "@setupNotificationGranted": {"description": "Success message for notification permission"}, + "@setupNotificationGranted": { + "description": "Success message for notification permission" + }, "setupNotificationEnable": "Enable Notifications", - "@setupNotificationEnable": {"description": "Button to enable notifications"}, - "setupNotificationDescription": "Get notified when downloads complete or require attention.", - "@setupNotificationDescription": {"description": "Explanation for notifications"}, - "setupFolderSelected": "Download Folder Selected!", - "@setupFolderSelected": {"description": "Success message for folder selection"}, + "@setupNotificationEnable": { + "description": "Button to enable notifications" + }, "setupFolderChoose": "Choose Download Folder", - "@setupFolderChoose": {"description": "Button to choose folder"}, + "@setupFolderChoose": { + "description": "Button to choose folder" + }, "setupFolderDescription": "Select a folder where your downloaded music will be saved.", - "@setupFolderDescription": {"description": "Explanation for folder selection"}, - "setupChangeFolder": "Change Folder", - "@setupChangeFolder": {"description": "Button to change selected folder"}, + "@setupFolderDescription": { + "description": "Explanation for folder selection" + }, "setupSelectFolder": "Select Folder", - "@setupSelectFolder": {"description": "Button to select folder"}, - "setupSpotifyApiOptional": "Spotify API (Optional)", - "@setupSpotifyApiOptional": {"description": "Spotify API step title"}, - "setupSpotifyApiDescription": "Add your Spotify API credentials for better search results and access to Spotify-exclusive content.", - "@setupSpotifyApiDescription": {"description": "Explanation for Spotify API"}, - "setupUseSpotifyApi": "Use Spotify API", - "@setupUseSpotifyApi": {"description": "Toggle to enable Spotify API"}, - "setupEnterCredentialsBelow": "Enter your credentials below", - "@setupEnterCredentialsBelow": {"description": "Prompt to enter credentials"}, - "setupUsingDeezer": "Using Deezer (no account needed)", - "@setupUsingDeezer": {"description": "Status when using Deezer"}, - "setupEnterClientId": "Enter Spotify Client ID", - "@setupEnterClientId": {"description": "Placeholder for client ID field"}, - "setupEnterClientSecret": "Enter Spotify Client Secret", - "@setupEnterClientSecret": {"description": "Placeholder for client secret field"}, - "setupGetFreeCredentials": "Get your free API credentials from the Spotify Developer Dashboard.", - "@setupGetFreeCredentials": {"description": "Info about getting Spotify credentials"}, + "@setupSelectFolder": { + "description": "Button to select folder" + }, "setupEnableNotifications": "Enable Notifications", - "@setupEnableNotifications": {"description": "Button to enable notifications"}, - "setupProceedToNextStep": "You can now proceed to the next step.", - "@setupProceedToNextStep": {"description": "Message after completing a step"}, - "setupNotificationProgressDescription": "You will receive download progress notifications.", - "@setupNotificationProgressDescription": {"description": "Info about notification usage"}, + "@setupEnableNotifications": { + "description": "Button to enable notifications" + }, "setupNotificationBackgroundDescription": "Get notified about download progress and completion. This helps you track downloads when the app is in background.", - "@setupNotificationBackgroundDescription": {"description": "Detailed notification explanation"}, + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" + }, "setupSkipForNow": "Skip for now", - "@setupSkipForNow": {"description": "Skip button text"}, - "setupBack": "Back", - "@setupBack": {"description": "Back button text"}, + "@setupSkipForNow": { + "description": "Skip button text" + }, "setupNext": "Next", - "@setupNext": {"description": "Next button text"}, + "@setupNext": { + "description": "Next button text" + }, "setupGetStarted": "Get Started", - "@setupGetStarted": {"description": "Final setup button"}, - "setupSkipAndStart": "Skip & Start", - "@setupSkipAndStart": {"description": "Skip setup and start app"}, + "@setupGetStarted": { + "description": "Final setup button" + }, "setupAllowAccessToManageFiles": "Please enable \"Allow access to manage all files\" in the next screen.", - "@setupAllowAccessToManageFiles": {"description": "Instruction for file access permission"}, - "setupGetCredentialsFromSpotify": "Get credentials from developer.spotify.com", - "@setupGetCredentialsFromSpotify": {"description": "Link text for Spotify developer portal"}, - + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" + }, "dialogCancel": "Cancel", - "@dialogCancel": {"description": "Dialog button - cancel action"}, - "dialogOk": "OK", - "@dialogOk": {"description": "Dialog button - confirm/acknowledge"}, + "@dialogCancel": { + "description": "Dialog button - cancel action" + }, "dialogSave": "Save", - "@dialogSave": {"description": "Dialog button - save changes"}, + "@dialogSave": { + "description": "Dialog button - save changes" + }, "dialogDelete": "Delete", - "@dialogDelete": {"description": "Dialog button - delete item"}, + "@dialogDelete": { + "description": "Dialog button - delete item" + }, "dialogRetry": "Retry", - "@dialogRetry": {"description": "Dialog button - retry action"}, - "dialogClose": "Close", - "@dialogClose": {"description": "Dialog button - close dialog"}, - "dialogYes": "Yes", - "@dialogYes": {"description": "Dialog button - confirm yes"}, - "dialogNo": "No", - "@dialogNo": {"description": "Dialog button - confirm no"}, + "@dialogRetry": { + "description": "Dialog button - retry action" + }, "dialogClear": "Clear", - "@dialogClear": {"description": "Dialog button - clear items"}, - "dialogConfirm": "Confirm", - "@dialogConfirm": {"description": "Dialog button - confirm action"}, + "@dialogClear": { + "description": "Dialog button - clear items" + }, "dialogDone": "Done", - "@dialogDone": {"description": "Dialog button - action completed"}, + "@dialogDone": { + "description": "Dialog button - action completed" + }, "dialogImport": "Import", - "@dialogImport": {"description": "Dialog button - import data"}, + "@dialogImport": { + "description": "Dialog button - import data" + }, "dialogDiscard": "Discard", - "@dialogDiscard": {"description": "Dialog button - discard changes"}, + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, "dialogRemove": "Remove", - "@dialogRemove": {"description": "Dialog button - remove item"}, + "@dialogRemove": { + "description": "Dialog button - remove item" + }, "dialogUninstall": "Uninstall", - "@dialogUninstall": {"description": "Dialog button - uninstall extension"}, + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, "dialogDiscardChanges": "Discard Changes?", - "@dialogDiscardChanges": {"description": "Dialog title - unsaved changes warning"}, + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, "dialogUnsavedChanges": "You have unsaved changes. Do you want to discard them?", - "@dialogUnsavedChanges": {"description": "Dialog message - unsaved changes"}, - "dialogDownloadFailed": "Download Failed", - "@dialogDownloadFailed": {"description": "Dialog title - download error"}, - "dialogTrackLabel": "Track:", - "@dialogTrackLabel": {"description": "Label for track name in error dialog"}, - "dialogArtistLabel": "Artist:", - "@dialogArtistLabel": {"description": "Label for artist name in error dialog"}, - "dialogErrorLabel": "Error:", - "@dialogErrorLabel": {"description": "Label for error message"}, + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, "dialogClearAll": "Clear All", - "@dialogClearAll": {"description": "Dialog title - clear all items"}, - "dialogClearAllDownloads": "Are you sure you want to clear all downloads?", - "@dialogClearAllDownloads": {"description": "Dialog message - clear downloads confirmation"}, - "dialogRemoveFromDevice": "Remove from device?", - "@dialogRemoveFromDevice": {"description": "Dialog title - delete file confirmation"}, + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, "dialogRemoveExtension": "Remove Extension", - "@dialogRemoveExtension": {"description": "Dialog title - uninstall extension"}, + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, "dialogRemoveExtensionMessage": "Are you sure you want to remove this extension? This cannot be undone.", - "@dialogRemoveExtensionMessage": {"description": "Dialog message - uninstall confirmation"}, + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, "dialogUninstallExtension": "Uninstall Extension?", - "@dialogUninstallExtension": {"description": "Dialog title - uninstall extension"}, + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, "dialogUninstallExtensionMessage": "Are you sure you want to remove {extensionName}?", "@dialogUninstallExtensionMessage": { "description": "Dialog message - uninstall specific extension", "placeholders": { - "extensionName": {"type": "String"} + "extensionName": { + "type": "String" + } } }, "dialogClearHistoryTitle": "Clear History", - "@dialogClearHistoryTitle": {"description": "Dialog title - clear download history"}, + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" + }, "dialogClearHistoryMessage": "Are you sure you want to clear all download history? This cannot be undone.", - "@dialogClearHistoryMessage": {"description": "Dialog message - clear history confirmation"}, + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" + }, "dialogDeleteSelectedTitle": "Delete Selected", - "@dialogDeleteSelectedTitle": {"description": "Dialog title - delete selected items"}, + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" + }, "dialogDeleteSelectedMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from history?\n\nThis will also delete the files from storage.", "@dialogDeleteSelectedMessage": { "description": "Dialog message - delete selected tracks", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "dialogImportPlaylistTitle": "Import Playlist", - "@dialogImportPlaylistTitle": {"description": "Dialog title - import CSV playlist"}, + "@dialogImportPlaylistTitle": { + "description": "Dialog title - import CSV playlist" + }, "dialogImportPlaylistMessage": "Found {count} tracks in CSV. Add them to download queue?", "csvImportTracks": "{count} tracks from CSV", "@csvImportTracks": { "description": "Label shown in quality picker for CSV import", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "@dialogImportPlaylistMessage": { "description": "Dialog message - import playlist confirmation", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, - "snackbarAddedToQueue": "Added \"{trackName}\" to queue", "@snackbarAddedToQueue": { "description": "Snackbar - track added to download queue", "placeholders": { - "trackName": {"type": "String"} + "trackName": { + "type": "String" + } } }, "snackbarAddedTracksToQueue": "Added {count} tracks to queue", "@snackbarAddedTracksToQueue": { "description": "Snackbar - multiple tracks added to queue", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "snackbarAlreadyDownloaded": "\"{trackName}\" already downloaded", "@snackbarAlreadyDownloaded": { "description": "Snackbar - track already exists", "placeholders": { - "trackName": {"type": "String"} + "trackName": { + "type": "String" + } } }, "snackbarAlreadyInLibrary": "\"{trackName}\" already exists in your library", "@snackbarAlreadyInLibrary": { "description": "Snackbar - track already exists in local library", "placeholders": { - "trackName": {"type": "String"} + "trackName": { + "type": "String" + } } }, "snackbarHistoryCleared": "History cleared", - "@snackbarHistoryCleared": {"description": "Snackbar - history deleted"}, + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" + }, "snackbarCredentialsSaved": "Credentials saved", - "@snackbarCredentialsSaved": {"description": "Snackbar - Spotify credentials saved"}, + "@snackbarCredentialsSaved": { + "description": "Snackbar - Spotify credentials saved" + }, "snackbarCredentialsCleared": "Credentials cleared", - "@snackbarCredentialsCleared": {"description": "Snackbar - Spotify credentials removed"}, + "@snackbarCredentialsCleared": { + "description": "Snackbar - Spotify credentials removed" + }, "snackbarDeletedTracks": "Deleted {count} {count, plural, =1{track} other{tracks}}", "@snackbarDeletedTracks": { "description": "Snackbar - tracks deleted", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "snackbarCannotOpenFile": "Cannot open file: {error}", "@snackbarCannotOpenFile": { "description": "Snackbar - file open error", "placeholders": { - "error": {"type": "String"} + "error": { + "type": "String" + } } }, "snackbarFillAllFields": "Please fill all fields", - "@snackbarFillAllFields": {"description": "Snackbar - validation error"}, + "@snackbarFillAllFields": { + "description": "Snackbar - validation error" + }, "snackbarViewQueue": "View Queue", - "@snackbarViewQueue": {"description": "Snackbar action - view download queue"}, - "snackbarFailedToLoad": "Failed to load: {error}", - "@snackbarFailedToLoad": { - "description": "Snackbar - loading error", - "placeholders": { - "error": {"type": "String"} - } + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, "snackbarUrlCopied": "{platform} URL copied to clipboard", "@snackbarUrlCopied": { "description": "Snackbar - URL copied", "placeholders": { - "platform": {"type": "String", "description": "Platform name (Spotify/Deezer)"} + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } } }, "snackbarFileNotFound": "File not found", - "@snackbarFileNotFound": {"description": "Snackbar - file doesn't exist"}, + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" + }, "snackbarSelectExtFile": "Please select a .spotiflac-ext file", - "@snackbarSelectExtFile": {"description": "Snackbar - wrong file type selected"}, + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" + }, "snackbarProviderPrioritySaved": "Provider priority saved", - "@snackbarProviderPrioritySaved": {"description": "Snackbar - provider order saved"}, + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" + }, "snackbarMetadataProviderSaved": "Metadata provider priority saved", - "@snackbarMetadataProviderSaved": {"description": "Snackbar - metadata provider order saved"}, + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" + }, "snackbarExtensionInstalled": "{extensionName} installed.", "@snackbarExtensionInstalled": { "description": "Snackbar - extension installed successfully", "placeholders": { - "extensionName": {"type": "String"} + "extensionName": { + "type": "String" + } } }, "snackbarExtensionUpdated": "{extensionName} updated.", "@snackbarExtensionUpdated": { "description": "Snackbar - extension updated successfully", "placeholders": { - "extensionName": {"type": "String"} + "extensionName": { + "type": "String" + } } }, "snackbarFailedToInstall": "Failed to install extension", - "@snackbarFailedToInstall": {"description": "Snackbar - extension install error"}, + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" + }, "snackbarFailedToUpdate": "Failed to update extension", - "@snackbarFailedToUpdate": {"description": "Snackbar - extension update error"}, - + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" + }, "errorRateLimited": "Rate Limited", - "@errorRateLimited": {"description": "Error title - too many requests"}, + "@errorRateLimited": { + "description": "Error title - too many requests" + }, "errorRateLimitedMessage": "Too many requests. Please wait a moment before searching again.", - "@errorRateLimitedMessage": {"description": "Error message - rate limit explanation"}, - "errorFailedToLoad": "Failed to load {item}", - "@errorFailedToLoad": { - "description": "Error message - loading failed", - "placeholders": { - "item": {"type": "String", "description": "Item that failed to load (album/playlist/etc)"} - } + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" }, "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"}, + "@errorNoTracksFound": { + "description": "Error - search returned no results" + }, "errorMissingExtensionSource": "Cannot load {item}: missing extension source", "@errorMissingExtensionSource": { "description": "Error - extension source not available", "placeholders": { - "item": {"type": "String"} + "item": { + "type": "String" + } } }, - - "statusQueued": "Queued", - "@statusQueued": {"description": "Download status - waiting in queue"}, - "statusDownloading": "Downloading", - "@statusDownloading": {"description": "Download status - in progress"}, - "statusFinalizing": "Finalizing", - "@statusFinalizing": {"description": "Download status - writing metadata"}, - "statusCompleted": "Completed", - "@statusCompleted": {"description": "Download status - finished"}, - "statusFailed": "Failed", - "@statusFailed": {"description": "Download status - error occurred"}, - "statusSkipped": "Skipped", - "@statusSkipped": {"description": "Download status - already exists"}, - "statusPaused": "Paused", - "@statusPaused": {"description": "Download status - paused"}, - "actionPause": "Pause", - "@actionPause": {"description": "Action button - pause download"}, + "@actionPause": { + "description": "Action button - pause download" + }, "actionResume": "Resume", - "@actionResume": {"description": "Action button - resume download"}, + "@actionResume": { + "description": "Action button - resume download" + }, "actionCancel": "Cancel", - "@actionCancel": {"description": "Action button - cancel operation"}, - "actionStop": "Stop", - "@actionStop": {"description": "Action button - stop operation"}, - "actionSelect": "Select", - "@actionSelect": {"description": "Action button - enter selection mode"}, + "@actionCancel": { + "description": "Action button - cancel operation" + }, "actionSelectAll": "Select All", - "@actionSelectAll": {"description": "Action button - select all items"}, + "@actionSelectAll": { + "description": "Action button - select all items" + }, "actionDeselect": "Deselect", - "@actionDeselect": {"description": "Action button - deselect all"}, - "actionPaste": "Paste", - "@actionPaste": {"description": "Action button - paste from clipboard"}, - "actionImportCsv": "Import CSV", - "@actionImportCsv": {"description": "Action button - import CSV file"}, + "@actionDeselect": { + "description": "Action button - deselect all" + }, "actionRemoveCredentials": "Remove Credentials", - "@actionRemoveCredentials": {"description": "Action button - delete Spotify credentials"}, + "@actionRemoveCredentials": { + "description": "Action button - delete Spotify credentials" + }, "actionSaveCredentials": "Save Credentials", - "@actionSaveCredentials": {"description": "Action button - save Spotify credentials"}, - + "@actionSaveCredentials": { + "description": "Action button - save Spotify credentials" + }, "selectionSelected": "{count} selected", "@selectionSelected": { "description": "Selection count indicator", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "selectionAllSelected": "All tracks selected", - "@selectionAllSelected": {"description": "Status - all items selected"}, - "selectionTapToSelect": "Tap tracks to select", - "@selectionTapToSelect": {"description": "Hint - how to select items"}, - "selectionDeleteTracks": "Delete {count} {count, plural, =1{track} other{tracks}}", - "@selectionDeleteTracks": { - "description": "Delete button with count", - "placeholders": { - "count": {"type": "int"} - } + "@selectionAllSelected": { + "description": "Status - all items selected" }, "selectionSelectToDelete": "Select tracks to delete", - "@selectionSelectToDelete": {"description": "Placeholder when nothing selected"}, - + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, "progressFetchingMetadata": "Fetching metadata... {current}/{total}", "@progressFetchingMetadata": { "description": "Progress indicator - loading track info", "placeholders": { - "current": {"type": "int"}, - "total": {"type": "int"} + "current": { + "type": "int" + }, + "total": { + "type": "int" + } } }, "progressReadingCsv": "Reading CSV...", - "@progressReadingCsv": {"description": "Progress indicator - parsing CSV file"}, - - "searchSongs": "Songs", - "@searchSongs": {"description": "Search result category - songs"}, - "searchArtists": "Artists", - "@searchArtists": {"description": "Search result category - artists"}, - "searchAlbums": "Albums", - "@searchAlbums": {"description": "Search result category - albums"}, - "searchPlaylists": "Playlists", - "@searchPlaylists": {"description": "Search result category - playlists"}, - - "tooltipPlay": "Play", - "@tooltipPlay": {"description": "Tooltip - play button"}, - "tooltipCancel": "Cancel", - "@tooltipCancel": {"description": "Tooltip - cancel button"}, - "tooltipStop": "Stop", - "@tooltipStop": {"description": "Tooltip - stop button"}, - "tooltipRetry": "Retry", - "@tooltipRetry": {"description": "Tooltip - retry button"}, - "tooltipRemove": "Remove", - "@tooltipRemove": {"description": "Tooltip - remove button"}, - "tooltipClear": "Clear", - "@tooltipClear": {"description": "Tooltip - clear button"}, - "tooltipPaste": "Paste", - "@tooltipPaste": {"description": "Tooltip - paste button"}, - - "filenameFormat": "Filename Format", - "@filenameFormat": {"description": "Setting title - filename pattern"}, - "filenameFormatPreview": "Preview: {preview}", - "@filenameFormatPreview": { - "description": "Preview of filename pattern", - "placeholders": { - "preview": {"type": "String"} - } + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" + }, + "searchSongs": "Songs", + "@searchSongs": { + "description": "Search result category - songs" + }, + "searchArtists": "Artists", + "@searchArtists": { + "description": "Search result category - artists" + }, + "searchAlbums": "Albums", + "@searchAlbums": { + "description": "Search result category - albums" + }, + "searchPlaylists": "Playlists", + "@searchPlaylists": { + "description": "Search result category - playlists" + }, + "tooltipPlay": "Play", + "@tooltipPlay": { + "description": "Tooltip - play button" + }, + "filenameFormat": "Filename Format", + "@filenameFormat": { + "description": "Setting title - filename pattern" }, - "filenameAvailablePlaceholders": "Available placeholders:", - "@filenameAvailablePlaceholders": {"description": "Label for placeholder list"}, - "filenameHint": "{artist} - {title}", - "@filenameHint": {"description": "Default filename format hint"}, "filenameShowAdvancedTags": "Show advanced tags", "@filenameShowAdvancedTags": { "description": "Toggle label for showing advanced filename tags" @@ -900,1600 +999,2107 @@ "@filenameShowAdvancedTagsDescription": { "description": "Description for advanced filename tag toggle" }, - - "folderOrganization": "Folder Organization", - "@folderOrganization": {"description": "Setting title - folder structure"}, "folderOrganizationNone": "No organization", - "@folderOrganizationNone": {"description": "Folder option - flat structure"}, + "@folderOrganizationNone": { + "description": "Folder option - flat structure" + }, "folderOrganizationByArtist": "By Artist", - "@folderOrganizationByArtist": {"description": "Folder option - artist folders"}, + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" + }, "folderOrganizationByAlbum": "By Album", - "@folderOrganizationByAlbum": {"description": "Folder option - album folders"}, + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" + }, "folderOrganizationByArtistAlbum": "Artist/Album", - "@folderOrganizationByArtistAlbum": {"description": "Folder option - nested folders"}, + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" + }, "folderOrganizationDescription": "Organize downloaded files into folders", - "@folderOrganizationDescription": {"description": "Folder organization sheet description"}, + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" + }, "folderOrganizationNoneSubtitle": "All files in download folder", - "@folderOrganizationNoneSubtitle": {"description": "Subtitle for no organization option"}, + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" + }, "folderOrganizationByArtistSubtitle": "Separate folder for each artist", - "@folderOrganizationByArtistSubtitle": {"description": "Subtitle for artist folder option"}, + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" + }, "folderOrganizationByAlbumSubtitle": "Separate folder for each album", - "@folderOrganizationByAlbumSubtitle": {"description": "Subtitle for album folder option"}, + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" + }, "folderOrganizationByArtistAlbumSubtitle": "Nested folders for artist and album", - "@folderOrganizationByArtistAlbumSubtitle": {"description": "Subtitle for nested folder option"}, - + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" + }, "updateAvailable": "Update Available", - "@updateAvailable": {"description": "Update dialog title"}, - "updateNewVersion": "Version {version} is available", - "@updateNewVersion": { - "description": "Update available message", - "placeholders": { - "version": {"type": "String"} - } + "@updateAvailable": { + "description": "Update dialog title" }, - "updateDownload": "Download", - "@updateDownload": {"description": "Update button - download update"}, "updateLater": "Later", - "@updateLater": {"description": "Update button - dismiss"}, - "updateChangelog": "Changelog", - "@updateChangelog": {"description": "Link to changelog"}, - "updateStartingDownload": "Starting download...", - "@updateStartingDownload": {"description": "Update status - initializing"}, - "updateDownloadFailed": "Download failed", - "@updateDownloadFailed": {"description": "Update error title"}, - "updateFailedMessage": "Failed to download update", - "@updateFailedMessage": {"description": "Update error message"}, - "updateNewVersionReady": "A new version is ready", - "@updateNewVersionReady": {"description": "Update subtitle"}, - "updateCurrent": "Current", - "@updateCurrent": {"description": "Label for current version"}, - "updateNew": "New", - "@updateNew": {"description": "Label for new version"}, - "updateDownloading": "Downloading...", - "@updateDownloading": {"description": "Update status - downloading"}, - "updateWhatsNew": "What's New", - "@updateWhatsNew": {"description": "Changelog section title"}, - "updateDownloadInstall": "Download & Install", - "@updateDownloadInstall": {"description": "Update button - download and install"}, - "updateDontRemind": "Don't remind", - "@updateDontRemind": {"description": "Update button - skip this version"}, - - "providerPriority": "Provider Priority", - "@providerPriority": {"description": "Setting title - download provider order"}, - "providerPrioritySubtitle": "Drag to reorder download providers", - "@providerPrioritySubtitle": {"description": "Subtitle for provider priority"}, - "providerPriorityTitle": "Provider Priority", - "@providerPriorityTitle": {"description": "Provider priority page title"}, - "providerPriorityDescription": "Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.", - "@providerPriorityDescription": {"description": "Provider priority page description"}, - "providerPriorityInfo": "If a track is not available on the first provider, the app will automatically try the next one.", - "@providerPriorityInfo": {"description": "Info tip about fallback behavior"}, - "providerBuiltIn": "Built-in", - "@providerBuiltIn": {"description": "Label for built-in providers (Tidal/Qobuz/Amazon)"}, - "providerExtension": "Extension", - "@providerExtension": {"description": "Label for extension-provided providers"}, - - "metadataProviderPriority": "Metadata Provider Priority", - "@metadataProviderPriority": {"description": "Setting title - metadata provider order"}, - "metadataProviderPrioritySubtitle": "Order used when fetching track metadata", - "@metadataProviderPrioritySubtitle": {"description": "Subtitle for metadata priority"}, - "metadataProviderPriorityTitle": "Metadata Priority", - "@metadataProviderPriorityTitle": {"description": "Metadata priority page title"}, - "metadataProviderPriorityDescription": "Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.", - "@metadataProviderPriorityDescription": {"description": "Metadata priority page description"}, - "metadataProviderPriorityInfo": "Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.", - "@metadataProviderPriorityInfo": {"description": "Info tip about rate limits"}, - "metadataNoRateLimits": "No rate limits", - "@metadataNoRateLimits": {"description": "Deezer provider description"}, - "metadataMayRateLimit": "May rate limit", - "@metadataMayRateLimit": {"description": "Spotify provider description"}, - - "logTitle": "Logs", - "@logTitle": {"description": "Logs screen title"}, - "logCopy": "Copy Logs", - "@logCopy": {"description": "Action - copy logs to clipboard"}, - "logClear": "Clear Logs", - "@logClear": {"description": "Action - delete all logs"}, - "logShare": "Share Logs", - "@logShare": {"description": "Action - share logs file"}, - "logEmpty": "No logs yet", - "@logEmpty": {"description": "Empty state title"}, - "logCopied": "Logs copied to clipboard", - "@logCopied": {"description": "Snackbar - logs copied"}, - "logSearchHint": "Search logs...", - "@logSearchHint": {"description": "Log search placeholder"}, - "logFilterLevel": "Level", - "@logFilterLevel": {"description": "Filter by log level"}, - "logFilterSection": "Filter", - "@logFilterSection": {"description": "Filter section title"}, - "logShareLogs": "Share logs", - "@logShareLogs": {"description": "Share button tooltip"}, - "logClearLogs": "Clear logs", - "@logClearLogs": {"description": "Clear button tooltip"}, - "logClearLogsTitle": "Clear Logs", - "@logClearLogsTitle": {"description": "Clear logs dialog title"}, - "logClearLogsMessage": "Are you sure you want to clear all logs?", - "@logClearLogsMessage": {"description": "Clear logs confirmation message"}, - "logIspBlocking": "ISP BLOCKING DETECTED", - "@logIspBlocking": {"description": "Error category - ISP blocking"}, - "logRateLimited": "RATE LIMITED", - "@logRateLimited": {"description": "Error category - rate limiting"}, - "logNetworkError": "NETWORK ERROR", - "@logNetworkError": {"description": "Error category - network issues"}, - "logTrackNotFound": "TRACK NOT FOUND", - "@logTrackNotFound": {"description": "Error category - missing tracks"}, - "logFilterBySeverity": "Filter logs by severity", - "@logFilterBySeverity": {"description": "Filter dialog title"}, - "logNoLogsYet": "No logs yet", - "@logNoLogsYet": {"description": "Empty state title"}, - "logNoLogsYetSubtitle": "Logs will appear here as you use the app", - "@logNoLogsYetSubtitle": {"description": "Empty state subtitle"}, - "logIssueSummary": "Issue Summary", - "@logIssueSummary": {"description": "Section header for error summary"}, - "logIspBlockingDescription": "Your ISP may be blocking access to download services", - "@logIspBlockingDescription": {"description": "ISP blocking explanation"}, - "logIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", - "@logIspBlockingSuggestion": {"description": "ISP blocking fix suggestion"}, - "logRateLimitedDescription": "Too many requests to the service", - "@logRateLimitedDescription": {"description": "Rate limit explanation"}, - "logRateLimitedSuggestion": "Wait a few minutes before trying again", - "@logRateLimitedSuggestion": {"description": "Rate limit fix suggestion"}, - "logNetworkErrorDescription": "Connection issues detected", - "@logNetworkErrorDescription": {"description": "Network error explanation"}, - "logNetworkErrorSuggestion": "Check your internet connection", - "@logNetworkErrorSuggestion": {"description": "Network error fix suggestion"}, - "logTrackNotFoundDescription": "Some tracks could not be found on download services", - "@logTrackNotFoundDescription": {"description": "Track not found explanation"}, - "logTrackNotFoundSuggestion": "The track may not be available in lossless quality", - "@logTrackNotFoundSuggestion": {"description": "Track not found explanation"}, - "logTotalErrors": "Total errors: {count}", - "@logTotalErrors": { - "description": "Error count display", - "placeholders": { - "count": {"type": "int"} - } + "@updateLater": { + "description": "Update button - dismiss" }, - "logAffected": "Affected: {domains}", - "@logAffected": { - "description": "Affected domains display", - "placeholders": { - "domains": {"type": "String"} - } + "updateStartingDownload": "Starting download...", + "@updateStartingDownload": { + "description": "Update status - initializing" + }, + "updateDownloadFailed": "Download failed", + "@updateDownloadFailed": { + "description": "Update error title" + }, + "updateFailedMessage": "Failed to download update", + "@updateFailedMessage": { + "description": "Update error message" + }, + "updateNewVersionReady": "A new version is ready", + "@updateNewVersionReady": { + "description": "Update subtitle" + }, + "updateCurrent": "Current", + "@updateCurrent": { + "description": "Label for current version" + }, + "updateNew": "New", + "@updateNew": { + "description": "Label for new version" + }, + "updateDownloading": "Downloading...", + "@updateDownloading": { + "description": "Update status - downloading" + }, + "updateWhatsNew": "What's New", + "@updateWhatsNew": { + "description": "Changelog section title" + }, + "updateDownloadInstall": "Download & Install", + "@updateDownloadInstall": { + "description": "Update button - download and install" + }, + "updateDontRemind": "Don't remind", + "@updateDontRemind": { + "description": "Update button - skip this version" + }, + "providerPriorityTitle": "Provider Priority", + "@providerPriorityTitle": { + "description": "Provider priority page title" + }, + "providerPriorityDescription": "Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.", + "@providerPriorityDescription": { + "description": "Provider priority page description" + }, + "providerPriorityInfo": "If a track is not available on the first provider, the app will automatically try the next one.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" + }, + "providerBuiltIn": "Built-in", + "@providerBuiltIn": { + "description": "Label for built-in providers (Tidal/Qobuz/Amazon)" + }, + "providerExtension": "Extension", + "@providerExtension": { + "description": "Label for extension-provided providers" + }, + "metadataProviderPriorityTitle": "Metadata Priority", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" + }, + "metadataProviderPriorityDescription": "Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" + }, + "metadataProviderPriorityInfo": "Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" + }, + "metadataNoRateLimits": "No rate limits", + "@metadataNoRateLimits": { + "description": "Deezer provider description" + }, + "metadataMayRateLimit": "May rate limit", + "@metadataMayRateLimit": { + "description": "Spotify provider description" + }, + "logTitle": "Logs", + "@logTitle": { + "description": "Logs screen title" + }, + "logCopied": "Logs copied to clipboard", + "@logCopied": { + "description": "Snackbar - logs copied" + }, + "logSearchHint": "Search logs...", + "@logSearchHint": { + "description": "Log search placeholder" + }, + "logFilterLevel": "Level", + "@logFilterLevel": { + "description": "Filter by log level" + }, + "logFilterSection": "Filter", + "@logFilterSection": { + "description": "Filter section title" + }, + "logShareLogs": "Share logs", + "@logShareLogs": { + "description": "Share button tooltip" + }, + "logClearLogs": "Clear logs", + "@logClearLogs": { + "description": "Clear button tooltip" + }, + "logClearLogsTitle": "Clear Logs", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" + }, + "logClearLogsMessage": "Are you sure you want to clear all logs?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" + }, + "logFilterBySeverity": "Filter logs by severity", + "@logFilterBySeverity": { + "description": "Filter dialog title" + }, + "logNoLogsYet": "No logs yet", + "@logNoLogsYet": { + "description": "Empty state title" + }, + "logNoLogsYetSubtitle": "Logs will appear here as you use the app", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" }, "logEntriesFiltered": "Entries ({count} filtered)", "@logEntriesFiltered": { "description": "Log count with filter active", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "logEntries": "Entries ({count})", "@logEntries": { "description": "Total log count", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, - "credentialsTitle": "Spotify Credentials", - "@credentialsTitle": {"description": "Credentials dialog title"}, + "@credentialsTitle": { + "description": "Credentials dialog title" + }, "credentialsDescription": "Enter your Client ID and Secret to use your own Spotify application quota.", - "@credentialsDescription": {"description": "Credentials dialog explanation"}, + "@credentialsDescription": { + "description": "Credentials dialog explanation" + }, "credentialsClientId": "Client ID", - "@credentialsClientId": {"description": "Client ID field label - DO NOT TRANSLATE"}, + "@credentialsClientId": { + "description": "Client ID field label - DO NOT TRANSLATE" + }, "credentialsClientIdHint": "Paste Client ID", - "@credentialsClientIdHint": {"description": "Client ID placeholder"}, + "@credentialsClientIdHint": { + "description": "Client ID placeholder" + }, "credentialsClientSecret": "Client Secret", - "@credentialsClientSecret": {"description": "Client Secret field label - DO NOT TRANSLATE"}, + "@credentialsClientSecret": { + "description": "Client Secret field label - DO NOT TRANSLATE" + }, "credentialsClientSecretHint": "Paste Client Secret", - "@credentialsClientSecretHint": {"description": "Client Secret placeholder"}, - + "@credentialsClientSecretHint": { + "description": "Client Secret placeholder" + }, "channelStable": "Stable", - "@channelStable": {"description": "Update channel - stable releases"}, + "@channelStable": { + "description": "Update channel - stable releases" + }, "channelPreview": "Preview", - "@channelPreview": {"description": "Update channel - beta/preview releases"}, - + "@channelPreview": { + "description": "Update channel - beta/preview releases" + }, "sectionSearchSource": "Search Source", - "@sectionSearchSource": {"description": "Settings section header"}, + "@sectionSearchSource": { + "description": "Settings section header" + }, "sectionDownload": "Download", - "@sectionDownload": {"description": "Settings section header"}, + "@sectionDownload": { + "description": "Settings section header" + }, "sectionPerformance": "Performance", - "@sectionPerformance": {"description": "Settings section header"}, + "@sectionPerformance": { + "description": "Settings section header" + }, "sectionApp": "App", - "@sectionApp": {"description": "Settings section header"}, + "@sectionApp": { + "description": "Settings section header" + }, "sectionData": "Data", - "@sectionData": {"description": "Settings section header"}, + "@sectionData": { + "description": "Settings section header" + }, "sectionDebug": "Debug", - "@sectionDebug": {"description": "Settings section header"}, + "@sectionDebug": { + "description": "Settings section header" + }, "sectionService": "Service", - "@sectionService": {"description": "Settings section header"}, + "@sectionService": { + "description": "Settings section header" + }, "sectionAudioQuality": "Audio Quality", - "@sectionAudioQuality": {"description": "Settings section header"}, + "@sectionAudioQuality": { + "description": "Settings section header" + }, "sectionFileSettings": "File Settings", - "@sectionFileSettings": {"description": "Settings section header"}, + "@sectionFileSettings": { + "description": "Settings section header" + }, "sectionLyrics": "Lyrics", - "@sectionLyrics": {"description": "Settings section header"}, - + "@sectionLyrics": { + "description": "Settings section header" + }, "lyricsMode": "Lyrics Mode", - "@lyricsMode": {"description": "Setting - how to save lyrics"}, + "@lyricsMode": { + "description": "Setting - how to save lyrics" + }, "lyricsModeDescription": "Choose how lyrics are saved with your downloads", - "@lyricsModeDescription": {"description": "Lyrics mode picker description"}, + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" + }, "lyricsModeEmbed": "Embed in file", - "@lyricsModeEmbed": {"description": "Lyrics mode option - embed in audio file"}, + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" + }, "lyricsModeEmbedSubtitle": "Lyrics stored inside FLAC metadata", - "@lyricsModeEmbedSubtitle": {"description": "Subtitle for embed option"}, + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" + }, "lyricsModeExternal": "External .lrc file", - "@lyricsModeExternal": {"description": "Lyrics mode option - separate LRC file"}, + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" + }, "lyricsModeExternalSubtitle": "Separate .lrc file for players like Samsung Music", - "@lyricsModeExternalSubtitle": {"description": "Subtitle for external option"}, + "@lyricsModeExternalSubtitle": { + "description": "Subtitle for external option" + }, "lyricsModeBoth": "Both", - "@lyricsModeBoth": {"description": "Lyrics mode option - embed and external"}, + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" + }, "lyricsModeBothSubtitle": "Embed and save .lrc file", - "@lyricsModeBothSubtitle": {"description": "Subtitle for both option"}, - + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" + }, "sectionColor": "Color", - "@sectionColor": {"description": "Settings section header"}, + "@sectionColor": { + "description": "Settings section header" + }, "sectionTheme": "Theme", - "@sectionTheme": {"description": "Settings section header"}, + "@sectionTheme": { + "description": "Settings section header" + }, "sectionLayout": "Layout", -"@sectionLayout": {"description": "Settings section header"}, + "@sectionLayout": { + "description": "Settings section header" + }, "sectionLanguage": "Language", - "@sectionLanguage": {"description": "Settings section header for language"}, + "@sectionLanguage": { + "description": "Settings section header for language" + }, "appearanceLanguage": "App Language", - "@appearanceLanguage": {"description": "Language setting title"}, - "appearanceLanguageSubtitle": "Choose your preferred language", - "@appearanceLanguageSubtitle": {"description": "Language setting subtitle"}, - + "@appearanceLanguage": { + "description": "Language setting title" + }, "settingsAppearanceSubtitle": "Theme, colors, display", - "@settingsAppearanceSubtitle": {"description": "Appearance settings description"}, + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" + }, "settingsDownloadSubtitle": "Service, quality, filename format", - "@settingsDownloadSubtitle": {"description": "Download settings description"}, + "@settingsDownloadSubtitle": { + "description": "Download settings description" + }, "settingsOptionsSubtitle": "Fallback, lyrics, cover art, updates", - "@settingsOptionsSubtitle": {"description": "Options settings description"}, + "@settingsOptionsSubtitle": { + "description": "Options settings description" + }, "settingsExtensionsSubtitle": "Manage download providers", - "@settingsExtensionsSubtitle": {"description": "Extensions settings description"}, + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" + }, "settingsLogsSubtitle": "View app logs for debugging", - "@settingsLogsSubtitle": {"description": "Logs settings description"}, - + "@settingsLogsSubtitle": { + "description": "Logs settings description" + }, "loadingSharedLink": "Loading shared link...", - "@loadingSharedLink": {"description": "Status when opening shared URL"}, + "@loadingSharedLink": { + "description": "Status when opening shared URL" + }, "pressBackAgainToExit": "Press back again to exit", - "@pressBackAgainToExit": {"description": "Exit confirmation message"}, - - "tracksHeader": "Tracks", - "@tracksHeader": {"description": "Section header for track list"}, + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, "downloadAllCount": "Download All ({count})", "@downloadAllCount": { "description": "Download all button with count", "placeholders": { - "count": {"type": "int"} - } - }, - "playAllCount": "Play All ({count})", - "@playAllCount": { - "description": "Play all button with count", - "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "tracksCount": "{count, plural, =1{1 track} other{{count} tracks}}", "@tracksCount": { "description": "Track count display", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, - "trackCopyFilePath": "Copy file path", - "@trackCopyFilePath": {"description": "Action - copy file path"}, - "trackRemoveFromDevice": "Remove from device", - "@trackRemoveFromDevice": {"description": "Action - delete downloaded file"}, - "trackLoadLyrics": "Load Lyrics", - "@trackLoadLyrics": {"description": "Action - fetch lyrics"}, - "trackMetadata": "Metadata", - "@trackMetadata": {"description": "Tab title - track metadata"}, - "trackFileInfo": "File Info", - "@trackFileInfo": {"description": "Tab title - file information"}, - "trackLyrics": "Lyrics", - "@trackLyrics": {"description": "Tab title - lyrics"}, - "trackFileNotFound": "File not found", - "@trackFileNotFound": {"description": "Error - file doesn't exist"}, - "trackOpenInDeezer": "Open in Deezer", - "@trackOpenInDeezer": {"description": "Action - open track in Deezer app"}, - "trackOpenInSpotify": "Open in Spotify", - "@trackOpenInSpotify": {"description": "Action - open track in Spotify app"}, - "trackTrackName": "Track name", - "@trackTrackName": {"description": "Metadata label - track title"}, - "trackArtist": "Artist", - "@trackArtist": {"description": "Metadata label - artist name"}, - "trackAlbumArtist": "Album artist", - "@trackAlbumArtist": {"description": "Metadata label - album artist"}, - "trackAlbum": "Album", - "@trackAlbum": {"description": "Metadata label - album name"}, - "trackTrackNumber": "Track number", - "@trackTrackNumber": {"description": "Metadata label - track number"}, - "trackDiscNumber": "Disc number", - "@trackDiscNumber": {"description": "Metadata label - disc number"}, - "trackDuration": "Duration", - "@trackDuration": {"description": "Metadata label - track length"}, - "trackAudioQuality": "Audio quality", - "@trackAudioQuality": {"description": "Metadata label - audio quality"}, - "trackReleaseDate": "Release date", - "@trackReleaseDate": {"description": "Metadata label - release date"}, - "trackGenre": "Genre", - "@trackGenre": {"description": "Metadata label - music genre"}, - "trackLabel": "Label", - "@trackLabel": {"description": "Metadata label - record label"}, - "trackCopyright": "Copyright", - "@trackCopyright": {"description": "Metadata label - copyright information"}, - "trackDownloaded": "Downloaded", - "@trackDownloaded": {"description": "Metadata label - download date"}, - "trackCopyLyrics": "Copy lyrics", - "@trackCopyLyrics": {"description": "Action - copy lyrics to clipboard"}, - "trackLyricsNotAvailable": "Lyrics not available for this track", - "@trackLyricsNotAvailable": {"description": "Message when lyrics not found"}, - "trackLyricsTimeout": "Request timed out. Try again later.", - "@trackLyricsTimeout": {"description": "Message when lyrics request times out"}, - "trackLyricsLoadFailed": "Failed to load lyrics", - "@trackLyricsLoadFailed": {"description": "Message when lyrics loading fails"}, - "trackEmbedLyrics": "Embed Lyrics", - "@trackEmbedLyrics": {"description": "Action - embed lyrics into audio file"}, - "trackLyricsEmbedded": "Lyrics embedded successfully", - "@trackLyricsEmbedded": {"description": "Snackbar - lyrics saved to file"}, - "trackInstrumental": "Instrumental track", - "@trackInstrumental": {"description": "Message when track is instrumental (no lyrics)"}, - "trackCopiedToClipboard": "Copied to clipboard", - "@trackCopiedToClipboard": {"description": "Snackbar - content copied"}, - "trackDeleteConfirmTitle": "Remove from device?", - "@trackDeleteConfirmTitle": {"description": "Delete confirmation title"}, - "trackDeleteConfirmMessage": "This will permanently delete the downloaded file and remove it from your history.", - "@trackDeleteConfirmMessage": {"description": "Delete confirmation message"}, - "trackCannotOpen": "Cannot open: {message}", - "@trackCannotOpen": { - "description": "Error opening file", - "placeholders": { - "message": {"type": "String"} - } + "@trackCopyFilePath": { + "description": "Action - copy file path" + }, + "trackRemoveFromDevice": "Remove from device", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" + }, + "trackLoadLyrics": "Load Lyrics", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" + }, + "trackMetadata": "Metadata", + "@trackMetadata": { + "description": "Tab title - track metadata" + }, + "trackFileInfo": "File Info", + "@trackFileInfo": { + "description": "Tab title - file information" + }, + "trackLyrics": "Lyrics", + "@trackLyrics": { + "description": "Tab title - lyrics" + }, + "trackFileNotFound": "File not found", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" + }, + "trackOpenInDeezer": "Open in Deezer", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" + }, + "trackOpenInSpotify": "Open in Spotify", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" + }, + "trackTrackName": "Track name", + "@trackTrackName": { + "description": "Metadata label - track title" + }, + "trackArtist": "Artist", + "@trackArtist": { + "description": "Metadata label - artist name" + }, + "trackAlbumArtist": "Album artist", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" + }, + "trackAlbum": "Album", + "@trackAlbum": { + "description": "Metadata label - album name" + }, + "trackTrackNumber": "Track number", + "@trackTrackNumber": { + "description": "Metadata label - track number" + }, + "trackDiscNumber": "Disc number", + "@trackDiscNumber": { + "description": "Metadata label - disc number" + }, + "trackDuration": "Duration", + "@trackDuration": { + "description": "Metadata label - track length" + }, + "trackAudioQuality": "Audio quality", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" + }, + "trackReleaseDate": "Release date", + "@trackReleaseDate": { + "description": "Metadata label - release date" + }, + "trackGenre": "Genre", + "@trackGenre": { + "description": "Metadata label - music genre" + }, + "trackLabel": "Label", + "@trackLabel": { + "description": "Metadata label - record label" + }, + "trackCopyright": "Copyright", + "@trackCopyright": { + "description": "Metadata label - copyright information" + }, + "trackDownloaded": "Downloaded", + "@trackDownloaded": { + "description": "Metadata label - download date" + }, + "trackCopyLyrics": "Copy lyrics", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsNotAvailable": "Lyrics not available for this track", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" + }, + "trackLyricsTimeout": "Request timed out. Try again later.", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" + }, + "trackLyricsLoadFailed": "Failed to load lyrics", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" + }, + "trackEmbedLyrics": "Embed Lyrics", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" + }, + "trackLyricsEmbedded": "Lyrics embedded successfully", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" + }, + "trackInstrumental": "Instrumental track", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" + }, + "trackCopiedToClipboard": "Copied to clipboard", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" + }, + "trackDeleteConfirmTitle": "Remove from device?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" + }, + "trackDeleteConfirmMessage": "This will permanently delete the downloaded file and remove it from your history.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" }, - "dateToday": "Today", - "@dateToday": {"description": "Relative date - today"}, + "@dateToday": { + "description": "Relative date - today" + }, "dateYesterday": "Yesterday", - "@dateYesterday": {"description": "Relative date - yesterday"}, + "@dateYesterday": { + "description": "Relative date - yesterday" + }, "dateDaysAgo": "{count} days ago", "@dateDaysAgo": { "description": "Relative date - days ago", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "dateWeeksAgo": "{count} weeks ago", "@dateWeeksAgo": { "description": "Relative date - weeks ago", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "dateMonthsAgo": "{count} months ago", "@dateMonthsAgo": { "description": "Relative date - months ago", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, - - "concurrentSequential": "Sequential", - "@concurrentSequential": {"description": "Download mode - one at a time"}, - "concurrentParallel2": "2 Parallel", - "@concurrentParallel2": {"description": "Download mode - 2 simultaneous"}, - "concurrentParallel3": "3 Parallel", - "@concurrentParallel3": {"description": "Download mode - 3 simultaneous"}, - - "tapToSeeError": "Tap to see error details", - "@tapToSeeError": {"description": "Tooltip for failed download"}, - "storeFilterAll": "All", - "@storeFilterAll": {"description": "Store filter - all extensions"}, + "@storeFilterAll": { + "description": "Store filter - all extensions" + }, "storeFilterMetadata": "Metadata", - "@storeFilterMetadata": {"description": "Store filter - metadata providers"}, + "@storeFilterMetadata": { + "description": "Store filter - metadata providers" + }, "storeFilterDownload": "Download", - "@storeFilterDownload": {"description": "Store filter - download providers"}, + "@storeFilterDownload": { + "description": "Store filter - download providers" + }, "storeFilterUtility": "Utility", - "@storeFilterUtility": {"description": "Store filter - utility extensions"}, + "@storeFilterUtility": { + "description": "Store filter - utility extensions" + }, "storeFilterLyrics": "Lyrics", - "@storeFilterLyrics": {"description": "Store filter - lyrics providers"}, + "@storeFilterLyrics": { + "description": "Store filter - lyrics providers" + }, "storeFilterIntegration": "Integration", - "@storeFilterIntegration": {"description": "Store filter - integrations"}, + "@storeFilterIntegration": { + "description": "Store filter - integrations" + }, "storeClearFilters": "Clear filters", - "@storeClearFilters": {"description": "Button to clear all filters"}, - "storeNoResults": "No extensions found", - "@storeNoResults": {"description": "Empty state when no extensions match filters"}, - - "extensionProviderPriority": "Provider Priority", - "@extensionProviderPriority": {"description": "Extension capability - provider priority"}, - "extensionInstallButton": "Install Extension", - "@extensionInstallButton": {"description": "Button to install extension"}, + "@storeClearFilters": { + "description": "Button to clear all filters" + }, "extensionDefaultProvider": "Default (Deezer/Spotify)", - "@extensionDefaultProvider": {"description": "Default search provider option"}, + "@extensionDefaultProvider": { + "description": "Default search provider option" + }, "extensionDefaultProviderSubtitle": "Use built-in search", - "@extensionDefaultProviderSubtitle": {"description": "Subtitle for default provider"}, + "@extensionDefaultProviderSubtitle": { + "description": "Subtitle for default provider" + }, "extensionAuthor": "Author", - "@extensionAuthor": {"description": "Extension detail - author"}, + "@extensionAuthor": { + "description": "Extension detail - author" + }, "extensionId": "ID", - "@extensionId": {"description": "Extension detail - unique ID"}, + "@extensionId": { + "description": "Extension detail - unique ID" + }, "extensionError": "Error", - "@extensionError": {"description": "Extension detail - error message"}, + "@extensionError": { + "description": "Extension detail - error message" + }, "extensionCapabilities": "Capabilities", - "@extensionCapabilities": {"description": "Section header - extension features"}, + "@extensionCapabilities": { + "description": "Section header - extension features" + }, "extensionMetadataProvider": "Metadata Provider", - "@extensionMetadataProvider": {"description": "Capability - provides metadata"}, + "@extensionMetadataProvider": { + "description": "Capability - provides metadata" + }, "extensionDownloadProvider": "Download Provider", - "@extensionDownloadProvider": {"description": "Capability - provides downloads"}, + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" + }, "extensionLyricsProvider": "Lyrics Provider", - "@extensionLyricsProvider": {"description": "Capability - provides lyrics"}, + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" + }, "extensionUrlHandler": "URL Handler", - "@extensionUrlHandler": {"description": "Capability - handles URLs"}, + "@extensionUrlHandler": { + "description": "Capability - handles URLs" + }, "extensionQualityOptions": "Quality Options", - "@extensionQualityOptions": {"description": "Capability - quality selection"}, + "@extensionQualityOptions": { + "description": "Capability - quality selection" + }, "extensionPostProcessingHooks": "Post-Processing Hooks", - "@extensionPostProcessingHooks": {"description": "Capability - post-processing"}, + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" + }, "extensionPermissions": "Permissions", - "@extensionPermissions": {"description": "Section header - required permissions"}, + "@extensionPermissions": { + "description": "Section header - required permissions" + }, "extensionSettings": "Settings", - "@extensionSettings": {"description": "Section header - extension settings"}, + "@extensionSettings": { + "description": "Section header - extension settings" + }, "extensionRemoveButton": "Remove Extension", - "@extensionRemoveButton": {"description": "Button to uninstall extension"}, + "@extensionRemoveButton": { + "description": "Button to uninstall extension" + }, "extensionUpdated": "Updated", - "@extensionUpdated": {"description": "Extension detail - last update"}, + "@extensionUpdated": { + "description": "Extension detail - last update" + }, "extensionMinAppVersion": "Min App Version", - "@extensionMinAppVersion": {"description": "Extension detail - minimum app version"}, + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" + }, "extensionCustomTrackMatching": "Custom Track Matching", - "@extensionCustomTrackMatching": {"description": "Capability - custom track matching algorithm"}, + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" + }, "extensionPostProcessing": "Post-Processing", - "@extensionPostProcessing": {"description": "Capability - post-download processing"}, + "@extensionPostProcessing": { + "description": "Capability - post-download processing" + }, "extensionHooksAvailable": "{count} hook(s) available", "@extensionHooksAvailable": { "description": "Post-processing hooks count", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "extensionPatternsCount": "{count} pattern(s)", "@extensionPatternsCount": { "description": "URL patterns count", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "extensionStrategy": "Strategy: {strategy}", "@extensionStrategy": { "description": "Track matching strategy name", "placeholders": { - "strategy": {"type": "String"} + "strategy": { + "type": "String" + } } }, "extensionsProviderPrioritySection": "Provider Priority", - "@extensionsProviderPrioritySection": {"description": "Section header - provider priority"}, + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" + }, "extensionsInstalledSection": "Installed Extensions", - "@extensionsInstalledSection": {"description": "Section header - installed extensions"}, + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" + }, "extensionsNoExtensions": "No extensions installed", - "@extensionsNoExtensions": {"description": "Empty state - no extensions"}, + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" + }, "extensionsNoExtensionsSubtitle": "Install .spotiflac-ext files to add new providers", - "@extensionsNoExtensionsSubtitle": {"description": "Empty state subtitle"}, + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, "extensionsInstallButton": "Install Extension", - "@extensionsInstallButton": {"description": "Button to install extension from file"}, + "@extensionsInstallButton": { + "description": "Button to install extension from file" + }, "extensionsInfoTip": "Extensions can add new metadata and download providers. Only install extensions from trusted sources.", - "@extensionsInfoTip": {"description": "Security warning about extensions"}, + "@extensionsInfoTip": { + "description": "Security warning about extensions" + }, "extensionsInstalledSuccess": "Extension installed successfully", - "@extensionsInstalledSuccess": {"description": "Success message after install"}, + "@extensionsInstalledSuccess": { + "description": "Success message after install" + }, "extensionsDownloadPriority": "Download Priority", - "@extensionsDownloadPriority": {"description": "Setting - download provider order"}, + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" + }, "extensionsDownloadPrioritySubtitle": "Set download service order", - "@extensionsDownloadPrioritySubtitle": {"description": "Subtitle for download priority"}, + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" + }, "extensionsNoDownloadProvider": "No extensions with download provider", - "@extensionsNoDownloadProvider": {"description": "Empty state - no download providers"}, + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" + }, "extensionsMetadataPriority": "Metadata Priority", - "@extensionsMetadataPriority": {"description": "Setting - metadata provider order"}, + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" + }, "extensionsMetadataPrioritySubtitle": "Set search & metadata source order", - "@extensionsMetadataPrioritySubtitle": {"description": "Subtitle for metadata priority"}, + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" + }, "extensionsNoMetadataProvider": "No extensions with metadata provider", - "@extensionsNoMetadataProvider": {"description": "Empty state - no metadata providers"}, + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" + }, "extensionsSearchProvider": "Search Provider", - "@extensionsSearchProvider": {"description": "Setting - search provider selection"}, + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" + }, "extensionsNoCustomSearch": "No extensions with custom search", - "@extensionsNoCustomSearch": {"description": "Empty state - no search providers"}, + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" + }, "extensionsSearchProviderDescription": "Choose which service to use for searching tracks", - "@extensionsSearchProviderDescription": {"description": "Search provider setting description"}, + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" + }, "extensionsCustomSearch": "Custom search", - "@extensionsCustomSearch": {"description": "Label for custom search provider"}, + "@extensionsCustomSearch": { + "description": "Label for custom search provider" + }, "extensionsErrorLoading": "Error loading extension", - "@extensionsErrorLoading": {"description": "Error message when extension fails to load"}, - + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" + }, "qualityFlacLossless": "FLAC Lossless", - "@qualityFlacLossless": {"description": "Quality option - CD quality FLAC"}, + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" + }, "qualityFlacLosslessSubtitle": "16-bit / 44.1kHz", - "@qualityFlacLosslessSubtitle": {"description": "Technical spec for lossless"}, + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" + }, "qualityHiResFlac": "Hi-Res FLAC", - "@qualityHiResFlac": {"description": "Quality option - high resolution FLAC"}, + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" + }, "qualityHiResFlacSubtitle": "24-bit / up to 96kHz", - "@qualityHiResFlacSubtitle": {"description": "Technical spec for hi-res"}, + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" + }, "qualityHiResFlacMax": "Hi-Res FLAC Max", - "@qualityHiResFlacMax": {"description": "Quality option - maximum resolution FLAC"}, + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" + }, "qualityHiResFlacMaxSubtitle": "24-bit / up to 192kHz", - "@qualityHiResFlacMaxSubtitle": {"description": "Technical spec for hi-res max"}, - "qualityLossy": "Lossy", - "@qualityLossy": {"description": "Quality option - lossy format (MP3/Opus)"}, - "qualityLossyMp3Subtitle": "MP3 320kbps (converted from FLAC)", - "@qualityLossyMp3Subtitle": {"description": "Technical spec for lossy MP3"}, - "qualityLossyOpusSubtitle": "Opus 128kbps (converted from FLAC)", - "@qualityLossyOpusSubtitle": {"description": "Technical spec for lossy Opus"}, - "enableLossyOption": "Enable Lossy Option", - "@enableLossyOption": {"description": "Setting - enable lossy quality option"}, - "enableLossyOptionSubtitleOn": "Lossy quality option is available", - "@enableLossyOptionSubtitleOn": {"description": "Subtitle when lossy is enabled"}, - "enableLossyOptionSubtitleOff": "Downloads FLAC then converts to lossy format", - "@enableLossyOptionSubtitleOff": {"description": "Subtitle when lossy is disabled"}, - "lossyFormat": "Lossy Format", - "@lossyFormat": {"description": "Setting - choose lossy format"}, - "lossyFormatDescription": "Choose the lossy format for conversion", - "@lossyFormatDescription": {"description": "Description for lossy format picker"}, - "lossyFormatMp3Subtitle": "320kbps, best compatibility", - "@lossyFormatMp3Subtitle": {"description": "MP3 format description"}, - "lossyFormatOpusSubtitle": "128kbps, better quality at smaller size", - "@lossyFormatOpusSubtitle": {"description": "Opus format description"}, + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" + }, "qualityNote": "Actual quality depends on track availability from the service", - "@qualityNote": {"description": "Note about quality availability"}, + "@qualityNote": { + "description": "Note about quality availability" + }, "youtubeQualityNote": "YouTube provides lossy audio only. Not part of lossless fallback.", - "@youtubeQualityNote": {"description": "Note for YouTube service explaining lossy-only quality"}, + "@youtubeQualityNote": { + "description": "Note for YouTube service explaining lossy-only quality" + }, "youtubeOpusBitrateTitle": "YouTube Opus Bitrate", - "@youtubeOpusBitrateTitle": {"description": "Title for YouTube Opus bitrate setting"}, + "@youtubeOpusBitrateTitle": { + "description": "Title for YouTube Opus bitrate setting" + }, "youtubeMp3BitrateTitle": "YouTube MP3 Bitrate", - "@youtubeMp3BitrateTitle": {"description": "Title for YouTube MP3 bitrate setting"}, - "youtubeBitrateSubtitle": "{bitrate}kbps ({min}-{max})", - "@youtubeBitrateSubtitle": { - "description": "Subtitle showing current bitrate and valid range", - "placeholders": { - "bitrate": {"type": "int"}, - "min": {"type": "int"}, - "max": {"type": "int"} - } + "@youtubeMp3BitrateTitle": { + "description": "Title for YouTube MP3 bitrate setting" }, - "youtubeBitrateInputHelp": "Enter custom bitrate ({min}-{max} kbps)", - "@youtubeBitrateInputHelp": { - "description": "Helper text for manual YouTube bitrate input", - "placeholders": { - "min": {"type": "int"}, - "max": {"type": "int"} - } - }, - "youtubeBitrateFieldLabel": "Bitrate (kbps)", - "@youtubeBitrateFieldLabel": {"description": "Label for YouTube bitrate input field"}, - "youtubeBitrateValidationError": "Bitrate must be between {min} and {max} kbps", - "@youtubeBitrateValidationError": { - "description": "Validation error for invalid YouTube bitrate input", - "placeholders": { - "min": {"type": "int"}, - "max": {"type": "int"} - } - }, - "downloadAskBeforeDownload": "Ask Before Download", - "@downloadAskBeforeDownload": {"description": "Setting - show quality picker"}, + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" + }, "downloadDirectory": "Download Directory", - "@downloadDirectory": {"description": "Setting - download folder"}, + "@downloadDirectory": { + "description": "Setting - download folder" + }, "downloadSeparateSinglesFolder": "Separate Singles Folder", - "@downloadSeparateSinglesFolder": {"description": "Setting - separate folder for singles"}, + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" + }, "downloadAlbumFolderStructure": "Album Folder Structure", - "@downloadAlbumFolderStructure": {"description": "Setting - album folder organization"}, + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" + }, "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", - "@downloadUseAlbumArtistForFolders": {"description": "Setting - choose whether artist folders use Album Artist or Track Artist"}, - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Artist folders use Album Artist when available", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": {"description": "Subtitle when Album Artist is used for folder naming"}, - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Artist folders use Track Artist only", - "@downloadUseAlbumArtistForFoldersTrackSubtitle": {"description": "Subtitle when Track Artist is used for folder naming"}, + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" + }, "downloadUsePrimaryArtistOnly": "Primary artist only for folders", - "@downloadUsePrimaryArtistOnly": {"description": "Setting - strip featured artists from folder name"}, + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" + }, "downloadUsePrimaryArtistOnlyEnabled": "Featured artists removed from folder name (e.g. Justin Bieber, Quavo → Justin Bieber)", - "@downloadUsePrimaryArtistOnlyEnabled": {"description": "Subtitle when primary artist only is enabled"}, + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" + }, "downloadUsePrimaryArtistOnlyDisabled": "Full artist string used for folder name", - "@downloadUsePrimaryArtistOnlyDisabled": {"description": "Subtitle when primary artist only is disabled"}, - "downloadSaveFormat": "Save Format", - "@downloadSaveFormat": {"description": "Setting - output file format"}, - "downloadSelectService": "Select Service", - "@downloadSelectService": {"description": "Dialog title - choose download service"}, + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" + }, "downloadSelectQuality": "Select Quality", - "@downloadSelectQuality": {"description": "Dialog title - choose audio quality"}, + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" + }, "downloadFrom": "Download From", - "@downloadFrom": {"description": "Label - download source"}, - "downloadDefaultQualityLabel": "Default Quality", - "@downloadDefaultQualityLabel": {"description": "Label - default quality setting"}, - "downloadBestAvailable": "Best available", - "@downloadBestAvailable": {"description": "Quality option - highest available"}, - - "folderNone": "None", - "@folderNone": {"description": "Folder option - no organization"}, - "folderNoneSubtitle": "Save all files directly to download folder", - "@folderNoneSubtitle": {"description": "Subtitle for no folder organization"}, - "folderArtist": "Artist", - "@folderArtist": {"description": "Folder option - by artist"}, - "folderArtistSubtitle": "Artist Name/filename", - "@folderArtistSubtitle": {"description": "Folder structure example"}, - "folderAlbum": "Album", - "@folderAlbum": {"description": "Folder option - by album"}, - "folderAlbumSubtitle": "Album Name/filename", - "@folderAlbumSubtitle": {"description": "Folder structure example"}, - "folderArtistAlbum": "Artist/Album", - "@folderArtistAlbum": {"description": "Folder option - nested"}, - "folderArtistAlbumSubtitle": "Artist Name/Album Name/filename", - "@folderArtistAlbumSubtitle": {"description": "Folder structure example"}, - - "serviceTidal": "Tidal", - "@serviceTidal": {"description": "Service name - DO NOT TRANSLATE"}, - "serviceQobuz": "Qobuz", - "@serviceQobuz": {"description": "Service name - DO NOT TRANSLATE"}, - "serviceAmazon": "Amazon", - "@serviceAmazon": {"description": "Service name - DO NOT TRANSLATE"}, - "serviceDeezer": "Deezer", - "@serviceDeezer": {"description": "Service name - DO NOT TRANSLATE"}, - "serviceSpotify": "Spotify", - "@serviceSpotify": {"description": "Service name - DO NOT TRANSLATE"}, - + "@downloadFrom": { + "description": "Label - download source" + }, "appearanceAmoledDark": "AMOLED Dark", - "@appearanceAmoledDark": {"description": "Theme option - pure black"}, + "@appearanceAmoledDark": { + "description": "Theme option - pure black" + }, "appearanceAmoledDarkSubtitle": "Pure black background", - "@appearanceAmoledDarkSubtitle": {"description": "Subtitle for AMOLED dark"}, - "appearanceChooseAccentColor": "Choose Accent Color", - "@appearanceChooseAccentColor": {"description": "Color picker dialog title"}, - "appearanceChooseTheme": "Theme Mode", - "@appearanceChooseTheme": {"description": "Theme picker dialog title"}, - - "queueTitle": "Download Queue", - "@queueTitle": {"description": "Queue screen title"}, -"queueClearAll": "Clear All", - "@queueClearAll": {"description": "Button - clear all queue items"}, + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" + }, + "queueClearAll": "Clear All", + "@queueClearAll": { + "description": "Button - clear all queue items" + }, "queueClearAllMessage": "Are you sure you want to clear all downloads?", - "@queueClearAllMessage": {"description": "Clear queue confirmation"}, - "queueExportFailed": "Export", - "@queueExportFailed": {"description": "Button - export failed downloads to TXT"}, - "queueExportFailedSuccess": "Failed downloads exported to TXT file", - "@queueExportFailedSuccess": {"description": "Success message after exporting failed downloads"}, - "queueExportFailedClear": "Clear Failed", - "@queueExportFailedClear": {"description": "Action to clear failed downloads after export"}, - "queueExportFailedError": "Failed to export downloads", - "@queueExportFailedError": {"description": "Error message when export fails"}, + "@queueClearAllMessage": { + "description": "Clear queue confirmation" + }, "settingsAutoExportFailed": "Auto-export failed downloads", - "@settingsAutoExportFailed": {"description": "Setting toggle for auto-export"}, + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" + }, "settingsAutoExportFailedSubtitle": "Save failed downloads to TXT file automatically", - "@settingsAutoExportFailedSubtitle": {"description": "Subtitle for auto-export setting"}, - + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" + }, "settingsDownloadNetwork": "Download Network", - "@settingsDownloadNetwork": {"description": "Setting for network type preference"}, + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" + }, "settingsDownloadNetworkAny": "WiFi + Mobile Data", - "@settingsDownloadNetworkAny": {"description": "Network option - use any connection"}, + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" + }, "settingsDownloadNetworkWifiOnly": "WiFi Only", - "@settingsDownloadNetworkWifiOnly": {"description": "Network option - only use WiFi"}, + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" + }, "settingsDownloadNetworkSubtitle": "Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.", - "@settingsDownloadNetworkSubtitle": {"description": "Subtitle explaining network preference"}, - - "queueEmpty": "No downloads in queue", - "@queueEmpty": {"description": "Empty queue state title"}, - "queueEmptySubtitle": "Add tracks from the home screen", - "@queueEmptySubtitle": {"description": "Empty queue state subtitle"}, - "queueClearCompleted": "Clear completed", - "@queueClearCompleted": {"description": "Button - clear finished downloads"}, - "queueDownloadFailed": "Download Failed", - "@queueDownloadFailed": {"description": "Error dialog title"}, - "queueTrackLabel": "Track:", - "@queueTrackLabel": {"description": "Label in error dialog"}, - "queueArtistLabel": "Artist:", - "@queueArtistLabel": {"description": "Label in error dialog"}, - "queueErrorLabel": "Error:", - "@queueErrorLabel": {"description": "Label in error dialog"}, - "queueUnknownError": "Unknown error", - "@queueUnknownError": {"description": "Fallback error message"}, - + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" + }, "albumFolderArtistAlbum": "Artist / Album", - "@albumFolderArtistAlbum": {"description": "Album folder option"}, + "@albumFolderArtistAlbum": { + "description": "Album folder option" + }, "albumFolderArtistAlbumSubtitle": "Albums/Artist Name/Album Name/", - "@albumFolderArtistAlbumSubtitle": {"description": "Folder structure example"}, + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" + }, "albumFolderArtistYearAlbum": "Artist / [Year] Album", - "@albumFolderArtistYearAlbum": {"description": "Album folder option with year"}, + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" + }, "albumFolderArtistYearAlbumSubtitle": "Albums/Artist Name/[2005] Album Name/", - "@albumFolderArtistYearAlbumSubtitle": {"description": "Folder structure example"}, + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" + }, "albumFolderAlbumOnly": "Album Only", - "@albumFolderAlbumOnly": {"description": "Album folder option"}, + "@albumFolderAlbumOnly": { + "description": "Album folder option" + }, "albumFolderAlbumOnlySubtitle": "Albums/Album Name/", - "@albumFolderAlbumOnlySubtitle": {"description": "Folder structure example"}, + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" + }, "albumFolderYearAlbum": "[Year] Album", - "@albumFolderYearAlbum": {"description": "Album folder option with year"}, + "@albumFolderYearAlbum": { + "description": "Album folder option with year" + }, "albumFolderYearAlbumSubtitle": "Albums/[2005] Album Name/", - "@albumFolderYearAlbumSubtitle": {"description": "Folder structure example"}, + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" + }, "albumFolderArtistAlbumSingles": "Artist / Album + Singles", - "@albumFolderArtistAlbumSingles": {"description": "Album folder option with singles inside artist"}, + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" + }, "albumFolderArtistAlbumSinglesSubtitle": "Artist/Album/ and Artist/Singles/", - "@albumFolderArtistAlbumSinglesSubtitle": {"description": "Folder structure example"}, - + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" + }, "downloadedAlbumDeleteSelected": "Delete Selected", - "@downloadedAlbumDeleteSelected": {"description": "Button - delete selected tracks"}, + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" + }, "downloadedAlbumDeleteMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from this album?\n\nThis will also delete the files from storage.", "@downloadedAlbumDeleteMessage": { "description": "Delete confirmation with count", "placeholders": { - "count": {"type": "int"} - } - }, - "downloadedAlbumTracksHeader": "Tracks", - "@downloadedAlbumTracksHeader": {"description": "Section header for tracks"}, - "downloadedAlbumDownloadedCount": "{count} downloaded", - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", - "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "downloadedAlbumSelectedCount": "{count} selected", "@downloadedAlbumSelectedCount": { "description": "Selection count indicator", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "downloadedAlbumAllSelected": "All tracks selected", - "@downloadedAlbumAllSelected": {"description": "Status - all items selected"}, + "@downloadedAlbumAllSelected": { + "description": "Status - all items selected" + }, "downloadedAlbumTapToSelect": "Tap tracks to select", - "@downloadedAlbumTapToSelect": {"description": "Selection hint"}, + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" + }, "downloadedAlbumDeleteCount": "Delete {count} {count, plural, =1{track} other{tracks}}", "@downloadedAlbumDeleteCount": { "description": "Delete button text with count", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "downloadedAlbumSelectToDelete": "Select tracks to delete", - "@downloadedAlbumSelectToDelete": {"description": "Placeholder when nothing selected"}, + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" + }, "downloadedAlbumDiscHeader": "Disc {discNumber}", "@downloadedAlbumDiscHeader": { "description": "Header for disc separator in multi-disc albums", "placeholders": { - "discNumber": {"type": "int", "example": "1"} + "discNumber": { + "type": "int", + "example": "1" + } } }, - - "utilityFunctions": "Utility Functions", - "@utilityFunctions": {"description": "Extension capability - utility functions"}, - "recentTypeArtist": "Artist", - "@recentTypeArtist": {"description": "Recent access item type - artist"}, + "@recentTypeArtist": { + "description": "Recent access item type - artist" + }, "recentTypeAlbum": "Album", - "@recentTypeAlbum": {"description": "Recent access item type - album"}, + "@recentTypeAlbum": { + "description": "Recent access item type - album" + }, "recentTypeSong": "Song", - "@recentTypeSong": {"description": "Recent access item type - song/track"}, + "@recentTypeSong": { + "description": "Recent access item type - song/track" + }, "recentTypePlaylist": "Playlist", - "@recentTypePlaylist": {"description": "Recent access item type - playlist"}, + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" + }, "recentEmpty": "No recent items yet", - "@recentEmpty": {"description": "Empty state text for recent access list"}, + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, "recentShowAllDownloads": "Show All Downloads", "@recentShowAllDownloads": { "description": "Button label to unhide hidden downloads in recent access" }, - "recentPlaylistInfo": "Playlist: {name}", "@recentPlaylistInfo": { "description": "Snackbar message when tapping playlist in recent access", "placeholders": { - "name": {"type": "String", "description": "Playlist name"} + "name": { + "type": "String", + "description": "Playlist name" + } } }, - "errorGeneric": "Error: {message}", - "@errorGeneric": { - "description": "Generic error message format", - "placeholders": { - "message": {"type": "String", "description": "Error message"} - } - }, - "discographyDownload": "Download Discography", - "@discographyDownload": {"description": "Button - download artist discography"}, - "discographyPlay": "Play Discography", - "@discographyPlay": {"description": "Button - play artist discography"}, + "@discographyDownload": { + "description": "Button - download artist discography" + }, "discographyDownloadAll": "Download All", - "@discographyDownloadAll": {"description": "Option - download entire discography"}, - "discographyPlayAll": "Play All", - "@discographyPlayAll": {"description": "Option - play entire discography"}, + "@discographyDownloadAll": { + "description": "Option - download entire discography" + }, "discographyDownloadAllSubtitle": "{count} tracks from {albumCount} releases", "@discographyDownloadAllSubtitle": { "description": "Subtitle showing total tracks and albums", "placeholders": { - "count": {"type": "int"}, - "albumCount": {"type": "int"} + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } } }, "discographyAlbumsOnly": "Albums Only", - "@discographyAlbumsOnly": {"description": "Option - download only albums"}, + "@discographyAlbumsOnly": { + "description": "Option - download only albums" + }, "discographyAlbumsOnlySubtitle": "{count} tracks from {albumCount} albums", "@discographyAlbumsOnlySubtitle": { "description": "Subtitle showing album tracks count", "placeholders": { - "count": {"type": "int"}, - "albumCount": {"type": "int"} + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } } }, "discographySinglesOnly": "Singles & EPs Only", - "@discographySinglesOnly": {"description": "Option - download only singles"}, + "@discographySinglesOnly": { + "description": "Option - download only singles" + }, "discographySinglesOnlySubtitle": "{count} tracks from {albumCount} singles", "@discographySinglesOnlySubtitle": { "description": "Subtitle showing singles tracks count", "placeholders": { - "count": {"type": "int"}, - "albumCount": {"type": "int"} + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } } }, "discographySelectAlbums": "Select Albums...", - "@discographySelectAlbums": {"description": "Option - manually select albums to download"}, + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" + }, "discographySelectAlbumsSubtitle": "Choose specific albums or singles", - "@discographySelectAlbumsSubtitle": {"description": "Subtitle for select albums option"}, + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" + }, "discographyFetchingTracks": "Fetching tracks...", - "@discographyFetchingTracks": {"description": "Progress - fetching album tracks"}, + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" + }, "discographyFetchingAlbum": "Fetching {current} of {total}...", "@discographyFetchingAlbum": { "description": "Progress - fetching specific album", "placeholders": { - "current": {"type": "int"}, - "total": {"type": "int"} + "current": { + "type": "int" + }, + "total": { + "type": "int" + } } }, "discographySelectedCount": "{count} selected", "@discographySelectedCount": { "description": "Selection count badge", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "discographyDownloadSelected": "Download Selected", - "@discographyDownloadSelected": {"description": "Button - download selected albums"}, - "discographyPlaySelected": "Play Selected", - "@discographyPlaySelected": {"description": "Button - play selected albums"}, + "@discographyDownloadSelected": { + "description": "Button - download selected albums" + }, "discographyAddedToQueue": "Added {count} tracks to queue", "@discographyAddedToQueue": { "description": "Snackbar - tracks added from discography", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "discographySkippedDownloaded": "{added} added, {skipped} already downloaded", "@discographySkippedDownloaded": { "description": "Snackbar - with skipped tracks count", "placeholders": { - "added": {"type": "int"}, - "skipped": {"type": "int"} + "added": { + "type": "int" + }, + "skipped": { + "type": "int" + } } }, "discographyNoAlbums": "No albums available", - "@discographyNoAlbums": {"description": "Error - no albums found for artist"}, + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" + }, "discographyFailedToFetch": "Failed to fetch some albums", - "@discographyFailedToFetch": {"description": "Error - some albums failed to load"}, - + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" + }, "sectionStorageAccess": "Storage Access", - "@sectionStorageAccess": {"description": "Section header for storage access settings"}, + "@sectionStorageAccess": { + "description": "Section header for storage access settings" + }, "allFilesAccess": "All Files Access", - "@allFilesAccess": {"description": "Toggle for MANAGE_EXTERNAL_STORAGE permission"}, + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + }, "allFilesAccessEnabledSubtitle": "Can write to any folder", - "@allFilesAccessEnabledSubtitle": {"description": "Subtitle when all files access is enabled"}, + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" + }, "allFilesAccessDisabledSubtitle": "Limited to media folders only", - "@allFilesAccessDisabledSubtitle": {"description": "Subtitle when all files access is disabled"}, + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" + }, "allFilesAccessDescription": "Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.", - "@allFilesAccessDescription": {"description": "Description explaining when to enable all files access"}, + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" + }, "allFilesAccessDeniedMessage": "Permission was denied. Please enable 'All files access' manually in system settings.", - "@allFilesAccessDeniedMessage": {"description": "Message when permission is permanently denied"}, + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" + }, "allFilesAccessDisabledMessage": "All Files Access disabled. The app will use limited storage access.", - "@allFilesAccessDisabledMessage": {"description": "Snackbar message when user disables all files access"}, - + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" + }, "settingsLocalLibrary": "Local Library", - "@settingsLocalLibrary": {"description": "Settings menu item - local library"}, + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" + }, "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", - "@settingsLocalLibrarySubtitle": {"description": "Subtitle for local library settings"}, + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" + }, "settingsCache": "Storage & Cache", - "@settingsCache": {"description": "Settings menu item - cache management"}, + "@settingsCache": { + "description": "Settings menu item - cache management" + }, "settingsCacheSubtitle": "View size and clear cached data", - "@settingsCacheSubtitle": {"description": "Subtitle for cache management menu"}, + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" + }, "libraryTitle": "Local Library", - "@libraryTitle": {"description": "Library settings page title"}, - "libraryStatus": "Library Status", - "@libraryStatus": {"description": "Section header for library status"}, + "@libraryTitle": { + "description": "Library settings page title" + }, "libraryScanSettings": "Scan Settings", - "@libraryScanSettings": {"description": "Section header for scan settings"}, + "@libraryScanSettings": { + "description": "Section header for scan settings" + }, "libraryEnableLocalLibrary": "Enable Local Library", - "@libraryEnableLocalLibrary": {"description": "Toggle to enable library scanning"}, + "@libraryEnableLocalLibrary": { + "description": "Toggle to enable library scanning" + }, "libraryEnableLocalLibrarySubtitle": "Scan and track your existing music", - "@libraryEnableLocalLibrarySubtitle": {"description": "Subtitle for enable toggle"}, + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" + }, "libraryFolder": "Library Folder", - "@libraryFolder": {"description": "Folder selection setting"}, + "@libraryFolder": { + "description": "Folder selection setting" + }, "libraryFolderHint": "Tap to select folder", - "@libraryFolderHint": {"description": "Placeholder when no folder selected"}, + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" + }, "libraryShowDuplicateIndicator": "Show Duplicate Indicator", - "@libraryShowDuplicateIndicator": {"description": "Toggle for duplicate indicator in search"}, + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" + }, "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", - "@libraryShowDuplicateIndicatorSubtitle": {"description": "Subtitle for duplicate indicator toggle"}, + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" + }, "libraryActions": "Actions", - "@libraryActions": {"description": "Section header for library actions"}, + "@libraryActions": { + "description": "Section header for library actions" + }, "libraryScan": "Scan Library", - "@libraryScan": {"description": "Button to start library scan"}, + "@libraryScan": { + "description": "Button to start library scan" + }, "libraryScanSubtitle": "Scan for audio files", - "@libraryScanSubtitle": {"description": "Subtitle for scan button"}, + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" + }, "libraryScanSelectFolderFirst": "Select a folder first", - "@libraryScanSelectFolderFirst": {"description": "Message when trying to scan without folder"}, + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" + }, "libraryCleanupMissingFiles": "Cleanup Missing Files", - "@libraryCleanupMissingFiles": {"description": "Button to remove entries for missing files"}, + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" + }, "libraryCleanupMissingFilesSubtitle": "Remove entries for files that no longer exist", - "@libraryCleanupMissingFilesSubtitle": {"description": "Subtitle for cleanup button"}, + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" + }, "libraryClear": "Clear Library", - "@libraryClear": {"description": "Button to clear all library entries"}, + "@libraryClear": { + "description": "Button to clear all library entries" + }, "libraryClearSubtitle": "Remove all scanned tracks", - "@libraryClearSubtitle": {"description": "Subtitle for clear button"}, + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" + }, "libraryClearConfirmTitle": "Clear Library", - "@libraryClearConfirmTitle": {"description": "Dialog title for clear confirmation"}, + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" + }, "libraryClearConfirmMessage": "This will remove all scanned tracks from your library. Your actual music files will not be deleted.", - "@libraryClearConfirmMessage": {"description": "Dialog message for clear confirmation"}, + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" + }, "libraryAbout": "About Local Library", - "@libraryAbout": {"description": "Section header for about info"}, + "@libraryAbout": { + "description": "Section header for about info" + }, "libraryAboutDescription": "Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.", - "@libraryAboutDescription": {"description": "Description of local library feature"}, - "libraryTracksCount": "{count} tracks", - "@libraryTracksCount": { - "description": "Track count in library", - "placeholders": { - "count": {"type": "int"} - } + "@libraryAboutDescription": { + "description": "Description of local library feature" }, "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", "@libraryTracksUnit": { "description": "Unit label for tracks count (without the number itself)", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "libraryLastScanned": "Last scanned: {time}", "@libraryLastScanned": { "description": "Last scan time display", "placeholders": { - "time": {"type": "String"} + "time": { + "type": "String" + } } }, "libraryLastScannedNever": "Never", - "@libraryLastScannedNever": {"description": "Shown when library has never been scanned"}, + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" + }, "libraryScanning": "Scanning...", - "@libraryScanning": {"description": "Status during scan"}, + "@libraryScanning": { + "description": "Status during scan" + }, "libraryScanProgress": "{progress}% of {total} files", "@libraryScanProgress": { "description": "Scan progress display", "placeholders": { - "progress": {"type": "String"}, - "total": {"type": "int"} + "progress": { + "type": "String" + }, + "total": { + "type": "int" + } } }, "libraryInLibrary": "In Library", - "@libraryInLibrary": {"description": "Badge shown on tracks that exist in local library"}, + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, "libraryRemovedMissingFiles": "Removed {count} missing files from library", "@libraryRemovedMissingFiles": { "description": "Snackbar after cleanup", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "libraryCleared": "Library cleared", - "@libraryCleared": {"description": "Snackbar after clearing library"}, - "libraryStorageAccessRequired": "Storage Access Required", - "@libraryStorageAccessRequired": {"description": "Dialog title for storage permission"}, - "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", - "@libraryStorageAccessMessage": {"description": "Dialog message for storage permission"}, - "libraryFolderNotExist": "Selected folder does not exist", - "@libraryFolderNotExist": {"description": "Error when folder doesn't exist"}, - "librarySourceDownloaded": "Downloaded", - "@librarySourceDownloaded": {"description": "Badge for tracks downloaded via SpotiFLAC"}, - "librarySourceLocal": "Local", - "@librarySourceLocal": {"description": "Badge for tracks from local library scan"}, - "libraryFilterAll": "All", - "@libraryFilterAll": {"description": "Filter chip - show all library items"}, - "libraryFilterDownloaded": "Downloaded", - "@libraryFilterDownloaded": {"description": "Filter chip - show only downloaded items"}, - "libraryFilterLocal": "Local", - "@libraryFilterLocal": {"description": "Filter chip - show only local library items"}, - - "libraryFilterTitle": "Filters", - "@libraryFilterTitle": {"description": "Filter bottom sheet title"}, - "libraryFilterReset": "Reset", - "@libraryFilterReset": {"description": "Reset all filters button"}, - "libraryFilterApply": "Apply", - "@libraryFilterApply": {"description": "Apply filters button"}, - "libraryFilterSource": "Source", - "@libraryFilterSource": {"description": "Filter section - source type"}, - "libraryFilterQuality": "Quality", - "@libraryFilterQuality": {"description": "Filter section - audio quality"}, - "libraryFilterQualityHiRes": "Hi-Res (24bit)", - "@libraryFilterQualityHiRes": {"description": "Filter option - high resolution audio"}, - "libraryFilterQualityCD": "CD (16bit)", - "@libraryFilterQualityCD": {"description": "Filter option - CD quality audio"}, - "libraryFilterQualityLossy": "Lossy", - "@libraryFilterQualityLossy": {"description": "Filter option - lossy compressed audio"}, - "libraryFilterFormat": "Format", - "@libraryFilterFormat": {"description": "Filter section - file format"}, - "libraryFilterDate": "Date Added", - "@libraryFilterDate": {"description": "Filter section - date range"}, - "libraryFilterDateToday": "Today", - "@libraryFilterDateToday": {"description": "Filter option - today only"}, - "libraryFilterDateWeek": "This Week", - "@libraryFilterDateWeek": {"description": "Filter option - this week"}, - "libraryFilterDateMonth": "This Month", - "@libraryFilterDateMonth": {"description": "Filter option - this month"}, - "libraryFilterDateYear": "This Year", - "@libraryFilterDateYear": {"description": "Filter option - this year"}, - "libraryFilterSort": "Sort", - "@libraryFilterSort": {"description": "Filter section - sort order"}, - "libraryFilterSortLatest": "Latest", - "@libraryFilterSortLatest": {"description": "Sort option - newest first"}, - "libraryFilterSortOldest": "Oldest", - "@libraryFilterSortOldest": {"description": "Sort option - oldest first"}, - "libraryFilterActive": "{count} filter(s) active", - "@libraryFilterActive": { - "description": "Badge showing number of active filters", - "placeholders": { - "count": {"type": "int"} - } + "@libraryCleared": { + "description": "Snackbar after clearing library" + }, + "libraryStorageAccessRequired": "Storage Access Required", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" + }, + "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" + }, + "libraryFolderNotExist": "Selected folder does not exist", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" + }, + "librarySourceDownloaded": "Downloaded", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" + }, + "librarySourceLocal": "Local", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" + }, + "libraryFilterAll": "All", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" + }, + "libraryFilterDownloaded": "Downloaded", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" + }, + "libraryFilterLocal": "Local", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" + }, + "libraryFilterTitle": "Filters", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" + }, + "libraryFilterReset": "Reset", + "@libraryFilterReset": { + "description": "Reset all filters button" + }, + "libraryFilterApply": "Apply", + "@libraryFilterApply": { + "description": "Apply filters button" + }, + "libraryFilterSource": "Source", + "@libraryFilterSource": { + "description": "Filter section - source type" + }, + "libraryFilterQuality": "Quality", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" + }, + "libraryFilterQualityHiRes": "Hi-Res (24bit)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" + }, + "libraryFilterQualityCD": "CD (16bit)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" + }, + "libraryFilterQualityLossy": "Lossy", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" + }, + "libraryFilterFormat": "Format", + "@libraryFilterFormat": { + "description": "Filter section - file format" + }, + "libraryFilterSort": "Sort", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "Latest", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "Oldest", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" }, - "timeJustNow": "Just now", - "@timeJustNow": {"description": "Relative time - less than a minute ago"}, + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", "@timeMinutesAgo": { "description": "Relative time - minutes ago", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", "@timeHoursAgo": { "description": "Relative time - hours ago", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, - - "storageSwitchTitle": "Switch Storage Mode", - "@storageSwitchTitle": {"description": "Dialog title when switching storage mode"}, - "storageSwitchToSafTitle": "Switch to SAF Storage?", - "@storageSwitchToSafTitle": {"description": "Dialog title when switching to SAF"}, - "storageSwitchToAppTitle": "Switch to App Storage?", - "@storageSwitchToAppTitle": {"description": "Dialog title when switching to app storage"}, - "storageSwitchToSafMessage": "Your existing downloads will remain in the current location and stay accessible.\n\nNew downloads will be saved to your selected SAF folder.", - "@storageSwitchToSafMessage": {"description": "Explanation when switching to SAF"}, - "storageSwitchToAppMessage": "Your existing downloads will remain in the current SAF location and stay accessible.\n\nNew downloads will be saved to Music/SpotiFLAC folder.", - "@storageSwitchToAppMessage": {"description": "Explanation when switching to app storage"}, - "storageSwitchExistingDownloads": "Existing Downloads", - "@storageSwitchExistingDownloads": {"description": "Section header for existing downloads info"}, - "storageSwitchExistingDownloadsInfo": "{count} tracks in {mode} storage", - "@storageSwitchExistingDownloadsInfo": { - "description": "Info about existing downloads count", - "placeholders": { - "count": {"type": "int"}, - "mode": {"type": "String"} - } - }, - "storageSwitchNewDownloads": "New Downloads", - "@storageSwitchNewDownloads": {"description": "Section header for new downloads info"}, - "storageSwitchNewDownloadsLocation": "Will be saved to: {location}", - "@storageSwitchNewDownloadsLocation": { - "description": "Shows where new downloads will go", - "placeholders": { - "location": {"type": "String"} - } - }, - "storageSwitchContinue": "Continue", - "@storageSwitchContinue": {"description": "Button to proceed with storage switch"}, - "storageSwitchSelectFolder": "Select SAF Folder", - "@storageSwitchSelectFolder": {"description": "Button to select SAF folder"}, - "storageAppStorage": "App Storage", - "@storageAppStorage": {"description": "Label for app storage mode"}, - "storageSafStorage": "SAF Storage", - "@storageSafStorage": {"description": "Label for SAF storage mode"}, - "storageModeBadge": "Storage: {mode}", - "@storageModeBadge": { - "description": "Badge showing storage mode for a track", - "placeholders": { - "mode": {"type": "String"} - } - }, - "storageStatsTitle": "Storage Statistics", - "@storageStatsTitle": {"description": "Section title for storage stats"}, - "storageStatsAppCount": "{count} tracks in App Storage", - "@storageStatsAppCount": { - "description": "Count of tracks in app storage", - "placeholders": { - "count": {"type": "int"} - } - }, - "storageStatsSafCount": "{count} tracks in SAF Storage", - "@storageStatsSafCount": { - "description": "Count of tracks in SAF storage", - "placeholders": { - "count": {"type": "int"} - } - }, - "storageModeInfo": "Your files are stored in multiple locations", - "@storageModeInfo": {"description": "Info when user has files in both storage modes"}, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC!", - "@tutorialWelcomeTitle": {"description": "Tutorial welcome page title"}, + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" + }, "tutorialWelcomeDesc": "Let's learn how to download your favorite music in lossless quality. This quick tutorial will show you the basics.", - "@tutorialWelcomeDesc": {"description": "Tutorial welcome page description"}, + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" + }, "tutorialWelcomeTip1": "Download music from Spotify, Deezer, or paste any supported URL", - "@tutorialWelcomeTip1": {"description": "Tutorial welcome tip 1"}, + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" + }, "tutorialWelcomeTip2": "Get FLAC quality audio from Tidal, Qobuz, or Amazon Music", - "@tutorialWelcomeTip2": {"description": "Tutorial welcome tip 2"}, + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" + }, "tutorialWelcomeTip3": "Automatic metadata, cover art, and lyrics embedding", - "@tutorialWelcomeTip3": {"description": "Tutorial welcome tip 3"}, - + "@tutorialWelcomeTip3": { + "description": "Tutorial welcome tip 3" + }, "tutorialSearchTitle": "Finding Music", - "@tutorialSearchTitle": {"description": "Tutorial search page title"}, + "@tutorialSearchTitle": { + "description": "Tutorial search page title" + }, "tutorialSearchDesc": "There are two easy ways to find music you want to download.", - "@tutorialSearchDesc": {"description": "Tutorial search page description"}, - "tutorialSearchTip1": "Paste a Spotify or Deezer URL directly in the search box", - "@tutorialSearchTip1": {"description": "Tutorial search tip 1"}, - "tutorialSearchTip2": "Or type the song name, artist, or album to search", - "@tutorialSearchTip2": {"description": "Tutorial search tip 2"}, - "tutorialSearchTip3": "Supports tracks, albums, playlists, and artist pages", - "@tutorialSearchTip3": {"description": "Tutorial search tip 3"}, - + "@tutorialSearchDesc": { + "description": "Tutorial search page description" + }, "tutorialDownloadTitle": "Downloading Music", - "@tutorialDownloadTitle": {"description": "Tutorial download page title"}, + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" + }, "tutorialDownloadDesc": "Downloading music is simple and fast. Here's how it works.", - "@tutorialDownloadDesc": {"description": "Tutorial download page description"}, - "tutorialDownloadTip1": "Tap the download button next to any track to start downloading", - "@tutorialDownloadTip1": {"description": "Tutorial download tip 1"}, - "tutorialDownloadTip2": "Choose your preferred quality (FLAC, Hi-Res, or MP3)", - "@tutorialDownloadTip2": {"description": "Tutorial download tip 2"}, - "tutorialDownloadTip3": "Download entire albums or playlists with one tap", - "@tutorialDownloadTip3": {"description": "Tutorial download tip 3"}, - + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" + }, "tutorialLibraryTitle": "Your Library", - "@tutorialLibraryTitle": {"description": "Tutorial library page title"}, + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" + }, "tutorialLibraryDesc": "All your downloaded music is organized in the Library tab.", - "@tutorialLibraryDesc": {"description": "Tutorial library page description"}, + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" + }, "tutorialLibraryTip1": "View download progress and queue in the Library tab", - "@tutorialLibraryTip1": {"description": "Tutorial library tip 1"}, + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" + }, "tutorialLibraryTip2": "Tap any track to play it with your music player", - "@tutorialLibraryTip2": {"description": "Tutorial library tip 2"}, + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" + }, "tutorialLibraryTip3": "Switch between list and grid view for better browsing", - "@tutorialLibraryTip3": {"description": "Tutorial library tip 3"}, - + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" + }, "tutorialExtensionsTitle": "Extensions", - "@tutorialExtensionsTitle": {"description": "Tutorial extensions page title"}, + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" + }, "tutorialExtensionsDesc": "Extend the app's capabilities with community extensions.", - "@tutorialExtensionsDesc": {"description": "Tutorial extensions page description"}, + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" + }, "tutorialExtensionsTip1": "Browse the Store tab to discover useful extensions", - "@tutorialExtensionsTip1": {"description": "Tutorial extensions tip 1"}, + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" + }, "tutorialExtensionsTip2": "Add new download providers or search sources", - "@tutorialExtensionsTip2": {"description": "Tutorial extensions tip 2"}, + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" + }, "tutorialExtensionsTip3": "Get lyrics, enhanced metadata, and more features", - "@tutorialExtensionsTip3": {"description": "Tutorial extensions tip 3"}, - + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" + }, "tutorialSettingsTitle": "Customize Your Experience", - "@tutorialSettingsTitle": {"description": "Tutorial settings page title"}, + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" + }, "tutorialSettingsDesc": "Personalize the app in Settings to match your preferences.", - "@tutorialSettingsDesc": {"description": "Tutorial settings page description"}, + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" + }, "tutorialSettingsTip1": "Change download location and folder organization", - "@tutorialSettingsTip1": {"description": "Tutorial settings tip 1"}, + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" + }, "tutorialSettingsTip2": "Set default audio quality and format preferences", - "@tutorialSettingsTip2": {"description": "Tutorial settings tip 2"}, + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" + }, "tutorialSettingsTip3": "Customize app theme and appearance", - "@tutorialSettingsTip3": {"description": "Tutorial settings tip 3"}, - + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" + }, "tutorialReadyMessage": "You're all set! Start downloading your favorite music now.", - "@tutorialReadyMessage": {"description": "Tutorial completion message"}, - "tutorialExample": "EXAMPLE", - "@tutorialExample": {"description": "Example label in tutorial"}, - + "@tutorialReadyMessage": { + "description": "Tutorial completion message" + }, "libraryForceFullScan": "Force Full Scan", - "@libraryForceFullScan": {"description": "Button to force a complete rescan of library"}, + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" + }, "libraryForceFullScanSubtitle": "Rescan all files, ignoring cache", - "@libraryForceFullScanSubtitle": {"description": "Subtitle for force full scan button"}, - + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" + }, "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", - "@cleanupOrphanedDownloads": {"description": "Button to remove history entries for deleted files"}, + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" + }, "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", - "@cleanupOrphanedDownloadsSubtitle": {"description": "Subtitle for orphaned cleanup button"}, + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" + }, "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", "@cleanupOrphanedDownloadsResult": { "description": "Snackbar after orphan cleanup", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "cleanupOrphanedDownloadsNone": "No orphaned entries found", - "@cleanupOrphanedDownloadsNone": {"description": "Snackbar when no orphans found"}, - + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" + }, "cacheTitle": "Storage & Cache", - "@cacheTitle": {"description": "Cache management page title"}, + "@cacheTitle": { + "description": "Cache management page title" + }, "cacheSummaryTitle": "Cache overview", - "@cacheSummaryTitle": {"description": "Heading for cache summary card"}, + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" + }, "cacheSummarySubtitle": "Clearing cache will not remove downloaded music files.", - "@cacheSummarySubtitle": {"description": "Helper text for cache summary card"}, + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" + }, "cacheEstimatedTotal": "Estimated cache usage: {size}", "@cacheEstimatedTotal": { "description": "Total cache size shown in summary", "placeholders": { - "size": {"type": "String"} + "size": { + "type": "String" + } } }, "cacheSectionStorage": "Cached Data", - "@cacheSectionStorage": {"description": "Section header for cache entries"}, + "@cacheSectionStorage": { + "description": "Section header for cache entries" + }, "cacheSectionMaintenance": "Maintenance", - "@cacheSectionMaintenance": {"description": "Section header for cleanup actions"}, + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" + }, "cacheAppDirectory": "App cache directory", - "@cacheAppDirectory": {"description": "Cache item title for app cache directory"}, + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" + }, "cacheAppDirectoryDesc": "HTTP responses, WebView data, and other temporary app data.", - "@cacheAppDirectoryDesc": {"description": "Description of what app cache directory contains"}, + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" + }, "cacheTempDirectory": "Temporary directory", - "@cacheTempDirectory": {"description": "Cache item title for temporary files directory"}, + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" + }, "cacheTempDirectoryDesc": "Temporary files from downloads and audio conversion.", - "@cacheTempDirectoryDesc": {"description": "Description of what temporary directory contains"}, + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" + }, "cacheCoverImage": "Cover image cache", - "@cacheCoverImage": {"description": "Cache item title for persistent cover images"}, + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" + }, "cacheCoverImageDesc": "Downloaded album and track cover art. Will re-download when viewed.", - "@cacheCoverImageDesc": {"description": "Description of what cover image cache contains"}, + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" + }, "cacheLibraryCover": "Library cover cache", - "@cacheLibraryCover": {"description": "Cache item title for local library cover art images"}, + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" + }, "cacheLibraryCoverDesc": "Cover art extracted from local music files. Will re-extract on next scan.", - "@cacheLibraryCoverDesc": {"description": "Description of what library cover cache contains"}, + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" + }, "cacheExploreFeed": "Explore feed cache", - "@cacheExploreFeed": {"description": "Cache item title for explore home feed cache"}, + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" + }, "cacheExploreFeedDesc": "Explore tab content (new releases, trending). Will refresh on next visit.", - "@cacheExploreFeedDesc": {"description": "Description of what explore feed cache contains"}, + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" + }, "cacheTrackLookup": "Track lookup cache", - "@cacheTrackLookup": {"description": "Cache item title for track ID lookup cache"}, + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" + }, "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", - "@cacheTrackLookupDesc": {"description": "Description of what track lookup cache contains"}, + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" + }, "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", - "@cacheCleanupUnusedDesc": {"description": "Description of what cleanup unused data does"}, + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" + }, "cacheNoData": "No cached data", - "@cacheNoData": {"description": "Label when cache category has no data"}, + "@cacheNoData": { + "description": "Label when cache category has no data" + }, "cacheSizeWithFiles": "{size} in {count} files", "@cacheSizeWithFiles": { "description": "Cache size and file count", "placeholders": { - "size": {"type": "String"}, - "count": {"type": "int"} + "size": { + "type": "String" + }, + "count": { + "type": "int" + } } }, "cacheSizeOnly": "{size}", "@cacheSizeOnly": { "description": "Cache size only", "placeholders": { - "size": {"type": "String"} + "size": { + "type": "String" + } } }, "cacheEntries": "{count} entries", "@cacheEntries": { "description": "Track cache entry count", "placeholders": { - "count": {"type": "int"} + "count": { + "type": "int" + } } }, "cacheClearSuccess": "Cleared: {target}", "@cacheClearSuccess": { "description": "Snackbar after clearing selected cache", "placeholders": { - "target": {"type": "String"} + "target": { + "type": "String" + } } }, "cacheClearConfirmTitle": "Clear cache?", - "@cacheClearConfirmTitle": {"description": "Dialog title before clearing one cache category"}, + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" + }, "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", "@cacheClearConfirmMessage": { "description": "Dialog message before clearing selected cache", "placeholders": { - "target": {"type": "String"} + "target": { + "type": "String" + } } }, "cacheClearAllConfirmTitle": "Clear all cache?", - "@cacheClearAllConfirmTitle": {"description": "Dialog title before clearing all caches"}, + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" + }, "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", - "@cacheClearAllConfirmMessage": {"description": "Dialog message before clearing all caches"}, + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" + }, "cacheClearAll": "Clear all cache", - "@cacheClearAll": {"description": "Button label to clear all caches"}, + "@cacheClearAll": { + "description": "Button label to clear all caches" + }, "cacheCleanupUnused": "Cleanup unused data", - "@cacheCleanupUnused": {"description": "Action title for cleaning unused entries"}, + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" + }, "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", - "@cacheCleanupUnusedSubtitle": {"description": "Subtitle for cleanup unused data action"}, + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" + }, "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", "@cacheCleanupResult": { "description": "Snackbar after unused data cleanup", "placeholders": { - "downloadCount": {"type": "int"}, - "libraryCount": {"type": "int"} + "downloadCount": { + "type": "int" + }, + "libraryCount": { + "type": "int" + } } }, "cacheRefreshStats": "Refresh stats", - "@cacheRefreshStats": {"description": "Button label to refresh cache statistics"}, - + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" + }, "trackSaveCoverArt": "Save Cover Art", - "@trackSaveCoverArt": {"description": "Menu action - save album cover art as file"}, + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" + }, "trackSaveCoverArtSubtitle": "Save album art as .jpg file", - "@trackSaveCoverArtSubtitle": {"description": "Subtitle for save cover art action"}, + "@trackSaveCoverArtSubtitle": { + "description": "Subtitle for save cover art action" + }, "trackSaveLyrics": "Save Lyrics (.lrc)", - "@trackSaveLyrics": {"description": "Menu action - save lyrics as .lrc file"}, + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" + }, "trackSaveLyricsSubtitle": "Fetch and save lyrics as .lrc file", - "@trackSaveLyricsSubtitle": {"description": "Subtitle for save lyrics action"}, + "@trackSaveLyricsSubtitle": { + "description": "Subtitle for save lyrics action" + }, "trackSaveLyricsProgress": "Saving lyrics...", - "@trackSaveLyricsProgress": {"description": "Snackbar while saving lyrics to file"}, + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" + }, "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"}, + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" + }, "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", - "@trackReEnrichOnlineSubtitle": {"description": "Subtitle for re-enrich metadata action for local items"}, + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" + }, "trackEditMetadata": "Edit Metadata", - "@trackEditMetadata": {"description": "Menu action - edit embedded metadata"}, + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" + }, "trackCoverSaved": "Cover art saved to {fileName}", "@trackCoverSaved": { "description": "Snackbar after cover art saved", "placeholders": { - "fileName": {"type": "String"} + "fileName": { + "type": "String" + } } }, "trackCoverNoSource": "No cover art source available", - "@trackCoverNoSource": {"description": "Snackbar when no cover art URL or embedded cover"}, + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" + }, "trackLyricsSaved": "Lyrics saved to {fileName}", "@trackLyricsSaved": { "description": "Snackbar after lyrics saved", "placeholders": { - "fileName": {"type": "String"} + "fileName": { + "type": "String" + } } }, "trackReEnrichProgress": "Re-enriching metadata...", - "@trackReEnrichProgress": {"description": "Snackbar while re-enriching metadata"}, + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" + }, "trackReEnrichSearching": "Searching metadata online...", - "@trackReEnrichSearching": {"description": "Snackbar while searching metadata from internet for local items"}, + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", - "@trackReEnrichSuccess": {"description": "Snackbar after successful re-enrichment"}, + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" + }, "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", - "@trackReEnrichFfmpegFailed": {"description": "Snackbar when FFmpeg embed fails for MP3/Opus"}, + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + }, "trackSaveFailed": "Failed: {error}", "@trackSaveFailed": { "description": "Snackbar when save operation fails", "placeholders": { - "error": {"type": "String"} + "error": { + "type": "String" + } } }, - "trackConvertFormat": "Convert Format", - "@trackConvertFormat": {"description": "Menu item - convert audio format"}, + "@trackConvertFormat": { + "description": "Menu item - convert audio format" + }, "trackConvertFormatSubtitle": "Convert to MP3 or Opus", - "@trackConvertFormatSubtitle": {"description": "Subtitle for convert format menu item"}, + "@trackConvertFormatSubtitle": { + "description": "Subtitle for convert format menu item" + }, "trackConvertTitle": "Convert Audio", - "@trackConvertTitle": {"description": "Title of convert bottom sheet"}, + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" + }, "trackConvertTargetFormat": "Target Format", - "@trackConvertTargetFormat": {"description": "Label for format selection"}, + "@trackConvertTargetFormat": { + "description": "Label for format selection" + }, "trackConvertBitrate": "Bitrate", - "@trackConvertBitrate": {"description": "Label for bitrate selection"}, + "@trackConvertBitrate": { + "description": "Label for bitrate selection" + }, "trackConvertConfirmTitle": "Confirm Conversion", - "@trackConvertConfirmTitle": {"description": "Confirmation dialog title"}, + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" + }, "trackConvertConfirmMessage": "Convert from {sourceFormat} to {targetFormat} at {bitrate}?\n\nThe original file will be deleted after conversion.", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", "placeholders": { - "sourceFormat": {"type": "String"}, - "targetFormat": {"type": "String"}, - "bitrate": {"type": "String"} + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } } }, "trackConvertConverting": "Converting audio...", - "@trackConvertConverting": {"description": "Snackbar while converting"}, + "@trackConvertConverting": { + "description": "Snackbar while converting" + }, "trackConvertSuccess": "Converted to {format} successfully", "@trackConvertSuccess": { "description": "Snackbar after successful conversion", "placeholders": { - "format": {"type": "String"} + "format": { + "type": "String" + } } }, "trackConvertFailed": "Conversion failed", - "@trackConvertFailed": {"description": "Snackbar when conversion fails"}, - + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" + }, "actionCreate": "Create", - "@actionCreate": {"description": "Generic action button - create"}, - + "@actionCreate": { + "description": "Generic action button - create" + }, "collectionFoldersTitle": "My folders", - "@collectionFoldersTitle": {"description": "Library section title for custom folders"}, + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" + }, "collectionWishlist": "Wishlist", - "@collectionWishlist": {"description": "Custom folder for saved tracks to download later"}, + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" + }, "collectionLoved": "Loved", - "@collectionLoved": {"description": "Custom folder for favorite tracks"}, + "@collectionLoved": { + "description": "Custom folder for favorite tracks" + }, "collectionPlaylists": "Playlists", - "@collectionPlaylists": {"description": "Custom user playlists folder"}, + "@collectionPlaylists": { + "description": "Custom user playlists folder" + }, "collectionPlaylist": "Playlist", - "@collectionPlaylist": {"description": "Single playlist label"}, + "@collectionPlaylist": { + "description": "Single playlist label" + }, "collectionAddToPlaylist": "Add to playlist", - "@collectionAddToPlaylist": {"description": "Action to add a track to user playlist"}, + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" + }, "collectionCreatePlaylist": "Create playlist", - "@collectionCreatePlaylist": {"description": "Action to create a new playlist"}, + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" + }, "collectionNoPlaylistsYet": "No playlists yet", - "@collectionNoPlaylistsYet": {"description": "Empty state title when user has no playlists"}, + "@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"}, + "@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"} + "count": { + "type": "int" + } } }, "collectionAddedToPlaylist": "Added to \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", "placeholders": { - "playlistName": {"type": "String"} + "playlistName": { + "type": "String" + } } }, "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", "@collectionAlreadyInPlaylist": { "description": "Snackbar when track already exists in playlist", "placeholders": { - "playlistName": {"type": "String"} + "playlistName": { + "type": "String" + } } }, "collectionPlaylistCreated": "Playlist created", - "@collectionPlaylistCreated": {"description": "Snackbar after creating playlist"}, + "@collectionPlaylistCreated": { + "description": "Snackbar after creating playlist" + }, "collectionPlaylistNameHint": "Playlist name", - "@collectionPlaylistNameHint": {"description": "Hint text for playlist name input"}, + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" + }, "collectionPlaylistNameRequired": "Playlist name is required", - "@collectionPlaylistNameRequired": {"description": "Validation error for empty playlist name"}, + "@collectionPlaylistNameRequired": { + "description": "Validation error for empty playlist name" + }, "collectionRenamePlaylist": "Rename playlist", - "@collectionRenamePlaylist": {"description": "Action to rename playlist"}, + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" + }, "collectionDeletePlaylist": "Delete playlist", - "@collectionDeletePlaylist": {"description": "Action to 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"} + "playlistName": { + "type": "String" + } } }, "collectionPlaylistDeleted": "Playlist deleted", - "@collectionPlaylistDeleted": {"description": "Snackbar after deleting playlist"}, + "@collectionPlaylistDeleted": { + "description": "Snackbar after deleting playlist" + }, "collectionPlaylistRenamed": "Playlist renamed", - "@collectionPlaylistRenamed": {"description": "Snackbar after renaming playlist"}, + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" + }, "collectionWishlistEmptyTitle": "Wishlist is empty", - "@collectionWishlistEmptyTitle": {"description": "Wishlist empty state title"}, + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" + }, "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", - "@collectionWishlistEmptySubtitle": {"description": "Wishlist empty state subtitle"}, + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" + }, "collectionLovedEmptyTitle": "Loved folder is empty", - "@collectionLovedEmptyTitle": {"description": "Loved empty state title"}, + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" + }, "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", - "@collectionLovedEmptySubtitle": {"description": "Loved empty state subtitle"}, + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Playlist is empty", - "@collectionPlaylistEmptyTitle": {"description": "Playlist empty state title"}, + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" + }, "collectionPlaylistEmptySubtitle": "Long-press + on any track to add it here", - "@collectionPlaylistEmptySubtitle": {"description": "Playlist empty state subtitle"}, + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" + }, "collectionRemoveFromPlaylist": "Remove from playlist", - "@collectionRemoveFromPlaylist": {"description": "Tooltip for removing track from playlist"}, + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" + }, "collectionRemoveFromFolder": "Remove from folder", - "@collectionRemoveFromFolder": {"description": "Tooltip for removing track from wishlist/loved 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"} + "trackName": { + "type": "String" + } } }, "collectionAddedToLoved": "\"{trackName}\" added to Loved", "@collectionAddedToLoved": { "description": "Snackbar after adding track to loved folder", "placeholders": { - "trackName": {"type": "String"} + "trackName": { + "type": "String" + } } }, "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", "@collectionRemovedFromLoved": { "description": "Snackbar after removing track from loved folder", "placeholders": { - "trackName": {"type": "String"} + "trackName": { + "type": "String" + } } }, "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", "@collectionAddedToWishlist": { "description": "Snackbar after adding track to wishlist", "placeholders": { - "trackName": {"type": "String"} + "trackName": { + "type": "String" + } } }, "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", "@collectionRemovedFromWishlist": { "description": "Snackbar after removing track from wishlist", "placeholders": { - "trackName": {"type": "String"} + "trackName": { + "type": "String" + } } }, - "trackOptionAddToLoved": "Add to Loved", - "@trackOptionAddToLoved": {"description": "Bottom sheet action label - add track to loved folder"}, + "@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"}, + "@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"}, + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" + }, "trackOptionRemoveFromWishlist": "Remove from Wishlist", - "@trackOptionRemoveFromWishlist": {"description": "Bottom sheet action label - remove track 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"}, + "@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"}, - + "@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"} + "count": { + "type": "int" + } } }, "selectionShareNoFiles": "No shareable files found", - "@selectionShareNoFiles": {"description": "Snackbar when no selected files exist on disk"}, + "@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"} + "count": { + "type": "int" + } } }, "selectionConvertNoConvertible": "No convertible tracks selected", - "@selectionConvertNoConvertible": {"description": "Snackbar when no selected tracks support conversion"}, + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" + }, "selectionBatchConvertConfirmTitle": "Batch Convert", - "@selectionBatchConvertConfirmTitle": {"description": "Confirmation dialog title for batch conversion"}, + "@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"} + "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"} + "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"} + "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"} + "downloadedAlbumDownloadedCount": "{count} downloaded", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Artist folders use Album Artist when available", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when Album Artist is used for folder naming" + }, + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Artist folders use Track Artist only", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when Track Artist is used for folder naming" + } }