Compare commits

...
23 Commits
Author SHA1 Message Date
Zarz Eleutherius f8d4351d9e New translations app_en.arb (Korean)
[ci skip]
2026-08-02 05:56:00 +07:00
Zarz Eleutherius fad1c45550 New translations app_en.arb (French)
[ci skip]
2026-08-02 02:54:15 +07:00
Zarz Eleutherius f200cf6e3b New translations app_en.arb (French)
[ci skip]
2026-08-02 01:52:53 +07:00
Zarz Eleutherius d0f7f1b3c4 New translations app_en.arb (Hindi)
[ci skip]
2026-08-02 00:55:08 +07:00
Zarz Eleutherius 2da814d1ee New translations app_en.arb (Chinese Traditional)
[ci skip]
2026-08-02 00:55:07 +07:00
Zarz Eleutherius dd674f6fe3 New translations app_en.arb (Chinese Simplified)
[ci skip]
2026-08-02 00:55:06 +07:00
Zarz Eleutherius 786872bda1 New translations app_en.arb (Ukrainian)
[ci skip]
2026-08-02 00:55:04 +07:00
Zarz Eleutherius cf8774645a New translations app_en.arb (Turkish)
[ci skip]
2026-08-02 00:55:03 +07:00
Zarz Eleutherius b9d55b0231 New translations app_en.arb (Russian)
[ci skip]
2026-08-02 00:55:01 +07:00
Zarz Eleutherius 1a268780ac New translations app_en.arb (Dutch)
[ci skip]
2026-08-02 00:55:00 +07:00
Zarz Eleutherius 67396f3f78 New translations app_en.arb (Japanese)
[ci skip]
2026-08-02 00:54:59 +07:00
Zarz Eleutherius 8b3944f11b New translations app_en.arb (German)
[ci skip]
2026-08-02 00:54:57 +07:00
Zarz Eleutherius 6bfa1cb0d0 New translations app_en.arb (Arabic)
[ci skip]
2026-08-02 00:54:56 +07:00
Zarz Eleutherius f26a285e23 New translations app_en.arb (Spanish)
[ci skip]
2026-08-02 00:54:54 +07:00
Zarz Eleutherius 965b897b57 New translations app_en.arb (French)
[ci skip]
2026-08-02 00:54:53 +07:00
Zarz Eleutherius 30dd4d1317 New translations app_en.arb (Indonesian)
[ci skip]
2026-08-02 00:54:51 +07:00
Zarz Eleutherius c394443d93 New translations app_en.arb (Portuguese)
[ci skip]
2026-08-02 00:54:49 +07:00
Zarz Eleutherius 23255b6418 New translations app_en.arb (Korean)
[ci skip]
2026-08-02 00:54:48 +07:00
Zarz Eleutherius 285f313875 New translations app_en.arb (Korean)
[ci skip]
2026-08-01 20:51:28 +07:00
Zarz Eleutherius c46cc4d68f New translations app_en.arb (Korean)
[ci skip]
2026-08-01 00:33:00 +07:00
Zarz Eleutherius 54463d37f3 New translations app_en.arb (Russian)
[ci skip]
2026-07-30 00:25:43 +07:00
Zarz Eleutherius 0e03681cfc New translations app_en.arb (Russian)
[ci skip]
2026-07-29 23:12:28 +07:00
Zarz Eleutherius 1b4dfa7580 New translations app_en.arb (Spanish)
[ci skip]
2026-07-28 09:13:54 +07:00
15 changed files with 34036 additions and 171 deletions
File diff suppressed because it is too large Load Diff
+260 -11
View File
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "{count} Titel gefunden hinzufügen?",
"dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?",
"csvImportTracks": "{count} Titel aus CSV",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "Export as M3U8",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "Exported {exported} of {total} tracks",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "No downloaded files to export",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "Export failed",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "Open on...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "No platform links found for this track.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "Review duplicates",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "Find tracks stored more than once",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "Duplicates",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "No duplicate tracks found.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "Keep best",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "Always use blur effects",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "Alles löschen",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "Willkommen bei SpotiFLAC!",
"tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Lade Musik von Spotify, Deezer herunter oder jeden unterstützten Link einfügen",
"tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "Wähle Felder aus, die automatisch aus Online-Metadaten ausgefüllt werden sollen",
"editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "Metadata source",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "Find metadata",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "Data from {source}",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "Cover artwork available",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "Apply selected data",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "Abrufen & Ausfüllen",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Default view",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "Last used",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "Kein Download-Verlauf",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "Not detected",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "Pro Kanal Statistik",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "Download cancelled",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "Fehler beim Speichern der Metadaten über FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "CSV-Datei importieren",
"homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "Suchanbieter ändern",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "Cover resolution",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "Stop",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "Download next",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "Move up",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "Move down",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "Fetch from MusicBrainz",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "Updated from MusicBrainz",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "Repeat off",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "Repeat all",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "Repeat one",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "{count} downloads failed while offline",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "Heruntergeladene Datei fehlt",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Add the selected quality to the filename and keep each version in download history",
"downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "Missing ISRC",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "Label fehlt",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Dienststatus",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "Search settings",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "No settings match \"{query}\"",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "Extensions & appearance",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "Content & metadata",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "Downloads & files",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "System",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "About & support",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
+261 -12
View File
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "Se han encontrado pistas {count} en CSV. ¿Añadirlas para descargar la cola?",
"dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?",
"csvImportTracks": "{count} pistas de CSV",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "Export as M3U8",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "Exported {exported} of {total} tracks",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "No downloaded files to export",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "Export failed",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "Open on...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "No platform links found for this track.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "Review duplicates",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "Find tracks stored more than once",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "Duplicates",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "No duplicate tracks found.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "Keep best",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -1154,7 +1227,7 @@
"@updateNewVersionReady": {
"description": "Update subtitle"
},
"updateRequiredTitle": "Update required",
"updateRequiredTitle": "Actualización Necesaria",
"@updateRequiredTitle": {
"description": "Title of the mandatory update dialog shown when the installed version is too old"
},
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "Always use blur effects",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "Eliminar todo",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "¡Bienvenido a SpotiFLAC!",
"tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Descarga música de Spotify, Deezer, o pega cualquier URL soportada",
"tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "Selecciona los campos para rellenar automáticamente con metadatos en línea",
"editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "Metadata source",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "Find metadata",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "Data from {source}",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "Cover artwork available",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "Apply selected data",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "Recuperar y llenar",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Default view",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "Last used",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "No hay historial de descargas",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "Not detected",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "Per-channel Stats",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "Download cancelled",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "Importar CSV",
"homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "Change search provider",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "Cover resolution",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "Detener",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "Download next",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "Move up",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "Move down",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "Fetch from MusicBrainz",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "Updated from MusicBrainz",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "Repeat off",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "Repeat all",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "Repeat one",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "{count} downloads failed while offline",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "Downloaded file missing",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Add the selected quality to the filename and keep each version in download history",
"downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "Missing ISRC",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "Falta etiqueta",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Estado del servicio",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "Search settings",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "No settings match \"{query}\"",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "Extensions & appearance",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "Content & metadata",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "Downloads & files",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "System",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "About & support",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
+260 -11
View File
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "{count} pistes ont été trouvées dans le fichier CSV. Voulez-vous les ajouter à la file d'attente de téléchargement ?",
"dialogImportPlaylistMessage": "{count} titres ont été trouvés dans le fichier de la playlist. Voulez-vous les ajouter à la file d'attente de téléchargement ?",
"csvImportTracks": "{count} pistes issues d'un fichier CSV",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "Exporter au format M3U8",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "{exported} titres exportés sur {total}",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "Aucun fichier téléchargé à exporter",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "L'exportation a échoué",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "Ouvrir sur...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "Aucun lien vers une plateforme n'a été trouvé pour ce titre.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "Vérifier les doublons",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "Rechercher les titres enregistrés plusieurs fois",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "Doublons",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "Aucun titre en double n'a été détecté.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "Garder le meilleur",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "Supprimer {count} copies de moindre qualité de « {trackName} » ?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "Souhaitez-vous supprimer cette copie de « {trackName} » ?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "Utilisez toujours des effets de flou",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "Activer l'effet de flou de la barre de navigation même sur les appareils où cette option est désactivée par défaut. Cela peut nuire aux performances.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "Tout effacer",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "Bienvenue sur SpotiFLAC !",
"tutorialWelcomeTitle": "Bienvenue sur SpotiFLAC Mobile !",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Téléchargez de la musique depuis Spotify ou Deezer, ou collez n'importe quelle URL prise en charge",
"tutorialWelcomeTip1": "Recherchez de la musique ou collez un lien provenant de n'importe quelle source prise en charge par vos extensions installées",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "Sélectionnez les champs à remplir automatiquement à partir des métadonnées en ligne",
"editMetadataAutoFillDesc": "Choisissez une extension de métadonnées, sélectionnez les champs, puis vérifiez les données avant de l'appliquer",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "Source des métadonnées",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "Automatique (priorité au fournisseur)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "Rechercher des métadonnées",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "Données provenant de {source}",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "Illustration de couverture disponible",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "Appliquer les données sélectionnées",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Rempli {count} {count, plural, one {}=1{champ} other{champs}} ont été renseignés à partir de {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "Récupérer & remplir",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Créez une playlist pour organiser vos morceaux",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Affichage par défaut",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "Dernière utilisation",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "Aucun historique de téléchargement",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "Non détecté",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "Statistiques par chaîne",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "Téléchargement annulé",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "Ce téléchargement a été annulé. Veuillez réessayer ou le supprimer de la file d'attente.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "Échec de l'enregistrement des métadonnées via FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "Importer un fichier CSV",
"homeImportCsvTooltip": "Importer une playlist (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "Changer de moteur de recherche",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "Résolution de la couverture",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Définit la longueur maximale de l'image lors de l'enregistrement. L'agrandissement n'apporte pas davantage de détails à l'image.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "L'image de couverture n'a pas pu être redimensionnée. Veuillez essayer une autre taille ou une autre image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "Arrêter",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "Télécharger le suivant",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "Remonter",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "Descendre",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "Récupérer depuis MusicBrainz",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "Mise à jour à partir de MusicBrainz",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "Aucun résultat trouvé sur MusicBrainz",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "Nécessite une balise ISRC",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "Répétition désactivée",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "Tout répéter",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "Répéter une fois",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "{count} téléchargements ont échoué en mode hors ligne",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "Fichier téléchargé manquant",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Ajouter la qualité sélectionnée au nom du fichier et conserver chaque version dans l'historique des téléchargements",
"downloadQualityVariantsDescription": "Conserver toutes les versions de qualité ; n'ajouter la note de qualité au nom de fichier que si ce nom est déjà utilisé",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "ISRC manquant",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "Label manquant",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "BÊTA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "État du service",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Ouvrir le navigateur",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "Paramètres de recherche",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "Aucun paramètre ne correspond à « {query} »",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "Extensions & Apparence",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "Contenu & Métadonnées",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "Téléchargements & Fichiers",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "Système",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "À propos & Assistance",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
File diff suppressed because it is too large Load Diff
+260 -11
View File
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "Ditemukan {count} lagu di CSV. Tambahkan ke antrian unduhan?",
"dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?",
"csvImportTracks": "{count} trek dari CSV",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "Export as M3U8",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "Exported {exported} of {total} tracks",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "No downloaded files to export",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "Export failed",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "Open on...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "No platform links found for this track.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "Review duplicates",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "Find tracks stored more than once",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "Duplicates",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "No duplicate tracks found.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "Keep best",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "Always use blur effects",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "Hapus Semua",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "Selamat Datang di SpotiFLAC!",
"tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Unduh musik dari Spotify, Deezer, atau tempel URL yang didukung",
"tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "Select fields to fill automatically from online metadata",
"editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "Metadata source",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "Find metadata",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "Data from {source}",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "Cover artwork available",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "Apply selected data",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "Fetch & Fill",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Default view",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "Last used",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "No download history",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "Not detected",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "Per-channel Stats",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "Download cancelled",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "Import CSV",
"homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "Change search provider",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "Cover resolution",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "Stop",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "Download next",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "Move up",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "Move down",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "Fetch from MusicBrainz",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "Updated from MusicBrainz",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "Repeat off",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "Repeat all",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "Repeat one",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "{count} downloads failed while offline",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "Downloaded file missing",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Add the selected quality to the filename and keep each version in download history",
"downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "Missing ISRC",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "Missing label",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "Search settings",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "No settings match \"{query}\"",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "Extensions & appearance",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "Content & metadata",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "Downloads & files",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "System",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "About & support",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
+260 -11
View File
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "Found {count} tracks in CSV. Add them to download queue?",
"dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?",
"csvImportTracks": "{count} tracks from CSV",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "Export as M3U8",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "Exported {exported} of {total} tracks",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "No downloaded files to export",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "Export failed",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "Open on...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "No platform links found for this track.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "Review duplicates",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "Find tracks stored more than once",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "Duplicates",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "No duplicate tracks found.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "Keep best",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "Always use blur effects",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "すべて消去",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "SpotiFLAC へようこそ!",
"tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Download music from Spotify, Deezer, or paste any supported URL",
"tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "Select fields to fill automatically from online metadata",
"editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "Metadata source",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "Find metadata",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "Data from {source}",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "Cover artwork available",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "Apply selected data",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "Fetch & Fill",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Default view",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "Last used",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "No download history",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "Not detected",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "Per-channel Stats",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "Download cancelled",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "Import CSV",
"homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "Change search provider",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "Cover resolution",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "Stop",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "Download next",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "Move up",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "Move down",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "Fetch from MusicBrainz",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "Updated from MusicBrainz",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "Repeat off",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "Repeat all",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "Repeat one",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "{count} downloads failed while offline",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "Downloaded file missing",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Add the selected quality to the filename and keep each version in download history",
"downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "Missing ISRC",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "Missing label",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "Search settings",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "No settings match \"{query}\"",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "Extensions & appearance",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "Content & metadata",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "Downloads & files",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "System",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "About & support",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
+265 -16
View File
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "CSV 파일에서 {count} 개의 트랙을 찾았습니다. 다운로드 목록에 추가하시겠습니까?",
"dialogImportPlaylistMessage": "{count}개의 트랙이 재생목록 파일에서 발견되었습니다. 다운로드 대기열에 추가하시겠습니까?",
"csvImportTracks": "CSV 파일의 트랙: {count}",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "M3U8로 추출",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "{total}개의 트랙 중 {exported}개 추출됨",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "추출할 다운로드된 파일 엊ㅅ음",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "추출 실패",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "다른 곳에서 열기...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "이 트랙의 플랫폼 링크를 찾을 수 없음.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "중복된 트랙 보기",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "중복 저장된 트랙 찾기",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "중복",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "중복된 트랙이 없습니다.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "최고 음질 선택",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "\"{trackName}\"의 {count}개의 저음질 복사본을 삭제하시겠습니까?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "\"{trackName}\"의 복사본을 삭제하시겠습니까?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "항상 블러 효과 사용",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "기본적으로 비활성화된 기기에서도 하단 바의 블러 효과를 활성화합니다.\n성능에 영향을 줄 수도 있습니다.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "모두 지우기",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2145,7 +2226,7 @@
"@downloadedAlbumTapToSelect": {
"description": "Selection hint"
},
"downloadedAlbumDeleteCount": "{count} {count, plural, =1{트랙} other{트랙}} 삭제",
"downloadedAlbumDeleteCount": "{count} 개의 {count, plural, =1{트랙} other{트랙}} 삭제",
"@downloadedAlbumDeleteCount": {
"description": "Delete button text with count",
"placeholders": {
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "SpotiFLAC에 오신 것을 환영합니다!",
"tutorialWelcomeTitle": "SpotiFLAC Mobile에 어서오세요!",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Spotify, Deezer 또는 지원URL에서 음악을 다운로드할 수 있습니다",
"tutorialWelcomeTip1": "음악을 검색하거나, 설치된 확장 기능이 지원출처의 링크를 붙여넣기",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -3510,7 +3591,7 @@
"@collectionPlaylistRemoveCover": {
"description": "Bottom sheet action to remove custom cover image from a playlist"
},
"selectionShareCount": "{count} {count, plural, =1{트랙} other{트랙}} 공유",
"selectionShareCount": "{count} 개의 {count, plural, =1{트랙} other{트랙}} 공유",
"@selectionShareCount": {
"description": "Share button text with count in selection mode",
"placeholders": {
@@ -3523,7 +3604,7 @@
"@selectionShareNoFiles": {
"description": "Snackbar when no selected files exist on disk"
},
"selectionConvertCount": "{count} {count, plural, =1{트랙} other{트랙}} 변환",
"selectionConvertCount": "{count} 개의 {count, plural, =1{트랙} other{트랙}} 변환",
"@selectionConvertCount": {
"description": "Convert button text with count in selection mode",
"placeholders": {
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "온라인 메타데이터에서 자동으로 채워질 필드를 선택하세요",
"editMetadataAutoFillDesc": "메타데이터 확장 기능을 선택하고, 필드를 지정한 다음, 적용하기 전에 해당 데이터를 확인",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "메타데이터 출처",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "자동 (제공자 우선순위)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "메타데이터 찾기",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "{source}의 데이터",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "커버 아트워크 이용 가능",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "선택된 데이터 적용하기",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "가져오기 & 채우기",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Default view",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "마지막으로 사용됨",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "다운로드 기록이 없음",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "감지되지 않음",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "채널별 통계",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "다운로드 취소됨",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "이 다운로드는 취소되었습니다. 다시 시도하거나, 대기열에서 삭제하세요.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "FFmpeg를 통해 메타데이터 저장 실패",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "CSV 가져오기",
"homeImportCsvTooltip": "재생목록 가져오기 (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "검색 제공자 변경",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "커버 해상도",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "중지",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "다음으로 다운로드",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "위로 이동",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "아래로 이동",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "MusicBrainz에서 가져옴",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "MusicBrainz에서 업데이트됨",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "MusicBrainZ에서 발견되지 않음",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "ISRC 태그 필요",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "반복 끄기",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "전체 반복",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "한 곡 반복",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "오프라인 중에 {count}개의 다운로드 실패",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "다운로드된 파일이 없음",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "선택된 음질을 파일 이름에 추가하고, 각 버전을 다운로드 기록에 유지합니다",
"downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "ISRC 없음",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "레이블 누락",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5249,7 +5469,7 @@
}
}
},
"selectionDeleteTracksCount": "{count} {count, plural, =1{트랙} other{트랙}} 삭제",
"selectionDeleteTracksCount": "{count} 개의 {count, plural, =1{트랙} other{트랙}} 삭제",
"@selectionDeleteTracksCount": {
"description": "Button label for deleting selected tracks",
"placeholders": {
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "베타",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "서비스 상태",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6003,7 +6219,7 @@
"@extensionVerificationHelpMessageManual": {
"description": "Dialog message when automatic browser launch for verification fails"
},
"extensionVerificationHelpMessageWaiting": "브라우저가 열리지 않거나 인증을 완료한 후에도 SpotiFLAC Mobile로 돌아지 않다면, 아래 링크를 다시 열거나 직접 복사하세요",
"extensionVerificationHelpMessageWaiting": "브라우저가 열리지 않거나 인증을 완료한 후에도 SpotiFLAC Mobile로 돌아지 않다면, 아래 링크를 다시 열거나 직접 복사하세요",
"@extensionVerificationHelpMessageWaiting": {
"description": "Dialog message when verification may need manual browser help"
},
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "브라우저 열기",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "설정 찾기",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "\"{query}\"과 일치하는 설정 없음",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "확장 프로그램 & 모습",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "콘텐츠 & 메타데이터",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "다운로드 & 파일",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "시스템",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "About & support",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
File diff suppressed because it is too large Load Diff
+260 -11
View File
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "{count} Faixas encontradas em CSV. Adicioná-las à lista de downloads?",
"dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?",
"csvImportTracks": "{count} faixas do CSV",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "Export as M3U8",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "Exported {exported} of {total} tracks",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "No downloaded files to export",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "Export failed",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "Open on...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "No platform links found for this track.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "Review duplicates",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "Find tracks stored more than once",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "Duplicates",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "No duplicate tracks found.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "Keep best",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "Always use blur effects",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "Limpar Tudo",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "Welcome to SpotiFLAC!",
"tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Download music from Spotify, Deezer, or paste any supported URL",
"tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "Select fields to fill automatically from online metadata",
"editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "Metadata source",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "Find metadata",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "Data from {source}",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "Cover artwork available",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "Apply selected data",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "Fetch & Fill",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Default view",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "Last used",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "No download history",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "Not detected",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "Per-channel Stats",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "Download cancelled",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "Import CSV",
"homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "Change search provider",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "Cover resolution",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "Stop",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "Download next",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "Move up",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "Move down",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "Fetch from MusicBrainz",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "Updated from MusicBrainz",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "Repeat off",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "Repeat all",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "Repeat one",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "{count} downloads failed while offline",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "Downloaded file missing",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Add the selected quality to the filename and keep each version in download history",
"downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "Missing ISRC",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "Missing label",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "Search settings",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "No settings match \"{query}\"",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "Extensions & appearance",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "Content & metadata",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "Downloads & files",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "System",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "About & support",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
+315 -66
View File
@@ -29,11 +29,11 @@
"@homeSubtitle": {
"description": "Subtitle shown below search box"
},
"homeEmptyTitle": "No search providers yet",
"homeEmptyTitle": "Нет поставщиков поиска",
"@homeEmptyTitle": {
"description": "Title shown on home when no providers are available yet"
},
"homeEmptySubtitle": "Install an extension to continue.",
"homeEmptySubtitle": "Установите расширение, чтобы продолжить.",
"@homeEmptySubtitle": {
"description": "Subtitle shown on home when no providers are available yet"
},
@@ -162,7 +162,7 @@
"@optionsDefaultSearchTab": {
"description": "Title for the preferred default search tab setting"
},
"optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.",
"optionsDefaultSearchTabSubtitle": "Выберите, какая вкладка открывает новые результаты поиска.",
"@optionsDefaultSearchTabSubtitle": {
"description": "Subtitle for the preferred default search tab setting"
},
@@ -194,27 +194,27 @@
"@optionsReplayGain": {
"description": "Title for ReplayGain setting toggle"
},
"optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)",
"optionsReplayGainSubtitleOn": "Сканировать громкость и вставить теги ReplayGain (EBU R128)",
"@optionsReplayGainSubtitleOn": {
"description": "Subtitle when ReplayGain is enabled"
},
"optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags",
"optionsReplayGainSubtitleOff": "Выключено: нет тегов нормализации громкости",
"@optionsReplayGainSubtitleOff": {
"description": "Subtitle when ReplayGain is disabled"
},
"trackReplayGain": "Rescan ReplayGain",
"trackReplayGain": "Пересканировать ReplayGain",
"@trackReplayGain": {
"description": "Three-dot menu option to scan loudness and write ReplayGain tags"
},
"trackReplayGainScanning": "Analyzing loudness...",
"trackReplayGainScanning": "Анализ громкости...",
"@trackReplayGainScanning": {
"description": "Snackbar/progress message while scanning ReplayGain for a single track"
},
"trackReplayGainSuccess": "ReplayGain tags added",
"trackReplayGainSuccess": "Добавлены теги ReplayGain",
"@trackReplayGainSuccess": {
"description": "Snackbar message after ReplayGain tags written for a single track"
},
"trackReplayGainFailed": "Failed to add ReplayGain tags",
"trackReplayGainFailed": "Не удалось добавить теги ReplayGain",
"@trackReplayGainFailed": {
"description": "Snackbar message when ReplayGain scan/write fails"
},
@@ -227,11 +227,11 @@
}
}
},
"replayGainBatchConfirmTitle": "Add ReplayGain",
"replayGainBatchConfirmTitle": "Добавить ReplayGain",
"@replayGainBatchConfirmTitle": {
"description": "Title of the batch ReplayGain confirmation dialog"
},
"replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?",
"replayGainBatchConfirmMessage": "Проанализировать громкость и записать ReplayGain теги на {count} трек(-а)?",
"@replayGainBatchConfirmMessage": {
"description": "Message of the batch ReplayGain confirmation dialog",
"placeholders": {
@@ -240,11 +240,11 @@
}
}
},
"replayGainBatchAnalyzing": "Analyzing ReplayGain...",
"replayGainBatchAnalyzing": "Анализ ReplayGain...",
"@replayGainBatchAnalyzing": {
"description": "Progress dialog title while batch scanning ReplayGain"
},
"replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks",
"replayGainBatchSuccess": "ReplayGain добавлен к {success} треков {total}",
"@replayGainBatchSuccess": {
"description": "Snackbar after batch ReplayGain completes",
"placeholders": {
@@ -256,11 +256,11 @@
}
}
},
"optionsArtistTagMode": "Artist Tag Mode",
"optionsArtistTagMode": "Режим тега исполнителя",
"@optionsArtistTagMode": {
"description": "Setting title for how artist metadata is written into files"
},
"optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.",
"optionsArtistTagModeDescription": "Выберите, как несколько исполнителей записываются встроенные теги.",
"@optionsArtistTagModeDescription": {
"description": "Bottom-sheet description for artist tag mode setting"
},
@@ -272,7 +272,7 @@
"@optionsArtistTagModeJoinedSubtitle": {
"description": "Subtitle for joined artist tag mode"
},
"optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus",
"optionsArtistTagModeSplitVorbis": "Разделить теги для FLAC/Opus",
"@optionsArtistTagModeSplitVorbis": {
"description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats"
},
@@ -284,7 +284,7 @@
"@optionsExtensionStore": {
"description": "Show/hide repo tab"
},
"optionsExtensionStoreSubtitle": "Show Repo tab in navigation",
"optionsExtensionStoreSubtitle": "Показывать вкладку репозитория в навигации",
"@optionsExtensionStoreSubtitle": {
"description": "Subtitle for extension repo toggle"
},
@@ -413,7 +413,7 @@
"@aboutPCSource": {
"description": "Link to PC GitHub repo"
},
"aboutKeepAndroidOpen": "Keep Android Open",
"aboutKeepAndroidOpen": "Сохранить Android открытым",
"@aboutKeepAndroidOpen": {
"description": "Link to Keep Android Open campaign website"
},
@@ -473,7 +473,7 @@
"@aboutSjdonadoDesc": {
"description": "Credit description for sjdonado"
},
"aboutAppDescription": "Search music metadata, manage extensions, and organize your library.",
"aboutAppDescription": "Ищите метаданных музыки, управляйте расширениями и организуйте свою библиотеку.",
"@aboutAppDescription": {
"description": "App description in header card"
},
@@ -666,15 +666,15 @@
"@setupAllowAccessToManageFiles": {
"description": "Instruction for file access permission"
},
"setupLanguageTitle": "Choose Language",
"setupLanguageTitle": "Выберите язык",
"@setupLanguageTitle": {
"description": "Title for the language selection step in setup"
},
"setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.",
"setupLanguageDescription": "Выберите язык для приложения. Вы можете изменить его позже в настройках.",
"@setupLanguageDescription": {
"description": "Description for the language selection step in setup"
},
"setupLanguageSystemDefault": "System Default",
"setupLanguageSystemDefault": "Системные настройки",
"@setupLanguageSystemDefault": {
"description": "Option to use the system language"
},
@@ -710,15 +710,15 @@
"@dialogDownload": {
"description": "Confirm button in Download All dialog"
},
"previewPlay": "Play preview",
"previewPlay": "Предпросмотр проигрывания",
"@previewPlay": {
"description": "Tooltip for the button that plays a short track preview snippet"
},
"previewStop": "Stop preview",
"previewStop": "Остановить предпросмотр",
"@previewStop": {
"description": "Tooltip for the button that stops the playing track preview snippet"
},
"previewUnavailable": "Preview unavailable",
"previewUnavailable": "Предпросмотр недоступен",
"@previewUnavailable": {
"description": "Snackbar shown when a track preview snippet cannot be played"
},
@@ -779,7 +779,7 @@
"@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": "Удалить {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}} из истории?\n\nЭто также удалит файлы из хранилища.",
"@dialogDeleteSelectedMessage": {
"description": "Dialog message - delete selected tracks",
"placeholders": {
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "Найдено {count} треков в CSV. Добавить их в очередь загрузки?",
"dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?",
"csvImportTracks": "{count} трек(-ов) из CSV",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "Export as M3U8",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "Exported {exported} of {total} tracks",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "No downloaded files to export",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "Export failed",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "Open on...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "No platform links found for this track.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "Review duplicates",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "Find tracks stored more than once",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "Duplicates",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "No duplicate tracks found.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "Keep best",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -850,7 +923,7 @@
"@snackbarHistoryCleared": {
"description": "Snackbar - history deleted"
},
"snackbarDeletedTracks": "Deleted {count} {count, plural, =1{track} other{tracks}}",
"snackbarDeletedTracks": "Удалено {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}",
"@snackbarDeletedTracks": {
"description": "Snackbar - tracks deleted",
"placeholders": {
@@ -936,7 +1009,7 @@
"@errorNoTracksFound": {
"description": "Error - search returned no results"
},
"searchEmptyResultSubtitle": "Try another keyword",
"searchEmptyResultSubtitle": "Попробуйте другое ключевое слово",
"@searchEmptyResultSubtitle": {
"description": "Subtitle shown under the empty search result state on the home screen"
},
@@ -1154,11 +1227,11 @@
"@updateNewVersionReady": {
"description": "Update subtitle"
},
"updateRequiredTitle": "Update required",
"updateRequiredTitle": "Требуется обновление",
"@updateRequiredTitle": {
"description": "Title of the mandatory update dialog shown when the installed version is too old"
},
"updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.",
"updateRequiredNotice": "Эта версия {count} больше не поддерживается. Обновите, чтобы продолжить использовать приложение.",
"@updateRequiredNotice": {
"description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed",
"placeholders": {
@@ -1207,7 +1280,7 @@
"@providerPriorityFallbackExtensionsDescription": {
"description": "Section description for extension fallback selection"
},
"providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.",
"providerPriorityFallbackExtensionsHint": "Здесь перечислены только включенные расширения с возможностями поставщика загрузок.",
"@providerPriorityFallbackExtensionsHint": {
"description": "Hint below the extension fallback selection list"
},
@@ -1397,7 +1470,7 @@
"@settingsAppearanceSubtitle": {
"description": "Appearance settings description"
},
"settingsDownloadSubtitle": "Service, quality, fallback",
"settingsDownloadSubtitle": "Сервис, качество, откат",
"@settingsDownloadSubtitle": {
"description": "Download settings description"
},
@@ -1426,7 +1499,7 @@
}
}
},
"tracksCount": "{count, plural, =1{1 track} other{{count} tracks}}",
"tracksCount": "{count, plural, one {{count} трек} few {{count} трека} many {{count} треков} =1 {1 трек} other {{count} треков}}",
"@tracksCount": {
"description": "Track count display",
"placeholders": {
@@ -1527,7 +1600,7 @@
"@trackCopyLyrics": {
"description": "Action - copy lyrics to clipboard"
},
"trackLyricsSource": "Source: {source}",
"trackLyricsSource": "Источник: {source}",
"@trackLyricsSource": {
"description": "Label showing the lyrics source/provider",
"placeholders": {
@@ -1540,11 +1613,11 @@
"@trackLyricsNotAvailable": {
"description": "Message when lyrics not found"
},
"trackLyricsNotInFile": "No lyrics found in this file",
"trackLyricsNotInFile": "В этом файле не найдено текстов песен",
"@trackLyricsNotInFile": {
"description": "Message when no embedded lyrics in audio file"
},
"trackFetchOnlineLyrics": "Fetch from Online",
"trackFetchOnlineLyrics": "Поиск в сети",
"@trackFetchOnlineLyrics": {
"description": "Action - fetch lyrics from online providers"
},
@@ -1643,15 +1716,15 @@
"@storeClearFilters": {
"description": "Button to clear all filters"
},
"storeAddRepoTitle": "Add Extension Repository",
"storeAddRepoTitle": "Добавить репозиторий расширения",
"@storeAddRepoTitle": {
"description": "Store setup screen - heading when no repo is configured"
},
"storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.",
"storeAddRepoDescription": "Введите URL-адрес репозитория GitHub, который содержит файл registry.json для просмотра и установки расширений.",
"@storeAddRepoDescription": {
"description": "Store setup screen - explanatory text"
},
"storeRepoUrlLabel": "Repository URL",
"storeRepoUrlLabel": "Ссылка на репозиторий",
"@storeRepoUrlLabel": {
"description": "Label for the repository URL input field"
},
@@ -1667,7 +1740,7 @@
"@storeChangeRepoTooltip": {
"description": "Tooltip for the change-repository icon button in the app bar"
},
"storeRepoDialogTitle": "Extension Repository",
"storeRepoDialogTitle": "Репозиторий расширения",
"@storeRepoDialogTitle": {
"description": "Title of the change/remove repository dialog"
},
@@ -1675,7 +1748,7 @@
"@storeRepoDialogCurrent": {
"description": "Label shown above the current repository URL in the dialog"
},
"storeNewRepoUrlLabel": "New Repository URL",
"storeNewRepoUrlLabel": "Новый URL репозитория",
"@storeNewRepoUrlLabel": {
"description": "Label for the new repository URL field inside the dialog"
},
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "Always use blur effects",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "Очистить всё",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "Добро пожаловать в SpotiFLAC!",
"tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Скачивайте музыку из Spotify, Deezer, или вставьте любой поддерживаемый URL",
"tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -3167,7 +3248,7 @@
}
}
},
"trackConvertConfirmMessageLossless": "Convert from {sourceFormat} to {targetFormat}? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.",
"trackConvertConfirmMessageLossless": "Конвертировать {sourceFormat} в {targetFormat}? (Lossless — Без потери качества)\n\nОригинальные файлы будут удалены после конвертации.",
"@trackConvertConfirmMessageLossless": {
"description": "Confirmation dialog message for lossless-to-lossless conversion",
"placeholders": {
@@ -3308,7 +3389,7 @@
"@collectionLoved": {
"description": "Custom folder for favorite tracks"
},
"collectionFavoriteArtists": "Favorite Artists",
"collectionFavoriteArtists": "Избранный исполнитель",
"@collectionFavoriteArtists": {
"description": "Custom folder for favorite artists"
},
@@ -3400,11 +3481,11 @@
"@collectionLovedEmptySubtitle": {
"description": "Loved empty state subtitle"
},
"collectionFavoriteArtistsEmptyTitle": "No favorite artists yet",
"collectionFavoriteArtistsEmptyTitle": "Нет избранных исполнителей",
"@collectionFavoriteArtistsEmptyTitle": {
"description": "Favorite artists empty state title"
},
"collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here",
"collectionFavoriteArtistsEmptySubtitle": "Нажмите на сердце на странице исполнителя, чтобы сохранить его здесь",
"@collectionFavoriteArtistsEmptySubtitle": {
"description": "Favorite artists empty state subtitle"
},
@@ -3460,7 +3541,7 @@
}
}
},
"collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists",
"collectionAddedToFavoriteArtists": "\"{artistName}\" добавлен в избранные исполнители",
"@collectionAddedToFavoriteArtists": {
"description": "Snackbar after adding artist to favorite artists",
"placeholders": {
@@ -3469,7 +3550,7 @@
}
}
},
"collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists",
"collectionRemovedFromFavoriteArtists": "\"{artistName}\" удалено из избранных исполнителей",
"@collectionRemovedFromFavoriteArtists": {
"description": "Snackbar after removing artist from favorite artists",
"placeholders": {
@@ -3494,11 +3575,11 @@
"@trackOptionRemoveFromWishlist": {
"description": "Bottom sheet action label - remove track from wishlist"
},
"artistOptionAddToFavorites": "Add to Favorite Artists",
"artistOptionAddToFavorites": "Добавить в избранные исполнители",
"@artistOptionAddToFavorites": {
"description": "Action label - add artist to favorite artists"
},
"artistOptionRemoveFromFavorites": "Remove from Favorite Artists",
"artistOptionRemoveFromFavorites": "Удалить из избранных исполнителей",
"@artistOptionRemoveFromFavorites": {
"description": "Action label - remove artist from favorite artists"
},
@@ -3510,7 +3591,7 @@
"@collectionPlaylistRemoveCover": {
"description": "Bottom sheet action to remove custom cover image from a playlist"
},
"selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}",
"selectionShareCount": "Отправить {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}",
"@selectionShareCount": {
"description": "Share button text with count in selection mode",
"placeholders": {
@@ -3523,7 +3604,7 @@
"@selectionShareNoFiles": {
"description": "Snackbar when no selected files exist on disk"
},
"selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}",
"selectionConvertCount": "Конвертировать {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}",
"@selectionConvertCount": {
"description": "Convert button text with count in selection mode",
"placeholders": {
@@ -3567,7 +3648,7 @@
}
}
},
"selectionBatchConvertConfirmKeepOriginal": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}?\n\nOriginal files will be kept and converted files will be added as separate library entries.",
"selectionBatchConvertConfirmKeepOriginal": "Конвертировать {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}} в {format}?\n\nОригинальные файлы будут храниться и преобразовываться как отдельные элементы библиотеки.",
"@selectionBatchConvertConfirmKeepOriginal": {
"description": "Batch conversion confirmation when source files will be preserved",
"placeholders": {
@@ -3641,11 +3722,11 @@
}
}
},
"lyricsProvidersAtLeastOne": "At least one provider must remain enabled",
"lyricsProvidersAtLeastOne": "По крайней мере один провайдер должен оставаться включенным",
"@lyricsProvidersAtLeastOne": {
"description": "Snackbar when user tries to disable the last enabled provider"
},
"lyricsProvidersSaved": "Lyrics provider priority saved",
"lyricsProvidersSaved": "Приоритетный провайдер текстов песен сохранен",
"@lyricsProvidersSaved": {
"description": "Snackbar after saving lyrics provider priority"
},
@@ -3661,7 +3742,7 @@
"@lyricsProviderNeteaseDesc": {
"description": "Description for Netease provider"
},
"lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)",
"lyricsProviderMusixmatchDesc": "Крупнейшая база данных текстов песен (мультиязычная)",
"@lyricsProviderMusixmatchDesc": {
"description": "Description for Musixmatch provider"
},
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "Select fields to fill automatically from online metadata",
"editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "Metadata source",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "Find metadata",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "Data from {source}",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "Cover artwork available",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "Apply selected data",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "Получить и заполнить",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Default view",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "Last used",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "Нет истории скачиваний",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "Not detected",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "Per-channel Stats",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "Download cancelled",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "Не удалось сохранить метаданные через FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "Import CSV",
"homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "Change search provider",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "Cover resolution",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "Stop",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "Download next",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "Move up",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "Move down",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "Fetch from MusicBrainz",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "Updated from MusicBrainz",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "Repeat off",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "Repeat all",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "Repeat one",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "{count} downloads failed while offline",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "Downloaded file missing",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Add the selected quality to the filename and keep each version in download history",
"downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "Missing ISRC",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "Missing label",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "Search settings",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "No settings match \"{query}\"",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "Extensions & appearance",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "Content & metadata",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "Downloads & files",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "System",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "About & support",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
+260 -11
View File
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "CSV'de {count} şarkı bulundu. İndirme kuyruğuna ekle?",
"dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?",
"csvImportTracks": "CSV'den {count} şarkı",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "Export as M3U8",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "Exported {exported} of {total} tracks",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "No downloaded files to export",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "Export failed",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "Open on...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "No platform links found for this track.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "Review duplicates",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "Find tracks stored more than once",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "Duplicates",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "No duplicate tracks found.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "Keep best",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "Always use blur effects",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "Tümünü Temizle",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "SpotiFLAC'e hoş geldiniz!",
"tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Spotify, Deezer'dan müzik indirin veya desteklenen herhangi bir URL'yi yapıştırın",
"tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "Select fields to fill automatically from online metadata",
"editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "Metadata source",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "Find metadata",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "Data from {source}",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "Cover artwork available",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "Apply selected data",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "Fetch & Fill",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Default view",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "Last used",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "No download history",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "Not detected",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "Per-channel Stats",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "Download cancelled",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "Import CSV",
"homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "Change search provider",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "Cover resolution",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "Stop",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "Download next",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "Move up",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "Move down",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "Fetch from MusicBrainz",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "Updated from MusicBrainz",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "Repeat off",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "Repeat all",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "Repeat one",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "{count} downloads failed while offline",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "Downloaded file missing",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Add the selected quality to the filename and keep each version in download history",
"downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "Missing ISRC",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "Missing label",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "Search settings",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "No settings match \"{query}\"",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "Extensions & appearance",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "Content & metadata",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "Downloads & files",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "System",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "About & support",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
+260 -11
View File
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist"
},
"dialogImportPlaylistMessage": "Знайдено {count} треків у CSV. Додати їх до черги завантаження?",
"dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?",
"csvImportTracks": "{count} треків з CSV",
"@csvImportTracks": {
"description": "Label shown in quality picker for CSV import",
@@ -802,6 +802,79 @@
}
}
},
"collectionExportM3u": "Export as M3U8",
"@collectionExportM3u": {
"description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file"
},
"collectionExportM3uDone": "Exported {exported} of {total} tracks",
"@collectionExportM3uDone": {
"description": "Snackbar after M3U8 export; tracks without a local file are not exported",
"placeholders": {
"exported": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"collectionExportM3uNone": "No downloaded files to export",
"@collectionExportM3uNone": {
"description": "Snackbar when an M3U8 export finds no local files"
},
"collectionExportM3uFailed": "Export failed",
"@collectionExportM3uFailed": {
"description": "Snackbar when writing or sharing the M3U8 export fails"
},
"trackOpenOn": "Open on...",
"@trackOpenOn": {
"description": "Track option and sheet title listing streaming platforms where the track can be opened"
},
"trackOpenOnNoLinks": "No platform links found for this track.",
"@trackOpenOnNoLinks": {
"description": "Shown in the Open on sheet when song.link returns no links"
},
"libraryReviewDuplicates": "Review duplicates",
"@libraryReviewDuplicates": {
"description": "Library settings row opening the duplicate review sheet"
},
"libraryReviewDuplicatesSubtitle": "Find tracks stored more than once",
"@libraryReviewDuplicatesSubtitle": {
"description": "Subtitle for the duplicate review settings row"
},
"duplicatesTitle": "Duplicates",
"@duplicatesTitle": {
"description": "Title of the duplicate review sheet"
},
"duplicatesEmpty": "No duplicate tracks found.",
"@duplicatesEmpty": {
"description": "Shown when the duplicate review sheet finds nothing"
},
"duplicatesKeepBest": "Keep best",
"@duplicatesKeepBest": {
"description": "Button that deletes all but the highest-quality copy in a duplicate group"
},
"duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?",
"@duplicatesKeepBestMessage": {
"description": "Confirmation message for the keep-best action",
"placeholders": {
"count": {
"type": "int"
},
"trackName": {
"type": "String"
}
}
},
"duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?",
"@duplicatesDeleteCopyMessage": {
"description": "Confirmation message for deleting one duplicate copy",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation",
"placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"appearanceForceBlur": "Always use blur effects",
"@appearanceForceBlur": {
"description": "Toggle that forces backdrop blur on even when the device profile disabled it"
},
"appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.",
"@appearanceForceBlurSubtitle": {
"description": "Subtitle for the force-blur toggle"
},
"queueClearAll": "Усі",
"@queueClearAll": {
"description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
}
}
},
"tutorialWelcomeTitle": "Ласкаво просимо до SpotiFLAC!",
"tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title"
},
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description"
},
"tutorialWelcomeTip1": "Завантажуйте музику зі Spotify, Deezer або вставляйте будь-яку підтримувану URL-адресу",
"tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1"
},
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
},
"editMetadataAutoFillDesc": "Виберіть поля для автоматичного заповнення з онлайн-метаданих",
"editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying",
"@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section"
},
"editMetadataAutoFillSource": "Metadata source",
"@editMetadataAutoFillSource": {
"description": "Label for the metadata extension selector in online auto-fill"
},
"editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)",
"@editMetadataAutoFillSourceAutomatic": {
"description": "Automatic source option that follows configured metadata provider priority"
},
"editMetadataAutoFillFind": "Find metadata",
"@editMetadataAutoFillFind": {
"description": "Button label for finding an online metadata candidate"
},
"editMetadataAutoFillPreview": "Data from {source}",
"@editMetadataAutoFillPreview": {
"description": "Title for the online metadata preview",
"placeholders": {
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillCoverAvailable": "Cover artwork available",
"@editMetadataAutoFillCoverAvailable": {
"description": "Preview value when the selected metadata source provides cover artwork"
},
"editMetadataAutoFillApply": "Apply selected data",
"@editMetadataAutoFillApply": {
"description": "Button label for applying the previewed metadata"
},
"editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}",
"@editMetadataAutoFillDoneFromSource": {
"description": "Snackbar confirming fields applied from a selected metadata source",
"placeholders": {
"count": {
"type": "int"
},
"source": {
"type": "String"
}
}
},
"editMetadataAutoFillFetch": "Отримання та заповнення",
"@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads"
},
"queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}",
"@queuePlaylistCount": {
"description": "Playlist count label with plural support",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks",
"@queueEmptyPlaylistsSubtitle": {
"description": "Empty state subtitle for the playlists library view"
},
"libraryDefaultView": "Default view",
"@libraryDefaultView": {
"description": "Setting title - which library view opens when switching to the Library tab"
},
"libraryDefaultViewLastUsed": "Last used",
"@libraryDefaultViewLastUsed": {
"description": "Default view option - keep the last used library view"
},
"queueEmptyHistory": "Немає історії завантажень",
"@queueEmptyHistory": {
"description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label"
},
"audioAnalysisCutoffNotDetected": "Not detected",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "Per-channel Stats",
"@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)"
},
"queueCancelledTitle": "Download cancelled",
"@queueCancelledTitle": {
"description": "Dialog title when opening a cancelled queue item"
},
"queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.",
"@queueCancelledMessage": {
"description": "Dialog body when opening a cancelled queue item"
},
"metadataSaveFailedFfmpeg": "Не вдалося зберегти метадані через FFmpeg",
"@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
}
}
},
"homeImportCsvTooltip": "Import CSV",
"homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": {
"description": "Tooltip for importing a CSV file into Home search"
"description": "Tooltip for importing a CSV or M3U playlist file into Home search"
},
"homeChangeSearchProviderTooltip": "Change search provider",
"@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet"
},
"trackCoverResolution": "Cover resolution",
"@trackCoverResolution": {
"description": "Label for selecting the embedded cover art resolution"
},
"trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.",
"@trackCoverResolutionHint": {
"description": "Explanation below the embedded cover art resolution selector"
},
"trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.",
"@trackCoverResizeFailed": {
"description": "Error shown when resizing cover art before saving metadata fails"
},
"actionStop": "Stop",
"@actionStop": {
"description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing"
},
"queueDownloadNext": "Download next",
"@queueDownloadNext": {
"description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it"
},
"queueMoveUp": "Move up",
"@queueMoveUp": {
"description": "Queue item menu action - move the queued item one position earlier"
},
"queueMoveDown": "Move down",
"@queueMoveDown": {
"description": "Queue item menu action - move the queued item one position later"
},
"editMetadataMusicBrainzButton": "Fetch from MusicBrainz",
"@editMetadataMusicBrainzButton": {
"description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC"
},
"editMetadataMusicBrainzFilled": "Updated from MusicBrainz",
"@editMetadataMusicBrainzFilled": {
"description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields"
},
"editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz",
"@editMetadataMusicBrainzNothing": {
"description": "Snackbar when the MusicBrainz lookup returns no data"
},
"editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag",
"@editMetadataMusicBrainzNeedsIsrc": {
"description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC"
},
"nowPlayingRepeatOff": "Repeat off",
"@nowPlayingRepeatOff": {
"description": "Repeat toggle tooltip when repeat is disabled"
},
"nowPlayingRepeatAll": "Repeat all",
"@nowPlayingRepeatAll": {
"description": "Repeat toggle tooltip when the whole queue repeats"
},
"nowPlayingRepeatOne": "Repeat one",
"@nowPlayingRepeatOne": {
"description": "Repeat toggle tooltip when the current track repeats"
},
"queueNetworkFailedOffline": "{count} downloads failed while offline",
"@queueNetworkFailedOffline": {
"description": "Snackbar shown when connectivity returns and network-failed downloads can be retried",
"placeholders": {
"count": {
"type": "int"
}
}
},
"queueDownloadedFileMissing": "Downloaded file missing",
"@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Add the selected quality to the filename and keep each version in download history",
"downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format"
},
"libraryFilterMetadataMissingIsrc": "Missing ISRC",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "Missing label",
"@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker"
},
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status",
"@extensionServiceStatus": {
"description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser"
},
"settingsSearchHint": "Search settings",
"@settingsSearchHint": {
"description": "Placeholder of the search field on the Settings tab"
},
"settingsSearchNoResults": "No settings match \"{query}\"",
"@settingsSearchNoResults": {
"description": "Shown when a Settings search returns nothing",
"placeholders": {
"query": {
"type": "String"
}
}
},
"settingsGroupInterface": "Extensions & appearance",
"@settingsGroupInterface": {
"description": "Settings group covering look and feel"
},
"settingsGroupContent": "Content & metadata",
"@settingsGroupContent": {
"description": "Settings group covering the library, metadata and lyrics"
},
"settingsGroupDownloads": "Downloads & files",
"@settingsGroupDownloads": {
"description": "Settings group covering download behaviour and storage"
},
"settingsGroupSystem": "System",
"@settingsGroupSystem": {
"description": "Settings group covering app-level data, cache and logs"
},
"settingsGroupHelp": "About & support",
"@settingsGroupHelp": {
"description": "Settings group covering the about page and donations"
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff