Compare commits

...

108 Commits

Author SHA1 Message Date
Zarz Eleutherius 637504db41 New translations app_en.arb (Ukrainian) 2026-04-14 08:44:40 +07:00
Zarz Eleutherius 48e499eaeb New translations app_en.arb (Turkish) 2026-04-14 08:44:39 +07:00
Zarz Eleutherius 7372a34d25 New translations app_en.arb (Hindi) 2026-04-14 08:44:38 +07:00
Zarz Eleutherius 4411d80a19 New translations app_en.arb (Indonesian) 2026-04-14 08:44:37 +07:00
Zarz Eleutherius 316d7677c7 New translations app_en.arb (Chinese Traditional) 2026-04-14 08:44:36 +07:00
Zarz Eleutherius fa061fc587 New translations app_en.arb (Chinese Simplified) 2026-04-14 08:44:35 +07:00
Zarz Eleutherius 38605080b7 New translations app_en.arb (Russian) 2026-04-14 08:44:34 +07:00
Zarz Eleutherius 478179169c New translations app_en.arb (Portuguese) 2026-04-14 08:44:32 +07:00
Zarz Eleutherius 83594831a9 New translations app_en.arb (Dutch) 2026-04-14 08:44:31 +07:00
Zarz Eleutherius cec3acfff6 New translations app_en.arb (Korean) 2026-04-14 08:44:30 +07:00
Zarz Eleutherius 18ef5e0aee New translations app_en.arb (Japanese) 2026-04-14 08:44:29 +07:00
Zarz Eleutherius f674eef681 New translations app_en.arb (German) 2026-04-14 08:44:28 +07:00
Zarz Eleutherius 1b95085977 New translations app_en.arb (Spanish) 2026-04-14 08:44:27 +07:00
Zarz Eleutherius 35ab00a7bd New translations app_en.arb (French) 2026-04-14 08:44:26 +07:00
Zarz Eleutherius f2ec276b91 Update source file app_en.arb 2026-04-14 08:44:24 +07:00
Zarz Eleutherius ee797756f7 New translations app_en.arb (Ukrainian) 2026-04-13 08:33:42 +07:00
Zarz Eleutherius 2d54ac1d12 New translations app_en.arb (Ukrainian) 2026-04-12 06:54:47 +07:00
Zarz Eleutherius 87f624c685 New translations app_en.arb (Spanish) 2026-04-11 06:49:41 +07:00
Zarz Eleutherius 48ec563aa1 New translations app_en.arb (Turkish) 2026-04-10 06:27:43 +07:00
Zarz Eleutherius 070e0cd8cf New translations app_en.arb (Ukrainian) 2026-04-08 01:58:38 +07:00
Zarz Eleutherius 948d7aa735 New translations app_en.arb (Turkish) 2026-04-08 01:58:36 +07:00
Zarz Eleutherius 1aaa033dc1 New translations app_en.arb (Ukrainian) 2026-04-07 01:58:46 +07:00
Zarz Eleutherius 56a7ec0763 New translations app_en.arb (Turkish) 2026-04-07 01:58:44 +07:00
Zarz Eleutherius 7da5f69551 New translations app_en.arb (Hindi) 2026-04-07 01:58:43 +07:00
Zarz Eleutherius ace70de9e1 New translations app_en.arb (Indonesian) 2026-04-07 01:58:42 +07:00
Zarz Eleutherius e7369bb4a9 New translations app_en.arb (Chinese Traditional) 2026-04-07 01:58:41 +07:00
Zarz Eleutherius cd6598a866 New translations app_en.arb (Chinese Simplified) 2026-04-07 01:58:39 +07:00
Zarz Eleutherius 93dc95ccc4 New translations app_en.arb (Russian) 2026-04-07 01:58:38 +07:00
Zarz Eleutherius 951518ba81 New translations app_en.arb (Portuguese) 2026-04-07 01:58:37 +07:00
Zarz Eleutherius e3449ded60 New translations app_en.arb (Dutch) 2026-04-07 01:58:36 +07:00
Zarz Eleutherius 913db0c97d New translations app_en.arb (Korean) 2026-04-07 01:58:34 +07:00
Zarz Eleutherius f675c1f223 New translations app_en.arb (Japanese) 2026-04-07 01:58:33 +07:00
Zarz Eleutherius 2d8ee8b04f New translations app_en.arb (German) 2026-04-07 01:58:32 +07:00
Zarz Eleutherius ef1f1b381f New translations app_en.arb (Spanish) 2026-04-07 01:58:31 +07:00
Zarz Eleutherius e2dce6c623 New translations app_en.arb (French) 2026-04-07 01:58:29 +07:00
Zarz Eleutherius 1da8228f89 Update source file app_en.arb 2026-04-07 01:58:27 +07:00
Zarz Eleutherius 67df645ca0 New translations app_en.arb (German) 2026-04-06 01:49:58 +07:00
Zarz Eleutherius 258166c973 New translations app_en.arb (Turkish) 2026-04-05 01:48:02 +07:00
Zarz Eleutherius 780aa8494b New translations app_en.arb (Hindi) 2026-04-05 01:48:01 +07:00
Zarz Eleutherius 0a539bde70 New translations app_en.arb (Indonesian) 2026-04-05 01:48:00 +07:00
Zarz Eleutherius 5232af5a36 New translations app_en.arb (Chinese Traditional) 2026-04-05 01:47:59 +07:00
Zarz Eleutherius 01b4c257ff New translations app_en.arb (Chinese Simplified) 2026-04-05 01:47:58 +07:00
Zarz Eleutherius 914c179a1c New translations app_en.arb (Russian) 2026-04-05 01:47:57 +07:00
Zarz Eleutherius 6d3bea874c New translations app_en.arb (Portuguese) 2026-04-05 01:47:56 +07:00
Zarz Eleutherius 10a3fed592 New translations app_en.arb (Dutch) 2026-04-05 01:47:55 +07:00
Zarz Eleutherius 9245b7fe5d New translations app_en.arb (Korean) 2026-04-05 01:47:54 +07:00
Zarz Eleutherius bca72234be New translations app_en.arb (Japanese) 2026-04-05 01:47:53 +07:00
Zarz Eleutherius d3d77688bf New translations app_en.arb (German) 2026-04-05 01:47:52 +07:00
Zarz Eleutherius a1fb0f1db7 New translations app_en.arb (Spanish) 2026-04-05 01:47:51 +07:00
Zarz Eleutherius 2f58426385 New translations app_en.arb (French) 2026-04-05 01:47:50 +07:00
Zarz Eleutherius f495ce4340 Update source file app_en.arb 2026-04-05 01:47:48 +07:00
Zarz Eleutherius cace5993d2 New translations app_en.arb (German) 2026-04-04 01:51:35 +07:00
Zarz Eleutherius d0da28209e New translations app_en.arb (Spanish) 2026-04-03 00:21:28 +07:00
Zarz Eleutherius ea30ac3eb9 New translations app_en.arb (Turkish) 2026-03-31 16:23:59 +07:00
Zarz Eleutherius 1ff9963209 New translations app_en.arb (Hindi) 2026-03-31 16:23:58 +07:00
Zarz Eleutherius 1e00024ca2 New translations app_en.arb (Indonesian) 2026-03-31 16:23:57 +07:00
Zarz Eleutherius e685bef532 New translations app_en.arb (Chinese Traditional) 2026-03-31 16:23:56 +07:00
Zarz Eleutherius 4b2d61ef2d New translations app_en.arb (Chinese Simplified) 2026-03-31 16:23:54 +07:00
Zarz Eleutherius d79d739200 New translations app_en.arb (Russian) 2026-03-31 16:23:53 +07:00
Zarz Eleutherius 08281b9302 New translations app_en.arb (Portuguese) 2026-03-31 16:23:52 +07:00
Zarz Eleutherius 95b85b9ad4 New translations app_en.arb (Dutch) 2026-03-31 16:23:51 +07:00
Zarz Eleutherius d1ff6b6311 New translations app_en.arb (Korean) 2026-03-31 16:23:50 +07:00
Zarz Eleutherius fe159efc5e New translations app_en.arb (Japanese) 2026-03-31 16:23:48 +07:00
Zarz Eleutherius 92b83fc7ba New translations app_en.arb (German) 2026-03-31 16:23:47 +07:00
Zarz Eleutherius f828e21b39 New translations app_en.arb (Spanish) 2026-03-31 16:23:46 +07:00
Zarz Eleutherius 581b394d46 New translations app_en.arb (French) 2026-03-31 16:23:44 +07:00
Zarz Eleutherius 7f120f3a7e Update source file app_en.arb 2026-03-31 16:23:41 +07:00
Zarz Eleutherius 7c4714db36 New translations app_en.arb (Turkish) 2026-03-30 16:25:37 +07:00
Zarz Eleutherius 7c3f8e6297 New translations app_en.arb (Hindi) 2026-03-30 16:25:36 +07:00
Zarz Eleutherius cb416fffd4 New translations app_en.arb (Indonesian) 2026-03-30 16:25:34 +07:00
Zarz Eleutherius a46644abd3 New translations app_en.arb (Chinese Traditional) 2026-03-30 16:25:33 +07:00
Zarz Eleutherius 660cca6fc4 New translations app_en.arb (Chinese Simplified) 2026-03-30 16:25:31 +07:00
Zarz Eleutherius ef9715f54a New translations app_en.arb (Russian) 2026-03-30 16:25:30 +07:00
Zarz Eleutherius b38132d3b7 New translations app_en.arb (Portuguese) 2026-03-30 16:25:28 +07:00
Zarz Eleutherius 1b00569cb2 New translations app_en.arb (Dutch) 2026-03-30 16:25:27 +07:00
Zarz Eleutherius 4e2539167a New translations app_en.arb (Korean) 2026-03-30 16:25:25 +07:00
Zarz Eleutherius dff7d33461 New translations app_en.arb (Japanese) 2026-03-30 16:25:24 +07:00
Zarz Eleutherius ec228788ca New translations app_en.arb (German) 2026-03-30 16:25:22 +07:00
Zarz Eleutherius 83b6ce7648 New translations app_en.arb (Spanish) 2026-03-30 16:25:21 +07:00
Zarz Eleutherius 7f669680cd New translations app_en.arb (French) 2026-03-30 16:25:19 +07:00
Zarz Eleutherius 1e2e201eff Update source file app_en.arb 2026-03-30 16:25:16 +07:00
Zarz Eleutherius b2fcfe5f18 New translations app_en.arb (Turkish) 2026-03-27 15:58:26 +07:00
Zarz Eleutherius 9d9c3ff1e8 New translations app_en.arb (Hindi) 2026-03-27 15:58:25 +07:00
Zarz Eleutherius 071d096314 New translations app_en.arb (Indonesian) 2026-03-27 15:58:24 +07:00
Zarz Eleutherius 983971ec83 New translations app_en.arb (Chinese Traditional) 2026-03-27 15:58:23 +07:00
Zarz Eleutherius 2adcffd95f New translations app_en.arb (Chinese Simplified) 2026-03-27 15:58:22 +07:00
Zarz Eleutherius bd3734a68c New translations app_en.arb (Russian) 2026-03-27 15:58:20 +07:00
Zarz Eleutherius 0a0eefaf3f New translations app_en.arb (Portuguese) 2026-03-27 15:58:19 +07:00
Zarz Eleutherius 2b65d5aedd New translations app_en.arb (Dutch) 2026-03-27 15:58:18 +07:00
Zarz Eleutherius 77f5fc68c8 New translations app_en.arb (Korean) 2026-03-27 15:58:17 +07:00
Zarz Eleutherius fd79bde4ab New translations app_en.arb (Japanese) 2026-03-27 15:58:16 +07:00
Zarz Eleutherius a99b0230f4 New translations app_en.arb (German) 2026-03-27 15:58:15 +07:00
Zarz Eleutherius 81e41e2f6c New translations app_en.arb (Spanish) 2026-03-27 15:58:14 +07:00
Zarz Eleutherius 97ff250465 New translations app_en.arb (French) 2026-03-27 15:58:13 +07:00
Zarz Eleutherius f8700ee017 Update source file app_en.arb 2026-03-27 15:58:11 +07:00
Zarz Eleutherius d7a009cade New translations app_en.arb (Turkish) 2026-03-26 16:01:55 +07:00
Zarz Eleutherius a2d8feebb3 New translations app_en.arb (Hindi) 2026-03-26 16:01:54 +07:00
Zarz Eleutherius e6f9b4c01d New translations app_en.arb (Indonesian) 2026-03-26 16:01:52 +07:00
Zarz Eleutherius 9682f30fd6 New translations app_en.arb (Chinese Traditional) 2026-03-26 16:01:51 +07:00
Zarz Eleutherius 5c85cb5575 New translations app_en.arb (Chinese Simplified) 2026-03-26 16:01:50 +07:00
Zarz Eleutherius 4bc93381d4 New translations app_en.arb (Russian) 2026-03-26 16:01:49 +07:00
Zarz Eleutherius a41c62548a New translations app_en.arb (Portuguese) 2026-03-26 16:01:47 +07:00
Zarz Eleutherius fd028b6d6c New translations app_en.arb (Dutch) 2026-03-26 16:01:46 +07:00
Zarz Eleutherius 01dd2d52c3 New translations app_en.arb (Korean) 2026-03-26 16:01:44 +07:00
Zarz Eleutherius 3f777eb1cb New translations app_en.arb (Japanese) 2026-03-26 16:01:43 +07:00
Zarz Eleutherius ebfb5150e7 New translations app_en.arb (German) 2026-03-26 16:01:42 +07:00
Zarz Eleutherius aed56e7717 New translations app_en.arb (Spanish) 2026-03-26 16:01:41 +07:00
Zarz Eleutherius 7f4f69620b New translations app_en.arb (French) 2026-03-26 16:01:40 +07:00
15 changed files with 31964 additions and 308 deletions
+1336 -32
View File
File diff suppressed because it is too large Load Diff
+660 -23
View File
@@ -17,7 +17,7 @@
"@navSettings": { "@navSettings": {
"description": "Bottom navigation - Settings tab" "description": "Bottom navigation - Settings tab"
}, },
"navStore": "Store", "navStore": "Repo",
"@navStore": { "@navStore": {
"description": "Bottom navigation - Extension store tab" "description": "Bottom navigation - Extension store tab"
}, },
@@ -25,7 +25,7 @@
"@homeTitle": { "@homeTitle": {
"description": "Home screen title" "description": "Home screen title"
}, },
"homeSubtitle": "Paste a Spotify link or search by name", "homeSubtitle": "Paste a supported URL or search by name",
"@homeSubtitle": { "@homeSubtitle": {
"description": "Subtitle shown below search box" "description": "Subtitle shown below search box"
}, },
@@ -89,6 +89,14 @@
"@downloadFilenameFormat": { "@downloadFilenameFormat": {
"description": "Setting for output filename pattern" "description": "Setting for output filename pattern"
}, },
"downloadSingleFilenameFormat": "Single Filename Format",
"@downloadSingleFilenameFormat": {
"description": "Setting for output filename pattern for singles/EPs"
},
"downloadSingleFilenameFormatDescription": "Filename pattern for singles and EPs. Uses the same tags as the album format.",
"@downloadSingleFilenameFormatDescription": {
"description": "Subtitle description for single filename format setting"
},
"downloadFolderOrganization": "Folder Organization", "downloadFolderOrganization": "Folder Organization",
"@downloadFolderOrganization": { "@downloadFolderOrganization": {
"description": "Setting for folder structure" "description": "Setting for folder structure"
@@ -150,6 +158,14 @@
} }
} }
}, },
"optionsDefaultSearchTab": "Default Search Tab",
"@optionsDefaultSearchTab": {
"description": "Title for the preferred default search tab setting"
},
"optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.",
"@optionsDefaultSearchTabSubtitle": {
"description": "Subtitle for the preferred default search tab setting"
},
"optionsSwitchBack": "Tap Deezer or Spotify to switch back from extension", "optionsSwitchBack": "Tap Deezer or Spotify to switch back from extension",
"@optionsSwitchBack": { "@optionsSwitchBack": {
"description": "Hint to switch back to built-in providers" "description": "Hint to switch back to built-in providers"
@@ -190,6 +206,42 @@
"@optionsMaxQualityCoverSubtitle": { "@optionsMaxQualityCoverSubtitle": {
"description": "Subtitle for max quality cover" "description": "Subtitle for max quality cover"
}, },
"optionsReplayGain": "ReplayGain",
"@optionsReplayGain": {
"description": "Title for ReplayGain setting toggle"
},
"optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)",
"@optionsReplayGainSubtitleOn": {
"description": "Subtitle when ReplayGain is enabled"
},
"optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags",
"@optionsReplayGainSubtitleOff": {
"description": "Subtitle when ReplayGain is disabled"
},
"optionsArtistTagMode": "Artist Tag Mode",
"@optionsArtistTagMode": {
"description": "Setting title for how artist metadata is written into files"
},
"optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.",
"@optionsArtistTagModeDescription": {
"description": "Bottom-sheet description for artist tag mode setting"
},
"optionsArtistTagModeJoined": "Single joined value",
"@optionsArtistTagModeJoined": {
"description": "Artist tag mode option that joins multiple artists into one value"
},
"optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.",
"@optionsArtistTagModeJoinedSubtitle": {
"description": "Subtitle for joined artist tag mode"
},
"optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus",
"@optionsArtistTagModeSplitVorbis": {
"description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats"
},
"optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.",
"@optionsArtistTagModeSplitVorbisSubtitle": {
"description": "Subtitle for split Vorbis artist tag mode"
},
"optionsConcurrentDownloads": "Concurrent Downloads", "optionsConcurrentDownloads": "Concurrent Downloads",
"@optionsConcurrentDownloads": { "@optionsConcurrentDownloads": {
"description": "Number of parallel downloads" "description": "Number of parallel downloads"
@@ -211,11 +263,11 @@
"@optionsConcurrentWarning": { "@optionsConcurrentWarning": {
"description": "Warning about rate limits" "description": "Warning about rate limits"
}, },
"optionsExtensionStore": "Extension Store", "optionsExtensionStore": "Extension Repo",
"@optionsExtensionStore": { "@optionsExtensionStore": {
"description": "Show/hide store tab" "description": "Show/hide store tab"
}, },
"optionsExtensionStoreSubtitle": "Show Store tab in navigation", "optionsExtensionStoreSubtitle": "Show Repo tab in navigation",
"@optionsExtensionStoreSubtitle": { "@optionsExtensionStoreSubtitle": {
"description": "Subtitle for extension store toggle" "description": "Subtitle for extension store toggle"
}, },
@@ -318,7 +370,7 @@
"@extensionsUninstall": { "@extensionsUninstall": {
"description": "Uninstall extension button" "description": "Uninstall extension button"
}, },
"storeTitle": "Extension Store", "storeTitle": "Extension Repo",
"@storeTitle": { "@storeTitle": {
"description": "Store screen title" "description": "Store screen title"
}, },
@@ -378,6 +430,10 @@
"@aboutPCSource": { "@aboutPCSource": {
"description": "Link to PC GitHub repo" "description": "Link to PC GitHub repo"
}, },
"aboutKeepAndroidOpen": "Keep Android Open",
"@aboutKeepAndroidOpen": {
"description": "Link to Keep Android Open campaign website"
},
"aboutReportIssue": "Report an issue", "aboutReportIssue": "Report an issue",
"@aboutReportIssue": { "@aboutReportIssue": {
"description": "Link to report bugs" "description": "Link to report bugs"
@@ -999,6 +1055,46 @@
"@searchPlaylists": { "@searchPlaylists": {
"description": "Search result category - playlists" "description": "Search result category - playlists"
}, },
"searchSortTitle": "Sort Results",
"@searchSortTitle": {
"description": "Bottom sheet title for search sort options"
},
"searchSortDefault": "Default",
"@searchSortDefault": {
"description": "Sort option - default API order"
},
"searchSortTitleAZ": "Title (A-Z)",
"@searchSortTitleAZ": {
"description": "Sort option - title ascending"
},
"searchSortTitleZA": "Title (Z-A)",
"@searchSortTitleZA": {
"description": "Sort option - title descending"
},
"searchSortArtistAZ": "Artist (A-Z)",
"@searchSortArtistAZ": {
"description": "Sort option - artist ascending"
},
"searchSortArtistZA": "Artist (Z-A)",
"@searchSortArtistZA": {
"description": "Sort option - artist descending"
},
"searchSortDurationShort": "Duration (Shortest)",
"@searchSortDurationShort": {
"description": "Sort option - shortest duration first"
},
"searchSortDurationLong": "Duration (Longest)",
"@searchSortDurationLong": {
"description": "Sort option - longest duration first"
},
"searchSortDateOldest": "Release Date (Oldest)",
"@searchSortDateOldest": {
"description": "Sort option - oldest release first"
},
"searchSortDateNewest": "Release Date (Newest)",
"@searchSortDateNewest": {
"description": "Sort option - newest release first"
},
"tooltipPlay": "Play", "tooltipPlay": "Play",
"@tooltipPlay": { "@tooltipPlay": {
"description": "Tooltip - play button" "description": "Tooltip - play button"
@@ -1119,6 +1215,18 @@
"@providerPriorityInfo": { "@providerPriorityInfo": {
"description": "Info tip about fallback behavior" "description": "Info tip about fallback behavior"
}, },
"providerPriorityFallbackExtensionsTitle": "Extension Fallback",
"@providerPriorityFallbackExtensionsTitle": {
"description": "Section title for choosing which download extensions can be used as fallback providers"
},
"providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback. Built-in providers still follow the priority order above.",
"@providerPriorityFallbackExtensionsDescription": {
"description": "Section description for extension fallback selection"
},
"providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.",
"@providerPriorityFallbackExtensionsHint": {
"description": "Hint below the extension fallback selection list"
},
"providerBuiltIn": "Built-in", "providerBuiltIn": "Built-in",
"@providerBuiltIn": { "@providerBuiltIn": {
"description": "Label for built-in providers (Tidal/Qobuz)" "description": "Label for built-in providers (Tidal/Qobuz)"
@@ -1479,6 +1587,14 @@
"@trackLyricsNotAvailable": { "@trackLyricsNotAvailable": {
"description": "Message when lyrics not found" "description": "Message when lyrics not found"
}, },
"trackLyricsNotInFile": "No lyrics found in this file",
"@trackLyricsNotInFile": {
"description": "Message when no embedded lyrics in audio file"
},
"trackFetchOnlineLyrics": "Fetch from Online",
"@trackFetchOnlineLyrics": {
"description": "Action - fetch lyrics from online providers"
},
"trackLyricsTimeout": "Request timed out. Try again later.", "trackLyricsTimeout": "Request timed out. Try again later.",
"@trackLyricsTimeout": { "@trackLyricsTimeout": {
"description": "Message when lyrics request times out" "description": "Message when lyrics request times out"
@@ -1614,7 +1730,7 @@
"@storeNewRepoUrlLabel": { "@storeNewRepoUrlLabel": {
"description": "Label for the new repository URL field inside the dialog" "description": "Label for the new repository URL field inside the dialog"
}, },
"storeLoadError": "Failed to load store", "storeLoadError": "Failed to load repository",
"@storeLoadError": { "@storeLoadError": {
"description": "Error heading when the store cannot be loaded" "description": "Error heading when the store cannot be loaded"
}, },
@@ -1765,6 +1881,14 @@
"@extensionsDownloadPrioritySubtitle": { "@extensionsDownloadPrioritySubtitle": {
"description": "Subtitle for download priority" "description": "Subtitle for download priority"
}, },
"extensionsFallbackTitle": "Fallback Extensions",
"@extensionsFallbackTitle": {
"description": "Setting and page title for choosing which download extensions can be used during fallback"
},
"extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback",
"@extensionsFallbackSubtitle": {
"description": "Subtitle for download fallback extensions menu"
},
"extensionsNoDownloadProvider": "No extensions with download provider", "extensionsNoDownloadProvider": "No extensions with download provider",
"@extensionsNoDownloadProvider": { "@extensionsNoDownloadProvider": {
"description": "Empty state - no download providers" "description": "Empty state - no download providers"
@@ -1869,18 +1993,6 @@
"@qualityNote": { "@qualityNote": {
"description": "Note about quality availability" "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"
},
"youtubeOpusBitrateTitle": "YouTube Opus Bitrate",
"@youtubeOpusBitrateTitle": {
"description": "Title for YouTube Opus bitrate setting"
},
"youtubeMp3BitrateTitle": "YouTube MP3 Bitrate",
"@youtubeMp3BitrateTitle": {
"description": "Title for YouTube MP3 bitrate setting"
},
"downloadAskBeforeDownload": "Ask Before Download", "downloadAskBeforeDownload": "Ask Before Download",
"@downloadAskBeforeDownload": { "@downloadAskBeforeDownload": {
"description": "Setting - show quality picker" "description": "Setting - show quality picker"
@@ -2001,6 +2113,14 @@
"@albumFolderArtistAlbumSinglesSubtitle": { "@albumFolderArtistAlbumSinglesSubtitle": {
"description": "Folder structure example" "description": "Folder structure example"
}, },
"albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)",
"@albumFolderArtistAlbumFlat": {
"description": "Album folder option with singles directly in artist folder"
},
"albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac",
"@albumFolderArtistAlbumFlatSubtitle": {
"description": "Folder structure example for flat singles"
},
"downloadedAlbumDeleteSelected": "Delete Selected", "downloadedAlbumDeleteSelected": "Delete Selected",
"@downloadedAlbumDeleteSelected": { "@downloadedAlbumDeleteSelected": {
"description": "Button - delete selected tracks" "description": "Button - delete selected tracks"
@@ -2363,6 +2483,15 @@
} }
} }
}, },
"libraryFilesUnit": "{count, plural, =1{file} other{files}}",
"@libraryFilesUnit": {
"description": "Unit label for files count during library scanning",
"placeholders": {
"count": {
"type": "int"
}
}
},
"libraryLastScanned": "Last scanned: {time}", "libraryLastScanned": "Last scanned: {time}",
"@libraryLastScanned": { "@libraryLastScanned": {
"description": "Last scan time display", "description": "Last scan time display",
@@ -2380,6 +2509,10 @@
"@libraryScanning": { "@libraryScanning": {
"description": "Status during scan" "description": "Status during scan"
}, },
"libraryScanFinalizing": "Finalizing library...",
"@libraryScanFinalizing": {
"description": "Status shown after file scanning finishes but library persistence is still running"
},
"libraryScanProgress": "{progress}% of {total} files", "libraryScanProgress": "{progress}% of {total} files",
"@libraryScanProgress": { "@libraryScanProgress": {
"description": "Scan progress display", "description": "Scan progress display",
@@ -2477,6 +2610,30 @@
"@libraryFilterFormat": { "@libraryFilterFormat": {
"description": "Filter section - file format" "description": "Filter section - file format"
}, },
"libraryFilterMetadata": "Metadata",
"@libraryFilterMetadata": {
"description": "Filter section - metadata completeness"
},
"libraryFilterMetadataComplete": "Complete metadata",
"@libraryFilterMetadataComplete": {
"description": "Filter option - items with complete metadata"
},
"libraryFilterMetadataMissingAny": "Missing any metadata",
"@libraryFilterMetadataMissingAny": {
"description": "Filter option - items missing any tracked metadata field"
},
"libraryFilterMetadataMissingYear": "Missing year",
"@libraryFilterMetadataMissingYear": {
"description": "Filter option - items missing release year/date"
},
"libraryFilterMetadataMissingGenre": "Missing genre",
"@libraryFilterMetadataMissingGenre": {
"description": "Filter option - items missing genre"
},
"libraryFilterMetadataMissingAlbumArtist": "Missing album artist",
"@libraryFilterMetadataMissingAlbumArtist": {
"description": "Filter option - items missing album artist"
},
"libraryFilterSort": "Sort", "libraryFilterSort": "Sort",
"@libraryFilterSort": { "@libraryFilterSort": {
"description": "Filter section - sort order" "description": "Filter section - sort order"
@@ -2489,6 +2646,22 @@
"@libraryFilterSortOldest": { "@libraryFilterSortOldest": {
"description": "Sort option - oldest first" "description": "Sort option - oldest first"
}, },
"libraryFilterSortAlbumAsc": "Album (A-Z)",
"@libraryFilterSortAlbumAsc": {
"description": "Sort option - album ascending"
},
"libraryFilterSortAlbumDesc": "Album (Z-A)",
"@libraryFilterSortAlbumDesc": {
"description": "Sort option - album descending"
},
"libraryFilterSortGenreAsc": "Genre (A-Z)",
"@libraryFilterSortGenreAsc": {
"description": "Sort option - genre ascending"
},
"libraryFilterSortGenreDesc": "Genre (Z-A)",
"@libraryFilterSortGenreDesc": {
"description": "Sort option - genre descending"
},
"timeJustNow": "Just now", "timeJustNow": "Just now",
"@timeJustNow": { "@timeJustNow": {
"description": "Relative time - less than a minute ago" "description": "Relative time - less than a minute ago"
@@ -2575,7 +2748,7 @@
"@tutorialExtensionsDesc": { "@tutorialExtensionsDesc": {
"description": "Tutorial extensions page description" "description": "Tutorial extensions page description"
}, },
"tutorialExtensionsTip1": "Browse the Store tab to discover useful extensions", "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions",
"@tutorialExtensionsTip1": { "@tutorialExtensionsTip1": {
"description": "Tutorial extensions tip 1" "description": "Tutorial extensions tip 1"
}, },
@@ -2841,6 +3014,38 @@
"@trackReEnrichOnlineSubtitle": { "@trackReEnrichOnlineSubtitle": {
"description": "Subtitle for re-enrich metadata action for local items" "description": "Subtitle for re-enrich metadata action for local items"
}, },
"trackReEnrichFieldsTitle": "Fields to update",
"@trackReEnrichFieldsTitle": {
"description": "Section title for field selection in re-enrich dialog"
},
"trackReEnrichFieldCover": "Cover Art",
"@trackReEnrichFieldCover": {
"description": "Checkbox label for cover art field in re-enrich"
},
"trackReEnrichFieldLyrics": "Lyrics",
"@trackReEnrichFieldLyrics": {
"description": "Checkbox label for lyrics field in re-enrich"
},
"trackReEnrichFieldBasicTags": "Album, Album Artist",
"@trackReEnrichFieldBasicTags": {
"description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)"
},
"trackReEnrichFieldTrackInfo": "Track & Disc Number",
"@trackReEnrichFieldTrackInfo": {
"description": "Checkbox label for track info in re-enrich"
},
"trackReEnrichFieldReleaseInfo": "Date & ISRC",
"@trackReEnrichFieldReleaseInfo": {
"description": "Checkbox label for release info in re-enrich"
},
"trackReEnrichFieldExtra": "Genre, Label, Copyright",
"@trackReEnrichFieldExtra": {
"description": "Checkbox label for extra metadata in re-enrich"
},
"trackReEnrichSelectAll": "Select All",
"@trackReEnrichSelectAll": {
"description": "Select all fields checkbox in re-enrich"
},
"trackEditMetadata": "Edit Metadata", "trackEditMetadata": "Edit Metadata",
"@trackEditMetadata": { "@trackEditMetadata": {
"description": "Menu action - edit embedded metadata" "description": "Menu action - edit embedded metadata"
@@ -3438,10 +3643,6 @@
"@lyricsProvidersDiscardContent": { "@lyricsProvidersDiscardContent": {
"description": "Body text of the discard-changes dialog on lyrics provider page" "description": "Body text of the discard-changes dialog on lyrics provider page"
}, },
"lyricsProviderSpotifyApiDesc": "Spotify-sourced synced lyrics via community API",
"@lyricsProviderSpotifyApiDesc": {
"description": "Description for Spotify Lyrics API provider"
},
"lyricsProviderLrclibDesc": "Open-source synced lyrics database", "lyricsProviderLrclibDesc": "Open-source synced lyrics database",
"@lyricsProviderLrclibDesc": { "@lyricsProviderLrclibDesc": {
"description": "Description for LRCLIB provider" "description": "Description for LRCLIB provider"
@@ -3903,5 +4104,441 @@
"editMetadataSelectEmpty": "Empty only", "editMetadataSelectEmpty": "Empty only",
"@editMetadataSelectEmpty": { "@editMetadataSelectEmpty": {
"description": "Button to select only fields that are currently empty" "description": "Button to select only fields that are currently empty"
},
"queueDownloadingCount": "Downloading ({count})",
"@queueDownloadingCount": {
"description": "Header for active downloads section with count",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedHeader": "Downloaded",
"@queueDownloadedHeader": {
"description": "Header label for downloaded items section in library"
},
"queueFilteringIndicator": "Filtering...",
"@queueFilteringIndicator": {
"description": "Shown while filter results are being computed"
},
"queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}",
"@queueTrackCount": {
"description": "Track count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}",
"@queueAlbumCount": {
"description": "Album count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyAlbums": "No album downloads",
"@queueEmptyAlbums": {
"description": "Empty state title when no album downloads exist"
},
"queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here",
"@queueEmptyAlbumsSubtitle": {
"description": "Empty state subtitle for album downloads"
},
"queueEmptySingles": "No single downloads",
"@queueEmptySingles": {
"description": "Empty state title when no single track downloads exist"
},
"queueEmptySinglesSubtitle": "Single track downloads will appear here",
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queueEmptyHistory": "No download history",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
},
"queueEmptyHistorySubtitle": "Downloaded tracks will appear here",
"@queueEmptyHistorySubtitle": {
"description": "Empty state subtitle for download history"
},
"selectionAllPlaylistsSelected": "All playlists selected",
"@selectionAllPlaylistsSelected": {
"description": "Shown when all playlists are selected in selection mode"
},
"selectionTapPlaylistsToSelect": "Tap playlists to select",
"@selectionTapPlaylistsToSelect": {
"description": "Hint shown in playlist selection mode"
},
"selectionSelectPlaylistsToDelete": "Select playlists to delete",
"@selectionSelectPlaylistsToDelete": {
"description": "Hint shown when no playlists are selected for deletion"
},
"audioAnalysisTitle": "Audio Quality Analysis",
"@audioAnalysisTitle": {
"description": "Title for audio analysis section"
},
"audioAnalysisDescription": "Verify lossless quality with spectrum analysis",
"@audioAnalysisDescription": {
"description": "Description for audio analysis tap-to-analyze prompt"
},
"audioAnalysisAnalyzing": "Analyzing audio...",
"@audioAnalysisAnalyzing": {
"description": "Loading text while analyzing audio"
},
"audioAnalysisSampleRate": "Sample Rate",
"@audioAnalysisSampleRate": {
"description": "Sample rate metric label"
},
"audioAnalysisBitDepth": "Bit Depth",
"@audioAnalysisBitDepth": {
"description": "Bit depth metric label"
},
"audioAnalysisChannels": "Channels",
"@audioAnalysisChannels": {
"description": "Channels metric label"
},
"audioAnalysisDuration": "Duration",
"@audioAnalysisDuration": {
"description": "Duration metric label"
},
"audioAnalysisNyquist": "Nyquist",
"@audioAnalysisNyquist": {
"description": "Nyquist frequency metric label"
},
"audioAnalysisFileSize": "Size",
"@audioAnalysisFileSize": {
"description": "File size metric label"
},
"audioAnalysisDynamicRange": "Dynamic Range",
"@audioAnalysisDynamicRange": {
"description": "Dynamic range metric label"
},
"audioAnalysisPeak": "Peak",
"@audioAnalysisPeak": {
"description": "Peak amplitude metric label"
},
"audioAnalysisRms": "RMS",
"@audioAnalysisRms": {
"description": "RMS level metric label"
},
"audioAnalysisSamples": "Samples",
"@audioAnalysisSamples": {
"description": "Total samples metric label"
},
"extensionsSearchWith": "Search with {providerName}",
"@extensionsSearchWith": {
"description": "Extensions page - subtitle for built-in search provider option",
"placeholders": {
"providerName": {
"type": "String"
}
}
},
"extensionsHomeFeedProvider": "Home Feed Provider",
"@extensionsHomeFeedProvider": {
"description": "Extensions page - label for home feed provider selector"
},
"extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen",
"@extensionsHomeFeedDescription": {
"description": "Extensions page - description for home feed provider picker"
},
"extensionsHomeFeedAuto": "Auto",
"@extensionsHomeFeedAuto": {
"description": "Extensions page - home feed provider option: auto"
},
"extensionsHomeFeedAutoSubtitle": "Automatically select the best available",
"@extensionsHomeFeedAutoSubtitle": {
"description": "Extensions page - subtitle for auto home feed option"
},
"extensionsHomeFeedUse": "Use {extensionName} home feed",
"@extensionsHomeFeedUse": {
"description": "Extensions page - subtitle for a specific extension home feed option",
"placeholders": {
"extensionName": {
"type": "String"
}
}
},
"extensionsNoHomeFeedExtensions": "No extensions with home feed",
"@extensionsNoHomeFeedExtensions": {
"description": "Extensions page - shown when no installed extension has home feed"
},
"sortAlphaAsc": "A-Z",
"@sortAlphaAsc": {
"description": "Sort option - alphabetical ascending"
},
"sortAlphaDesc": "Z-A",
"@sortAlphaDesc": {
"description": "Sort option - alphabetical descending"
},
"cancelDownloadTitle": "Cancel download?",
"@cancelDownloadTitle": {
"description": "Dialog title when confirming cancellation of an active download"
},
"cancelDownloadContent": "This will cancel the active download for \"{trackName}\".",
"@cancelDownloadContent": {
"description": "Dialog body when confirming cancellation of an active download",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"cancelDownloadKeep": "Keep",
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
},
"metadataSaveFailedStorage": "Failed to write metadata back to storage",
"@metadataSaveFailedStorage": {
"description": "Snackbar error when writing metadata file back to storage fails"
},
"snackbarFolderPickerFailed": "Failed to open folder picker: {error}",
"@snackbarFolderPickerFailed": {
"description": "Snackbar shown when folder picker fails to open",
"placeholders": {
"error": {
"type": "String"
}
}
},
"errorLoadAlbum": "Failed to load album",
"@errorLoadAlbum": {
"description": "Error state shown when album fails to load"
},
"errorLoadPlaylist": "Failed to load playlist",
"@errorLoadPlaylist": {
"description": "Error state shown when playlist fails to load"
},
"errorLoadArtist": "Failed to load artist",
"@errorLoadArtist": {
"description": "Error state shown when artist fails to load"
},
"notifChannelDownloadName": "Download Progress",
"@notifChannelDownloadName": {
"description": "Android notification channel name for download progress"
},
"notifChannelDownloadDesc": "Shows download progress for tracks",
"@notifChannelDownloadDesc": {
"description": "Android notification channel description for download progress"
},
"notifChannelLibraryScanName": "Library Scan",
"@notifChannelLibraryScanName": {
"description": "Android notification channel name for library scan"
},
"notifChannelLibraryScanDesc": "Shows local library scan progress",
"@notifChannelLibraryScanDesc": {
"description": "Android notification channel description for library scan"
},
"notifDownloadingTrack": "Downloading {trackName}",
"@notifDownloadingTrack": {
"description": "Notification title while downloading a track",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"notifFinalizingTrack": "Finalizing {trackName}",
"@notifFinalizingTrack": {
"description": "Notification title while finalizing (embedding metadata) a track",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"notifEmbeddingMetadata": "Embedding metadata...",
"@notifEmbeddingMetadata": {
"description": "Notification body while embedding metadata into a downloaded track"
},
"notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})",
"@notifAlreadyInLibraryCount": {
"description": "Notification title when track is already in library, with count",
"placeholders": {
"completed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"notifAlreadyInLibrary": "Already in Library",
"@notifAlreadyInLibrary": {
"description": "Notification title when track is already in library"
},
"notifDownloadCompleteCount": "Download Complete ({completed}/{total})",
"@notifDownloadCompleteCount": {
"description": "Notification title when download is complete, with count",
"placeholders": {
"completed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"notifDownloadComplete": "Download Complete",
"@notifDownloadComplete": {
"description": "Notification title when a single download is complete"
},
"notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)",
"@notifDownloadsFinished": {
"description": "Notification title when queue finishes with some failures",
"placeholders": {
"completed": {
"type": "int"
},
"failed": {
"type": "int"
}
}
},
"notifAllDownloadsComplete": "All Downloads Complete",
"@notifAllDownloadsComplete": {
"description": "Notification title when all downloads finish successfully"
},
"notifTracksDownloadedSuccess": "{count} tracks downloaded successfully",
"@notifTracksDownloadedSuccess": {
"description": "Notification body for queue complete - how many tracks were downloaded",
"placeholders": {
"count": {
"type": "int"
}
}
},
"notifScanningLibrary": "Scanning local library",
"@notifScanningLibrary": {
"description": "Notification title while scanning local library"
},
"notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%",
"@notifLibraryScanProgressWithTotal": {
"description": "Notification body for library scan progress when total is known",
"placeholders": {
"scanned": {
"type": "int"
},
"total": {
"type": "int"
},
"percentage": {
"type": "int"
}
}
},
"notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%",
"@notifLibraryScanProgressNoTotal": {
"description": "Notification body for library scan progress when total is unknown",
"placeholders": {
"scanned": {
"type": "int"
},
"percentage": {
"type": "int"
}
}
},
"notifLibraryScanComplete": "Library scan complete",
"@notifLibraryScanComplete": {
"description": "Notification title when library scan finishes"
},
"notifLibraryScanCompleteBody": "{count} tracks indexed",
"@notifLibraryScanCompleteBody": {
"description": "Notification body for library scan complete - number of indexed tracks",
"placeholders": {
"count": {
"type": "int"
}
}
},
"notifLibraryScanExcluded": "{count} excluded",
"@notifLibraryScanExcluded": {
"description": "Library scan complete suffix - excluded track count",
"placeholders": {
"count": {
"type": "int"
}
}
},
"notifLibraryScanErrors": "{count} errors",
"@notifLibraryScanErrors": {
"description": "Library scan complete suffix - error count",
"placeholders": {
"count": {
"type": "int"
}
}
},
"notifLibraryScanFailed": "Library scan failed",
"@notifLibraryScanFailed": {
"description": "Notification title when library scan fails"
},
"notifLibraryScanCancelled": "Library scan cancelled",
"@notifLibraryScanCancelled": {
"description": "Notification title when library scan is cancelled by the user"
},
"notifLibraryScanStopped": "Scan stopped before completion.",
"@notifLibraryScanStopped": {
"description": "Notification body when library scan is cancelled"
},
"notifDownloadingUpdate": "Downloading SpotiFLAC v{version}",
"@notifDownloadingUpdate": {
"description": "Notification title while downloading an app update",
"placeholders": {
"version": {
"type": "String"
}
}
},
"notifUpdateProgress": "{received} / {total} MB • {percentage}%",
"@notifUpdateProgress": {
"description": "Notification body showing update download progress",
"placeholders": {
"received": {
"type": "String"
},
"total": {
"type": "String"
},
"percentage": {
"type": "int"
}
}
},
"notifUpdateReady": "Update Ready",
"@notifUpdateReady": {
"description": "Notification title when app update download is complete"
},
"notifUpdateReadyBody": "SpotiFLAC v{version} downloaded. Tap to install.",
"@notifUpdateReadyBody": {
"description": "Notification body when app update is ready to install",
"placeholders": {
"version": {
"type": "String"
}
}
},
"notifUpdateFailed": "Update Failed",
"@notifUpdateFailed": {
"description": "Notification title when app update download fails"
},
"notifUpdateFailedBody": "Could not download update. Try again later.",
"@notifUpdateFailedBody": {
"description": "Notification body when app update download fails"
} }
} }
File diff suppressed because it is too large Load Diff
+1349 -45
View File
File diff suppressed because it is too large Load Diff
+1325 -21
View File
File diff suppressed because it is too large Load Diff
+1279 -48
View File
File diff suppressed because it is too large Load Diff
+1325 -21
View File
File diff suppressed because it is too large Load Diff
+1325 -21
View File
File diff suppressed because it is too large Load Diff
+1325 -21
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1336 -32
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1326 -22
View File
File diff suppressed because it is too large Load Diff
+1326 -22
View File
File diff suppressed because it is too large Load Diff