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": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "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": "{count} Titel aus CSV",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "Alles löschen",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "Willkommen bei SpotiFLAC!", "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "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": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "description": "Tutorial welcome tip 1"
}, },
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "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": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "Abrufen & Ausfüllen",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "Kein Download-Verlauf",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "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": "Pro Kanal Statistik",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "Fehler beim Speichern der Metadaten über FFmpeg",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
} }
} }
}, },
"homeImportCsvTooltip": "CSV-Datei importieren", "homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": { "@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": "Suchanbieter ändern",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "Stop",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "Heruntergeladene Datei fehlt",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "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": "Label fehlt",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Dienststatus", "extensionServiceStatus": "Dienststatus",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser", "extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "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": "{count} pistas de CSV",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -1154,7 +1227,7 @@
"@updateNewVersionReady": { "@updateNewVersionReady": {
"description": "Update subtitle" "description": "Update subtitle"
}, },
"updateRequiredTitle": "Update required", "updateRequiredTitle": "Actualización Necesaria",
"@updateRequiredTitle": { "@updateRequiredTitle": {
"description": "Title of the mandatory update dialog shown when the installed version is too old" "description": "Title of the mandatory update dialog shown when the installed version is too old"
}, },
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "Eliminar todo",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "¡Bienvenido a SpotiFLAC!", "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "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": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "description": "Tutorial welcome tip 1"
}, },
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "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": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "Recuperar y llenar",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "No hay historial de descargas",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "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": "Per-channel Stats",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
} }
} }
}, },
"homeImportCsvTooltip": "Importar CSV", "homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": { "@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": "Change search provider",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "Detener",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "Downloaded file missing",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "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": "Falta etiqueta",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Estado del servicio", "extensionServiceStatus": "Estado del servicio",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser", "extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "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": "{count} pistes issues d'un fichier CSV",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "Tout effacer",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "Bienvenue sur SpotiFLAC !", "tutorialWelcomeTitle": "Bienvenue sur SpotiFLAC Mobile !",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "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": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "description": "Tutorial welcome tip 1"
}, },
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "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": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "Récupérer & remplir",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "Aucun historique de téléchargement",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "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": "Statistiques par chaîne",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "Échec de l'enregistrement des métadonnées via FFmpeg",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "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": { "@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": "Changer de moteur de recherche",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "Arrêter",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "Fichier téléchargé manquant",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "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": "Label manquant",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "BÊTA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "État du service", "extensionServiceStatus": "État du service",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Ouvrir le navigateur", "extensionVerificationOpenBrowser": "Ouvrir le navigateur",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "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": "{count} trek dari CSV",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "Hapus Semua",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "Selamat Datang di SpotiFLAC!", "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "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": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "description": "Tutorial welcome tip 1"
}, },
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "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": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "Fetch & Fill",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "No download history",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "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": "Per-channel Stats",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
} }
} }
}, },
"homeImportCsvTooltip": "Import CSV", "homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": { "@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": "Change search provider",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "Stop",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "Downloaded file missing",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "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": "Missing label",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status", "extensionServiceStatus": "Service Status",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser", "extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "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": "{count} tracks from CSV",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "すべて消去",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "SpotiFLAC へようこそ!", "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "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": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "description": "Tutorial welcome tip 1"
}, },
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "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": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "Fetch & Fill",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "No download history",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "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": "Per-channel Stats",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
} }
} }
}, },
"homeImportCsvTooltip": "Import CSV", "homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": { "@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": "Change search provider",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "Stop",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "Downloaded file missing",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "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": "Missing label",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status", "extensionServiceStatus": "Service Status",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser", "extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "description": "Dialog title - import CSV playlist"
}, },
"dialogImportPlaylistMessage": "CSV 파일에서 {count} 개의 트랙을 찾았습니다. 다운로드 목록에 추가하시겠습니까?", "dialogImportPlaylistMessage": "{count}개의 트랙이 재생목록 파일에서 발견되었습니다. 다운로드 대기열에 추가하시겠습니까?",
"csvImportTracks": "CSV 파일의 트랙: {count}", "csvImportTracks": "CSV 파일의 트랙: {count}",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "모두 지우기",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2145,7 +2226,7 @@
"@downloadedAlbumTapToSelect": { "@downloadedAlbumTapToSelect": {
"description": "Selection hint" "description": "Selection hint"
}, },
"downloadedAlbumDeleteCount": "{count} {count, plural, =1{트랙} other{트랙}} 삭제", "downloadedAlbumDeleteCount": "{count} 개의 {count, plural, =1{트랙} other{트랙}} 삭제",
"@downloadedAlbumDeleteCount": { "@downloadedAlbumDeleteCount": {
"description": "Delete button text with count", "description": "Delete button text with count",
"placeholders": { "placeholders": {
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "SpotiFLAC에 오신 것을 환영합니다!", "tutorialWelcomeTitle": "SpotiFLAC Mobile에 어서오세요!",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "description": "Tutorial welcome page description"
}, },
"tutorialWelcomeTip1": "Spotify, Deezer 또는 지원URL에서 음악을 다운로드할 수 있습니다", "tutorialWelcomeTip1": "음악을 검색하거나, 설치된 확장 기능이 지원출처의 링크를 붙여넣기",
"@tutorialWelcomeTip1": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "description": "Tutorial welcome tip 1"
}, },
@@ -3510,7 +3591,7 @@
"@collectionPlaylistRemoveCover": { "@collectionPlaylistRemoveCover": {
"description": "Bottom sheet action to remove custom cover image from a playlist" "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": { "@selectionShareCount": {
"description": "Share button text with count in selection mode", "description": "Share button text with count in selection mode",
"placeholders": { "placeholders": {
@@ -3523,7 +3604,7 @@
"@selectionShareNoFiles": { "@selectionShareNoFiles": {
"description": "Snackbar when no selected files exist on disk" "description": "Snackbar when no selected files exist on disk"
}, },
"selectionConvertCount": "{count} {count, plural, =1{트랙} other{트랙}} 변환", "selectionConvertCount": "{count} 개의 {count, plural, =1{트랙} other{트랙}} 변환",
"@selectionConvertCount": { "@selectionConvertCount": {
"description": "Convert button text with count in selection mode", "description": "Convert button text with count in selection mode",
"placeholders": { "placeholders": {
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "description": "Section title for selective online metadata auto-fill in the edit metadata sheet"
}, },
"editMetadataAutoFillDesc": "온라인 메타데이터에서 자동으로 채워질 필드를 선택하세요", "editMetadataAutoFillDesc": "메타데이터 확장 기능을 선택하고, 필드를 지정한 다음, 적용하기 전에 해당 데이터를 확인",
"@editMetadataAutoFillDesc": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "가져오기 & 채우기",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "다운로드 기록이 없음",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "description": "Estimated spectral cutoff metric label"
}, },
"audioAnalysisCutoffNotDetected": "감지되지 않음",
"@audioAnalysisCutoffNotDetected": {
"description": "Displayed when no reliable broadband spectral cutoff can be detected"
},
"audioAnalysisChannelStats": "채널별 통계", "audioAnalysisChannelStats": "채널별 통계",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "FFmpeg를 통해 메타데이터 저장 실패",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
} }
} }
}, },
"homeImportCsvTooltip": "CSV 가져오기", "homeImportCsvTooltip": "재생목록 가져오기 (CSV, M3U)",
"@homeImportCsvTooltip": { "@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": "검색 제공자 변경",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "중지",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "다운로드된 파일이 없음",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "description": "Filter option - items with an invalid ISRC format"
}, },
"libraryFilterMetadataMissingIsrc": "ISRC 없음",
"@libraryFilterMetadataMissingIsrc": {
"description": "Filter option - items without any ISRC tag"
},
"libraryFilterMetadataMissingLabel": "레이블 누락", "libraryFilterMetadataMissingLabel": "레이블 누락",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5249,7 +5469,7 @@
} }
} }
}, },
"selectionDeleteTracksCount": "{count} {count, plural, =1{트랙} other{트랙}} 삭제", "selectionDeleteTracksCount": "{count} 개의 {count, plural, =1{트랙} other{트랙}} 삭제",
"@selectionDeleteTracksCount": { "@selectionDeleteTracksCount": {
"description": "Button label for deleting selected tracks", "description": "Button label for deleting selected tracks",
"placeholders": { "placeholders": {
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "베타",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "서비스 상태", "extensionServiceStatus": "서비스 상태",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6003,7 +6219,7 @@
"@extensionVerificationHelpMessageManual": { "@extensionVerificationHelpMessageManual": {
"description": "Dialog message when automatic browser launch for verification fails" "description": "Dialog message when automatic browser launch for verification fails"
}, },
"extensionVerificationHelpMessageWaiting": "브라우저가 열리지 않거나 인증을 완료한 후에도 SpotiFLAC Mobile로 돌아지 않다면, 아래 링크를 다시 열거나 직접 복사하세요", "extensionVerificationHelpMessageWaiting": "브라우저가 열리지 않거나 인증을 완료한 후에도 SpotiFLAC Mobile로 돌아지 않다면, 아래 링크를 다시 열거나 직접 복사하세요",
"@extensionVerificationHelpMessageWaiting": { "@extensionVerificationHelpMessageWaiting": {
"description": "Dialog message when verification may need manual browser help" "description": "Dialog message when verification may need manual browser help"
}, },
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "브라우저 열기", "extensionVerificationOpenBrowser": "브라우저 열기",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "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": "{count} faixas do CSV",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "Limpar Tudo",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "Welcome to SpotiFLAC!", "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "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": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "description": "Tutorial welcome tip 1"
}, },
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "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": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "Fetch & Fill",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "No download history",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "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": "Per-channel Stats",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
} }
} }
}, },
"homeImportCsvTooltip": "Import CSV", "homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": { "@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": "Change search provider",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "Stop",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "Downloaded file missing",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "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": "Missing label",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status", "extensionServiceStatus": "Service Status",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser", "extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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": { "@homeSubtitle": {
"description": "Subtitle shown below search box" "description": "Subtitle shown below search box"
}, },
"homeEmptyTitle": "No search providers yet", "homeEmptyTitle": "Нет поставщиков поиска",
"@homeEmptyTitle": { "@homeEmptyTitle": {
"description": "Title shown on home when no providers are available yet" "description": "Title shown on home when no providers are available yet"
}, },
"homeEmptySubtitle": "Install an extension to continue.", "homeEmptySubtitle": "Установите расширение, чтобы продолжить.",
"@homeEmptySubtitle": { "@homeEmptySubtitle": {
"description": "Subtitle shown on home when no providers are available yet" "description": "Subtitle shown on home when no providers are available yet"
}, },
@@ -162,7 +162,7 @@
"@optionsDefaultSearchTab": { "@optionsDefaultSearchTab": {
"description": "Title for the preferred default search tab setting" "description": "Title for the preferred default search tab setting"
}, },
"optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.", "optionsDefaultSearchTabSubtitle": "Выберите, какая вкладка открывает новые результаты поиска.",
"@optionsDefaultSearchTabSubtitle": { "@optionsDefaultSearchTabSubtitle": {
"description": "Subtitle for the preferred default search tab setting" "description": "Subtitle for the preferred default search tab setting"
}, },
@@ -194,27 +194,27 @@
"@optionsReplayGain": { "@optionsReplayGain": {
"description": "Title for ReplayGain setting toggle" "description": "Title for ReplayGain setting toggle"
}, },
"optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)", "optionsReplayGainSubtitleOn": "Сканировать громкость и вставить теги ReplayGain (EBU R128)",
"@optionsReplayGainSubtitleOn": { "@optionsReplayGainSubtitleOn": {
"description": "Subtitle when ReplayGain is enabled" "description": "Subtitle when ReplayGain is enabled"
}, },
"optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags", "optionsReplayGainSubtitleOff": "Выключено: нет тегов нормализации громкости",
"@optionsReplayGainSubtitleOff": { "@optionsReplayGainSubtitleOff": {
"description": "Subtitle when ReplayGain is disabled" "description": "Subtitle when ReplayGain is disabled"
}, },
"trackReplayGain": "Rescan ReplayGain", "trackReplayGain": "Пересканировать ReplayGain",
"@trackReplayGain": { "@trackReplayGain": {
"description": "Three-dot menu option to scan loudness and write ReplayGain tags" "description": "Three-dot menu option to scan loudness and write ReplayGain tags"
}, },
"trackReplayGainScanning": "Analyzing loudness...", "trackReplayGainScanning": "Анализ громкости...",
"@trackReplayGainScanning": { "@trackReplayGainScanning": {
"description": "Snackbar/progress message while scanning ReplayGain for a single track" "description": "Snackbar/progress message while scanning ReplayGain for a single track"
}, },
"trackReplayGainSuccess": "ReplayGain tags added", "trackReplayGainSuccess": "Добавлены теги ReplayGain",
"@trackReplayGainSuccess": { "@trackReplayGainSuccess": {
"description": "Snackbar message after ReplayGain tags written for a single track" "description": "Snackbar message after ReplayGain tags written for a single track"
}, },
"trackReplayGainFailed": "Failed to add ReplayGain tags", "trackReplayGainFailed": "Не удалось добавить теги ReplayGain",
"@trackReplayGainFailed": { "@trackReplayGainFailed": {
"description": "Snackbar message when ReplayGain scan/write fails" "description": "Snackbar message when ReplayGain scan/write fails"
}, },
@@ -227,11 +227,11 @@
} }
} }
}, },
"replayGainBatchConfirmTitle": "Add ReplayGain", "replayGainBatchConfirmTitle": "Добавить ReplayGain",
"@replayGainBatchConfirmTitle": { "@replayGainBatchConfirmTitle": {
"description": "Title of the batch ReplayGain confirmation dialog" "description": "Title of the batch ReplayGain confirmation dialog"
}, },
"replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", "replayGainBatchConfirmMessage": "Проанализировать громкость и записать ReplayGain теги на {count} трек(-а)?",
"@replayGainBatchConfirmMessage": { "@replayGainBatchConfirmMessage": {
"description": "Message of the batch ReplayGain confirmation dialog", "description": "Message of the batch ReplayGain confirmation dialog",
"placeholders": { "placeholders": {
@@ -240,11 +240,11 @@
} }
} }
}, },
"replayGainBatchAnalyzing": "Analyzing ReplayGain...", "replayGainBatchAnalyzing": "Анализ ReplayGain...",
"@replayGainBatchAnalyzing": { "@replayGainBatchAnalyzing": {
"description": "Progress dialog title while batch scanning ReplayGain" "description": "Progress dialog title while batch scanning ReplayGain"
}, },
"replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", "replayGainBatchSuccess": "ReplayGain добавлен к {success} треков {total}",
"@replayGainBatchSuccess": { "@replayGainBatchSuccess": {
"description": "Snackbar after batch ReplayGain completes", "description": "Snackbar after batch ReplayGain completes",
"placeholders": { "placeholders": {
@@ -256,11 +256,11 @@
} }
} }
}, },
"optionsArtistTagMode": "Artist Tag Mode", "optionsArtistTagMode": "Режим тега исполнителя",
"@optionsArtistTagMode": { "@optionsArtistTagMode": {
"description": "Setting title for how artist metadata is written into files" "description": "Setting title for how artist metadata is written into files"
}, },
"optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.", "optionsArtistTagModeDescription": "Выберите, как несколько исполнителей записываются встроенные теги.",
"@optionsArtistTagModeDescription": { "@optionsArtistTagModeDescription": {
"description": "Bottom-sheet description for artist tag mode setting" "description": "Bottom-sheet description for artist tag mode setting"
}, },
@@ -272,7 +272,7 @@
"@optionsArtistTagModeJoinedSubtitle": { "@optionsArtistTagModeJoinedSubtitle": {
"description": "Subtitle for joined artist tag mode" "description": "Subtitle for joined artist tag mode"
}, },
"optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus", "optionsArtistTagModeSplitVorbis": "Разделить теги для FLAC/Opus",
"@optionsArtistTagModeSplitVorbis": { "@optionsArtistTagModeSplitVorbis": {
"description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats"
}, },
@@ -284,7 +284,7 @@
"@optionsExtensionStore": { "@optionsExtensionStore": {
"description": "Show/hide repo tab" "description": "Show/hide repo tab"
}, },
"optionsExtensionStoreSubtitle": "Show Repo tab in navigation", "optionsExtensionStoreSubtitle": "Показывать вкладку репозитория в навигации",
"@optionsExtensionStoreSubtitle": { "@optionsExtensionStoreSubtitle": {
"description": "Subtitle for extension repo toggle" "description": "Subtitle for extension repo toggle"
}, },
@@ -413,7 +413,7 @@
"@aboutPCSource": { "@aboutPCSource": {
"description": "Link to PC GitHub repo" "description": "Link to PC GitHub repo"
}, },
"aboutKeepAndroidOpen": "Keep Android Open", "aboutKeepAndroidOpen": "Сохранить Android открытым",
"@aboutKeepAndroidOpen": { "@aboutKeepAndroidOpen": {
"description": "Link to Keep Android Open campaign website" "description": "Link to Keep Android Open campaign website"
}, },
@@ -473,7 +473,7 @@
"@aboutSjdonadoDesc": { "@aboutSjdonadoDesc": {
"description": "Credit description for sjdonado" "description": "Credit description for sjdonado"
}, },
"aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", "aboutAppDescription": "Ищите метаданных музыки, управляйте расширениями и организуйте свою библиотеку.",
"@aboutAppDescription": { "@aboutAppDescription": {
"description": "App description in header card" "description": "App description in header card"
}, },
@@ -666,15 +666,15 @@
"@setupAllowAccessToManageFiles": { "@setupAllowAccessToManageFiles": {
"description": "Instruction for file access permission" "description": "Instruction for file access permission"
}, },
"setupLanguageTitle": "Choose Language", "setupLanguageTitle": "Выберите язык",
"@setupLanguageTitle": { "@setupLanguageTitle": {
"description": "Title for the language selection step in setup" "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": { "@setupLanguageDescription": {
"description": "Description for the language selection step in setup" "description": "Description for the language selection step in setup"
}, },
"setupLanguageSystemDefault": "System Default", "setupLanguageSystemDefault": "Системные настройки",
"@setupLanguageSystemDefault": { "@setupLanguageSystemDefault": {
"description": "Option to use the system language" "description": "Option to use the system language"
}, },
@@ -710,15 +710,15 @@
"@dialogDownload": { "@dialogDownload": {
"description": "Confirm button in Download All dialog" "description": "Confirm button in Download All dialog"
}, },
"previewPlay": "Play preview", "previewPlay": "Предпросмотр проигрывания",
"@previewPlay": { "@previewPlay": {
"description": "Tooltip for the button that plays a short track preview snippet" "description": "Tooltip for the button that plays a short track preview snippet"
}, },
"previewStop": "Stop preview", "previewStop": "Остановить предпросмотр",
"@previewStop": { "@previewStop": {
"description": "Tooltip for the button that stops the playing track preview snippet" "description": "Tooltip for the button that stops the playing track preview snippet"
}, },
"previewUnavailable": "Preview unavailable", "previewUnavailable": "Предпросмотр недоступен",
"@previewUnavailable": { "@previewUnavailable": {
"description": "Snackbar shown when a track preview snippet cannot be played" "description": "Snackbar shown when a track preview snippet cannot be played"
}, },
@@ -779,7 +779,7 @@
"@dialogDeleteSelectedTitle": { "@dialogDeleteSelectedTitle": {
"description": "Dialog title - delete selected items" "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": { "@dialogDeleteSelectedMessage": {
"description": "Dialog message - delete selected tracks", "description": "Dialog message - delete selected tracks",
"placeholders": { "placeholders": {
@@ -792,7 +792,7 @@
"@dialogImportPlaylistTitle": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "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": "{count} трек(-ов) из CSV",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -850,7 +923,7 @@
"@snackbarHistoryCleared": { "@snackbarHistoryCleared": {
"description": "Snackbar - history deleted" "description": "Snackbar - history deleted"
}, },
"snackbarDeletedTracks": "Deleted {count} {count, plural, =1{track} other{tracks}}", "snackbarDeletedTracks": "Удалено {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}",
"@snackbarDeletedTracks": { "@snackbarDeletedTracks": {
"description": "Snackbar - tracks deleted", "description": "Snackbar - tracks deleted",
"placeholders": { "placeholders": {
@@ -936,7 +1009,7 @@
"@errorNoTracksFound": { "@errorNoTracksFound": {
"description": "Error - search returned no results" "description": "Error - search returned no results"
}, },
"searchEmptyResultSubtitle": "Try another keyword", "searchEmptyResultSubtitle": "Попробуйте другое ключевое слово",
"@searchEmptyResultSubtitle": { "@searchEmptyResultSubtitle": {
"description": "Subtitle shown under the empty search result state on the home screen" "description": "Subtitle shown under the empty search result state on the home screen"
}, },
@@ -1154,11 +1227,11 @@
"@updateNewVersionReady": { "@updateNewVersionReady": {
"description": "Update subtitle" "description": "Update subtitle"
}, },
"updateRequiredTitle": "Update required", "updateRequiredTitle": "Требуется обновление",
"@updateRequiredTitle": { "@updateRequiredTitle": {
"description": "Title of the mandatory update dialog shown when the installed version is too old" "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": { "@updateRequiredNotice": {
"description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed",
"placeholders": { "placeholders": {
@@ -1207,7 +1280,7 @@
"@providerPriorityFallbackExtensionsDescription": { "@providerPriorityFallbackExtensionsDescription": {
"description": "Section description for extension fallback selection" "description": "Section description for extension fallback selection"
}, },
"providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.", "providerPriorityFallbackExtensionsHint": "Здесь перечислены только включенные расширения с возможностями поставщика загрузок.",
"@providerPriorityFallbackExtensionsHint": { "@providerPriorityFallbackExtensionsHint": {
"description": "Hint below the extension fallback selection list" "description": "Hint below the extension fallback selection list"
}, },
@@ -1397,7 +1470,7 @@
"@settingsAppearanceSubtitle": { "@settingsAppearanceSubtitle": {
"description": "Appearance settings description" "description": "Appearance settings description"
}, },
"settingsDownloadSubtitle": "Service, quality, fallback", "settingsDownloadSubtitle": "Сервис, качество, откат",
"@settingsDownloadSubtitle": { "@settingsDownloadSubtitle": {
"description": "Download settings description" "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": { "@tracksCount": {
"description": "Track count display", "description": "Track count display",
"placeholders": { "placeholders": {
@@ -1527,7 +1600,7 @@
"@trackCopyLyrics": { "@trackCopyLyrics": {
"description": "Action - copy lyrics to clipboard" "description": "Action - copy lyrics to clipboard"
}, },
"trackLyricsSource": "Source: {source}", "trackLyricsSource": "Источник: {source}",
"@trackLyricsSource": { "@trackLyricsSource": {
"description": "Label showing the lyrics source/provider", "description": "Label showing the lyrics source/provider",
"placeholders": { "placeholders": {
@@ -1540,11 +1613,11 @@
"@trackLyricsNotAvailable": { "@trackLyricsNotAvailable": {
"description": "Message when lyrics not found" "description": "Message when lyrics not found"
}, },
"trackLyricsNotInFile": "No lyrics found in this file", "trackLyricsNotInFile": "В этом файле не найдено текстов песен",
"@trackLyricsNotInFile": { "@trackLyricsNotInFile": {
"description": "Message when no embedded lyrics in audio file" "description": "Message when no embedded lyrics in audio file"
}, },
"trackFetchOnlineLyrics": "Fetch from Online", "trackFetchOnlineLyrics": "Поиск в сети",
"@trackFetchOnlineLyrics": { "@trackFetchOnlineLyrics": {
"description": "Action - fetch lyrics from online providers" "description": "Action - fetch lyrics from online providers"
}, },
@@ -1643,15 +1716,15 @@
"@storeClearFilters": { "@storeClearFilters": {
"description": "Button to clear all filters" "description": "Button to clear all filters"
}, },
"storeAddRepoTitle": "Add Extension Repository", "storeAddRepoTitle": "Добавить репозиторий расширения",
"@storeAddRepoTitle": { "@storeAddRepoTitle": {
"description": "Store setup screen - heading when no repo is configured" "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": { "@storeAddRepoDescription": {
"description": "Store setup screen - explanatory text" "description": "Store setup screen - explanatory text"
}, },
"storeRepoUrlLabel": "Repository URL", "storeRepoUrlLabel": "Ссылка на репозиторий",
"@storeRepoUrlLabel": { "@storeRepoUrlLabel": {
"description": "Label for the repository URL input field" "description": "Label for the repository URL input field"
}, },
@@ -1667,7 +1740,7 @@
"@storeChangeRepoTooltip": { "@storeChangeRepoTooltip": {
"description": "Tooltip for the change-repository icon button in the app bar" "description": "Tooltip for the change-repository icon button in the app bar"
}, },
"storeRepoDialogTitle": "Extension Repository", "storeRepoDialogTitle": "Репозиторий расширения",
"@storeRepoDialogTitle": { "@storeRepoDialogTitle": {
"description": "Title of the change/remove repository dialog" "description": "Title of the change/remove repository dialog"
}, },
@@ -1675,7 +1748,7 @@
"@storeRepoDialogCurrent": { "@storeRepoDialogCurrent": {
"description": "Label shown above the current repository URL in the dialog" "description": "Label shown above the current repository URL in the dialog"
}, },
"storeNewRepoUrlLabel": "New Repository URL", "storeNewRepoUrlLabel": "Новый URL репозитория",
"@storeNewRepoUrlLabel": { "@storeNewRepoUrlLabel": {
"description": "Label for the new repository URL field inside the dialog" "description": "Label for the new repository URL field inside the dialog"
}, },
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "Очистить всё",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "Добро пожаловать в SpotiFLAC!", "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "description": "Tutorial welcome page description"
}, },
"tutorialWelcomeTip1": "Скачивайте музыку из Spotify, Deezer, или вставьте любой поддерживаемый URL", "tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "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": { "@trackConvertConfirmMessageLossless": {
"description": "Confirmation dialog message for lossless-to-lossless conversion", "description": "Confirmation dialog message for lossless-to-lossless conversion",
"placeholders": { "placeholders": {
@@ -3308,7 +3389,7 @@
"@collectionLoved": { "@collectionLoved": {
"description": "Custom folder for favorite tracks" "description": "Custom folder for favorite tracks"
}, },
"collectionFavoriteArtists": "Favorite Artists", "collectionFavoriteArtists": "Избранный исполнитель",
"@collectionFavoriteArtists": { "@collectionFavoriteArtists": {
"description": "Custom folder for favorite artists" "description": "Custom folder for favorite artists"
}, },
@@ -3400,11 +3481,11 @@
"@collectionLovedEmptySubtitle": { "@collectionLovedEmptySubtitle": {
"description": "Loved empty state subtitle" "description": "Loved empty state subtitle"
}, },
"collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", "collectionFavoriteArtistsEmptyTitle": "Нет избранных исполнителей",
"@collectionFavoriteArtistsEmptyTitle": { "@collectionFavoriteArtistsEmptyTitle": {
"description": "Favorite artists empty state title" "description": "Favorite artists empty state title"
}, },
"collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", "collectionFavoriteArtistsEmptySubtitle": "Нажмите на сердце на странице исполнителя, чтобы сохранить его здесь",
"@collectionFavoriteArtistsEmptySubtitle": { "@collectionFavoriteArtistsEmptySubtitle": {
"description": "Favorite artists empty state subtitle" "description": "Favorite artists empty state subtitle"
}, },
@@ -3460,7 +3541,7 @@
} }
} }
}, },
"collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", "collectionAddedToFavoriteArtists": "\"{artistName}\" добавлен в избранные исполнители",
"@collectionAddedToFavoriteArtists": { "@collectionAddedToFavoriteArtists": {
"description": "Snackbar after adding artist to favorite artists", "description": "Snackbar after adding artist to favorite artists",
"placeholders": { "placeholders": {
@@ -3469,7 +3550,7 @@
} }
} }
}, },
"collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", "collectionRemovedFromFavoriteArtists": "\"{artistName}\" удалено из избранных исполнителей",
"@collectionRemovedFromFavoriteArtists": { "@collectionRemovedFromFavoriteArtists": {
"description": "Snackbar after removing artist from favorite artists", "description": "Snackbar after removing artist from favorite artists",
"placeholders": { "placeholders": {
@@ -3494,11 +3575,11 @@
"@trackOptionRemoveFromWishlist": { "@trackOptionRemoveFromWishlist": {
"description": "Bottom sheet action label - remove track from wishlist" "description": "Bottom sheet action label - remove track from wishlist"
}, },
"artistOptionAddToFavorites": "Add to Favorite Artists", "artistOptionAddToFavorites": "Добавить в избранные исполнители",
"@artistOptionAddToFavorites": { "@artistOptionAddToFavorites": {
"description": "Action label - add artist to favorite artists" "description": "Action label - add artist to favorite artists"
}, },
"artistOptionRemoveFromFavorites": "Remove from Favorite Artists", "artistOptionRemoveFromFavorites": "Удалить из избранных исполнителей",
"@artistOptionRemoveFromFavorites": { "@artistOptionRemoveFromFavorites": {
"description": "Action label - remove artist from favorite artists" "description": "Action label - remove artist from favorite artists"
}, },
@@ -3510,7 +3591,7 @@
"@collectionPlaylistRemoveCover": { "@collectionPlaylistRemoveCover": {
"description": "Bottom sheet action to remove custom cover image from a playlist" "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": { "@selectionShareCount": {
"description": "Share button text with count in selection mode", "description": "Share button text with count in selection mode",
"placeholders": { "placeholders": {
@@ -3523,7 +3604,7 @@
"@selectionShareNoFiles": { "@selectionShareNoFiles": {
"description": "Snackbar when no selected files exist on disk" "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": { "@selectionConvertCount": {
"description": "Convert button text with count in selection mode", "description": "Convert button text with count in selection mode",
"placeholders": { "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": { "@selectionBatchConvertConfirmKeepOriginal": {
"description": "Batch conversion confirmation when source files will be preserved", "description": "Batch conversion confirmation when source files will be preserved",
"placeholders": { "placeholders": {
@@ -3641,11 +3722,11 @@
} }
} }
}, },
"lyricsProvidersAtLeastOne": "At least one provider must remain enabled", "lyricsProvidersAtLeastOne": "По крайней мере один провайдер должен оставаться включенным",
"@lyricsProvidersAtLeastOne": { "@lyricsProvidersAtLeastOne": {
"description": "Snackbar when user tries to disable the last enabled provider" "description": "Snackbar when user tries to disable the last enabled provider"
}, },
"lyricsProvidersSaved": "Lyrics provider priority saved", "lyricsProvidersSaved": "Приоритетный провайдер текстов песен сохранен",
"@lyricsProvidersSaved": { "@lyricsProvidersSaved": {
"description": "Snackbar after saving lyrics provider priority" "description": "Snackbar after saving lyrics provider priority"
}, },
@@ -3661,7 +3742,7 @@
"@lyricsProviderNeteaseDesc": { "@lyricsProviderNeteaseDesc": {
"description": "Description for Netease provider" "description": "Description for Netease provider"
}, },
"lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", "lyricsProviderMusixmatchDesc": "Крупнейшая база данных текстов песен (мультиязычная)",
"@lyricsProviderMusixmatchDesc": { "@lyricsProviderMusixmatchDesc": {
"description": "Description for Musixmatch provider" "description": "Description for Musixmatch provider"
}, },
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "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": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "Получить и заполнить",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "Нет истории скачиваний",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "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": "Per-channel Stats",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "Не удалось сохранить метаданные через FFmpeg",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
} }
} }
}, },
"homeImportCsvTooltip": "Import CSV", "homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": { "@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": "Change search provider",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "Stop",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "Downloaded file missing",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "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": "Missing label",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status", "extensionServiceStatus": "Service Status",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser", "extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "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": "CSV'den {count} şarkı",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "Tümünü Temizle",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "SpotiFLAC'e hoş geldiniz!", "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "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": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "description": "Tutorial welcome tip 1"
}, },
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "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": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "Fetch & Fill",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "No download history",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "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": "Per-channel Stats",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "Failed to save metadata via FFmpeg",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
} }
} }
}, },
"homeImportCsvTooltip": "Import CSV", "homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": { "@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": "Change search provider",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "Stop",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "Downloaded file missing",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "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": "Missing label",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status", "extensionServiceStatus": "Service Status",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser", "extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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": { "@dialogImportPlaylistTitle": {
"description": "Dialog title - import CSV playlist" "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": "{count} треків з CSV",
"@csvImportTracks": { "@csvImportTracks": {
"description": "Label shown in quality picker for CSV import", "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": { "@dialogImportPlaylistMessage": {
"description": "Dialog message - import playlist confirmation", "description": "Dialog message - import playlist confirmation",
"placeholders": { "placeholders": {
@@ -2018,6 +2091,14 @@
"@appearanceHeroAnimationsSubtitle": { "@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle" "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": "Усі",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2678,7 +2759,7 @@
} }
} }
}, },
"tutorialWelcomeTitle": "Ласкаво просимо до SpotiFLAC!", "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!",
"@tutorialWelcomeTitle": { "@tutorialWelcomeTitle": {
"description": "Tutorial welcome page title" "description": "Tutorial welcome page title"
}, },
@@ -2686,7 +2767,7 @@
"@tutorialWelcomeDesc": { "@tutorialWelcomeDesc": {
"description": "Tutorial welcome page description" "description": "Tutorial welcome page description"
}, },
"tutorialWelcomeTip1": "Завантажуйте музику зі Spotify, Deezer або вставляйте будь-яку підтримувану URL-адресу", "tutorialWelcomeTip1": "Search music or paste a link from any source your installed extensions support",
"@tutorialWelcomeTip1": { "@tutorialWelcomeTip1": {
"description": "Tutorial welcome tip 1" "description": "Tutorial welcome tip 1"
}, },
@@ -4202,10 +4283,51 @@
"@editMetadataAutoFill": { "@editMetadataAutoFill": {
"description": "Section title for selective online metadata auto-fill in the edit metadata sheet" "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": { "@editMetadataAutoFillDesc": {
"description": "Description for the auto-fill section" "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": "Отримання та заповнення",
"@editMetadataAutoFillFetch": { "@editMetadataAutoFillFetch": {
"description": "Button label to fetch online metadata and fill selected fields" "description": "Button label to fetch online metadata and fill selected fields"
@@ -4334,6 +4456,27 @@
"@queueEmptySinglesSubtitle": { "@queueEmptySinglesSubtitle": {
"description": "Empty state subtitle for single track downloads" "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": "Немає історії завантажень",
"@queueEmptyHistory": { "@queueEmptyHistory": {
"description": "Empty state title when download history is empty" "description": "Empty state title when download history is empty"
@@ -4434,6 +4577,10 @@
"@audioAnalysisSpectralCutoff": { "@audioAnalysisSpectralCutoff": {
"description": "Estimated spectral cutoff metric label" "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": "Per-channel Stats",
"@audioAnalysisChannelStats": { "@audioAnalysisChannelStats": {
"description": "Per-channel audio analysis section label" "description": "Per-channel audio analysis section label"
@@ -4504,6 +4651,14 @@
"@cancelDownloadKeep": { "@cancelDownloadKeep": {
"description": "Dialog button - keep the active download (do not cancel)" "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": "Не вдалося зберегти метадані через FFmpeg",
"@metadataSaveFailedFfmpeg": { "@metadataSaveFailedFfmpeg": {
"description": "Snackbar error when FFmpeg fails to write metadata" "description": "Snackbar error when FFmpeg fails to write metadata"
@@ -4769,9 +4924,9 @@
} }
} }
}, },
"homeImportCsvTooltip": "Import CSV", "homeImportCsvTooltip": "Import playlist (CSV, M3U)",
"@homeImportCsvTooltip": { "@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": "Change search provider",
"@homeChangeSearchProviderTooltip": { "@homeChangeSearchProviderTooltip": {
@@ -4837,6 +4992,18 @@
"@trackCoverReplaceNotice": { "@trackCoverReplaceNotice": {
"description": "Notice shown when a new cover has been selected but not saved yet" "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": "Stop",
"@actionStop": { "@actionStop": {
"description": "Generic action - stop" "description": "Generic action - stop"
@@ -4845,6 +5012,55 @@
"@queueFinalizingDownload": { "@queueFinalizingDownload": {
"description": "Accessibility label for a queue item that is finalizing" "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": "Downloaded file missing",
"@queueDownloadedFileMissing": { "@queueDownloadedFileMissing": {
"description": "Accessibility label when a downloaded file is missing from disk" "description": "Accessibility label when a downloaded file is missing from disk"
@@ -5120,7 +5336,7 @@
"@downloadQualityVariants": { "@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track" "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": { "@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions" "description": "Description for retaining multiple quality versions"
}, },
@@ -5176,6 +5392,10 @@
"@libraryFilterMetadataIncorrectIsrcFormat": { "@libraryFilterMetadataIncorrectIsrcFormat": {
"description": "Filter option - items with an invalid ISRC format" "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": "Missing label",
"@libraryFilterMetadataMissingLabel": { "@libraryFilterMetadataMissingLabel": {
"description": "Filter option - items missing record label" "description": "Filter option - items missing record label"
@@ -5365,10 +5585,6 @@
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
"badgeBeta": "BETA",
"@badgeBeta": {
"description": "Badge label for beta features"
},
"extensionServiceStatus": "Service Status", "extensionServiceStatus": "Service Status",
"@extensionServiceStatus": { "@extensionServiceStatus": {
"description": "Extension detail section header for service status" "description": "Extension detail section header for service status"
@@ -6022,5 +6238,38 @@
"extensionVerificationOpenBrowser": "Open browser", "extensionVerificationOpenBrowser": "Open browser",
"@extensionVerificationOpenBrowser": { "@extensionVerificationOpenBrowser": {
"description": "Button to open the extension verification URL in a browser" "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