From 74878a7c94fd5e936b64a1791ee1d8a934034d94 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:26 +0700 Subject: [PATCH 01/59] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 912 +++++++++++++++++++++++++++---------- 1 file changed, 679 insertions(+), 233 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 05c714504..c18895b8b 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -1,5 +1,5 @@ { - "@@locale": "es_ES", + "@@locale": "es-ES", "@@last_modified": "2026-04-28", "appName": "SpotiFLAC Móvil", "@appName": { @@ -461,6 +461,18 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" + }, + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" + }, + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" + }, "aboutAppDescription": "Busca información musical, gestiona extensiones y organiza tu biblioteca.", "@aboutAppDescription": { "description": "App description in header card" @@ -790,6 +802,79 @@ } } }, + "collectionExportM3u": "Exportar como M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" + }, + "collectionExportM3uDone": "Exportado {exported} de {total} pistas", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", + "placeholders": { + "exported": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "collectionExportM3uNone": "No hay archivos descargados para exportar", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" + }, + "collectionExportM3uFailed": "Exportación fallida", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" + }, + "trackOpenOn": "Abrir en...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" + }, + "trackOpenOnNoLinks": "No se han encontrado enlaces para esta pista.", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" + }, + "libraryReviewDuplicates": "Revisar duplicados", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" + }, + "libraryReviewDuplicatesSubtitle": "Encontrar pistas almacenadas más de una vez", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" + }, + "duplicatesTitle": "Duplicados", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" + }, + "duplicatesEmpty": "No se han encontrado pistas duplicadas.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" + }, + "duplicatesKeepBest": "Mantener mejor", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" + }, + "duplicatesKeepBestMessage": "¿Eliminar {count} copias de menor calidad del \"{trackName}\"?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", + "placeholders": { + "count": { + "type": "int" + }, + "trackName": { + "type": "String" + } + } + }, + "duplicatesDeleteCopyMessage": "¿Eliminar esta copia de \"{trackName}\"?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } + }, "@dialogImportPlaylistMessage": { "description": "Dialog message - import playlist confirmation", "placeholders": { @@ -1142,6 +1227,19 @@ "@updateNewVersionReady": { "description": "Update subtitle" }, + "updateRequiredTitle": "Actualización Necesaria", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" + }, + "updateRequiredNotice": "Esta versión está {count} lanzamientos detrás de la actual y ya no es soportada. Actualice para seguir usando la app.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", + "placeholders": { + "count": { + "type": "int" + } + } + }, "updateCurrent": "Actual", "@updateCurrent": { "description": "Label for current version" @@ -1478,6 +1576,10 @@ "@trackAudioQuality": { "description": "Metadata label - audio quality" }, + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" + }, "trackReleaseDate": "Fecha de lanzamiento", "@trackReleaseDate": { "description": "Metadata label - release date" @@ -1893,6 +1995,42 @@ "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" + }, + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" + }, + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" + }, + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" + }, + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" + }, + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" + }, + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" + }, + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" + }, + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" + }, "downloadLossy320Format": "Formato con pérdida a 320 kbps", "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" @@ -1985,6 +2123,22 @@ "@appearanceAmoledDarkSubtitle": { "description": "Subtitle for AMOLED dark" }, + "appearanceHeroAnimations": "Animaciones Hero", + "@appearanceHeroAnimations": { + "description": "Toggle for shared-element (Hero) transitions" + }, + "appearanceHeroAnimationsSubtitle": "Covers voladores entre pantallas, ejemplo: cuando abre el reproductor", + "@appearanceHeroAnimationsSubtitle": { + "description": "Subtitle for the Hero animations toggle" + }, + "appearanceForceBlur": "Siempre use efecto desenfoque", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" + }, + "appearanceForceBlurSubtitle": "Habilite la barra de navegación desenfocada incluso en dispositivos donde está desactivada por defecto. Puede costar rendimiento.", + "@appearanceForceBlurSubtitle": { + "description": "Subtitle for the force-blur toggle" + }, "queueClearAll": "Eliminar todo", "@queueClearAll": { "description": "Button - clear all queue items" @@ -2017,6 +2171,27 @@ "@settingsDownloadNetworkSubtitle": { "description": "Subtitle explaining network preference" }, + "settingsConcurrentDownloads": "Descargas concurrentes", + "@settingsConcurrentDownloads": { + "description": "Setting title - how many tracks download at the same time" + }, + "settingsConcurrentDownloadsSubtitle": "Descargar varios archivos a la vez es rápido, pero con algunos proveedores puede haber un límite en pedidos paralelos.", + "@settingsConcurrentDownloadsSubtitle": { + "description": "Subtitle explaining the concurrent downloads picker" + }, + "concurrentDownloadsOne": "1 archivo a la vez", + "@concurrentDownloadsOne": { + "description": "Concurrent downloads option - sequential" + }, + "concurrentDownloadsCount": "Hasta {count} archivos a la vez", + "@concurrentDownloadsCount": { + "description": "Concurrent downloads option - parallel", + "placeholders": { + "count": { + "type": "int" + } + } + }, "albumFolderArtistAlbum": "Artista / Álbum", "@albumFolderArtistAlbum": { "description": "Album folder option" @@ -2134,6 +2309,10 @@ "@recentEmpty": { "description": "Empty state text for recent access list" }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, "recentShowAllDownloads": "Mostrar todas las descargas", "@recentShowAllDownloads": { "description": "Button label to unhide hidden downloads in recent access" @@ -2334,6 +2513,53 @@ "@libraryFolderHint": { "description": "Placeholder when no folder selected" }, + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" + }, + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", + "placeholders": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { + "type": "String" + } + } + }, + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" + }, + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" + }, + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" + }, "libraryShowDuplicateIndicator": "Mostrar indicador de duplicados", "@libraryShowDuplicateIndicator": { "description": "Toggle for duplicate indicator in search" @@ -2814,6 +3040,22 @@ "@cacheLibraryCoverDesc": { "description": "Description of what library cover cache contains" }, + "libraryPlaybackNormalization": "Normalización de volumen", + "@libraryPlaybackNormalization": { + "description": "Toggle title for ReplayGain playback normalization in the built-in player" + }, + "libraryPlaybackNormalizationSubtitle": "Equaliza el volumen entre las pistas utilizando sus etiquetas ReplayGain o R128, cuando estén presentes", + "@libraryPlaybackNormalizationSubtitle": { + "description": "Subtitle explaining playback volume normalization" + }, + "cacheAudioAnalysis": "Caché de análisis de audio", + "@cacheAudioAnalysis": { + "description": "Cache item title for saved audio analysis results" + }, + "cacheAudioAnalysisDesc": "Espectrogramas y resultados de análisis guardados. Se volverán a analizar la próxima vez que se abra el programa.", + "@cacheAudioAnalysisDesc": { + "description": "Description of what audio analysis cache contains" + }, "cacheExploreFeed": "Explorar caché de inicio", "@cacheExploreFeed": { "description": "Cache item title for explore home feed cache" @@ -2974,6 +3216,66 @@ "@trackReEnrichSelectAll": { "description": "Select all fields checkbox in re-enrich" }, + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" + }, + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" + }, + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" + }, + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" + }, + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" + }, + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", + "placeholders": { + "changeCount": { + "type": "int" + }, + "trackCount": { + "type": "int" + } + } + }, + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" + }, + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, "trackEditMetadata": "Editar información", "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" @@ -3070,6 +3372,14 @@ "@trackConvertBitrate": { "description": "Label for bitrate selection" }, + "trackConvertKeepOriginal": "Mantener archivo original", + "@trackConvertKeepOriginal": { + "description": "Toggle to preserve the source file during conversion" + }, + "trackConvertKeepOriginalDescription": "Agrega el archivo convertido como una entrada independiente en la biblioteca", + "@trackConvertKeepOriginalDescription": { + "description": "Description for preserving the source file during conversion" + }, "trackConvertConfirmTitle": "Confirmar conversión", "@trackConvertConfirmTitle": { "description": "Confirmation dialog title" @@ -3101,6 +3411,18 @@ } } }, + "trackConvertConfirmKeepOriginal": "¿Convertir desde {sourceFormat} a {targetFormat}?\n\nEl archivo original se conservará y el archivo convertido se agregará como una entrada independiente en la biblioteca.\n", + "@trackConvertConfirmKeepOriginal": { + "description": "Confirmation message when the source file will be preserved", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } + }, "trackConvertLosslessHint": "Conversión sin pérdidas — sin pérdida de calidad", "@trackConvertLosslessHint": { "description": "Hint shown when converting between lossless formats" @@ -3169,7 +3491,7 @@ } } }, - "cueSplitSplitting": "Dividiendo hoja CUE... ({current}/{total})", + "cueSplitSplitting": "¿Dividir \"{album}\" en archivos FLAC individuales {count} ?\n\nLos archivos se guardarán en el mismo directorio.", "@cueSplitSplitting": { "description": "Snackbar while splitting CUE", "placeholders": { @@ -3477,6 +3799,18 @@ } } }, + "selectionBatchConvertConfirmKeepOriginal": "¿Convertir {count} {count, plural, =1{track} other{tracks}} a {format}?\n\nLos archivos originales se conservarán y los archivos convertidos se agregarán como entradas separadas en la biblioteca.", + "@selectionBatchConvertConfirmKeepOriginal": { + "description": "Batch conversion confirmation when source files will be preserved", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } + }, "selectionBatchConvertSuccess": "Se convirtieron {success} de {total} pistas a {format}", "@selectionBatchConvertSuccess": { "description": "Snackbar after batch conversion completes", @@ -3567,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (buena para canciones chinas, a\ntravés de proxy)", + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -3858,6 +4192,26 @@ "@storageModeSafSubtitle": { "description": "Subtitle for SAF storage mode" }, + "downloadFolderAccessLostTitle": "Se perdió el acceso a la carpeta de descargas", + "@downloadFolderAccessLostTitle": { + "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" + }, + "downloadFolderAccessLostSubtitle": "Las descargas fallarán hasta que vuelvas a seleccionar la carpeta", + "@downloadFolderAccessLostSubtitle": { + "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" + }, + "downloadFolderReselect": "Volver a seleccionar carpeta", + "@downloadFolderReselect": { + "description": "Button that reopens the folder picker to restore download folder access" + }, + "downloadErrorSafPermissionLost": "Permiso SAF inválido o revocado. Por favor, reconfigura la ubicación de descarga en Configuración.", + "@downloadErrorSafPermissionLost": { + "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" + }, + "downloadErrorFolderAccessLost": "Se ha perdido el acceso a la carpeta de descarga. Por favor, vuelve a seleccionar tu carpeta de descargas en Configuración.", + "@downloadErrorFolderAccessLost": { + "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" + }, "downloadFilenameDescription": "Usa {artist}, {title}, {album}, {track}, {year}, {date}, {disc} como marcadores de posición.", "@downloadFilenameDescription": { "description": "Description shown in filename format editor" @@ -3902,7 +4256,7 @@ "@downloadNetworkCompatibilityMode": { "description": "Setting for legacy TLS/network handling" }, - "downloadNetworkCompatibilityModeEnabled": "Uso de ajustes TLS heredados para redes antiguas", + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", "@downloadNetworkCompatibilityModeEnabled": { "description": "Subtitle when network compatibility mode is on" }, @@ -4084,16 +4438,57 @@ "@editMetadataAutoFillDesc": { "description": "Description for the auto-fill section" }, - "editMetadataAutoFillFetch": "Recuperar y llenar", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" + "editMetadataAutoFillSource": "Fuente de metadatos", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" }, - "editMetadataAutoFillSearching": "Buscando en línea...", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" + "editMetadataAutoFillSourceAutomatic": "Automático (prioridad del proveedor)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" }, - "editMetadataAutoFillNoResults": "No hay información coincidente en línea", - "@editMetadataAutoFillNoResults": { + "editMetadataAutoFillFind": "Buscar metadatos", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" + }, + "editMetadataAutoFillPreview": "Datos de {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } + }, + "editMetadataAutoFillCoverAvailable": "Portada disponible", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" + }, + "editMetadataAutoFillApply": "Aplicar datos seleccionados", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" + }, + "editMetadataAutoFillDoneFromSource": "Rellenado {count} {count, plural, =1{field} other{fields}} de {source}", + "@editMetadataAutoFillDoneFromSource": { + "description": "Snackbar confirming fields applied from a selected metadata source", + "placeholders": { + "count": { + "type": "int" + }, + "source": { + "type": "String" + } + } + }, + "editMetadataAutoFillFetch": "Recuperar y llenar", + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" + }, + "editMetadataAutoFillSearching": "Buscando en línea...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" + }, + "editMetadataAutoFillNoResults": "No hay información coincidente en línea", + "@editMetadataAutoFillNoResults": { "description": "Snackbar when online metadata search returns no results" }, "editMetadataAutoFillDone": "Se completaron {count} {count, plural, =1{campo} other{campos}} con metadatos en línea", @@ -4212,6 +4607,27 @@ "@queueEmptySinglesSubtitle": { "description": "Empty state subtitle for single track downloads" }, + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueEmptyPlaylistsSubtitle": "Crea una lista de reproducción para organizar tus temas", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" + }, + "libraryDefaultView": "Vista predeterminada", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" + }, + "libraryDefaultViewLastUsed": "Último uso", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" + }, "queueEmptyHistory": "No hay historial de descargas", "@queueEmptyHistory": { "description": "Empty state title when download history is empty" @@ -4312,6 +4728,10 @@ "@audioAnalysisSpectralCutoff": { "description": "Estimated spectral cutoff metric label" }, + "audioAnalysisCutoffNotDetected": "Not detected", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" + }, "audioAnalysisChannelStats": "Per-channel Stats", "@audioAnalysisChannelStats": { "description": "Per-channel audio analysis section label" @@ -4382,6 +4802,14 @@ "@cancelDownloadKeep": { "description": "Dialog button - keep the active download (do not cancel)" }, + "queueCancelledTitle": "Download cancelled", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", "@metadataSaveFailedFfmpeg": { "description": "Snackbar error when FFmpeg fails to write metadata" @@ -4465,6 +4893,14 @@ } } }, + "notifVerificationRequiredTitle": "Verification required", + "@notifVerificationRequiredTitle": { + "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" + }, + "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", + "@notifVerificationRequiredBody": { + "description": "Notification body prompting the user to return to the app to solve a verification challenge" + }, "notifAllDownloadsComplete": "Todas las descargas completadas", "@notifAllDownloadsComplete": { "description": "Notification title when all downloads finish successfully" @@ -4641,7 +5077,7 @@ }, "homeImportCsvTooltip": "Import playlist (CSV, M3U)", "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, "homeChangeSearchProviderTooltip": "Change search provider", "@homeChangeSearchProviderTooltip": { @@ -4707,6 +5143,18 @@ "@trackCoverReplaceNotice": { "description": "Notice shown when a new cover has been selected but not saved yet" }, + "trackCoverResolution": "Cover resolution", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" + }, + "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" + }, + "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", + "@trackCoverResizeFailed": { + "description": "Error shown when resizing cover art before saving metadata fails" + }, "actionStop": "Detener", "@actionStop": { "description": "Generic action - stop" @@ -4715,10 +5163,63 @@ "@queueFinalizingDownload": { "description": "Accessibility label for a queue item that is finalizing" }, + "queueDownloadNext": "Download next", + "@queueDownloadNext": { + "description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it" + }, + "queueMoveUp": "Move up", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" + }, + "queueMoveDown": "Move down", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" + }, + "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" + }, + "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" + }, + "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" + }, + "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" + }, + "nowPlayingRepeatOff": "Repeat off", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" + }, + "nowPlayingRepeatAll": "Repeat all", + "@nowPlayingRepeatAll": { + "description": "Repeat toggle tooltip when the whole queue repeats" + }, + "nowPlayingRepeatOne": "Repeat one", + "@nowPlayingRepeatOne": { + "description": "Repeat toggle tooltip when the current track repeats" + }, + "queueNetworkFailedOffline": "{count} downloads failed while offline", + "@queueNetworkFailedOffline": { + "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", + "placeholders": { + "count": { + "type": "int" + } + } + }, "queueDownloadedFileMissing": "Downloaded file missing", "@queueDownloadedFileMissing": { "description": "Accessibility label when a downloaded file is missing from disk" }, + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." + }, "queueDownloadCompleted": "Descarga completada", "@queueDownloadCompleted": { "description": "Accessibility label for completed download state in queue" @@ -4978,10 +5479,26 @@ "@downloadDeduplicationEnabled": { "description": "Subtitle when deduplication is on" }, + "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", + "@downloadDeduplicationWithQualityVariants": { + "description": "Deduplication subtitle when separate quality versions are allowed" + }, "downloadDeduplicationDisabled": "Todas las pistas se descargarán independientemente del historial", "@downloadDeduplicationDisabled": { "description": "Subtitle when deduplication is off" }, + "downloadQualityVariants": "Allow different quality versions", + "@downloadQualityVariants": { + "description": "Setting to retain multiple quality versions of the same track" + }, + "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", + "@downloadQualityVariantsDescription": { + "description": "Description for retaining multiple quality versions" + }, + "trackOptionDownloadQualityVariant": "Download another quality", + "@trackOptionDownloadQualityVariant": { + "description": "Track menu action to download another quality version" + }, "downloadFallbackExtensions": "Reslpado de extensiones", "@downloadFallbackExtensions": { "description": "Settings item for configuring fallback extension providers" @@ -5010,6 +5527,34 @@ "@editMetadataFieldComment": { "description": "Label for comment field in the edit metadata sheet" }, + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" + }, + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" + }, + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" + }, + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" + }, + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" + }, + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" + }, + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, "editMetadataAdvanced": "Avanzado", "@editMetadataAdvanced": { "description": "Expandable section label for advanced metadata fields" @@ -5030,6 +5575,10 @@ "@libraryFilterMetadataIncorrectIsrcFormat": { "description": "Filter option - items with an invalid ISRC format" }, + "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, "libraryFilterMetadataMissingLabel": "Falta etiqueta", "@libraryFilterMetadataMissingLabel": { "description": "Filter option - items missing record label" @@ -5122,9 +5671,17 @@ } }, "queueDownloadStarting": "Comenzando...", + "queueCheckingDownloadSession": "Checking download session...", + "queueResolvingDownloadMetadata": "Resolving track metadata...", + "queueResolvingDownloadStream": "Preparing audio stream...", + "queueWaitingForVerification": "Waiting for verification...", + "queueResumingAfterVerification": "Resuming after verification...", "@queueDownloadStarting": { "description": "Queue status before download progress is available" }, + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." + }, "a11ySelectTrack": "Seleccionar pista", "@a11ySelectTrack": { "description": "Accessibility label for selecting a track" @@ -5210,7 +5767,7 @@ "@downloadNativeWorker": { "description": "Setting title for Android native download worker" }, - "downloadNativeWorkerSubtitle": "Servicio de Android en segundo plano para descargas de extensiones", + "downloadNativeWorkerSubtitle": "Android background service for extension downloads", "@downloadNativeWorkerSubtitle": { "description": "Setting subtitle for Android native download worker" }, @@ -5491,11 +6048,56 @@ "description": "Title for the playback queue sheet" }, "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, "nowPlayingDetails": "Details", "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, "nowPlayingOpenInExternalPlayer": "Open in external player", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" @@ -5870,233 +6472,77 @@ "@extensionVerificationOpenBrowser": { "description": "Button to open the extension verification URL in a browser" }, - "updateRequiredTitle": "Actualización Necesaria", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" - }, - "updateRequiredNotice": "Esta versión está {count} lanzamientos detrás de la actual y ya no es soportada. Actualice para seguir usando la app.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "appearanceHeroAnimations": "Animaciones Hero", - "@appearanceHeroAnimations": { - "description": "Toggle for shared-element (Hero) transitions" - }, - "appearanceHeroAnimationsSubtitle": "Covers voladores entre pantallas, ejemplo: cuando abre el reproductor", - "@appearanceHeroAnimationsSubtitle": { - "description": "Subtitle for the Hero animations toggle" - }, - "settingsConcurrentDownloads": "Descargas concurrentes", - "@settingsConcurrentDownloads": { - "description": "Setting title - how many tracks download at the same time" - }, - "settingsConcurrentDownloadsSubtitle": "Descargar varios archivos a la vez es rápido, pero con algunos proveedores puede haber un límite en pedidos paralelos.", - "@settingsConcurrentDownloadsSubtitle": { - "description": "Subtitle explaining the concurrent downloads picker" - }, - "concurrentDownloadsOne": "1 archivo a la vez", - "@concurrentDownloadsOne": { - "description": "Concurrent downloads option - sequential" - }, - "concurrentDownloadsCount": "Hasta {count} archivos a la vez", - "@concurrentDownloadsCount": { - "description": "Concurrent downloads option - parallel", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "libraryPlaybackNormalization": "Normalización de volumen", - "@libraryPlaybackNormalization": { - "description": "Toggle title for ReplayGain playback normalization in the built-in player" - }, - "libraryPlaybackNormalizationSubtitle": "Equaliza el volumen entre las pistas utilizando sus etiquetas ReplayGain o R128, cuando estén presentes", - "@libraryPlaybackNormalizationSubtitle": { - "description": "Subtitle explaining playback volume normalization" - }, - "cacheAudioAnalysis": "Caché de análisis de audio", - "@cacheAudioAnalysis": { - "description": "Cache item title for saved audio analysis results" - }, - "cacheAudioAnalysisDesc": "Espectrogramas y resultados de análisis guardados. Se volverán a analizar la próxima vez que se abra el programa.", - "@cacheAudioAnalysisDesc": { - "description": "Description of what audio analysis cache contains" - }, - "trackConvertKeepOriginal": "Mantener archivo original", - "@trackConvertKeepOriginal": { - "description": "Toggle to preserve the source file during conversion" - }, - "trackConvertKeepOriginalDescription": "Agrega el archivo convertido como una entrada independiente en la biblioteca", - "@trackConvertKeepOriginalDescription": { - "description": "Description for preserving the source file during conversion" - }, - "trackConvertConfirmKeepOriginal": "¿Convertir desde {sourceFormat} a {targetFormat}?\n\nEl archivo original se conservará y el archivo convertido se agregará como una entrada independiente en la biblioteca.\n", - "@trackConvertConfirmKeepOriginal": { - "description": "Confirmation message when the source file will be preserved", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "settingsSearchHint": "Search settings", + "@settingsSearchHint": { + "description": "Placeholder of the search field on the Settings tab" }, - "selectionBatchConvertConfirmKeepOriginal": "¿Convertir {count} {count, plural, =1{track} other{tracks}} a {format}?\n\nLos archivos originales se conservarán y los archivos convertidos se agregarán como entradas separadas en la biblioteca.", - "@selectionBatchConvertConfirmKeepOriginal": { - "description": "Batch conversion confirmation when source files will be preserved", + "settingsSearchNoResults": "No settings match \"{query}\"", + "@settingsSearchNoResults": { + "description": "Shown when a Settings search returns nothing", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "query": { "type": "String" } } }, - "downloadFolderAccessLostTitle": "Se perdió el acceso a la carpeta de descargas", - "@downloadFolderAccessLostTitle": { - "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" - }, - "downloadFolderAccessLostSubtitle": "Las descargas fallarán hasta que vuelvas a seleccionar la carpeta", - "@downloadFolderAccessLostSubtitle": { - "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" - }, - "downloadFolderReselect": "Volver a seleccionar carpeta", - "@downloadFolderReselect": { - "description": "Button that reopens the folder picker to restore download folder access" - }, - "downloadErrorSafPermissionLost": "Permiso SAF inválido o revocado. Por favor, reconfigura la ubicación de descarga en Configuración.", - "@downloadErrorSafPermissionLost": { - "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" - }, - "downloadErrorFolderAccessLost": "Se ha perdido el acceso a la carpeta de descarga. Por favor, vuelve a seleccionar tu carpeta de descargas en Configuración.", - "@downloadErrorFolderAccessLost": { - "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" - }, - "notifVerificationRequiredTitle": "Verification required", - "@notifVerificationRequiredTitle": { - "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" - }, - "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", - "@notifVerificationRequiredBody": { - "description": "Notification body prompting the user to return to the app to solve a verification challenge" - }, - "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", - "@downloadDeduplicationWithQualityVariants": { - "description": "Deduplication subtitle when separate quality versions are allowed" - }, - "downloadQualityVariants": "Allow different quality versions", - "@downloadQualityVariants": { - "description": "Setting to retain multiple quality versions of the same track" - }, - "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", - "@downloadQualityVariantsDescription": { - "description": "Description for retaining multiple quality versions" - }, - "trackOptionDownloadQualityVariant": "Download another quality", - "@trackOptionDownloadQualityVariant": { - "description": "Track menu action to download another quality version" - }, - "queueCheckingDownloadSession": "Checking download session...", - "queueResolvingDownloadMetadata": "Resolving track metadata...", - "queueResolvingDownloadStream": "Preparing audio stream...", - "queueWaitingForVerification": "Waiting for verification...", - "queueResumingAfterVerification": "Resuming after verification...", - "settingsSearchHint": "Search settings", - "settingsSearchNoResults": "No settings match \"{query}\"", "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", - "collectionExportM3u": "Exportar como M3U8", - "collectionExportM3uDone": "Exportado {exported} de {total} pistas", - "collectionExportM3uNone": "No hay archivos descargados para exportar", - "collectionExportM3uFailed": "Exportación fallida", - "trackOpenOn": "Abrir en...", - "trackOpenOnNoLinks": "No se han encontrado enlaces para esta pista.", - "libraryReviewDuplicates": "Revisar duplicados", - "libraryReviewDuplicatesSubtitle": "Encontrar pistas almacenadas más de una vez", - "duplicatesTitle": "Duplicados", - "duplicatesEmpty": "No se han encontrado pistas duplicadas.", - "duplicatesKeepBest": "Mantener mejor", - "duplicatesKeepBestMessage": "¿Eliminar {count} copias de menor calidad del \"{trackName}\"?", - "duplicatesDeleteCopyMessage": "¿Eliminar esta copia de \"{trackName}\"?", - "downloadAutoConvert": "Auto-convert after download", - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "downloadAutoConvertFormat": "Output format", - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "downloadAutoConvertBitrate": "Output quality", - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "appearanceForceBlur": "Siempre use efecto desenfoque", - "appearanceForceBlurSubtitle": "Habilite la barra de navegación desenfocada incluso en dispositivos donde está desactivada por defecto. Puede costar rendimiento.", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "editMetadataAutoFillSource": "Fuente de metadatos", - "editMetadataAutoFillSourceAutomatic": "Automático (prioridad del proveedor)", - "editMetadataAutoFillFind": "Buscar metadatos", - "editMetadataAutoFillPreview": "Datos de {source}", - "editMetadataAutoFillCoverAvailable": "Portada disponible", - "editMetadataAutoFillApply": "Aplicar datos seleccionados", - "editMetadataAutoFillDoneFromSource": "Rellenado {count} {count, plural, =1{field} other{fields}} de {source}", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Crea una lista de reproducción para organizar tus temas", - "libraryDefaultView": "Vista predeterminada", - "libraryDefaultViewLastUsed": "Último uso", - "audioAnalysisCutoffNotDetected": "Not detected", - "queueCancelledTitle": "Download cancelled", - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", - "trackCoverResolution": "Cover resolution", - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", - "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", - "queueDownloadNext": "Download next", - "queueMoveUp": "Move up", - "queueMoveDown": "Move down", - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", - "nowPlayingRepeatOff": "Repeat off", - "nowPlayingRepeatAll": "Repeat all", - "nowPlayingRepeatOne": "Repeat one", - "queueNetworkFailedOffline": "{count} downloads failed while offline", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "libraryFilterMetadataMissingIsrc": "Missing ISRC" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From 259e100d6c7a91b054ab041bcdf7ab117bd03471 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:28 +0700 Subject: [PATCH 02/59] New translations app_en.arb (Ukrainian) [ci skip] --- lib/l10n/arb/app_uk.arb | 9612 ++++++++++++++++++++------------------- 1 file changed, 5029 insertions(+), 4583 deletions(-) diff --git a/lib/l10n/arb/app_uk.arb b/lib/l10n/arb/app_uk.arb index 84840a1d2..3cc0756aa 100644 --- a/lib/l10n/arb/app_uk.arb +++ b/lib/l10n/arb/app_uk.arb @@ -1,2673 +1,2662 @@ { "@@locale": "uk", "@@last_modified": "2026-04-28", - "libraryEnableLocalLibrarySubtitle": "Скануати та відстежити свою існуючу музику", - "@libraryEnableLocalLibrarySubtitle": { - "description": "Subtitle for enable toggle" - }, - "@audioAnalysisCodec": { - "description": "Audio codec metric label" + "appName": "", + "@appName": { + "description": "App name - DO NOT TRANSLATE" }, - "extensionUtilityFunctions": "Utility Functions", - "@extensionUtilityFunctions": { - "description": "Capability label for utility-only extensions" + "navHome": "Головна", + "@navHome": { + "description": "Bottom navigation - Home tab" }, - "logClearLogsMessage": "Ви впевнені, що хочете очистити всі журнали?", - "@logClearLogsMessage": { - "description": "Clear logs confirmation message" + "navLibrary": "Бібліотека", + "@navLibrary": { + "description": "Bottom navigation - Library tab" }, - "@storeClearFilters": { - "description": "Button to clear all filters" + "navSettings": "Налаштування", + "@navSettings": { + "description": "Bottom navigation - Settings tab" }, - "cacheCleanupUnused": "Очищення невикористаних даних", - "@cacheCleanupUnused": { - "description": "Action title for cleaning unused entries" + "navStore": "Репозиторій", + "@navStore": { + "description": "Bottom navigation - Extension repo tab" }, - "trackConvertDitherNone": "None", - "@trackConvertDitherNone": { - "description": "Lossless conversion dither option with no dithering applied" + "homeTitle": "Головна", + "@homeTitle": { + "description": "Home screen title" }, - "libraryTracksUnit": "{count, plural, =1{трек} other{треків}}", - "@libraryTracksUnit": { - "description": "Unit label for tracks count (without the number itself)", - "placeholders": { - "count": { - "type": "int" - } - } + "homeSubtitle": "Вставте URL-адресу яка підтримується, або виконайте пошук за назвою", + "@homeSubtitle": { + "description": "Subtitle shown below search box" }, - "folderOrganizationNone": "Жодної організації", - "@folderOrganizationNone": { - "description": "Folder option - flat structure" + "homeEmptyTitle": "", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" }, - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" }, - "@trackConvertConfirmTitle": { - "description": "Confirmation dialog title" + "homeSupports": "Підтримує: URL-адреси треків, альбомів, списків відтворення, виконавців", + "@homeSupports": { + "description": "Info text about supported URL types" }, - "@extensionPatternsCount": { - "description": "URL patterns count", - "placeholders": { - "count": { - "type": "int" - } - } + "homeRecent": "Нещодавні", + "@homeRecent": { + "description": "Section header for recent searches" }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" + "historyFilterAll": "Усі", + "@historyFilterAll": { + "description": "Filter chip - show all items" }, - "libraryAutoScanOff": "Вимкнено", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" + "historyFilterAlbums": "Альбоми", + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" }, - "shareSheetLinkCopied": "{service} link copied", - "@shareSheetLinkCopied": { - "description": "Snackbar after copying a cross-service link", - "placeholders": { - "service": {} - } + "historyFilterSingles": "Сингли", + "@historyFilterSingles": { + "description": "Filter chip - show singles only" }, - "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" + "historySearchHint": "Історія пошуку...", + "@historySearchHint": { + "description": "Search bar placeholder in history" }, - "@replayGainBatchConfirmMessage": { - "description": "Message of the batch ReplayGain confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsTitle": "Налаштування", + "@settingsTitle": { + "description": "Settings screen title" }, - "@extensionsHomeFeedUse": { - "description": "Extensions page - subtitle for a specific extension home feed option", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "settingsDownload": "Завантаження", + "@settingsDownload": { + "description": "Settings section - download options" }, - "selectionShareCount": "Поділитися {count} {count, plural, =1{трек} other{треків}}", - "@selectionShareCount": { - "description": "Share button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsAppearance": "Зовнішній вигляд", + "@settingsAppearance": { + "description": "Settings section - visual customization" }, - "@storeExtensionsCount": { - "description": "Store extension result count", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsExtensions": "Розширення", + "@settingsExtensions": { + "description": "Settings section - extension management" }, - "@logSearchHint": { - "description": "Log search placeholder" + "settingsAbout": "Про додаток", + "@settingsAbout": { + "description": "Settings section - app info" }, - "@audioAnalysisSamples": { - "description": "Total samples metric label" + "downloadTitle": "Завантажити", + "@downloadTitle": { + "description": "Download settings page title" }, - "trackCoverReplace": "Replace Cover", - "@trackCoverReplace": { - "description": "Button label for replacing selected cover art" + "downloadAskQualitySubtitle": "Показувати вікно вибору якості для кожного завантаження", + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" }, - "@discographyAddedToQueue": { - "description": "Snackbar - tracks added from discography", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameFormat": "Формат імені файлу", + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" + "downloadSingleFilenameFormat": "Формат імені одного файлу", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" }, - "@nowPlayingDetails": { - "description": "Menu item and section title for track metadata details" + "downloadSingleFilenameFormatDescription": "Шаблон назви файлу для синглів та міні-альбомів. Використовує ті самі теги, що й формат альбому.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" }, - "@trackGenre": { - "description": "Metadata label - music genre" + "downloadFolderOrganization": "Організація папок", + "@downloadFolderOrganization": { + "description": "Title of the folder organization picker bottom sheet" }, - "recentTypeSong": "Пісня", - "@recentTypeSong": { - "description": "Recent access item type - song/track" + "appearanceTitle": "Зовнішній вигляд", + "@appearanceTitle": { + "description": "Appearance settings page title" }, - "logShareLogs": "Журнали обміну", - "@logShareLogs": { - "description": "Share button tooltip" + "appearanceThemeSystem": "Системний", + "@appearanceThemeSystem": { + "description": "Follow system theme" }, - "@storeFilterLyrics": { - "description": "Repo filter - lyrics providers" + "appearanceThemeLight": "Світлий", + "@appearanceThemeLight": { + "description": "Light theme" }, - "extensionsInstallButton": "Встановити розширення", - "@extensionsInstallButton": { - "description": "Button to install extension from file" + "appearanceThemeDark": "Темний", + "@appearanceThemeDark": { + "description": "Dark theme" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", - "@replayGainBatchSuccess": { - "description": "Snackbar after batch ReplayGain completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "appearanceDynamicColor": "Динамічний колір", + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" }, - "nowPlayingMinimize": "Minimize", - "@nowPlayingMinimize": { - "description": "Tooltip for minimizing the now playing screen" + "appearanceDynamicColorSubtitle": "Використати кольори зі своїх шпалер", + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" }, - "logIssueNetworkErrorSuggestion": "Check your internet connection", - "@logIssueNetworkErrorSuggestion": { - "description": "Diagnostic badge suggestion for generic network errors" + "appearanceHistoryView": "Історія переглядів", + "@appearanceHistoryView": { + "description": "Layout style for history" }, - "extensionsNoExtensions": "Розширень не встановлено", - "@extensionsNoExtensions": { - "description": "Empty state - no extensions" + "appearanceHistoryViewList": "Список", + "@appearanceHistoryViewList": { + "description": "List layout option" }, - "@cacheRefresh": { - "description": "Tooltip for refresh button on cache management page" + "appearanceHistoryViewGrid": "Сітка", + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" }, - "@snackbarHistoryCleared": { - "description": "Snackbar - history deleted" + "optionsPrimaryProvider": "Основний постачальник", + "@optionsPrimaryProvider": { + "description": "Main search provider setting" }, - "cueSplitFailed": "Розділення CUE не вдалося", - "@cueSplitFailed": { - "description": "Snackbar when CUE split fails" + "optionsPrimaryProviderSubtitle": "Service used for searching by track or album name", + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" }, - "trackConvertLosslessSuffix": "Lossless", - "@trackConvertLosslessSuffix": { - "description": "Suffix used in converted lossless quality labels" - }, - "homeSubtitle": "Вставте URL-адресу яка підтримується, або виконайте пошук за назвою", - "@homeSubtitle": { - "description": "Subtitle shown below search box" - }, - "selectionBatchConvertConfirmMessageLossless": "Конвертувати {count} {count, plural, =1{трек} other{треків}} у {format}? (Lossless — без втрати якості)\n\nОригінальні файли будуть видалені після конвертації.", - "@selectionBatchConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless batch conversion", + "optionsUsingExtension": "Використання розширення: {extensionName}", + "@optionsUsingExtension": { + "description": "Shows active extension name", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "extensionName": { "type": "String" } } }, - "@extensionVerificationHelpMessageManual": { - "description": "Dialog message when automatic browser launch for verification fails" - }, - "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", - "@queueRateLimitMessage": { - "description": "Explanation shown on a failed queue item when the download service rate limits requests" - }, - "searchSortDateOldest": "Дата випуску (найстаріша)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "nowPlayingShuffleOn": "Shuffle on", - "@nowPlayingShuffleOn": { - "description": "Tooltip when shuffle mode is enabled" - }, - "sectionColor": "Колір", - "@sectionColor": { - "description": "Settings section header" - }, - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "cacheCoverImage": "Кеш зображень обкладинок", - "@cacheCoverImage": { - "description": "Cache item title for persistent cover images" + "optionsDefaultSearchTab": "Вкладка пошуку за замовчуванням", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" }, - "@navSettings": { - "description": "Bottom navigation - Settings tab" + "optionsDefaultSearchTabSubtitle": "Виберіть, яка вкладка відкриється першою для нових результатів пошуку.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" }, - "@trackCoverReplaceNotice": { - "description": "Notice shown when a new cover has been selected but not saved yet" + "optionsAutoFallback": "Автоматичний резервний варіант", + "@optionsAutoFallback": { + "description": "Auto-retry with other services" }, - "cueSplitConfirmTitle": "Розділений альбом CUE", - "@cueSplitConfirmTitle": { - "description": "CUE split confirmation dialog title" + "optionsAutoFallbackSubtitle": "Спробувати інші сервіси, якщо завантаження не вдається", + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" }, - "@trackDeleteConfirmMessage": { - "description": "Delete confirmation message" + "optionsEmbedLyrics": "Вбудований текст пісні", + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" }, - "cacheClearSuccess": "Очищено: {target}", - "@cacheClearSuccess": { - "description": "Snackbar after clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "optionsEmbedLyricsSubtitle": "Save synced lyrics alongside your downloaded tracks", + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" }, - "editMetadataFieldCover": "Обкладинка", - "@editMetadataFieldCover": { - "description": "Chip label for cover art field in auto-fill selector" + "optionsReplayGain": "Нормалізація звуку", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" }, - "snackbarSelectExtFile": "Будь ласка, виберіть файл .spotiflac-ext", - "@snackbarSelectExtFile": { - "description": "Snackbar - wrong file type selected" + "optionsReplayGainSubtitleOn": "Сканування гучності та вбудовування тегів нормалізації звуку (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" }, - "libraryFilterFormat": "Формат", - "@libraryFilterFormat": { - "description": "Filter section - file format" + "optionsReplayGainSubtitleOff": "Вимкнено: немає тегів нормалізації гучності", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" }, - "@downloadLossyAac": { - "description": "Lossy format option - AAC in M4A container at 320kbps" + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "@setupNext": { - "description": "Next button text" + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "@releaseTypeSingle": { - "description": "Badge label for single releases" + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" }, - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", - "@trackConvertLosslessOutputWithCap": { - "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", "placeholders": { - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "bulkDownloadSelectPlaylists": "Вибрати списки відтворення для завантаження", - "@bulkDownloadSelectPlaylists": { - "description": "Button label when no playlists are selected for download" - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "@timeJustNow": { - "description": "Relative time - less than a minute ago" - }, - "downloadLossyOpus256": "Opus 256 кбіт/с", - "@downloadLossyOpus256": { - "description": "Lossy format option - Opus 256kbps" + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" }, - "discographySinglesOnlySubtitle": "{count} треків з {albumCount} синглів", - "@discographySinglesOnlySubtitle": { - "description": "Subtitle showing singles tracks count", + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { "count": { "type": "int" - }, - "albumCount": { - "type": "int" } } }, - "optionsExtensionStore": "Репозиторій розширень", - "@optionsExtensionStore": { - "description": "Show/hide repo tab" + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" }, - "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", - "@libraryDownloadsHistoryExcluded": { - "description": "Library count note for downloaded history items excluded from the local list", + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", "placeholders": { - "count": { + "success": { + "type": "int" + }, + "total": { "type": "int" } } }, - "@errorUrlFetchFailed": { - "description": "Error message - generic URL fetch failure" - }, - "@trackOptionAddToWishlist": { - "description": "Bottom sheet action label - add track to wishlist" + "optionsArtistTagMode": "Режим тегу виконавця", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" }, - "discographySinglesOnly": "Тільки сингли та міні-альбоми", - "@discographySinglesOnly": { - "description": "Option - download only singles" + "optionsArtistTagModeDescription": "Виберіть, як будуть записуватися кілька виконавців у вбудовані теги.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" }, - "@downloadSongLinkRegionDesc": { - "description": "Description in SongLink region picker" + "optionsArtistTagModeJoined": "Одне об'єднане значення", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" }, - "notifEmbeddingMetadata": "Вбудовування метаданих...", - "@notifEmbeddingMetadata": { - "description": "Notification body while embedding metadata into a downloaded track" + "optionsArtistTagModeJoinedSubtitle": "Для максимальної сумісності програвача напишіть одне значення ARTIST, наприклад, «Виконавець A, Виконавець B».", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" }, - "@settingsLocalLibrarySubtitle": { - "description": "Subtitle for local library settings" + "optionsArtistTagModeSplitVorbis": "Розділені теги для FLAC/Opus", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "@downloadLocationSubtitle": { - "description": "Subtitle shown in the download location picker sheet" + "optionsArtistTagModeSplitVorbisSubtitle": "Для FLAC та Opus на кожного виконавця додати окремий тег виконавця; MP3 та M4A залишаються об’єднаними.", + "@optionsArtistTagModeSplitVorbisSubtitle": { + "description": "Subtitle for split Vorbis artist tag mode" }, - "trackConvertOriginalQuality": "Original quality", - "@trackConvertOriginalQuality": { - "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + "optionsExtensionStore": "Репозиторій розширень", + "@optionsExtensionStore": { + "description": "Show/hide repo tab" }, - "nowPlayingTabLyrics": "Lyrics", - "@nowPlayingTabLyrics": { - "description": "Tab label for the lyrics view" + "optionsExtensionStoreSubtitle": "Показати вкладку «Репозиторій» у навігації", + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension repo toggle" }, - "selectionConvertCount": "Конвертувати {count} {count, plural, =1{трек} other{треків}}", - "@selectionConvertCount": { - "description": "Convert button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsCheckUpdates": "Перевірити наявність оновлень", + "@optionsCheckUpdates": { + "description": "Auto update check toggle" }, - "@extensionsInstalledSection": { - "description": "Section header - installed extensions" + "optionsCheckUpdatesSubtitle": "Повідомити, коли буде доступна нова версія", + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" }, - "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is off" + "optionsUpdateChannel": "Канал оновлень", + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" }, - "nowPlayingShuffleLibrary": "Shuffle library", - "@nowPlayingShuffleLibrary": { - "description": "Button label to shuffle and play the entire local library" + "optionsUpdateChannelStable": "Тільки стабільні релізи", + "@optionsUpdateChannelStable": { + "description": "Only stable updates" }, - "trackReEnrichFieldCover": "Обкладинка", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" + "optionsUpdateChannelPreview": "Отримати попередні релізи", + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", - "@tutorialExtensionsTip3": { - "description": "Tutorial extensions tip 3" + "optionsUpdateChannelWarning": "Тестовий реліз може містити помилки або неповні функції", + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" }, - "@cacheCleanupUnusedDesc": { - "description": "Description of what cleanup unused data does" - }, - "a11yOpenAlbum": "Open album {albumName}", - "@a11yOpenAlbum": { - "description": "Accessibility label for opening an album", - "placeholders": { - "albumName": { - "type": "String" - } - } + "optionsClearHistory": "Очистити історію завантажень", + "@optionsClearHistory": { + "description": "Delete all download history" }, - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" + "optionsClearHistorySubtitle": "Видалити всі завантажені треки з історії", + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" }, - "nowPlayingQueueEmpty": "Queue is empty", - "@nowPlayingQueueEmpty": { - "description": "Empty state when the playback queue has no items" + "optionsDetailedLogging": "Детальне журналювання", + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" }, - "@settingsDownload": { - "description": "Settings section - download options" + "optionsDetailedLoggingOn": "Ведеться детальний журнал", + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", - "@notifTracksDownloadedSuccess": { - "description": "Notification body for queue complete - how many tracks were downloaded", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsDetailedLoggingOff": "Увімкнути для звітів про помилки", + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" }, - "storeCategoryDownload": "Download", - "@storeCategoryDownload": { - "description": "Store extension category - download" + "extensionsTitle": "Розширення", + "@extensionsTitle": { + "description": "Extensions page title" }, - "aboutTelegramChannel": "Телеграм-канал", - "@aboutTelegramChannel": { - "description": "Link to Telegram channel" + "extensionsDisabled": "Вимкнені", + "@extensionsDisabled": { + "description": "Extension status - inactive" }, - "@downloadedAlbumDiscHeader": { - "description": "Header for disc separator in multi-disc albums", + "extensionsVersion": "Версія {version}", + "@extensionsVersion": { + "description": "Extension version display", "placeholders": { - "discNumber": { - "type": "int", - "example": "1" + "version": { + "type": "String" } } }, - "@recentEmpty": { - "description": "Empty state text for recent access list" + "extensionsUninstall": "Видалити", + "@extensionsUninstall": { + "description": "Uninstall extension button" }, - "@backupRestoreConfirmMessage": { - "description": "Confirmation dialog message before restoring a backup" + "storeTitle": "Репозиторій розширень", + "@storeTitle": { + "description": "Repo screen title" }, - "@shareSheetCopyLink": { - "description": "Tooltip for copying a cross-service link" + "storeSearch": "Розширення пошуку...", + "@storeSearch": { + "description": "Repo search placeholder" }, - "regionCountryID": "Indonesia", - "@regionCountryID": { - "description": "Country name for SongLink region picker" + "storeInstall": "Встановити", + "@storeInstall": { + "description": "Install extension button" }, - "@libraryInLibrary": { - "description": "Badge shown on tracks that exist in local library" + "storeInstalled": "Встановлені", + "@storeInstalled": { + "description": "Already installed badge" }, - "extensionPostProcessingHooks": "Хуки пост-обробки", - "@extensionPostProcessingHooks": { - "description": "Capability - post-processing" + "storeUpdate": "Оновлені", + "@storeUpdate": { + "description": "Update available button" }, - "@setupGrantPermission": { - "description": "Button to request permission" + "aboutTitle": "Про нас", + "@aboutTitle": { + "description": "About page title" }, - "storeFilterDownload": "Завантажити", - "@storeFilterDownload": { - "description": "Repo filter - download providers" + "aboutContributors": "Автори", + "@aboutContributors": { + "description": "Section for contributors" }, - "@collectionAddToPlaylist": { - "description": "Action to add a track to user playlist" + "aboutMobileDeveloper": "Розробник мобільної версії", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" }, - "@discographyFailedToFetch": { - "description": "Error - some albums failed to load" + "aboutOriginalCreator": "Творець оригінального SpotiFLAC", + "@aboutOriginalCreator": { + "description": "Role description for original creator" }, - "@updateWhatsNew": { - "description": "Changelog section title" + "aboutLogoArtist": "Талановитий художник, який створив чудовий логотип нашого додатку!", + "@aboutLogoArtist": { + "description": "Role description for logo artist" }, - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" + "aboutTranslators": "Перекладачі", + "@aboutTranslators": { + "description": "Section for translators" }, - "dialogDeleteSelectedTitle": "Видалити вибране", - "@dialogDeleteSelectedTitle": { - "description": "Dialog title - delete selected items" + "aboutSpecialThanks": "Особлива подяка", + "@aboutSpecialThanks": { + "description": "Section for special thanks" }, - "trackCoverPick": "Pick Cover", - "@trackCoverPick": { - "description": "Button label for selecting cover art" + "aboutLinks": "Посилання", + "@aboutLinks": { + "description": "Section for external links" }, - "@collectionCreatePlaylist": { - "description": "Action to create a new playlist" + "aboutMobileSource": "Мобільний вихідний код", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" }, - "selectionBatchConvertSuccess": "Конвертовано {success} з {total} треків у {format}", - "@selectionBatchConvertSuccess": { - "description": "Snackbar after batch conversion completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "aboutPCSource": "Вихідний код для ПК", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" }, - "qualityHiResFlacMax": "FLAC Max з високою роздільною здатністю", - "@qualityHiResFlacMax": { - "description": "Quality option - maximum resolution FLAC" + "aboutKeepAndroidOpen": "Keep Android Open", + "@aboutKeepAndroidOpen": { + "description": "Link to Keep Android Open campaign website" }, - "audioAnalysisStereo": "Stereo", - "@audioAnalysisStereo": { - "description": "Audio channel layout label - stereo" + "aboutReportIssue": "Повідомити про проблему", + "@aboutReportIssue": { + "description": "Link to report bugs" }, - "backupExportButton": "Create backup file", - "@backupExportButton": { - "description": "Button to create and share a backup file" + "aboutReportIssueSubtitle": "Повідомити про будь-які проблеми, з якими ви зіткнулися", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" }, - "settingsApp": "App", - "@settingsApp": { - "description": "Settings menu item - app settings" + "aboutFeatureRequest": "Запит на функцію", + "@aboutFeatureRequest": { + "description": "Link to suggest features" }, - "clickableInformationUnavailable": "{type} information not available", - "@clickableInformationUnavailable": { - "description": "Snackbar shown when clickable metadata cannot open a destination", - "placeholders": { - "type": { - "type": "String" - } - } + "aboutFeatureRequestSubtitle": "Запропонувати нові функції для програми", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" }, - "@logFilterLevel": { - "description": "Filter by log level" + "aboutTelegramChannel": "Телеграм-канал", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" }, - "sectionTheme": "Тема", - "@sectionTheme": { - "description": "Settings section header" + "aboutTelegramChannelSubtitle": "Оголошення та оновлення", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" }, - "@extensionActionFailed": { - "description": "Fallback error when an extension action fails without details" + "aboutTelegramChat": "Telegram Спільнота", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" }, - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + "aboutTelegramChatSubtitle": "Спілкуватися з іншими користувачами", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" }, - "@extensionsNoCustomSearch": { - "description": "Empty state - no search providers" + "aboutSocial": "Соціальні мережі", + "@aboutSocial": { + "description": "Section for social links" }, - "@collectionPlaylistRemoveCover": { - "description": "Bottom sheet action to remove custom cover image from a playlist" + "aboutApp": "Додаток", + "@aboutApp": { + "description": "Section for app info" }, - "@tutorialWelcomeDesc": { - "description": "Tutorial welcome page description" + "aboutVersion": "Версія", + "@aboutVersion": { + "description": "Version info label" }, - "@tutorialSearchDesc": { - "description": "Tutorial search page description" + "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" }, - "collectionAddedToWishlist": "\"{trackName}\" додано до списку бажань", - "@collectionAddedToWishlist": { - "description": "Snackbar after adding track to wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } + "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" }, - "logAffectedDomains": "Affected: {domains}", - "@logAffectedDomains": { - "description": "Affected domains in log issue analysis", - "placeholders": { - "domains": { - "type": "String" - } - } + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" }, - "@folderOrganizationByArtistSubtitle": { - "description": "Subtitle for artist folder option" + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" }, - "errorNoTracksFound": "Треків не знайдено", - "@errorNoTracksFound": { - "description": "Error - search returned no results" + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" }, - "providerPriorityTitle": "Пріоритет постачальника", - "@providerPriorityTitle": { - "description": "Provider priority page title" + "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", + "@aboutAppDescription": { + "description": "App description in header card" }, - "@notifUpdateReadyBody": { - "description": "Notification body when app update is ready to install", + "artistAlbums": "Альбоми", + "@artistAlbums": { + "description": "Section header for artist albums" + }, + "artistSingles": "Сингли та міні-альбоми", + "@artistSingles": { + "description": "Section header for singles/EPs" + }, + "artistCompilations": "Збірники", + "@artistCompilations": { + "description": "Section header for compilations" + }, + "artistPopular": "Популярні", + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, + "artistMonthlyListeners": "{count} слухачів щомісяця", + "@artistMonthlyListeners": { + "description": "Monthly listener count display", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "String", + "description": "Formatted listener count" } } }, - "@settingsExtensions": { - "description": "Settings section - extension management" + "trackMetadataService": "Сервіс", + "@trackMetadataService": { + "description": "Metadata field - download service used" }, - "trackDeleteConfirmTitle": "Видалити з пристрою?", - "@trackDeleteConfirmTitle": { - "description": "Delete confirmation title" + "trackMetadataPlay": "Прослухати", + "@trackMetadataPlay": { + "description": "Action button - play track" }, - "@settingsDownloadNetwork": { - "description": "Setting for network type preference" + "trackMetadataShare": "Поділитися", + "@trackMetadataShare": { + "description": "Action button - share track" }, - "downloadProvidersNoneEnabled": "No providers enabled", - "@downloadProvidersNoneEnabled": { - "description": "Shown when no lyrics providers are active" + "trackMetadataDelete": "Видалити", + "@trackMetadataDelete": { + "description": "Action button - delete track" }, - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" + "setupGrantPermission": "Надати дозвіл", + "@setupGrantPermission": { + "description": "Button to request permission" }, - "trackReEnrichFieldBasicTags": "Альбом, Виконавець альбому", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + "setupSkip": "Пропустити поки що", + "@setupSkip": { + "description": "Skip current step button" }, - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" + "setupStorageAccessRequired": "Потрібен доступ до сховища", + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" }, - "@logClearLogsTitle": { - "description": "Clear logs dialog title" + "setupStorageAccessMessageAndroid11": "Для збереження файлів у вибрану папку завантажень для Android 11+ потрібен дозвіл «Доступ до всіх файлів».", + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" }, - "storageModeSafSubtitle": "Pick any folder, including SD card", - "@storageModeSafSubtitle": { - "description": "Subtitle for SAF storage mode" + "setupOpenSettings": "Відкрити налаштування", + "@setupOpenSettings": { + "description": "Button to open system settings" }, - "@notifUpdateProgress": { - "description": "Notification body showing update download progress", + "setupPermissionDeniedMessage": "Дозвіл відхилено. Будь ласка, надайте всі дозволи, щоб продовжити.", + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, + "setupPermissionRequired": "{permissionType} Потрібен дозвіл", + "@setupPermissionRequired": { + "description": "Generic permission required title", "placeholders": { - "received": { - "type": "String" - }, - "total": { - "type": "String" - }, - "percentage": { - "type": "int" + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" } } }, - "downloadUsePrimaryArtistOnlyEnabled": "Вибраних виконавців видалити з назви папки (наприклад, Джастін Бібер, Quavo → Джастін Бібер)", - "@downloadUsePrimaryArtistOnlyEnabled": { - "description": "Subtitle when primary artist only is enabled" - }, - "notifScanningLibrary": "Сканування локальної бібліотеки", - "@notifScanningLibrary": { - "description": "Notification title while scanning local library" - }, - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "setupGetStarted": "Почати", - "@setupGetStarted": { - "description": "Final setup button" - }, - "libraryFilterQualityCD": "CD (16-бітний)", - "@libraryFilterQualityCD": { - "description": "Filter option - CD quality audio" - }, - "sectionLayout": "Макет", - "@sectionLayout": { - "description": "Settings section header" - }, - "@tooltipLoveAll": { - "description": "Tooltip for the Love All button on album/playlist screens" - }, - "queueFinalizingDownload": "Finalizing download", - "@queueFinalizingDownload": { - "description": "Accessibility label for a queue item that is finalizing" - }, - "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", - "@trackConvertActionLabelLossy": { - "description": "Convert button label for lossy conversion", + "setupPermissionRequiredMessage": "{permissionType} Для найкращого досвіду потрібен дозвіл. Ви можете змінити це пізніше в налаштуваннях.", + "@setupPermissionRequiredMessage": { + "description": "Generic permission required message", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { + "permissionType": { "type": "String" } } }, - "extensionsMetadataPriority": "Пріоритет метаданих", - "@extensionsMetadataPriority": { - "description": "Setting - metadata provider order" + "setupUseDefaultFolder": "Використати папку за замовчуванням?", + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" }, - "updateCurrent": "Поточна", - "@updateCurrent": { - "description": "Label for current version" + "setupNoFolderSelected": "Папку не вибрано. Бажаєте використовувати папку «Музика» за замовчуванням?", + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" }, - "@aboutFeatureRequest": { - "description": "Link to suggest features" + "setupUseDefault": "Використовувати за замовчуванням", + "@setupUseDefault": { + "description": "Button to use default folder" }, - "@safMigrationSuccess": { - "description": "Snackbar after successfully migrating to SAF" + "setupDownloadLocationTitle": "Розташування завантаження", + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" }, - "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", - "@cleanupOrphanedDownloadsNone": { - "description": "Snackbar when no orphans found" + "setupDownloadLocationIosMessage": "На iOS завантаження зберігаються в папці «Документи» програми. Ви можете отримати до них доступ через програму «Файли».", + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (добре підходить для азійських пісень)", - "@lyricsProviderNeteaseDesc": { - "description": "Description for Netease provider" + "setupAppDocumentsFolder": "Папка з документами програми", + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" }, - "libraryScanCancelledSubtitle": "You can retry the scan when ready.", - "@libraryScanCancelledSubtitle": { - "description": "Library scan status subtitle after cancellation" + "setupAppDocumentsFolderSubtitle": "Рекомендація – доступно через додаток Файли", + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" }, - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" + "setupChooseFromFiles": "Вибрати з файлів", + "@setupChooseFromFiles": { + "description": "iOS file picker option" }, - "@trackAlbum": { - "description": "Metadata label - album name" + "setupChooseFromFilesSubtitle": "Виберіть iCloud або інше місцезнаходження", + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" }, - "dialogDeleteSelectedMessage": "Видалити {count} {count, plural, =1{трек} other{треків}} з історії?\n\nЦе також видалить файли з пам'яті.", - "@dialogDeleteSelectedMessage": { - "description": "Dialog message - delete selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "setupIosEmptyFolderWarning": "Обмеження iOS: Не можна вибрати порожні папки. Виберіть папку, яка містить принаймні один файл.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" }, - "trackReEnrich": "Перезбагачувати", - "@trackReEnrich": { - "description": "Menu action - re-embed metadata into audio file" + "setupIcloudNotSupported": "iCloud Drive не підтримується. Будь ласка, скористайтеся папкою «Документи» програми.", + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" }, - "@lyricsProvidersSaved": { - "description": "Snackbar after saving lyrics provider priority" + "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "@setupDownloadInFlac": { + "description": "App tagline in setup" }, - "@storageModeSaf": { - "description": "Storage mode option - Storage Access Framework" + "setupStorageGranted": "Дозвіл на зберігання надано!", + "@setupStorageGranted": { + "description": "Success message for storage permission" }, - "libraryStorageAccessRequired": "Потрібен доступ до сховища", - "@libraryStorageAccessRequired": { - "description": "Dialog title for storage permission" + "setupStorageRequired": "Потрібен дозвіл на збереження файлів", + "@setupStorageRequired": { + "description": "Title when storage permission needed" }, - "@cacheClearAllConfirmTitle": { - "description": "Dialog title before clearing all caches" + "setupStorageDescription": "SpotiFLAC потребує дозволу на збереження, щоб зберегти завантажені музичні файли.", + "@setupStorageDescription": { + "description": "Explanation for storage permission" }, - "@unknownArtist": { - "description": "Fallback artist name when metadata is missing" + "setupNotificationGranted": "Дозвіл на сповіщення надано!", + "@setupNotificationGranted": { + "description": "Success message for notification permission" }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist folder is enabled" + "setupNotificationEnable": "Увімкнути сповіщення", + "@setupNotificationEnable": { + "description": "Button to enable notifications" }, - "dialogClearHistoryMessage": "Ви впевнені, що хочете очистити всю історію завантажень? Цю дію неможливо скасувати.", - "@dialogClearHistoryMessage": { - "description": "Dialog message - clear history confirmation" + "setupFolderChoose": "Виберати папку для завантаження", + "@setupFolderChoose": { + "description": "Button to choose folder" }, - "@sectionData": { - "description": "Settings section header" + "setupFolderDescription": "Виберіть папку, де буде збережено завантажену музику.", + "@setupFolderDescription": { + "description": "Explanation for folder selection" }, - "audioAnalysisRms": "RMS", - "@audioAnalysisRms": { - "description": "RMS level metric label" + "setupSelectFolder": "Вибрати папку", + "@setupSelectFolder": { + "description": "Button to select folder" }, - "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", - "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is on" + "setupEnableNotifications": "Увімкнути сповіщення", + "@setupEnableNotifications": { + "description": "Button to enable notifications" }, - "timeJustNow": "Щойно", - "@extensionCustomUrlHandlingShareHint": { - "description": "Extension detail hint explaining share-to-app URL handling" + "setupNotificationBackgroundDescription": "Отримуйте сповіщення про прогрес та завершення завантаження. Це допомагає відстежувати завантаження, коли програма працює у фоновому режимі.", + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" }, - "cleanupOrphanedDownloads": "Очищення застарілих завантажень", - "@cleanupOrphanedDownloads": { - "description": "Button to remove history entries for deleted files" + "setupSkipForNow": "Пропустити поки що", + "@setupSkipForNow": { + "description": "Skip button text" }, - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" + "setupNext": "Далі", + "@setupNext": { + "description": "Next button text" }, - "@tutorialWelcomeTitle": { - "description": "Tutorial welcome page title" + "setupGetStarted": "Почати", + "@setupGetStarted": { + "description": "Final setup button" }, - "collectionFavoriteArtists": "Favorite Artists", - "audioAnalysisRescanning": "Re-analyzing audio...", - "@audioAnalysisRescanning": { - "description": "Loading text while audio is being re-analyzed after an explicit refresh" + "setupAllowAccessToManageFiles": "Будь ласка, увімкніть опцію «Дозволити доступ для керування всіма файлами» на наступному екрані.", + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" }, - "logTitle": "Журнали", - "@logTitle": { - "description": "Logs screen title" + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" }, - "@regionCountryGB": { - "description": "Country name for SongLink region picker" + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" }, - "@progressFetchingMetadata": { - "description": "Progress indicator - loading track info", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" }, - "aboutLogoArtist": "Талановитий художник, який створив чудовий логотип нашого додатку!", - "@aboutLogoArtist": { - "description": "Role description for logo artist" + "dialogCancel": "Скасувати", + "@dialogCancel": { + "description": "Dialog button - cancel action" }, - "channelPreview": "Бета", - "@channelPreview": { - "description": "Update channel - beta/preview releases" + "dialogSave": "Зберегти", + "@dialogSave": { + "description": "Dialog button - save changes" }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", - "@collectionPlaylistsDeleted": { - "description": "Snackbar after deleting selected playlists", + "dialogDelete": "Видалити", + "@dialogDelete": { + "description": "Dialog button - delete item" + }, + "dialogRetry": "Повторити спробу", + "@dialogRetry": { + "description": "Dialog button - retry action" + }, + "dialogClear": "Очистити", + "@dialogClear": { + "description": "Dialog button - clear items" + }, + "dialogDone": "Готово", + "@dialogDone": { + "description": "Dialog button - action completed" + }, + "dialogImport": "Імпорт", + "@dialogImport": { + "description": "Dialog button - import data" + }, + "dialogDownload": "Завантажити", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, + "previewPlay": "Play preview", + "@previewPlay": { + "description": "Tooltip for the button that plays a short track preview snippet" + }, + "previewStop": "Stop preview", + "@previewStop": { + "description": "Tooltip for the button that stops the playing track preview snippet" + }, + "previewUnavailable": "Preview unavailable", + "@previewUnavailable": { + "description": "Snackbar shown when a track preview snippet cannot be played" + }, + "dialogDiscard": "Відхилити", + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, + "dialogRemove": "Видалити", + "@dialogRemove": { + "description": "Dialog button - remove item" + }, + "dialogUninstall": "Деінсталювати", + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, + "dialogDiscardChanges": "Відхилити зміни?", + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, + "dialogUnsavedChanges": "У вас є незбережені зміни. Ви хочете їх скасувати?", + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, + "dialogClearAll": "Очистити все", + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, + "dialogRemoveExtension": "Видалити розширення", + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogRemoveExtensionMessage": "Ви впевнені, що хочете видалити це розширення? Цю дію неможливо скасувати.", + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, + "dialogUninstallExtension": "Видалити розширення?", + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogUninstallExtensionMessage": "Ви впевнені, що хочете видалити {extensionName}?", + "@dialogUninstallExtensionMessage": { + "description": "Dialog message - uninstall specific extension", "placeholders": { - "count": { - "type": "int" + "extensionName": { + "type": "String" } } }, - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" + "dialogClearHistoryTitle": "Очистити історію", + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" }, - "homeTitle": "Головна", - "@homeTitle": { - "description": "Home screen title" + "dialogClearHistoryMessage": "Ви впевнені, що хочете очистити всю історію завантажень? Цю дію неможливо скасувати.", + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" }, - "extensionMinAppVersion": "Мінімальна версія програми", - "@extensionMinAppVersion": { - "description": "Extension detail - minimum app version" + "dialogDeleteSelectedTitle": "Видалити вибране", + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", - "@backupContentsLiked": { - "description": "Backup contents row for liked tracks count", + "dialogDeleteSelectedMessage": "Видалити {count} {count, plural, =1{трек} other{треків}} з історії?\n\nЦе також видалить файли з пам'яті.", + "@dialogDeleteSelectedMessage": { + "description": "Dialog message - delete selected tracks", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" + "dialogImportPlaylistTitle": "Імпорт списку відтворення", + "@dialogImportPlaylistTitle": { + "description": "Dialog title - import CSV playlist" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", - "@notifDownloadsCanceledBody": { - "description": "Notification body when downloads are canceled by the user", + "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", + "csvImportTracks": "{count} треків з CSV", + "@csvImportTracks": { + "description": "Label shown in quality picker for CSV import", "placeholders": { "count": { "type": "int" } } }, - "@dialogRetry": { - "description": "Dialog button - retry action" - }, - "@homeChangeSearchProviderTooltip": { - "description": "Tooltip for the Home search provider picker" - }, - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" + "collectionExportM3u": "Export as M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" }, - "@trackReEnrichSuccessWithFailures": { - "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "collectionExportM3uDone": "Exported {exported} of {total} tracks", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { - "successCount": { + "exported": { "type": "int" }, "total": { "type": "int" - }, - "failedCount": { - "type": "int" } } }, - "previewUnavailable": "Preview unavailable", - "@previewUnavailable": { - "description": "Snackbar shown when a track preview snippet cannot be played" - }, - "nowPlayingTabPlayer": "Player", - "@nowPlayingTabPlayer": { - "description": "Tab label for the player view" + "collectionExportM3uNone": "No downloaded files to export", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "@backupContentsPlaylists": { - "description": "Backup contents row for playlist count", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionExportM3uFailed": "Export failed", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "libraryLastScannedNever": "Ніколи", - "@libraryLastScannedNever": { - "description": "Shown when library has never been scanned" + "trackOpenOn": "Open on...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" }, - "trackTrackNumber": "Номер треку", - "@trackTrackNumber": { - "description": "Metadata label - track number" + "trackOpenOnNoLinks": "No platform links found for this track.", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" }, - "trackReplayGainScanning": "Analyzing loudness...", - "@trackReplayGainScanning": { - "description": "Snackbar/progress message while scanning ReplayGain for a single track" + "libraryReviewDuplicates": "Review duplicates", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" }, - "downloadLossyMp3": "MP3 320 кбіт/с", - "@downloadLossyMp3": { - "description": "Lossy format option - MP3 320kbps" + "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" }, - "@albumFolderArtistAlbumSingles": { - "description": "Album folder option with singles inside artist" + "duplicatesTitle": "Duplicates", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" }, - "@extensionHealthNotConfigured": { - "description": "Extension service health status - not configured" + "duplicatesEmpty": "No duplicate tracks found.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" }, - "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is off" + "duplicatesKeepBest": "Keep best", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting to create a subfolder per playlist source" + "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", + "placeholders": { + "count": { + "type": "int" + }, + "trackName": { + "type": "String" + } + } }, - "@trackReleaseDate": { - "description": "Metadata label - release date" + "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "aboutContributors": "Автори", - "@aboutContributors": { - "description": "Section for contributors" + "@dialogImportPlaylistMessage": { + "description": "Dialog message - import playlist confirmation", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@audioAnalysisMono": { - "description": "Audio channel layout label - mono" + "snackbarAddedToQueue": "Додано \"{trackName}\" до черги", + "@snackbarAddedToQueue": { + "description": "Snackbar - track added to download queue", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@audioAnalysisNyquist": { - "description": "Nyquist frequency metric label" + "snackbarAddedTracksToQueue": "Додано {count} треків до черги", + "@snackbarAddedTracksToQueue": { + "description": "Snackbar - multiple tracks added to queue", + "placeholders": { + "count": { + "type": "int" + } + } }, - "permissionStorage": "Storage", - "@permissionStorage": { - "description": "Storage permission type label" + "snackbarAlreadyDownloaded": "\"{trackName}\" вже завантажено", + "@snackbarAlreadyDownloaded": { + "description": "Snackbar - track already exists", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "permissionAudio": "Audio", - "@permissionAudio": { - "description": "Audio permission type label" + "snackbarAlreadyInLibrary": "\"{trackName}\" вже є у вашій бібліотеці", + "@snackbarAlreadyInLibrary": { + "description": "Snackbar - track already exists in local library", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@libraryScanSubtitle": { - "description": "Subtitle for scan button" + "snackbarHistoryCleared": "Історія очищена", + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" }, - "@snackbarUnsupportedAudioFormat": { - "description": "Snackbar when the audio format is not supported for the requested operation" + "snackbarDeletedTracks": "Видалено {count} {count, plural, =1{трек} other{треків}}", + "@snackbarDeletedTracks": { + "description": "Snackbar - tracks deleted", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@notifLibraryScanStopped": { - "description": "Notification body when library scan is cancelled" + "snackbarCannotOpenFile": "Не вдається відкрити файл: {error}", + "@snackbarCannotOpenFile": { + "description": "Snackbar - file open error", + "placeholders": { + "error": { + "type": "String" + } + } }, - "@downloadMusixmatchAuto": { - "description": "Button to clear Musixmatch language (use auto)" + "snackbarViewQueue": "Переглянути чергу", + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, - "@trackLyricsTimeout": { - "description": "Message when lyrics request times out" + "snackbarUrlCopied": "{platform} URL-адреса скопійована в буфер обміну", + "@snackbarUrlCopied": { + "description": "Snackbar - URL copied", + "placeholders": { + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } + } }, - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" + "snackbarFileNotFound": "Файл не знайдено", + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" }, - "@regionCountryXK": { - "description": "Country name for SongLink region picker" + "snackbarSelectExtFile": "Будь ласка, виберіть файл .spotiflac-ext", + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" }, - "aboutTelegramChatSubtitle": "Спілкуватися з іншими користувачами", - "@aboutTelegramChatSubtitle": { - "description": "Subtitle for Telegram chat" + "snackbarProviderPrioritySaved": "Пріоритет постачальника збережено", + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" }, - "selectionAllPlaylistsSelected": "Вибрано всі списки відтворення", - "@selectionAllPlaylistsSelected": { - "description": "Shown when all playlists are selected in selection mode" + "snackbarMetadataProviderSaved": "Пріоритет постачальника метаданих збережено", + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" }, - "cacheTrackLookupDesc": "Пошук ідентифікаторів треків Spotify/Deezer. Очищення може уповільнити наступні кілька пошуків.", - "@cacheTrackLookupDesc": { - "description": "Description of what track lookup cache contains" + "snackbarExtensionInstalled": "Розширення {extensionName} встановлено.", + "@snackbarExtensionInstalled": { + "description": "Snackbar - extension installed successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@unknownAlbum": { - "description": "Fallback album name when metadata is missing" + "snackbarExtensionUpdated": "{extensionName} оновлено.", + "@snackbarExtensionUpdated": { + "description": "Snackbar - extension updated successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@extensionsErrorLoading": { - "description": "Error message when extension fails to load" + "snackbarFailedToInstall": "Не вдалося встановити розширення", + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" }, - "@cacheTitle": { - "description": "Cache management page title" + "snackbarFailedToUpdate": "Не вдалося оновити розширення", + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" }, - "@downloadFilenameFormat": { - "description": "Setting for output filename pattern" + "errorRateLimited": "Обмежений тариф", + "@errorRateLimited": { + "description": "Error title - too many requests" + }, + "errorRateLimitedMessage": "Забагато запитів. Будь ласка, зачекайте хвилинку, перш ніж шукати знову.", + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" + }, + "errorNoTracksFound": "Треків не знайдено", + "@errorNoTracksFound": { + "description": "Error - search returned no results" + }, + "searchEmptyResultSubtitle": "Try another keyword", + "@searchEmptyResultSubtitle": { + "description": "Subtitle shown under the empty search result state on the home screen" }, "errorUrlNotRecognized": "Посилання не розпізнано", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when album artist is used for folder names" + "errorUrlNotRecognizedMessage": "Це посилання не підтримується. Переконайтеся, що URL-адреса правильна та встановлено сумісне розширення.", + "@errorUrlNotRecognizedMessage": { + "description": "Error message - URL not recognized explanation" }, - "@qualityFlacLossless": { - "description": "Quality option - CD quality FLAC" + "errorUrlFetchFailed": "Не вдалося завантажити вміст за цим посиланням. Спробуйте ще раз.", + "@errorUrlFetchFailed": { + "description": "Error message - generic URL fetch failure" }, - "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", - "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is on" + "errorMissingExtensionSource": "Не вдається завантажити {item}: відсутній вихідний код розширення", + "@errorMissingExtensionSource": { + "description": "Error - extension source not available", + "placeholders": { + "item": { + "type": "String" + } + } }, - "collectionLovedEmptySubtitle": "Натисніть «Подобається» на треках, щоб зберегти у свої улюблені", - "@collectionLovedEmptySubtitle": { - "description": "Loved empty state subtitle" + "actionPause": "Пауза", + "@actionPause": { + "description": "Action button - pause download" }, - "@libraryBuiltInPlayerInfo": { - "description": "Info note explaining the built-in player is for previews only" + "actionResume": "Відновити", + "@actionResume": { + "description": "Action button - resume download" }, - "@notifLibraryScanProgressNoTotal": { - "description": "Notification body for library scan progress when total is unknown", + "actionCancel": "Скасувати", + "@actionCancel": { + "description": "Action button - cancel operation" + }, + "actionSelectAll": "Вибрати все", + "@actionSelectAll": { + "description": "Action button - select all items" + }, + "actionDeselect": "Скасувати вибір", + "@actionDeselect": { + "description": "Action button - deselect all" + }, + "selectionSelected": "Вибрано {count}", + "@selectionSelected": { + "description": "Selection count indicator", "placeholders": { - "scanned": { - "type": "int" - }, - "percentage": { + "count": { "type": "int" } } }, - "@tutorialSearchTitle": { - "description": "Tutorial search page title" + "selectionAllSelected": "Усі треки вибрано", + "@selectionAllSelected": { + "description": "Status - all items selected" }, - "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", - "@a11yTrackByArtist": { - "description": "Accessibility label for a queue or list track item", + "selectionSelectToDelete": "Виберіть треки для видалення", + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "progressFetchingMetadata": "Отримання метаданих... {current}/{total}", + "@progressFetchingMetadata": { + "description": "Progress indicator - loading track info", "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "libraryFilterMetadataMissingLabel": "Missing label", - "@libraryFilterMetadataMissingLabel": { - "description": "Filter option - items missing record label" - }, - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "trackMetadata": "Метадані", - "@trackMetadata": { - "description": "Tab title - track metadata" + "progressReadingCsv": "Читання CSV-файлу...", + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" }, - "trackOptionRemoveFromLoved": "Видалити з улюблених", - "@trackOptionRemoveFromLoved": { - "description": "Bottom sheet action label - remove track from loved folder" + "searchSongs": "Пісні", + "@searchSongs": { + "description": "Search result category - songs" }, - "@aboutTelegramChat": { - "description": "Link to Telegram chat group" + "searchArtists": "Виконавці", + "@searchArtists": { + "description": "Search result category - artists" }, - "@trackCopiedToClipboard": { - "description": "Snackbar - content copied" + "searchAlbums": "Альбоми", + "@searchAlbums": { + "description": "Search result category - albums" }, - "aboutKeepAndroidOpen": "Keep Android Open", - "@aboutKeepAndroidOpen": { - "description": "Link to Keep Android Open campaign website" + "searchPlaylists": "Списки відтворення", + "@searchPlaylists": { + "description": "Search result category - playlists" }, - "@lyricsProvidersDisabledSection": { - "description": "Section header for disabled providers", - "placeholders": { - "count": { - "type": "int" - } - } + "searchSortTitle": "Сортувати результати", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" }, - "@downloadAllowLocalNetwork": { - "description": "Setting title for allowing requests to private/local network targets" + "searchSortDefault": "За замовчуванням", + "@searchSortDefault": { + "description": "Sort option - default API order" }, - "@openInOtherServices": { - "description": "Title and tooltip for finding the current collection in other services" + "searchSortTitleAZ": "Назва (А-Я)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" }, - "@extensionVerificationBrowserInApp": { - "description": "Chip label for in-app browser verification mode" + "searchSortTitleZA": "Назва (Я-А)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" }, - "sectionSearchSource": "Джерело пошуку", - "@sectionSearchSource": { - "description": "Settings section header" + "searchSortArtistAZ": "Виконавець (А-Я)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" }, - "allFilesAccess": "Доступ до всіх файлів", - "@allFilesAccess": { - "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + "searchSortArtistZA": "Виконавець (Я-А)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } + "searchSortDurationShort": "Тривалість (найкоротша)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" }, - "snackbarFailedToEmbedLyrics": "Не вдалося вставити текст пісні", - "@snackbarFailedToEmbedLyrics": { - "description": "Snackbar when lyrics embedding fails" + "searchSortDurationLong": "Тривалість (найдовша)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" }, - "@lyricsProviderMusixmatchDesc": { - "description": "Description for Musixmatch provider" + "searchSortDateOldest": "Дата випуску (найстаріша)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" }, - "queueRateLimitTitle": "Service rate limited", - "@queueRateLimitTitle": { - "description": "Title shown on a failed queue item when the download service rate limits requests" + "searchSortDateNewest": "Дата випуску (найновіша)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" }, - "@notifDownloadComplete": { - "description": "Notification title when a single download is complete" + "tooltipPlay": "Відтворити", + "@tooltipPlay": { + "description": "Tooltip - play button" }, - "@homeSupports": { - "description": "Info text about supported URL types" + "filenameFormat": "Формат імені файлу", + "@filenameFormat": { + "description": "Setting title - filename pattern" }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" + "filenameShowAdvancedTags": "Показати розширені теги", + "@filenameShowAdvancedTags": { + "description": "Toggle label for showing advanced filename tags" }, - "@lyricsModeEmbedSubtitle": { - "description": "Subtitle for embed option" + "filenameShowAdvancedTagsDescription": "Увімкнути відформатовані теги для доповнення доріжок і шаблонів дати", + "@filenameShowAdvancedTagsDescription": { + "description": "Description for advanced filename tag toggle" }, - "optionsReplayGain": "Нормалізація звуку", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" + "folderOrganizationNone": "Жодної організації", + "@folderOrganizationNone": { + "description": "Folder option - flat structure" }, - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" + "folderOrganizationByPlaylist": "За списком відтворення", + "@folderOrganizationByPlaylist": { + "description": "Folder option - playlist folders" }, - "@trackArtist": { - "description": "Metadata label - artist name" + "folderOrganizationByPlaylistSubtitle": "Окрема папка для кожного списку відтворення", + "@folderOrganizationByPlaylistSubtitle": { + "description": "Subtitle for playlist folder option" }, - "cacheCoverImageDesc": "Завантажено обкладинку альбому та треку. Завантаження відбудеться повторно після перегляду.", - "@cacheCoverImageDesc": { - "description": "Description of what cover image cache contains" + "folderOrganizationByArtist": "За виконавцем", + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" }, - "queueClearAll": "Усі", - "@queueClearAll": { - "description": "Button - clear all queue items" + "folderOrganizationByAlbum": "За альбомом", + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" }, - "downloadUsePrimaryArtistOnlyDisabled": "Повний рядок виконавця, що використовується для назви папки", - "@downloadUsePrimaryArtistOnlyDisabled": { - "description": "Subtitle when primary artist only is disabled" + "folderOrganizationByArtistAlbum": "Виконавець/Альбом", + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" }, - "backupImportSectionTitle": "Restore backup", - "@backupImportSectionTitle": { - "description": "Section title for the import/restore card" + "folderOrganizationDescription": "Упорядкувати завантажені файли в папки", + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" }, - "@downloadMusixmatchLanguageHint": { - "description": "Placeholder for Musixmatch language input" + "folderOrganizationNoneSubtitle": "Усі файли в папці завантажень", + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" }, - "collectionRemoveFromFolder": "Видалити з папки", - "@collectionRemoveFromFolder": { - "description": "Tooltip for removing track from wishlist/loved folder" + "folderOrganizationByArtistSubtitle": "Окрема папка для кожного виконавця", + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" }, - "storeFilterMetadata": "Метадані", - "@storeFilterMetadata": { - "description": "Repo filter - metadata providers" + "folderOrganizationByAlbumSubtitle": "Окрема папка для кожного альбому", + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" }, - "shareSheetCopyLink": "Copy Link", - "errorRateLimitedMessage": "Забагато запитів. Будь ласка, зачекайте хвилинку, перш ніж шукати знову.", - "@errorRateLimitedMessage": { - "description": "Error message - rate limit explanation" + "folderOrganizationByArtistAlbumSubtitle": "Вкладені папки для виконавця та альбому", + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" }, - "libraryFilterSortGenreDesc": "Жанр (Я-А)", - "@libraryFilterSortGenreDesc": { - "description": "Sort option - genre descending" + "updateAvailable": "Доступне оновлення", + "@updateAvailable": { + "description": "Update dialog title" }, - "trackFileNotFound": "Файл не знайдено", - "@trackFileNotFound": { - "description": "Error - file doesn't exist" + "updateLater": "Пізніше", + "@updateLater": { + "description": "Update button - dismiss" }, - "@queueEmptySinglesSubtitle": { - "description": "Empty state subtitle for single track downloads" + "updateStartingDownload": "Початок завантаження...", + "@updateStartingDownload": { + "description": "Update status - initializing" }, - "@queueDownloadStarting": { - "description": "Queue status before download progress is available" + "updateDownloadFailed": "Не вдалося завантажити", + "@updateDownloadFailed": { + "description": "Update error title" }, - "metadataProviderPriorityInfo": "Deezer не має обмежень за швидкістю та рекомендований як основний сервіс. Spotify може обмежувати швидкість після великої кількості запитів.", - "@metadataProviderPriorityInfo": { - "description": "Info tip about rate limits" + "updateFailedMessage": "Не вдалося завантажити оновлення", + "@updateFailedMessage": { + "description": "Update error message" }, - "aboutPCSource": "Вихідний код для ПК", - "@aboutPCSource": { - "description": "Link to PC GitHub repo" + "updateNewVersionReady": "Доступна нова версія", + "@updateNewVersionReady": { + "description": "Update subtitle" }, - "editMetadataAutoFill": "Автоматичне заповнення з онлайн-ресурсів", - "@editMetadataAutoFill": { - "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + "updateRequiredTitle": "Update required", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "snackbarDeletedTracks": "Видалено {count} {count, plural, =1{трек} other{треків}}", - "@snackbarDeletedTracks": { - "description": "Snackbar - tracks deleted", + "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { "count": { "type": "int" } } }, - "@extensionHealthServiceDegraded": { - "description": "Tooltip for degraded extension service" + "updateCurrent": "Поточна", + "@updateCurrent": { + "description": "Label for current version" }, - "lyricsProviderLrclibDesc": "Синхронізована база даних текстів пісень з відкритим кодом", - "@lyricsProviderLrclibDesc": { - "description": "Description for LRCLIB provider" + "updateNew": "Нова", + "@updateNew": { + "description": "Label for new version" }, - "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", - "@downloadMusixmatchLanguageDesc": { - "description": "Description in Musixmatch language picker" + "updateDownloading": "Завантаження...", + "@updateDownloading": { + "description": "Update status - downloading" }, - "@optionsEmbedMetadataSubtitleOn": { - "description": "Subtitle when metadata embedding is enabled" - }, - "@setupSkipForNow": { - "description": "Skip button text" - }, - "@a11ySelectTrack": { - "description": "Accessibility label for selecting a track" - }, - "@folderOrganizationByAlbumSubtitle": { - "description": "Subtitle for album folder option" - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@extensionVerificationBrowserTitle": { - "description": "Settings option title for extension verification browser preference" + "updateWhatsNew": "Що нового", + "@updateWhatsNew": { + "description": "Changelog section title" }, - "@backupContentsExtensions": { - "description": "Backup contents row for installed extensions count", - "placeholders": { - "count": { - "type": "int" - } - } + "updateDownloadInstall": "Завантажити та встановити", + "@updateDownloadInstall": { + "description": "Update button - download and install" }, - "snackbarUrlCopied": "{platform} URL-адреса скопійована в буфер обміну", - "@snackbarUrlCopied": { - "description": "Snackbar - URL copied", - "placeholders": { - "platform": { - "type": "String", - "description": "Platform name (Spotify/Deezer)" - } - } + "updateDontRemind": "Не нагадувати", + "@updateDontRemind": { + "description": "Update button - skip this version" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", - "@aboutBinimumDesc": { - "description": "Credit description for binimum" + "providerPriorityTitle": "Пріоритет постачальника", + "@providerPriorityTitle": { + "description": "Provider priority page title" }, - "discographyFetchingAlbum": "Отримання {current} з {total}...", - "@discographyFetchingAlbum": { - "description": "Progress - fetching specific album", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "providerPriorityDescription": "Перетягніть, щоб змінити порядок постачальників завантажень. Під час завантаження треків програма використовуватиме постачальників зверху вниз.", + "@providerPriorityDescription": { + "description": "Provider priority page description" }, - "logAutoScrollOn": "Auto-scroll ON", - "@logAutoScrollOn": { - "description": "Tooltip when auto-scroll is enabled on the log screen" + "providerPriorityInfo": "Якщо трек недоступний у першого провайдера, додаток автоматично спробує наступного.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" }, - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" + "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" }, - "@regionCountryBR": { - "description": "Country name for SongLink region picker" + "providerPriorityFallbackExtensionsHint": "Тут перелічені лише ввімкнені розширення з можливістю завантаження через постачальника послуг.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" }, - "@lyricsProvidersTitle": { - "description": "Settings item title for lyrics provider order" + "providerExtension": "Розширення", + "@providerExtension": { + "description": "Label for extension-provided providers" }, - "trackMetadataService": "Сервіс", - "@trackMetadataService": { - "description": "Metadata field - download service used" + "metadataProviderPriorityTitle": "Пріоритет метаданих", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" }, - "discographyAddedToQueue": "Додано {count} треків до черги", - "cueSplitTrackCount": "{count} треків", - "@cueSplitTrackCount": { - "description": "Number of tracks in CUE sheet", - "placeholders": { - "count": { - "type": "int" - } - } + "metadataProviderPriorityDescription": "Перетягніть, щоб змінити порядок постачальників метаданих. Додаток шукатиме постачальників зверху вниз під час пошуку треків та отримання метаданих.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" }, - "dialogImportPlaylistTitle": "Імпорт списку відтворення", - "@dialogImportPlaylistTitle": { - "description": "Dialog title - import CSV playlist" + "metadataProviderPriorityInfo": "Deezer не має обмежень за швидкістю та рекомендований як основний сервіс. Spotify може обмежувати швидкість після великої кількості запитів.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" }, - "@cleanupOrphanedDownloadsSubtitle": { - "description": "Subtitle for orphaned cleanup button" + "logTitle": "Журнали", + "@logTitle": { + "description": "Logs screen title" }, - "settingsLocalLibrary": "Локальна бібліотека", - "@settingsLocalLibrary": { - "description": "Settings menu item - local library" + "logCopied": "Журнали скопійовано в буфер обміну", + "@logCopied": { + "description": "Snackbar - logs copied" }, - "@metadataSaveFailedStorage": { - "description": "Snackbar error when writing metadata file back to storage fails" + "logSearchHint": "Пошук журналів...", + "@logSearchHint": { + "description": "Log search placeholder" }, - "logCopyLogs": "Copy logs", - "@logCopyLogs": { - "description": "Tooltip for copying logs" + "logFilterLevel": "Рівень", + "@logFilterLevel": { + "description": "Filter by log level" }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", - "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for WiFi-only option in picker" + "logFilterSection": "Фільтр", + "@logFilterSection": { + "description": "Filter section title" }, - "@lyricsModeBothSubtitle": { - "description": "Subtitle for both option" + "logShareLogs": "Журнали обміну", + "@logShareLogs": { + "description": "Share button tooltip" }, - "@collectionAlreadyInPlaylist": { - "description": "Snackbar when track already exists in playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "logClearLogs": "Очистити журнали", + "@logClearLogs": { + "description": "Clear button tooltip" }, - "@collectionFoldersTitle": { - "description": "Library section title for custom folders" + "logClearLogsTitle": "Очистити Журнали", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" }, - "searchSortDateNewest": "Дата випуску (найновіша)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" + "logClearLogsMessage": "Ви впевнені, що хочете очистити всі журнали?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" + "logFilterBySeverity": "Фільтрувати журнали за рівнем серйозності", + "@logFilterBySeverity": { + "description": "Filter dialog title" }, - "@recentTypeAlbum": { - "description": "Recent access item type - album" + "logNoLogsYet": "Журналів поки що немає", + "@logNoLogsYet": { + "description": "Empty state title" }, - "nowPlayingPlayInOrder": "Play in order", - "@nowPlayingPlayInOrder": { - "description": "Tooltip when shuffle mode is disabled" + "logNoLogsYetSubtitle": "Журнали відображатимуться тут під час використання програми", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" }, - "@cueSplitConfirmMessage": { - "description": "CUE split confirmation dialog message", + "logEntriesFiltered": "Записи ({count} filtered)", + "@logEntriesFiltered": { + "description": "Log count with filter active", "placeholders": { - "album": { - "type": "String" - }, "count": { "type": "int" } } }, - "@audioAnalysisFileSize": { - "description": "File size metric label" - }, - "artistSingles": "Сингли та міні-альбоми", - "@artistSingles": { - "description": "Section header for singles/EPs" - }, - "@snackbarProviderPrioritySaved": { - "description": "Snackbar - provider order saved" - }, - "@recentPlaylistInfo": { - "description": "Snackbar message when tapping playlist in recent access", + "logEntries": "Записи ({count})", + "@logEntries": { + "description": "Total log count", "placeholders": { - "name": { - "type": "String", - "description": "Playlist name" + "count": { + "type": "int" } } }, - "@lyricsProviderLyricsPlusDesc": { - "description": "Description for LyricsPlus provider" + "channelStable": "Стабільний", + "@channelStable": { + "description": "Update channel - stable releases" }, - "@libraryFilterDownloaded": { - "description": "Filter chip - show only downloaded items" + "channelPreview": "Бета", + "@channelPreview": { + "description": "Update channel - beta/preview releases" }, - "recentPlaylistInfo": "Список відтворення: {name}", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" + "sectionSearchSource": "Джерело пошуку", + "@sectionSearchSource": { + "description": "Settings section header" }, - "@actionCreate": { - "description": "Generic action button - create" + "sectionDownload": "Завантажити", + "@sectionDownload": { + "description": "Settings section header" }, - "@downloadSelectQuality": { - "description": "Dialog title - choose audio quality" + "sectionPerformance": "Продуктивність", + "@sectionPerformance": { + "description": "Settings section header" }, - "cueSplitAlbum": "Альбом: {album}", - "@cueSplitAlbum": { - "description": "Album name in CUE split sheet", - "placeholders": { - "album": { - "type": "String" - } - } + "sectionApp": "Додаток", + "@sectionApp": { + "description": "Settings section header" }, - "@trackCoverNoSource": { - "description": "Snackbar when no cover art URL or embedded cover" + "sectionData": "Дані", + "@sectionData": { + "description": "Settings section header" }, - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" + "sectionDebug": "Налагодження", + "@sectionDebug": { + "description": "Settings section header" }, - "@notifLibraryScanCompleteBody": { - "description": "Notification body for library scan complete - number of indexed tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "sectionService": "Сервіс", + "@sectionService": { + "description": "Settings section header" }, - "optionsDetailedLogging": "Детальне журналювання", - "@optionsDetailedLogging": { - "description": "Enable verbose logs for debugging" + "sectionAudioQuality": "Якість звуку", + "@sectionAudioQuality": { + "description": "Settings section header" }, - "@lyricsProvidersDiscardContent": { - "description": "Body text of the discard-changes dialog on lyrics provider page" + "sectionFileSettings": "Налаштування файлу", + "@sectionFileSettings": { + "description": "Settings section header" }, - "@dialogDisableHistoryTitle": { - "description": "Confirmation dialog title shown before disabling download history" + "sectionLyrics": "Тексти пісень", + "@sectionLyrics": { + "description": "Settings section header" }, - "downloadLossyOpus128Subtitle": "Найменший розмір, ~4 МБ на доріжку", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" + "lyricsMode": "Режим тексту пісні", + "@lyricsMode": { + "description": "Setting - how to save lyrics" }, - "@appName": { - "description": "App name - DO NOT TRANSLATE" + "lyricsModeDescription": "Виберіть, як тексти пісень зберігатимуться разом із завантаженнями пісень.", + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" }, - "libraryActions": "Дії", - "@libraryActions": { - "description": "Section header for library actions" + "lyricsModeEmbed": "Вбудувати у файл", + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" }, - "setupNoFolderSelected": "Папку не вибрано. Бажаєте використовувати папку «Музика» за замовчуванням?", - "@setupNoFolderSelected": { - "description": "Prompt when no folder selected" + "lyricsModeEmbedSubtitle": "Тексти пісень зберігаються в метаданих FLAC", + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", - "trackSaveFailed": "Не вдалося: {error}", - "@trackSaveFailed": { - "description": "Snackbar when save operation fails", - "placeholders": { - "error": { - "type": "String" - } - } + "lyricsModeExternal": "Зовнішній файл .lrc", + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" }, - "replayGainBatchConfirmTitle": "Add ReplayGain", - "@replayGainBatchConfirmTitle": { - "description": "Title of the batch ReplayGain confirmation dialog" + "lyricsModeExternalSubtitle": "Окремий файл .lrc для плеєрів, таких як Samsung Music", + "@lyricsModeExternalSubtitle": { + "description": "Subtitle for external option" }, - "tutorialExtensionsTip1": "Перегляньте вкладку «Репозиторій», щоб знайти корисні розширення", - "@tutorialExtensionsTip1": { - "description": "Tutorial extensions tip 1" + "lyricsModeBoth": "Обидва", + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" }, - "@trackAddToQueue": { - "description": "Menu action to add a track to the playback queue" + "lyricsModeBothSubtitle": "Вбудувати та зберегти файл .lrc", + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" }, - "@cacheTrackLookup": { - "description": "Cache item title for track ID lookup cache" + "sectionColor": "Колір", + "@sectionColor": { + "description": "Settings section header" }, - "@discographyNoAlbums": { - "description": "Error - no albums found for artist" + "sectionTheme": "Тема", + "@sectionTheme": { + "description": "Settings section header" }, - "@updateLater": { - "description": "Update button - dismiss" + "sectionLayout": "Макет", + "@sectionLayout": { + "description": "Settings section header" }, - "@snackbarFailedToInstall": { - "description": "Snackbar - extension install error" + "sectionLanguage": "Мова", + "@sectionLanguage": { + "description": "Settings section header for language" }, - "@albumFolderArtistAlbumFlatSubtitle": { - "description": "Folder structure example for flat singles" + "appearanceLanguage": "Мова програми", + "@appearanceLanguage": { + "description": "Language setting title" }, - "@errorMissingExtensionSource": { - "description": "Error - extension source not available", - "placeholders": { - "item": { - "type": "String" - } - } + "settingsAppearanceSubtitle": "Тема, кольори, дисплей", + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" }, - "libraryFilterSortAlbumAsc": "Альбом (А-Я)", - "@libraryFilterSortAlbumAsc": { - "description": "Sort option - album ascending" + "settingsDownloadSubtitle": "Service, quality, fallback", + "@settingsDownloadSubtitle": { + "description": "Download settings description" }, - "@queueTrackCount": { - "description": "Track count label with plural support", + "settingsExtensionsSubtitle": "Керування постачальниками послуг завантаження", + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" + }, + "settingsLogsSubtitle": "Перегляд журналів програми для налагодження", + "@settingsLogsSubtitle": { + "description": "Logs settings description" + }, + "loadingSharedLink": "Завантаження спільного посилання...", + "@loadingSharedLink": { + "description": "Status when opening shared URL" + }, + "pressBackAgainToExit": "Натисніть кнопку «Назад» ще раз, щоб вийти", + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, + "downloadAllCount": "Завантажити все ({count})", + "@downloadAllCount": { + "description": "Download all button with count", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisMono": "Mono", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", + "tracksCount": "{count, plural, =1{1 трек} other{{count} треків}}", + "@tracksCount": { + "description": "Track count display", "placeholders": { - "source": { - "type": "String" + "count": { + "type": "int" } } }, - "@lyricsModeEmbed": { - "description": "Lyrics mode option - embed in audio file" + "trackCopyFilePath": "Копіювати шлях до файлу", + "@trackCopyFilePath": { + "description": "Action - copy file path" }, - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" + "trackRemoveFromDevice": "Видалити з пристрою", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" }, - "@cacheRefreshStats": { - "description": "Button label to refresh cache statistics" + "trackLoadLyrics": "Завантажити текст пісні", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" }, - "lyricsProviderAppleMusicDesc": "Синхронізовані тексти пісень слово за словом (через проксі)", - "@lyricsProviderAppleMusicDesc": { - "description": "Description for Apple Music provider" + "trackMetadata": "Метадані", + "@trackMetadata": { + "description": "Tab title - track metadata" }, - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" + "trackFileInfo": "Інформація про файл", + "@trackFileInfo": { + "description": "Tab title - file information" }, - "updateFailedMessage": "Не вдалося завантажити оновлення", - "@updateFailedMessage": { - "description": "Update error message" + "trackLyrics": "Тексти пісень", + "@trackLyrics": { + "description": "Tab title - lyrics" }, - "cacheEstimatedTotal": "Орієнтовне використання кешу: {size}", - "@cacheEstimatedTotal": { - "description": "Total cache size shown in summary", - "placeholders": { - "size": { - "type": "String" - } - } + "trackFileNotFound": "Файл не знайдено", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" }, - "@aboutVersion": { - "description": "Version info label" + "trackOpenInDeezer": "Відкрити в Deezer", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" }, - "dialogRetry": "Повторити спробу", - "@cueSplitSplitting": { - "description": "Snackbar while splitting CUE", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "trackOpenInSpotify": "Відкрити в Spotify", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" }, - "@searchSortTitleZA": { - "description": "Sort option - title descending" + "trackTrackName": "Назва треку", + "@trackTrackName": { + "description": "Metadata label - track title" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", - "@tutorialLibraryTip2": { - "description": "Tutorial library tip 2" + "trackArtist": "Артист", + "@trackArtist": { + "description": "Metadata label - artist name" }, - "extensionHealthServiceOffline": "Service offline", - "@extensionHealthServiceOffline": { - "description": "Tooltip for offline extension service" + "trackAlbumArtist": "Виконавець альбому", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" }, - "actionDeselect": "Скасувати вибір", - "@actionDeselect": { - "description": "Action button - deselect all" + "trackAlbum": "Альбом", + "@trackAlbum": { + "description": "Metadata label - album name" }, - "@trackConvertOriginal": { - "description": "Label for keeping original bit depth or sample rate during conversion" + "trackTrackNumber": "Номер треку", + "@trackTrackNumber": { + "description": "Metadata label - track number" }, - "@libraryClearConfirmTitle": { - "description": "Dialog title for clear confirmation" + "trackDiscNumber": "Номер диска", + "@trackDiscNumber": { + "description": "Metadata label - disc number" }, - "@dialogDownloadAllMessage": { - "description": "Body of the Download All confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDuration": "Тривалість", + "@trackDuration": { + "description": "Metadata label - track length" }, - "homeSupports": "Підтримує: URL-адреси треків, альбомів, списків відтворення, виконавців", - "@downloadedAlbumDeleteSelected": { - "description": "Button - delete selected tracks" + "trackAudioQuality": "Якість звуку", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" }, - "@recentShowAllDownloads": { - "description": "Button label to unhide hidden downloads in recent access" + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" + "trackReleaseDate": "Дата випуску", + "@trackReleaseDate": { + "description": "Metadata label - release date" }, - "collectionPlaylistEmptyTitle": "Список відтворення порожній", - "@collectionPlaylistEmptyTitle": { - "description": "Playlist empty state title" + "trackGenre": "Жанр", + "@trackGenre": { + "description": "Metadata label - music genre" }, - "libraryFilterSortLatest": "Найновіші", - "@libraryFilterSortLatest": { - "description": "Sort option - newest first" + "trackLabel": "Лейбл", + "@trackLabel": { + "description": "Metadata label - record label" }, - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" + "trackCopyright": "Авторське право", + "@trackCopyright": { + "description": "Metadata label - copyright information" }, - "@selectionSelected": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDownloaded": "Завантажено", + "@trackDownloaded": { + "description": "Metadata label - download date" }, - "@tracksCount": { - "description": "Track count display", + "trackCopyLyrics": "Скопіювати тексти пісень", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", "placeholders": { - "count": { - "type": "int" + "source": { + "type": "String" } } }, - "@optionsCheckUpdates": { - "description": "Auto update check toggle" - }, - "@qualityHiResFlacMaxSubtitle": { - "description": "Technical spec for hi-res max" - }, - "actionStop": "Stop", - "@actionStop": { - "description": "Generic action - stop" - }, - "@selectionSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "folderOrganizationNoneSubtitle": "Усі файли в папці завантажень", - "@folderOrganizationNoneSubtitle": { - "description": "Subtitle for no organization option" - }, - "@updateDownloading": { - "description": "Update status - downloading" + "trackLyricsNotAvailable": "Текст пісні для цього треку недоступний", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" }, - "artistAlbums": "Альбоми", - "@artistAlbums": { - "description": "Section header for artist albums" + "trackLyricsNotInFile": "У цьому файлі не знайдено текстів пісень", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" }, - "trackConvertDitherTriangular": "TPDF", - "@trackConvertDitherTriangular": { - "description": "Lossless conversion triangular probability density function dither option" + "trackFetchOnlineLyrics": "Отримати з Інтернету", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", - "@nowPlayingShuffleLibraryFailed": { - "description": "Snackbar when shuffling the library fails", - "placeholders": { - "error": { - "type": "String" - } - } + "trackLyricsTimeout": "Час очікування запиту минув. Спробуйте ще раз пізніше.", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" }, - "@setupIcloudNotSupported": { - "description": "Error when user selects iCloud Drive on iOS" + "trackLyricsLoadFailed": "Не вдалося завантажити текст пісні", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" }, - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + "trackEmbedLyrics": "Вбудувати текст пісні", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" }, - "@extensionsProviderPrioritySection": { - "description": "Section header - provider priority" + "trackLyricsEmbedded": "Текст пісні успішно вбудовано в пісню", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" }, - "@libraryShowDuplicateIndicatorSubtitle": { - "description": "Subtitle for duplicate indicator toggle" + "trackInstrumental": "Інструментальний трек", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" }, - "sectionDuplicates": "Duplicates", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" + "trackCopiedToClipboard": "Скопійовано в буфер обміну", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" }, - "@backupTitle": { - "description": "App bar title for the backup and restore page" + "trackDeleteConfirmTitle": "Видалити з пристрою?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" }, - "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", - "cacheSectionMaintenance": "Технічне обслуговування", - "@cacheSectionMaintenance": { - "description": "Section header for cleanup actions" + "trackDeleteConfirmMessage": "Це назавжди видалить завантажений файл і вилучить його з вашої історії.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" }, - "@editMetadataFieldGenre": { - "description": "Chip label for genre field in auto-fill selector" + "dateToday": "Сьогодні", + "@dateToday": { + "description": "Relative date - today" }, - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" + "dateYesterday": "Вчора", + "@dateYesterday": { + "description": "Relative date - yesterday" }, - "selectionBatchConvertConfirmMessage": "Конвертувати {count} {count, plural, =1{трек} other{треків}} у {format} з бітрейтом {bitrate}?\n\nОригінальні файли будуть видалені після конвертації.", - "@selectionBatchConvertConfirmMessage": { - "description": "Confirmation dialog message for batch conversion", + "dateDaysAgo": "{count} днів тому", + "@dateDaysAgo": { + "description": "Relative date - days ago", "placeholders": { "count": { "type": "int" - }, - "format": { - "type": "String" - }, - "bitrate": { - "type": "String" } } }, - "@selectionTapPlaylistsToSelect": { - "description": "Hint shown in playlist selection mode" - }, - "qualityHiResFlacMaxSubtitle": "24-біт / до 192 кГц", - "snackbarRemovedTracksFromLoved": "Видалено {count} треків з уподобань", - "@snackbarRemovedTracksFromLoved": { - "description": "Snackbar after removing multiple tracks from Loved folder", + "dateWeeksAgo": "{count} тижнів тому", + "@dateWeeksAgo": { + "description": "Relative date - weeks ago", "placeholders": { "count": { "type": "int" } } }, - "folderOrganizationByArtistAlbum": "Виконавець/Альбом", - "@folderOrganizationByArtistAlbum": { - "description": "Folder option - nested folders" - }, - "snackbarCannotOpenFile": "Не вдається відкрити файл: {error}", - "@snackbarCannotOpenFile": { - "description": "Snackbar - file open error", + "dateMonthsAgo": "{count} місяців тому", + "@dateMonthsAgo": { + "description": "Relative date - months ago", "placeholders": { - "error": { - "type": "String" + "count": { + "type": "int" } } }, - "@optionsDetailedLoggingOff": { - "description": "Status when logging disabled" - }, - "@setupStorageDescription": { - "description": "Explanation for storage permission" - }, - "audioAnalysisCodec": "Codec", - "@regionCountryFR": { - "description": "Country name for SongLink region picker" - }, - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" + "storeFilterAll": "Усі", + "@storeFilterAll": { + "description": "Repo filter - all extensions" }, - "@libraryClearConfirmMessage": { - "description": "Dialog message for clear confirmation" + "storeFilterMetadata": "Метадані", + "@storeFilterMetadata": { + "description": "Repo filter - metadata providers" }, - "trackLyricsNotAvailable": "Текст пісні для цього треку недоступний", - "@trackLyricsNotAvailable": { - "description": "Message when lyrics not found" + "storeFilterDownload": "Завантажити", + "@storeFilterDownload": { + "description": "Repo filter - download providers" }, "storeFilterUtility": "Утиліта", "@storeFilterUtility": { "description": "Repo filter - utility extensions" }, - "collectionAddedToPlaylist": "Додано до \"{playlistName}\"", - "@collectionAddedToPlaylist": { - "description": "Snackbar after adding track to playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "storeFilterLyrics": "Тексти пісень", + "@storeFilterLyrics": { + "description": "Repo filter - lyrics providers" }, - "cacheClearConfirmTitle": "Очистити кеш?", - "@cacheClearConfirmTitle": { - "description": "Dialog title before clearing one cache category" + "storeFilterIntegration": "Інтеграція", + "@storeFilterIntegration": { + "description": "Repo filter - integrations" }, - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" + "storeClearFilters": "Очистити фільтри", + "@storeClearFilters": { + "description": "Button to clear all filters" }, - "@aboutMobileDeveloper": { - "description": "Role description for mobile dev" + "storeAddRepoTitle": "Додати репозиторій розширень", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" }, - "albumFolderYearAlbum": "[Рік] Альбом", - "@albumFolderYearAlbum": { - "description": "Album folder option with year" + "storeAddRepoDescription": "Введіть URL-адресу репозиторію GitHub, яка містить файл registry.json, для перегляду та встановлення розширень.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" }, - "cacheTitle": "Зберігання та кеш", - "@extensionPostProcessing": { - "description": "Capability - post-download processing" + "storeRepoUrlLabel": "URL-адреса репозиторію", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" }, - "extensionsNoMetadataProvider": "Без розширень із постачальником метаданих", - "@extensionsNoMetadataProvider": { - "description": "Empty state - no metadata providers" + "storeRepoUrlHint": "https://github.com/user/repo", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" }, - "searchSortTitleZA": "Назва (Я-А)", - "@queueClearAllMessage": { - "description": "Clear queue confirmation" + "storeAddRepoButton": "Додати репозиторій", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" }, - "audioAnalysisTitle": "Аналіз якості звуку", - "@audioAnalysisTitle": { - "description": "Title for audio analysis section" - }, - "@aboutReportIssueSubtitle": { - "description": "Subtitle for report issue" + "storeChangeRepoTooltip": "Змінити репозиторій", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" }, - "@audioAnalysisSampleRate": { - "description": "Sample rate metric label" + "storeRepoDialogTitle": "Репозиторій розширень", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" }, - "@discographySelectedCount": { - "description": "Selection count badge", - "placeholders": { - "count": { - "type": "int" - } - } + "storeRepoDialogCurrent": "Поточний репозиторій:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" }, - "qualityFlacLosslessSubtitle": "16 біт / 44,1 кГц", - "@qualityFlacLosslessSubtitle": { - "description": "Technical spec for lossless" + "storeNewRepoUrlLabel": "Нова URL-адреса репозиторію", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" }, - "libraryScanFinalizing": "Завершення роботи з бібліотекою...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" + "storeLoadError": "Не вдалося завантажити репозиторій", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" }, - "@trackEditMetadata": { - "description": "Menu action - edit embedded metadata" + "storeEmptyNoExtensions": "Розширень немає", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" }, - "@downloadNeteaseIncludeRomanization": { - "description": "Setting to include romanized lyrics from Netease" + "storeEmptyNoResults": "Розширень не знайдено", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" }, - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" + "extensionId": "Ідентифікатор", + "@extensionId": { + "description": "Extension detail - unique ID" }, - "regionCountryDE": "Germany", - "@regionCountryDE": { - "description": "Country name for SongLink region picker" + "extensionError": "Помилка", + "@extensionError": { + "description": "Extension detail - error message" }, - "optionsAutoFallback": "Автоматичний резервний варіант", - "@optionsAutoFallback": { - "description": "Auto-retry with other services" + "extensionCapabilities": "Можливості", + "@extensionCapabilities": { + "description": "Section header - extension features" }, - "@trackMetadataPlay": { - "description": "Action button - play track" + "extensionMetadataProvider": "Постачальник метаданих", + "@extensionMetadataProvider": { + "description": "Capability - provides metadata" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" + "extensionDownloadProvider": "Постачальник завантажень", + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" }, - "aboutMobileDeveloper": "Розробник мобільної версії", - "@trackDownloaded": { - "description": "Metadata label - download date" + "extensionLyricsProvider": "Постачальник текстів пісень", + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" }, - "homeSkipAlreadyDownloaded": "Пропустити вже завантажені пісні", - "@homeSkipAlreadyDownloaded": { - "description": "Checkbox label in import dialog to skip already-downloaded songs" + "extensionUrlHandler": "Обробник URL-адрес", + "@extensionUrlHandler": { + "description": "Capability - handles URLs" }, - "dialogUninstall": "Деінсталювати", - "@dialogUninstall": { - "description": "Dialog button - uninstall extension" + "extensionQualityOptions": "Варіанти якості", + "@extensionQualityOptions": { + "description": "Capability - quality selection" }, - "collectionDeletePlaylist": "Видалити список відтворення", - "@collectionDeletePlaylist": { - "description": "Action to delete playlist" + "extensionPostProcessingHooks": "Хуки пост-обробки", + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" }, - "trackCoverOnline": "Online cover", - "@trackCoverOnline": { - "description": "Label shown when metadata autofill downloaded cover art from the internet" + "extensionPermissions": "Дозволи", + "@extensionPermissions": { + "description": "Section header - required permissions" }, - "downloadTitle": "Завантажити", - "@downloadTitle": { - "description": "Download settings page title" + "extensionSettings": "Налаштування", + "@extensionSettings": { + "description": "Section header - extension settings" }, - "searchArtists": "Виконавці", - "@searchArtists": { - "description": "Search result category - artists" + "extensionRemoveButton": "Видалити розширення", + "@extensionRemoveButton": { + "description": "Button to uninstall extension" }, - "extensionUrlHandler": "Обробник URL-адрес", - "@extensionUrlHandler": { - "description": "Capability - handles URLs" + "extensionUpdated": "Оновлено", + "@extensionUpdated": { + "description": "Extension detail - last update" }, - "@timeHoursAgo": { - "description": "Relative time - hours ago", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionMinAppVersion": "Мінімальна версія програми", + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" }, - "editMetadataAdvanced": "Advanced", - "@editMetadataAdvanced": { - "description": "Expandable section label for advanced metadata fields" + "extensionCustomTrackMatching": "Підбір користувацьких треків", + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" }, - "@actionSelectAll": { - "description": "Action button - select all items" + "extensionPostProcessing": "Післяобробка", + "@extensionPostProcessing": { + "description": "Capability - post-download processing" }, - "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} хвилин тому}}", - "@timeMinutesAgo": { - "description": "Relative time - minutes ago", + "extensionHooksAvailable": "{count} доступних хуків", + "@extensionHooksAvailable": { + "description": "Post-processing hooks count", "placeholders": { "count": { "type": "int" } } }, - "regionCountryXK": "Kosovo", - "@downloadAskQualitySubtitle": { - "description": "Subtitle for ask quality toggle" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "@updateAvailable": { - "description": "Update dialog title" - }, - "cacheEntries": "{count} записів", - "@cacheEntries": { - "description": "Track cache entry count", + "extensionPatternsCount": "{count} шаблон(ів)", + "@extensionPatternsCount": { + "description": "URL patterns count", "placeholders": { "count": { "type": "int" } } }, - "@notifLibraryScanExcluded": { - "description": "Library scan complete suffix - excluded track count", + "extensionStrategy": "Стратегія: {strategy}", + "@extensionStrategy": { + "description": "Track matching strategy name", "placeholders": { - "count": { - "type": "int" + "strategy": { + "type": "String" } } }, - "extensionsMetadataPrioritySubtitle": "Встановити порядок пошуку та джерел метаданих", - "@extensionsMetadataPrioritySubtitle": { - "description": "Subtitle for metadata priority" + "extensionsProviderPrioritySection": "Пріоритет постачальника", + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" }, - "downloadedAlbumSelectToDelete": "Виберіть треки для видалення", - "@downloadedAlbumSelectToDelete": { - "description": "Placeholder when nothing selected" + "extensionsInstalledSection": "Встановлені розширення", + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" }, - "@dialogClearHistoryTitle": { - "description": "Dialog title - clear download history" + "extensionsNoExtensions": "Розширень не встановлено", + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" }, - "tutorialSettingsTip1": "Змініть місце завантаження та організації папок", - "@tutorialSettingsTip1": { - "description": "Tutorial settings tip 1" + "extensionsNoExtensionsSubtitle": "Встановіть файли .spotiflac-ext, щоб додати нових провайдерів", + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, + "extensionsInstallButton": "Встановити розширення", + "@extensionsInstallButton": { + "description": "Button to install extension from file" }, + "extensionsInfoTip": "Розширення можуть додавати нові метадані та завантажувати постачальників. Встановлюйте розширення лише з перевірених джерел.", + "@extensionsInfoTip": { + "description": "Security warning about extensions" + }, + "extensionsInstalledSuccess": "Розширення успішно встановлено", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "allFilesAccessDisabledSubtitle": "Обмежено лише медіа-папками", - "@allFilesAccessDisabledSubtitle": { - "description": "Subtitle when all files access is disabled" - }, - "@appearanceHistoryViewList": { - "description": "List layout option" + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } }, - "@notifAlreadyInLibraryCount": { - "description": "Notification title when track is already in library, with count", + "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", + "@extensionsInstallPartialSuccess": { + "description": "Message when installing multiple extensions partially succeeds", "placeholders": { - "completed": { - "type": "int" + "installed": { + "type": "int", + "description": "Number of successfully installed extensions" }, - "total": { - "type": "int" + "attempted": { + "type": "int", + "description": "Number of selected extensions" } } }, - "@libraryFilterAll": { - "description": "Filter chip - show all library items" - }, - "settingsDownload": "Завантаження", - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" + "extensionsDownloadPriority": "Пріоритет завантаження", + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" }, - "@libraryFilterSort": { - "description": "Filter section - sort order" + "extensionsDownloadPrioritySubtitle": "Встановити порядок завантаження", + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" }, - "metadataProvidersSubtitle": "Drag to set search and metadata source order", - "@extensionPermissions": { - "description": "Section header - required permissions" + "extensionsFallbackTitle": "Резервні розширення", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "selectionSelectToDelete": "Виберіть треки для видалення", - "@libraryExternalPlayerSubtitle": { - "description": "Subtitle for external player option" + "extensionsFallbackSubtitle": "Виберіть, які встановлені розширення для завантаження можна використовувати як резервні", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" }, - "extensionVerificationOpenBrowser": "Open browser", - "@extensionVerificationOpenBrowser": { - "description": "Button to open the extension verification URL in a browser" + "extensionsNoDownloadProvider": "Без розширень із постачальником завантажень", + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" }, - "@trackConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless-to-lossless conversion", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionsMetadataPriority": "Пріоритет метаданих", + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" }, - "@snackbarAddedTracksToQueue": { - "description": "Snackbar - multiple tracks added to queue", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsMetadataPrioritySubtitle": "Встановити порядок пошуку та джерел метаданих", + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" }, - "@backupContentsWishlist": { - "description": "Backup contents row for wishlist tracks count", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsNoMetadataProvider": "Без розширень із постачальником метаданих", + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" }, - "@cacheCleanupUnusedSubtitle": { - "description": "Subtitle for cleanup unused data action" + "extensionsSearchProvider": "Постачальник пошуку", + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" }, - "trackLabel": "Лейбл", - "@trackLabel": { - "description": "Metadata label - record label" + "extensionsNoCustomSearch": "Без розширень із користувацьким пошуком", + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" }, - "@collectionAddedToLoved": { - "description": "Snackbar after adding track to loved folder", - "placeholders": { - "trackName": { - "type": "String" - } - } + "extensionsSearchProviderDescription": "Виберіть, який сервіс використовувати для пошуку треків", + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" }, - "regionCountryGB": "United Kingdom", - "dialogCancel": "Скасувати", - "@dialogCancel": { - "description": "Dialog button - cancel action" + "extensionsCustomSearch": "Користувацький пошук", + "@extensionsCustomSearch": { + "description": "Label for custom search provider" }, - "@folderOrganizationByArtistAlbumSubtitle": { - "description": "Subtitle for nested folder option" + "extensionsErrorLoading": "Помилка завантаження розширення", + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" }, - "@notifAllDownloadsComplete": { - "description": "Notification title when all downloads finish successfully" + "qualityFlacLossless": "FLAC без втрат", + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" }, - "setupEnableNotifications": "Увімкнути сповіщення", - "@setupEnableNotifications": { - "description": "Button to enable notifications" + "qualityFlacLosslessSubtitle": "16 біт / 44,1 кГц", + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" }, - "@notifFinalizingTrack": { - "description": "Notification title while finalizing (embedding metadata) a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "qualityHiResFlac": "FLAC високої роздільної здатності", + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" }, - "@downloadLossy320FormatDesc": { - "description": "Description in the lossy format picker" + "qualityHiResFlacSubtitle": "24-біт / до 96 кГц", + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" }, - "filenameFormat": "Формат імені файлу", - "@filenameFormat": { - "description": "Setting title - filename pattern" + "qualityHiResFlacMax": "FLAC Max з високою роздільною здатністю", + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" }, - "historySearchHint": "Історія пошуку...", - "@historySearchHint": { - "description": "Search bar placeholder in history" + "qualityHiResFlacMaxSubtitle": "24-біт / до 192 кГц", + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" }, - "@tutorialReadyMessage": { - "description": "Tutorial completion message" + "downloadLossy320": "Lossy (із втратами) 320 кбіт/с", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" }, - "cacheTempDirectoryDesc": "Тимчасові файли із завантажень та конвертації аудіо.", - "@cacheTempDirectoryDesc": { - "description": "Description of what temporary directory contains" + "downloadLossyFormat": "Формат із втратами", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" }, - "@trackSaveLyrics": { - "description": "Menu action - save lyrics as .lrc file" + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" }, - "@notifDownloadsFinished": { - "description": "Notification title when queue finishes with some failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" }, - "@historyFilterAlbums": { - "description": "Filter chip - show albums only" + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" }, - "trackEmbedLyrics": "Вбудувати текст пісні", - "@trackEmbedLyrics": { - "description": "Action - embed lyrics into audio file" + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" }, - "@downloadPrimaryArtistOnlyOff": { - "description": "Status label when primary-artist-only folder naming is disabled" + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" }, - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" }, - "snackbarHistoryCleared": "Історія очищена", - "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", - "@artistPopular": { - "description": "Section header for popular/top tracks" + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" }, - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" }, - "extensionLyricsProvider": "Постачальник текстів пісень", - "@extensionLyricsProvider": { - "description": "Capability - provides lyrics" + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" }, - "historyFilterAll": "Усі", - "@historyFilterAll": { - "description": "Filter chip - show all items" + "downloadLossy320Format": "Формат із втратами 320 кбіт/с", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" }, - "tutorialSearchTitle": "Пошук музики", - "@lyricsModeExternal": { - "description": "Lyrics mode option - separate LRC file" + "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "@downloadLossy320FormatDesc": { + "description": "Description in the lossy format picker" }, - "@actionDismiss": { - "description": "Generic action - dismiss" + "downloadLossyMp3": "MP3 320 кбіт/с", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" }, - "trackOpenInSpotify": "Відкрити в Spotify", - "@trackOpenInSpotify": { - "description": "Action - open track in Spotify app" + "downloadLossyMp3Subtitle": "Найкраща сумісність, ~10 МБ на доріжку", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" }, - "@libraryClear": { - "description": "Button to clear all library entries" + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "discographyFailedToFetch": "Не вдалося отримати деякі альбоми", - "@filenameShowAdvancedTagsDescription": { - "description": "Description for advanced filename tag toggle" + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" }, - "@storeUpdate": { - "description": "Update available button" + "downloadLossyOpus256": "Opus 256 кбіт/с", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" }, - "collectionPlaylistTracks": "{count, plural, =1{1 трек} other{{count} треків}}", - "@collectionPlaylistTracks": { - "description": "Track count label for custom playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadLossyOpus256Subtitle": "Opus найкращої якості, ~8 МБ на трек", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" }, - "optionsPrimaryProviderSubtitle": "Service used for searching by track or album name", - "@optionsPrimaryProviderSubtitle": { - "description": "Subtitle for primary provider" + "downloadLossyOpus128": "Opus 128 кбіт/с", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" }, - "@downloadEmbedLyricsDisabled": { - "description": "Subtitle when lyrics embedding is blocked by metadata toggle" + "downloadLossyOpus128Subtitle": "Найменший розмір, ~4 МБ на доріжку", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" }, - "@librarySourceLocal": { - "description": "Badge for tracks from local library scan" + "downloadAskBeforeDownload": "Запитувати перед завантаженням", + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" }, - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" + "downloadDirectory": "Каталог завантажень", + "@downloadDirectory": { + "description": "Setting - download folder" }, - "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is off" + "downloadSeparateSinglesFolder": "Окрема папка для синглів", + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" }, - "queueDownloadingCount": "Завантаження ({count})", - "@queueDownloadingCount": { - "description": "Header for active downloads section with count", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAlbumFolderStructure": "Структура папок альбому", + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" }, - "extensionVerificationBrowserInApp": "In-app", - "trackAudioQuality": "Якість звуку", - "@trackAudioQuality": { - "description": "Metadata label - audio quality" - }, - "libraryRemovedMissingFiles": "Видалено {count} відсутніх файлів з бібліотеки", - "@libraryRemovedMissingFiles": { - "description": "Snackbar after cleanup", - "placeholders": { - "count": { - "type": "int" - } - } + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" + "downloadUseAlbumArtistForFolders": "Використовувати виконавця альбому для папок", + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "@errorInvalidFolderSelected": { - "description": "Error when the selected folder is invalid" + "downloadUsePrimaryArtistOnly": "Тільки основний виконавець для папок", + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" }, - "@searchSortArtistZA": { - "description": "Sort option - artist descending" + "downloadUsePrimaryArtistOnlyEnabled": "Вибраних виконавців видалити з назви папки (наприклад, Джастін Бібер, Quavo → Джастін Бібер)", + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" }, - "snackbarAddedTracksToLoved": "Додано {count} треків до списку \"Улюблені\"", - "@snackbarAddedTracksToLoved": { - "description": "Snackbar after adding multiple tracks to Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadUsePrimaryArtistOnlyDisabled": "Повний рядок виконавця, що використовується для назви папки", + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" }, - "cancelDownloadContent": "Це скасує активне завантаження треку \"{trackName}\".", - "@cancelDownloadContent": { - "description": "Dialog body when confirming cancellation of an active download", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadSelectQuality": "Вибрати якість", + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" }, - "settingsCacheSubtitle": "Переглянути розмір і очистити кешовані дані", - "@settingsCacheSubtitle": { - "description": "Subtitle for cache management menu" + "downloadFrom": "Завантажити з", + "@downloadFrom": { + "description": "Label - download source" }, - "notifLibraryScanCompleteBody": "{count} треків індексовано", - "@cacheSizeWithFiles": { - "description": "Cache size and file count", - "placeholders": { - "size": { - "type": "String" - }, - "count": { - "type": "int" - } - } + "appearanceAmoledDark": "Темний AMOLED", + "@appearanceAmoledDark": { + "description": "Theme option - pure black" }, - "@downloadAskBeforeDownload": { - "description": "Setting - show quality picker" + "appearanceAmoledDarkSubtitle": "Чисто чорний фон", + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" }, - "@extensionHealthDegraded": { - "description": "Extension service health status - degraded" + "appearanceHeroAnimations": "Hero animations", + "@appearanceHeroAnimations": { + "description": "Toggle for shared-element (Hero) transitions" }, - "@sectionPerformance": { - "description": "Settings section header" + "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", + "@appearanceHeroAnimationsSubtitle": { + "description": "Subtitle for the Hero animations toggle" }, - "@trackCoverCurrent": { - "description": "Label for the currently embedded cover preview" + "appearanceForceBlur": "Always use blur effects", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" }, - "discographySelectAlbums": "Вибрати альбоми...", - "@discographySelectAlbums": { - "description": "Option - manually select albums to download" + "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" }, - "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", - "@aboutAppDescription": { - "description": "App description in header card" + "queueClearAll": "Усі", + "@queueClearAll": { + "description": "Button - clear all queue items" }, - "extensionCustomTrackMatching": "Підбір користувацьких треків", - "@extensionCustomTrackMatching": { - "description": "Capability - custom track matching algorithm" + "queueClearAllMessage": "Ви впевнені, що хочете очистити всі завантаження?", + "@queueClearAllMessage": { + "description": "Clear queue confirmation" }, - "@editMetadataSelectNone": { - "description": "Button to clear selected fields for auto-fill" + "settingsAutoExportFailed": "Автоматичний експорт невдалих завантажень", + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" }, - "@trackPlayNext": { - "description": "Menu action to play a track as the next queue item" + "settingsAutoExportFailedSubtitle": "Автоматично зберігати невдалі завантаження у файл TXT", + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" }, - "extensionCapabilities": "Можливості", - "@extensionCapabilities": { - "description": "Section header - extension features" + "settingsDownloadNetwork": "Мережа для завантаження", + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" }, - "@downloadSelectServiceToEnable": { - "description": "Subtitle when quality picker is disabled due to extension service" + "settingsDownloadNetworkAny": "Wi-Fi + мобільний інтернет", + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" }, - "logIssueRateLimitedDescription": "Too many requests to the service", - "@logIssueRateLimitedDescription": { - "description": "Diagnostic badge description for rate limiting" + "settingsDownloadNetworkWifiOnly": "Тільки Wi-Fi", + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" }, - "@actionResume": { - "description": "Action button - resume download" + "settingsDownloadNetworkSubtitle": "Вибрати мережу для завантажень. Якщо встановлено значення «Тільки Wi-Fi», завантаження призупиняться через мобільні дані.", + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" }, - "@updateDownloadInstall": { - "description": "Update button - download and install" + "settingsConcurrentDownloads": "Concurrent downloads", + "@settingsConcurrentDownloads": { + "description": "Setting title - how many tracks download at the same time" }, - "downloadLossy320Format": "Формат із втратами 320 кбіт/с", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" + "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", + "@settingsConcurrentDownloadsSubtitle": { + "description": "Subtitle explaining the concurrent downloads picker" }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@trackCopyright": { - "description": "Metadata label - copyright information" + "concurrentDownloadsOne": "1 track at a time", + "@concurrentDownloadsOne": { + "description": "Concurrent downloads option - sequential" }, - "@snackbarExtensionInstalled": { - "description": "Snackbar - extension installed successfully", + "concurrentDownloadsCount": "Up to {count} tracks at once", + "@concurrentDownloadsCount": { + "description": "Concurrent downloads option - parallel", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "@regionCountryJP": { - "description": "Country name for SongLink region picker" + "albumFolderArtistAlbum": "Артист / Альбом", + "@albumFolderArtistAlbum": { + "description": "Album folder option" }, - "trackReEnrichOnlineSubtitle": "Пошук метаданих в Інтернеті та вбудовування у файл", - "@trackReEnrichOnlineSubtitle": { - "description": "Subtitle for re-enrich metadata action for local items" + "albumFolderArtistAlbumSubtitle": "Альбоми/Ім'я артиста/Назва альбому/", + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" }, - "nowPlayingNothingPlaying": "Nothing is playing", - "@nowPlayingNothingPlaying": { - "description": "Empty state when no track is currently playing" + "albumFolderArtistYearAlbum": "Артист / [Рік] Альбом", + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", - "@tutorialDownloadDesc": { - "description": "Tutorial download page description" + "albumFolderArtistYearAlbumSubtitle": "Альбоми/Ім'я Виконавця/[2005] Назва альбому/", + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" }, - "@appearanceTitle": { - "description": "Appearance settings page title" + "albumFolderAlbumOnly": "Тільки альбом", + "@albumFolderAlbumOnly": { + "description": "Album folder option" }, - "@backupExportSectionDescription": { - "description": "Description of what a backup contains" + "albumFolderAlbumOnlySubtitle": "Альбоми/Назва Альбому/", + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" }, - "@downloadLossyOpus128": { - "description": "Lossy format option - Opus 128kbps" + "albumFolderYearAlbum": "[Рік] Альбом", + "@albumFolderYearAlbum": { + "description": "Album folder option with year" }, - "@logFilterSection": { - "description": "Filter section title" + "albumFolderYearAlbumSubtitle": "Альбоми/[2005] Назва Альбому/", + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" }, - "trackReEnrichSuccess": "Метадані повторно збагачені успішно", - "@trackReEnrichSuccess": { - "description": "Snackbar after successful re-enrichment" + "albumFolderArtistAlbumSingles": "Виконавець / Альбом + Сингли", + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", - "@backupContentsHistory": { - "description": "Backup contents row for history count", + "albumFolderArtistAlbumSinglesSubtitle": "Виконавець/Альбом/ та Виконавець/Сингли/", + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistAlbumFlat": "Виконавець / Альбом (сингли без альбомів)", + "@albumFolderArtistAlbumFlat": { + "description": "Album folder option with singles directly in artist folder" + }, + "albumFolderArtistAlbumFlatSubtitle": "Виконавець/Альбом/ та Виконавець/пісня.flac", + "@albumFolderArtistAlbumFlatSubtitle": { + "description": "Folder structure example for flat singles" + }, + "downloadedAlbumDeleteSelected": "Видалити вибране", + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" + }, + "downloadedAlbumDeleteMessage": "Видалити {count} {count, plural, =1{трек} other{треків}} з цього альбому?\n\nЦе також призведе до видалення файлів зі сховища.", + "@downloadedAlbumDeleteMessage": { + "description": "Delete confirmation with count", "placeholders": { "count": { "type": "int" } } }, - "snackbarAddedToQueue": "Додано \"{trackName}\" до черги", - "@snackbarAddedToQueue": { - "description": "Snackbar - track added to download queue", + "downloadedAlbumSelectedCount": "Вибрано {count}", + "@downloadedAlbumSelectedCount": { + "description": "Selection count indicator", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "libraryAutoScanOnOpen": "Кожного разу коли додаток відкривається", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "audioAnalysisChannels": "Канали", - "@audioAnalysisChannels": { - "description": "Channels metric label" + "downloadedAlbumTapToSelect": "Натисніть на треки, щоб вибрати", + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" }, - "appearanceHistoryViewList": "Список", - "updateDownloadInstall": "Завантажити та встановити", - "@libraryShowDuplicateIndicator": { - "description": "Toggle for duplicate indicator in search" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "searchSortTitleAZ": "Назва (А-Я)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "collectionRemovedFromLoved": "\"{trackName}\" видалено з уподобань", - "@collectionRemovedFromLoved": { - "description": "Snackbar after removing track from loved folder", + "downloadedAlbumDeleteCount": "Видалити {count} {count, plural, =1{трек} other{треків}}", + "@downloadedAlbumDeleteCount": { + "description": "Delete button text with count", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "sectionAudioQuality": "Якість звуку", - "@sectionAudioQuality": { - "description": "Settings section header" + "downloadedAlbumSelectToDelete": "Виберіть треки для видалення", + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" }, - "trackConvertSuccess": "Конвертовано в {format} успішно", - "@trackConvertSuccess": { - "description": "Snackbar after successful conversion", + "downloadedAlbumDiscHeader": "Диск {discNumber}", + "@downloadedAlbumDiscHeader": { + "description": "Header for disc separator in multi-disc albums", "placeholders": { - "format": { - "type": "String" + "discNumber": { + "type": "int", + "example": "1" } } }, - "dialogUninstallExtensionMessage": "Ви впевнені, що хочете видалити {extensionName}?", - "@dialogUninstallExtensionMessage": { - "description": "Dialog message - uninstall specific extension", + "recentTypeArtist": "Артист", + "@recentTypeArtist": { + "description": "Recent access item type - artist" + }, + "recentTypeAlbum": "Альбом", + "@recentTypeAlbum": { + "description": "Recent access item type - album" + }, + "recentTypeSong": "Пісня", + "@recentTypeSong": { + "description": "Recent access item type - song/track" + }, + "recentTypePlaylist": "Список відтворення", + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" + }, + "recentEmpty": "Поки що немає нещодавніх записів", + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, + "recentShowAllDownloads": "Показати всі завантаження", + "@recentShowAllDownloads": { + "description": "Button label to unhide hidden downloads in recent access" + }, + "recentPlaylistInfo": "Список відтворення: {name}", + "@recentPlaylistInfo": { + "description": "Snackbar message when tapping playlist in recent access", "placeholders": { - "extensionName": { - "type": "String" + "name": { + "type": "String", + "description": "Playlist name" } } }, - "downloadNativeWorkerSubtitle": "Фонова служба Android для завантажень через розширення", - "@downloadNativeWorkerSubtitle": { - "description": "Setting subtitle for Android native download worker" + "discographyDownload": "Завантажити дискографію", + "@discographyDownload": { + "description": "Button - download artist discography" }, - "storeUpdate": "Оновлені", - "libraryFilterMetadataMissingAny": "будь-які метадані", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" + "discographyDownloadAll": "Завантажити все", + "@discographyDownloadAll": { + "description": "Option - download entire discography" }, - "@selectionBatchConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless batch conversion", + "discographyDownloadAllSubtitle": "{count} треків з {albumCount} релізів", + "@discographyDownloadAllSubtitle": { + "description": "Subtitle showing total tracks and albums", "placeholders": { "count": { "type": "int" }, - "format": { - "type": "String" - }, - "quality": { - "type": "String" + "albumCount": { + "type": "int" } } }, - "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", - "@editMetadataAutoFillDesc": { - "description": "Description for the auto-fill section" - }, - "@lyricsProviderExtensionDesc": { - "description": "Generic description for extension-based lyrics providers" - }, - "downloadSongLinkRegion": "Регіон SongLink", - "@downloadSongLinkRegion": { - "description": "Setting for SongLink region used during fallback resolution" - }, - "shareSheetNoExtensions": "No other compatible services", - "@shareSheetNoExtensions": { - "description": "Empty state when no extensions can be searched for cross-service links" + "discographyAlbumsOnly": "Тільки альбоми", + "@discographyAlbumsOnly": { + "description": "Option - download only albums" }, - "queueFlacConfirmMessage": "Пошук онлайн-збігів для вибраних треків та додавання завантажень FLAC до черги.\n\nІснуючі файли не будуть змінені або видалені.\n\nАвтоматично додаються до черги лише збіги з високою достовірністю.\n\n{count} вибрано", - "@queueFlacConfirmMessage": { - "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", + "discographyAlbumsOnlySubtitle": "{count} треків з {albumCount} альбомів", + "@discographyAlbumsOnlySubtitle": { + "description": "Subtitle showing album tracks count", "placeholders": { "count": { "type": "int" + }, + "albumCount": { + "type": "int" } } }, - "tooltipAddToPlaylist": "Додати до списку відтворення", - "@tooltipAddToPlaylist": { - "description": "Tooltip for the Add to Playlist button" + "discographySinglesOnly": "Тільки сингли та міні-альбоми", + "@discographySinglesOnly": { + "description": "Option - download only singles" }, - "@snackbarAddedToQueueGeneric": { - "description": "Snackbar when a track is added to the playback queue without naming it" + "discographySinglesOnlySubtitle": "{count} треків з {albumCount} синглів", + "@discographySinglesOnlySubtitle": { + "description": "Subtitle showing singles tracks count", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } }, - "@tutorialSettingsTip2": { - "description": "Tutorial settings tip 2" + "discographySelectAlbums": "Вибрати альбоми...", + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" }, - "extensionPermissions": "Дозволи", - "releaseTypeSingle": "Single", - "aboutTelegramChannelSubtitle": "Оголошення та оновлення", - "@aboutTelegramChannelSubtitle": { - "description": "Subtitle for Telegram channel" + "discographySelectAlbumsSubtitle": "Виберіть конкретні альбоми або сингли", + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" }, - "@dialogDisableAndClear": { - "description": "Confirmation action to disable download history and clear existing entries" + "discographyFetchingTracks": "Отримання треків...", + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" }, - "@homeSearchHintProvider": { - "description": "Placeholder for the main search field when a provider is selected", + "discographyFetchingAlbum": "Отримання {current} з {total}...", + "@discographyFetchingAlbum": { + "description": "Progress - fetching specific album", "placeholders": { - "providerName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "metadataProvidersTitle": "Metadata Provider Priority", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "trackAddToQueue": "Add to queue", - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" + "discographySelectedCount": "{count} вибрано", + "@discographySelectedCount": { + "description": "Selection count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@editMetadataSelectEmpty": { - "description": "Button to select only fields that are currently empty" + "discographyDownloadSelected": "Завантажити вибране", + "@discographyDownloadSelected": { + "description": "Button - download selected albums" }, - "collectionAlreadyInPlaylist": "Вже у списку відтворення \"{playlistName}\"", - "discographyAlbumsOnlySubtitle": "{count} треків з {albumCount} альбомів", - "@discographyAlbumsOnlySubtitle": { - "description": "Subtitle showing album tracks count", + "discographyAddedToQueue": "Додано {count} треків до черги", + "@discographyAddedToQueue": { + "description": "Snackbar - tracks added from discography", "placeholders": { "count": { "type": "int" + } + } + }, + "discographySkippedDownloaded": "{added} додано, {skipped} вже завантажено", + "@discographySkippedDownloaded": { + "description": "Snackbar - with skipped tracks count", + "placeholders": { + "added": { + "type": "int" }, - "albumCount": { + "skipped": { "type": "int" } } }, - "setupNotificationEnable": "Увімкнути сповіщення", - "@setupNotificationEnable": { - "description": "Button to enable notifications" - }, - "settingsAppearanceSubtitle": "Тема, кольори, дисплей", - "@settingsAppearanceSubtitle": { - "description": "Appearance settings description" + "discographyNoAlbums": "Немає доступних альбомів", + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" }, - "@notifUpdateFailedBody": { - "description": "Notification body when app update download fails" + "discographyFailedToFetch": "Не вдалося отримати деякі альбоми", + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" }, - "@aboutOriginalCreator": { - "description": "Role description for original creator" + "sectionStorageAccess": "Доступ до сховища", + "@sectionStorageAccess": { + "description": "Section header for storage access settings" }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", - "@libraryBuiltInPreviewPlayer": { - "description": "Setting option to use the built-in preview player" + "allFilesAccess": "Доступ до всіх файлів", + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "tooltipPlay": "Відтворити", - "@tooltipPlay": { - "description": "Tooltip - play button" + "allFilesAccessEnabledSubtitle": "Можна записувати в будь-яку папку", + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" }, - "@safMigrationMessage2": { - "description": "Second paragraph of SAF migration dialog" + "allFilesAccessDisabledSubtitle": "Обмежено лише медіа-папками", + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" }, - "@extensionsSearchProvider": { - "description": "Setting - search provider selection" + "allFilesAccessDescription": "Увімкніть цю опцію, якщо під час збереження у власні папки виникають помилки запису. Android 13+ за замовчуванням обмежує доступ до певних каталогів.", + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" }, - "libraryAboutDescription": "Сканує вашу існуючу музичну колекцію для виявлення дублікатів під час завантаження. Підтримує формати FLAC, M4A, MP3, Opus та OGG. Метадані зчитуються з тегів файлів, коли вони доступні.", - "@libraryAboutDescription": { - "description": "Description of local library feature" - }, - "downloadAskBeforeDownload": "Запитувати перед завантаженням", - "nowPlayingNoMetadata": "No metadata available", - "@nowPlayingNoMetadata": { - "description": "Empty state when track metadata cannot be loaded" - }, - "trackInstrumental": "Інструментальний трек", - "@trackInstrumental": { - "description": "Message when track is instrumental (no lyrics)" + "allFilesAccessDeniedMessage": "У дозволі відмовлено. Будь ласка, увімкніть «Доступ до всіх файлів» вручну в налаштуваннях системи.", + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" }, - "@collectionWishlistEmptyTitle": { - "description": "Wishlist empty state title" + "allFilesAccessDisabledMessage": "У дозволі відмовлено. Будь ласка, увімкніть «Доступ до всіх файлів» вручну в налаштуваннях системи.", + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", - "downloadDeduplication": "Skip Duplicate Downloads", - "libraryFilterSortOldest": "Найстаріші", - "@libraryFilterSortOldest": { - "description": "Sort option - oldest first" + "settingsLocalLibrary": "Локальна бібліотека", + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" }, - "setupSkip": "Пропустити поки що", - "@setupSkip": { - "description": "Skip current step button" + "settingsLocalLibrarySubtitle": "Сканування музики та виявлення дублікатів", + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" }, - "@setupFolderDescription": { - "description": "Explanation for folder selection" + "settingsCache": "Сховище та Кеш", + "@settingsCache": { + "description": "Settings menu item - cache management" }, - "@settingsLogsSubtitle": { - "description": "Logs settings description" + "settingsCacheSubtitle": "Переглянути розмір і очистити кешовані дані", + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" }, - "storeNewRepoUrlLabel": "Нова URL-адреса репозиторію", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" + "libraryTitle": "Локальна бібліотека", + "@libraryTitle": { + "description": "Library settings page title" }, - "cacheClearConfirmMessage": "Це очистить кешовані дані для {target}. Завантажені музичні файли не будуть видалені.", - "@cacheClearConfirmMessage": { - "description": "Dialog message before clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "libraryScanSettings": "Налаштування сканування", + "@libraryScanSettings": { + "description": "Section header for scan settings" }, - "trackMetadataPlay": "Прослухати", + "libraryEnableLocalLibrary": "Увімкнути локальну бібліотеку", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, - "optionsUpdateChannel": "Канал оновлень", - "@optionsUpdateChannel": { - "description": "Stable vs preview releases" + "libraryEnableLocalLibrarySubtitle": "Скануати та відстежити свою існуючу музику", + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" }, - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist folder is disabled" + "libraryFolder": "Папка бібліотеки", + "@libraryFolder": { + "description": "Folder selection setting" }, - "@extensionRefreshStatus": { - "description": "Tooltip for refreshing extension service health status" + "libraryFolderHint": "Натисніть, щоб вибрати папку", + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", - "@backupRestoreRestartHint": { - "description": "Hint shown after restoring that an app restart is recommended" + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" }, - "@snackbarExtensionInstalledEnable": { - "description": "Snackbar after installing an extension from the repo tab", + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", "placeholders": { - "extensionName": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { "type": "String" } } }, - "settingsAutoExportFailedSubtitle": "Автоматично зберігати невдалі завантаження у файл TXT", - "@settingsAutoExportFailedSubtitle": { - "description": "Subtitle for auto-export setting" - }, - "searchSortArtistAZ": "Виконавець (А-Я)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" }, - "editMetadataFieldAlbumArtist": "Виконавець альбому", - "@editMetadataFieldAlbumArtist": { - "description": "Chip label for album artist field in auto-fill selector" + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" }, - "@queueEmptyHistory": { - "description": "Empty state title when download history is empty" + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" }, - "@dialogDisableHistoryMessage": { - "description": "Confirmation dialog message shown before disabling download history" + "libraryShowDuplicateIndicator": "Показати індикатор дублікатів", + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" }, - "queueFlacNoReliableMatches": "Не знайдено надійних онлайн-відповідей для вибраного запиту", - "@queueFlacNoReliableMatches": { - "description": "Snackbar when no safe FLAC redownload matches were found" + "libraryShowDuplicateIndicatorSubtitle": "Показувати під час пошуку існуючих треків", + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" }, - "trackOpenInDeezer": "Відкрити в Deezer", - "@trackOpenInDeezer": { - "description": "Action - open track in Deezer app" + "libraryAutoScan": "Автоматичне сканування", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" }, - "setupChooseFromFilesSubtitle": "Виберіть iCloud або інше місцезнаходження", - "@setupChooseFromFilesSubtitle": { - "description": "Subtitle for file picker" + "libraryAutoScanSubtitle": "Автоматичне сканування бібліотеки на наявність нових файлів", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" }, - "artistMonthlyListeners": "{count} слухачів щомісяця", - "@artistMonthlyListeners": { - "description": "Monthly listener count display", - "placeholders": { - "count": { - "type": "String", - "description": "Formatted listener count" - } - } + "libraryAutoScanOff": "Вимкнено", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" }, - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" + "libraryAutoScanOnOpen": "Кожного разу коли додаток відкривається", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" }, - "cacheSectionStorage": "Кешовані дані", - "@cacheSectionStorage": { - "description": "Section header for cache entries" + "libraryAutoScanDaily": "Щоденно", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" }, + "libraryAutoScanWeekly": "Щотижнево", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "tutorialDownloadCompletedSemantics": "Download completed", - "@tutorialDownloadCompletedSemantics": { - "description": "Accessibility label for completed download state in tutorial demo" + "libraryActions": "Дії", + "@libraryActions": { + "description": "Section header for library actions" }, - "@logNoLogsYet": { - "description": "Empty state title" + "libraryScan": "Сканувати бібліотеку", + "@libraryScan": { + "description": "Button to start library scan" }, - "@selectionDeletePlaylistsCount": { - "description": "Button label for deleting multiple selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryScanSubtitle": "Сканувати для аудіофайлів", + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" }, - "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", - "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is on" + "libraryScanSelectFolderFirst": "Спочатку виберіть папку", + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" }, - "setupAppDocumentsFolder": "Папка з документами програми", - "@setupAppDocumentsFolder": { - "description": "iOS documents folder option" + "libraryCleanupMissingFiles": "Очищення відсутніх файлів", + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" }, - "storeLoadError": "Не вдалося завантажити репозиторій", - "settingsDownloadNetwork": "Мережа для завантаження", - "metadataSaveFailedStorage": "Не вдалося записати метадані назад у сховище", - "@logAutoScrollOff": { - "description": "Tooltip when auto-scroll is disabled on the log screen" + "libraryCleanupMissingFilesSubtitle": "Видалити записи для файлів, яких більше не існує", + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" }, - "@trackConvertFormat": { - "description": "Menu item - convert audio format" + "libraryClear": "Очистити бібліотеку", + "@libraryClear": { + "description": "Button to clear all library entries" }, - "optionsArtistTagModeJoined": "Одне об'єднане значення", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" + "libraryClearSubtitle": "Видалити всі скановані треки", + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" }, - "@dateYesterday": { - "description": "Relative date - yesterday" + "libraryClearConfirmTitle": "Очистити бібліотеку", + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" }, - "@settingsExtensionsSubtitle": { - "description": "Extensions settings description" + "libraryClearConfirmMessage": "Це видалить усі скановані треки з вашої бібліотеки. Ваші фактичні музичні файли не будуть видалені.", + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" }, - "searchSortArtistZA": "Виконавець (Я-А)", - "@extensionSettings": { - "description": "Section header - extension settings" + "libraryAbout": "Про локальну бібліотеку", + "@libraryAbout": { + "description": "Section header for about info" }, - "@extensionOauthConnectHint": { - "description": "Hint for an OAuth login link field before connecting Spotify" + "libraryAboutDescription": "Сканує вашу існуючу музичну колекцію для виявлення дублікатів під час завантаження. Підтримує формати FLAC, M4A, MP3, Opus та OGG. Метадані зчитуються з тегів файлів, коли вони доступні.", + "@libraryAboutDescription": { + "description": "Description of local library feature" }, - "@notifUpdateReady": { - "description": "Notification title when app update download is complete" + "libraryTracksUnit": "{count, plural, =1{трек} other{треків}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@regionCountryMX": { - "description": "Country name for SongLink region picker" - }, - "@nowPlayingOpenInExternalPlayer": { - "description": "Menu item to open the current track in an external player" - }, - "trackConvertDithering": "Dithering", - "@trackConvertDithering": { - "description": "Section label for lossless conversion dithering options" - }, - "settingsDownloadSubtitle": "Service, quality, fallback", - "@settingsDownloadSubtitle": { - "description": "Download settings description" + "libraryFilesUnit": "{count, plural, =1{file} other{файлів}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } }, "libraryLastScanned": "Останнє сканування: {time}", "@libraryLastScanned": { @@ -2678,620 +2667,723 @@ } } }, - "setupIosEmptyFolderWarning": "Обмеження iOS: Не можна вибрати порожні папки. Виберіть папку, яка містить принаймні один файл.", - "@setupIosEmptyFolderWarning": { - "description": "iOS folder selection warning" + "libraryLastScannedNever": "Ніколи", + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" }, - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" + "libraryScanning": "Сканування...", + "@libraryScanning": { + "description": "Status during scan" }, - "@snackbarFailedToInstallNamed": { - "description": "Snackbar when extension install fails in the repo tab", + "libraryScanFinalizing": "Завершення роботи з бібліотекою...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, + "libraryScanProgress": "{progress}% від {total} файлів", + "@libraryScanProgress": { + "description": "Scan progress display", "placeholders": { - "extensionName": { + "progress": { "type": "String" + }, + "total": { + "type": "int" } } }, - "@collectionAddedTracksToPlaylist": { - "description": "Snackbar after adding multiple tracks to a playlist", + "libraryInLibrary": "У бібліотеці", + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, + "libraryRemovedMissingFiles": "Видалено {count} відсутніх файлів з бібліотеки", + "@libraryRemovedMissingFiles": { + "description": "Snackbar after cleanup", "placeholders": { "count": { "type": "int" - }, - "playlistName": { - "type": "String" } } }, - "updateNew": "Нова", - "@updateNew": { - "description": "Label for new version" + "libraryCleared": "Бібліотека очищена", + "@libraryCleared": { + "description": "Snackbar after clearing library" }, - "settingsExtensionsSubtitle": "Керування постачальниками послуг завантаження", - "@albumFolderArtistAlbumSinglesSubtitle": { - "description": "Folder structure example" + "libraryStorageAccessRequired": "Потрібен доступ до сховища", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" }, - "trackReEnrichSelectAll": "Вибрати все", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" + "libraryStorageAccessMessage": "SpotiFLAC потрібен доступ до сховища для сканування вашої музичної бібліотеки. Надайте дозвіл у налаштуваннях.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" }, - "@extensionsUninstall": { - "description": "Uninstall extension button" + "libraryFolderNotExist": "Вибрана папка не існує", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" }, - "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when track artist is used for folder names" + "librarySourceDownloaded": "Завантажені", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" }, - "@logIssueNetworkErrorLabel": { - "description": "Diagnostic badge label for generic network errors" + "librarySourceLocal": "Локальні", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" }, - "albumFolderArtistYearAlbumSubtitle": "Альбоми/Ім'я Виконавця/[2005] Назва альбому/", - "@albumFolderArtistYearAlbumSubtitle": { - "description": "Folder structure example" + "libraryFilterAll": "Усі", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" }, - "itemCount": "{count} {count, plural, =1{item} other{items}}", - "@itemCount": { - "description": "Generic item count label", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterDownloaded": "Завантажені", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" }, - "discographyFetchingTracks": "Отримання треків...", - "@discographyFetchingTracks": { - "description": "Progress - fetching album tracks" + "libraryFilterLocal": "Локальні", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" }, - "@libraryFolder": { - "description": "Folder selection setting" + "libraryFilterTitle": "Фільтри", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" }, - "queueEmptyAlbums": "Немає завантажень альбомів", - "@queueEmptyAlbums": { - "description": "Empty state title when no album downloads exist" + "libraryFilterReset": "Скинути", + "@libraryFilterReset": { + "description": "Reset all filters button" }, - "@metadataProviderPriorityDescription": { - "description": "Metadata priority page description" + "libraryFilterApply": "Застосувати", + "@libraryFilterApply": { + "description": "Apply filters button" }, - "@extensionVerificationHelpTitleManual": { - "description": "Dialog title when automatic browser launch for verification fails" + "libraryFilterSource": "Джерело", + "@libraryFilterSource": { + "description": "Filter section - source type" }, - "extensionError": "Помилка", - "@extensionError": { - "description": "Extension detail - error message" + "libraryFilterQuality": "Якість", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" }, - "@trackLyricsLoadFailed": { - "description": "Message when lyrics loading fails" + "libraryFilterQualityHiRes": "Висока роздільна здатність (24 біти)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" }, - "@downloadedAlbumDeleteCount": { - "description": "Delete button text with count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterQualityCD": "CD (16-бітний)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" }, - "@extensionsNoHomeFeedExtensions": { - "description": "Extensions page - shown when no installed extension has home feed" + "libraryFilterQualityLossy": "Із втратами (lossy)", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" }, - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterFormat": "Формат", + "@libraryFilterFormat": { + "description": "Filter section - file format" }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", - "@backupContentsArtists": { - "description": "Backup contents row for favorite artists count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadata": "Метадані", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" }, - "@trackRemoveFromDevice": { - "description": "Action - delete downloaded file" + "libraryFilterMetadataComplete": "Повні метадані", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" }, - "lyricsProvidersEnabledSection": "Увімкнено ({count})", - "@lyricsProvidersEnabledSection": { - "description": "Section header for enabled providers", + "libraryFilterMetadataMissingAny": "будь-які метадані", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Відсутній рік", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Відсутній жанр", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Відсутній виконавець альбому", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, + "libraryFilterSort": "Сортувати", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "Найновіші", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "Найстаріші", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" + }, + "libraryFilterSortAlbumAsc": "Альбом (А-Я)", + "@libraryFilterSortAlbumAsc": { + "description": "Sort option - album ascending" + }, + "libraryFilterSortAlbumDesc": "Альбом (Я-А)", + "@libraryFilterSortAlbumDesc": { + "description": "Sort option - album descending" + }, + "libraryFilterSortGenreAsc": "Жанр (А-Я)", + "@libraryFilterSortGenreAsc": { + "description": "Sort option - genre ascending" + }, + "libraryFilterSortGenreDesc": "Жанр (Я-А)", + "@libraryFilterSortGenreDesc": { + "description": "Sort option - genre descending" + }, + "timeJustNow": "Щойно", + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, + "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} хвилин тому}}", + "@timeMinutesAgo": { + "description": "Relative time - minutes ago", "placeholders": { "count": { "type": "int" } } }, - "@cueSplitTitle": { - "description": "Title for CUE split bottom sheet" - }, - "@downloadedAlbumSelectedCount": { - "description": "Selection count indicator", + "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} годин тому}}", + "@timeHoursAgo": { + "description": "Relative time - hours ago", "placeholders": { "count": { "type": "int" } } }, - "@trackOptionRemoveFromWishlist": { - "description": "Bottom sheet action label - remove track from wishlist" + "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" }, - "notifDownloadingTrack": "Завантаження {trackName}", - "@notifDownloadingTrack": { - "description": "Notification title while downloading a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" }, - "@discographySkippedDownloaded": { - "description": "Snackbar - with skipped tracks count", - "placeholders": { - "added": { - "type": "int" - }, - "skipped": { - "type": "int" - } - } - }, - "@tutorialSettingsTip3": { - "description": "Tutorial settings tip 3" - }, - "@announcementUnableToOpenLink": { - "description": "Snackbar shown when an announcement CTA link cannot be opened" - }, - "trackReleaseDate": "Дата випуску", - "discographySelectedCount": "{count} вибрано", - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "logIssueNetworkErrorLabel": "NETWORK ERROR", - "updateStartingDownload": "Початок завантаження...", - "@updateStartingDownload": { - "description": "Update status - initializing" - }, - "trackDiscNumber": "Номер диска", - "@trackDiscNumber": { - "description": "Metadata label - disc number" + "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" }, - "optionsUsingExtension": "Використання розширення: {extensionName}", - "@optionsUsingExtension": { - "description": "Shows active extension name", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" }, - "dialogDisableHistoryTitle": "Turn off download history?", "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, - "@collectionPlaylistEmptySubtitle": { - "description": "Playlist empty state subtitle" - }, - "@tutorialSearchHint": { - "description": "Placeholder shown in the tutorial search demo" - }, - "cleanupOrphanedDownloadsNone": "Не знайдено утрачених записів", - "discographySkippedDownloaded": "{added} додано, {skipped} вже завантажено", - "@updateDontRemind": { - "description": "Update button - skip this version" - }, - "@snackbarLoadingCueSheet": { - "description": "Snackbar while loading a CUE sheet file" + "tutorialSearchTitle": "Пошук музики", + "@tutorialSearchTitle": { + "description": "Tutorial search page title" }, - "@dialogUninstallExtension": { - "description": "Dialog title - uninstall extension" + "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "@tutorialSearchDesc": { + "description": "Tutorial search page description" }, - "lyricsProvidersTitle": "Lyrics Provider Priority", - "@dialogRemove": { - "description": "Dialog button - remove item" + "tutorialDownloadTitle": "Завантаження музики", + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" }, - "snackbarError": "Помилка: {error}", - "@snackbarError": { - "description": "Generic error snackbar with error detail", - "placeholders": { - "error": { - "type": "String" - } - } + "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" }, - "@sectionApp": { - "description": "Settings section header" + "tutorialLibraryTitle": "Ваша бібліотека", + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" }, - "@libraryPlayback": { - "description": "Section header for playback settings in library settings" + "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" }, - "@downloadPrimaryArtistOnlyOn": { - "description": "Status label when primary-artist-only folder naming is enabled" + "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" }, - "lyricsProvidersDiscardContent": "У вас є незбережені зміни, які буде втрачено.", - "previewStop": "Stop preview", - "@previewStop": { - "description": "Tooltip for the button that stops the playing track preview snippet" + "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" }, - "trackConvertConfirmMessageLossless": "Конвертувати з {sourceFormat} у {targetFormat}? (Lossless — без втрати якості)\n\nОригінальний файл буде видалено після конвертації.", - "discographyAlbumsOnly": "Тільки альбоми", - "@discographyAlbumsOnly": { - "description": "Option - download only albums" + "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" }, - "@editMetadataFieldCopyright": { - "description": "Chip label for copyright field in auto-fill selector" + "tutorialExtensionsTitle": "Розширення", + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" }, - "extensionsFallbackSubtitle": "Виберіть, які встановлені розширення для завантаження можна використовувати як резервні", - "aboutSocial": "Соціальні мережі", - "@aboutSocial": { - "description": "Section for social links" + "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" }, - "audioAnalysisNyquist": "Частота Найквіста", - "trackCoverSelected": "Selected cover", - "@trackCoverSelected": { - "description": "Label for the newly selected cover preview" + "tutorialExtensionsTip1": "Перегляньте вкладку «Репозиторій», щоб знайти корисні розширення", + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" }, - "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" + "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" }, - "homeEmptyTitle": "", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" + "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" }, - "@extensionHealthUnknown": { - "description": "Extension service health status - unknown" + "tutorialSettingsTitle": "Налаштуйте свій досвід", + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" }, - "storeInstalled": "Встановлені", - "@storeInstalled": { - "description": "Already installed badge" + "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" }, - "trackReplayGainSuccess": "ReplayGain tags added", - "@trackReplayGainSuccess": { - "description": "Snackbar message after ReplayGain tags written for a single track" + "tutorialSettingsTip1": "Змініть місце завантаження та організації папок", + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" }, - "libraryShowDuplicateIndicatorSubtitle": "Показувати під час пошуку існуючих треків", - "@collectionPlaylistRenamed": { - "description": "Snackbar after renaming playlist" + "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" }, - "@trackConvertResamplerSoxr": { - "description": "Lossless conversion SoX resampler option" + "tutorialSettingsTip3": "Налаштуйте тему та зовнішній вигляд програми", + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" }, - "@dialogUnsavedChanges": { - "description": "Dialog message - unsaved changes" + "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "@tutorialReadyMessage": { + "description": "Tutorial completion message" }, - "dialogDownload": "Завантажити", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" + "libraryForceFullScan": "Примусове повне сканування", + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" }, - "trackLyricsLoadFailed": "Не вдалося завантажити текст пісні", - "@backupContentsTitle": { - "description": "Header above the list summarizing what the backup contains" + "libraryForceFullScanSubtitle": "Пересканувати всі файли, ігноруючи кеш", + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" }, - "@safMigrationTitle": { - "description": "Title of SAF migration dialog" + "cleanupOrphanedDownloads": "Очищення застарілих завантажень", + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" }, - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" + "cleanupOrphanedDownloadsSubtitle": "Видалити записи історії для файлів, яких більше не існує", + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" }, - "setupPermissionDeniedMessage": "Дозвіл відхилено. Будь ласка, надайте всі дозволи, щоб продовжити.", - "@setupPermissionDeniedMessage": { - "description": "Error when permission denied" + "cleanupOrphanedDownloadsResult": "Видалено {count} утрачених записів з історії", + "@cleanupOrphanedDownloadsResult": { + "description": "Snackbar after orphan cleanup", + "placeholders": { + "count": { + "type": "int" + } + } }, - "settingsDownloadNetworkWifiOnly": "Тільки Wi-Fi", - "@settingsDownloadNetworkWifiOnly": { - "description": "Network option - only use WiFi" + "cleanupOrphanedDownloadsNone": "Не знайдено утрачених записів", + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" }, - "@backupIncludeSecrets": { - "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" + "cacheTitle": "Зберігання та кеш", + "@cacheTitle": { + "description": "Cache management page title" }, - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" + "cacheSummaryTitle": "Огляд кешу", + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" }, - "@extensionHealthServiceUnknown": { - "description": "Tooltip for unknown extension service health" + "cacheSummarySubtitle": "Очищення кешу не призведе до видалення завантажених музичних файлів.", + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" }, - "snackbarExtensionUpdated": "{extensionName} оновлено.", - "@snackbarExtensionUpdated": { - "description": "Snackbar - extension updated successfully", + "cacheEstimatedTotal": "Орієнтовне використання кешу: {size}", + "@cacheEstimatedTotal": { + "description": "Total cache size shown in summary", "placeholders": { - "extensionName": { + "size": { "type": "String" } } }, - "homeEmptySubtitle": "Install an extension to continue.", - "@settingsTitle": { - "description": "Settings screen title" + "cacheSectionStorage": "Кешовані дані", + "@cacheSectionStorage": { + "description": "Section header for cache entries" }, - "@libraryFilterMetadataIncorrectIsrcFormat": { - "description": "Filter option - items with an invalid ISRC format" + "cacheSectionMaintenance": "Технічне обслуговування", + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" }, - "@notifLibraryScanComplete": { - "description": "Notification title when library scan finishes" + "cacheAppDirectory": "Каталог кешу додатка", + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" }, - "@logIssueIspBlockingLabel": { - "description": "Diagnostic badge label when ISP blocking is detected" + "cacheAppDirectoryDesc": "HTTP-відповіді, дані WebView та інші тимчасові дані додатків.", + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" }, - "tutorialDownloadTitle": "Завантаження музики", - "@tutorialDownloadTitle": { - "description": "Tutorial download page title" - }, - "unknownTitle": "Unknown title", - "@unknownTitle": { - "description": "Fallback track title when metadata is missing" - }, - "navLibrary": "Бібліотека", - "@navLibrary": { - "description": "Bottom navigation - Library tab" - }, - "@snackbarAlreadyDownloaded": { - "description": "Snackbar - track already exists", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "editMetadataSelectAll": "Усі", - "@editMetadataSelectAll": { - "description": "Button to select all fields for auto-fill" - }, - "storeEmptyNoExtensions": "Розширень немає", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" - }, - "optionsUpdateChannelWarning": "Тестовий реліз може містити помилки або неповні функції", - "@optionsUpdateChannelWarning": { - "description": "Warning about preview channel" + "cacheTempDirectory": "Тимчасовий каталог", + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" }, - "@collectionPlaylistNameHint": { - "description": "Hint text for playlist name input" + "cacheTempDirectoryDesc": "Тимчасові файли із завантажень та конвертації аудіо.", + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" }, - "notifLibraryScanComplete": "Сканування бібліотеки завершено", - "editMetadataFieldIsrc": "ISRC", - "@editMetadataFieldIsrc": { - "description": "Chip label for ISRC field in auto-fill selector" + "cacheCoverImage": "Кеш зображень обкладинок", + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" }, - "@libraryFolderHint": { - "description": "Placeholder when no folder selected" + "cacheCoverImageDesc": "Завантажено обкладинку альбому та треку. Завантаження відбудеться повторно після перегляду.", + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" }, - "homeSearchHintDefault": "Paste supported URL or search...", - "@homeSearchHintDefault": { - "description": "Default placeholder for the main search field on Home" + "cacheLibraryCover": "Кеш бібліотеки обкладинок", + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" }, - "extensionsNoExtensionsSubtitle": "Встановіть файли .spotiflac-ext, щоб додати нових провайдерів", - "@extensionsNoExtensionsSubtitle": { - "description": "Empty state subtitle" + "cacheLibraryCoverDesc": "Обкладинку витягнуто з локальних музичних файлів. Буде повторно витягнуто під час наступного сканування.", + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" }, - "@extensionEnterValue": { - "description": "Hint for editing an extension setting value" + "libraryPlaybackNormalization": "Volume normalization", + "@libraryPlaybackNormalization": { + "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, - "backupRestoreConfirmTitle": "Restore this backup?", - "@backupRestoreConfirmTitle": { - "description": "Confirmation dialog title before restoring a backup" + "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", + "@libraryPlaybackNormalizationSubtitle": { + "description": "Subtitle explaining playback volume normalization" }, - "@libraryScanSelectFolderFirst": { - "description": "Message when trying to scan without folder" + "cacheAudioAnalysis": "Audio analysis cache", + "@cacheAudioAnalysis": { + "description": "Cache item title for saved audio analysis results" }, - "@qualityHiResFlac": { - "description": "Quality option - high resolution FLAC" + "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", + "@cacheAudioAnalysisDesc": { + "description": "Description of what audio analysis cache contains" }, - "aboutSpecialThanks": "Особлива подяка", - "@aboutSpecialThanks": { - "description": "Section for special thanks" + "cacheExploreFeed": "Огляд кешу стрічки", + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" }, - "storeInstall": "Встановити", - "@storeInstall": { - "description": "Install extension button" + "cacheExploreFeedDesc": "Переглянути вміст вкладки (нові випуски, тренди). Оновиться під час наступного відвідування.", + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" }, - "@collectionWishlistEmptySubtitle": { - "description": "Wishlist empty state subtitle" + "cacheTrackLookup": "Відстеження кешу пошуку", + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" }, - "historyFilterAlbums": "Альбоми", - "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", - "@extensionCustomUrlHandlingSubtitle": { - "description": "Extension detail subtitle for custom URL handling" + "cacheTrackLookupDesc": "Пошук ідентифікаторів треків Spotify/Deezer. Очищення може уповільнити наступні кілька пошуків.", + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" }, - "filenameShowAdvancedTagsDescription": "Увімкнути відформатовані теги для доповнення доріжок і шаблонів дати", - "@aboutReportIssue": { - "description": "Link to report bugs" + "cacheCleanupUnusedDesc": "Видалити історію втрачених завантажень та записи бібліотеки для відсутніх файлів.", + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" }, - "@folderOrganizationByPlaylist": { - "description": "Folder option - playlist folders" + "cacheNoData": "Кешованих даних немає", + "@cacheNoData": { + "description": "Label when cache category has no data" }, - "@dateWeeksAgo": { - "description": "Relative date - weeks ago", + "cacheSizeWithFiles": "{size} у {count} файлах", + "@cacheSizeWithFiles": { + "description": "Cache size and file count", "placeholders": { + "size": { + "type": "String" + }, "count": { "type": "int" } } }, - "logEntriesFiltered": "Записи ({count} filtered)", - "@logEntriesFiltered": { - "description": "Log count with filter active", + "cacheSizeOnly": "{size}", + "@cacheSizeOnly": { + "description": "Cache size only", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheEntries": "{count} записів", + "@cacheEntries": { + "description": "Track cache entry count", "placeholders": { "count": { "type": "int" } } }, - "@lyricsModeDescription": { - "description": "Lyrics mode picker description" - }, - "@setupAppDocumentsFolderSubtitle": { - "description": "Subtitle for documents folder" - }, - "storeAddRepoButton": "Додати репозиторій", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "@collectionLovedEmptyTitle": { - "description": "Loved empty state title" - }, - "aboutReportIssue": "Повідомити про проблему", - "snackbarFailedToWriteStorage": "Не вдалося перезаписати у сховище", - "@snackbarFailedToWriteStorage": { - "description": "Snackbar when writing metadata back to file fails" - }, - "errorInvalidFolderSelected": "Invalid folder selected", - "allFilesAccessDisabledMessage": "У дозволі відмовлено. Будь ласка, увімкніть «Доступ до всіх файлів» вручну в налаштуваннях системи.", - "@allFilesAccessDisabledMessage": { - "description": "Snackbar message when user disables all files access" - }, - "downloadMusixmatchLanguageCode": "Код мови", - "@downloadMusixmatchLanguageCode": { - "description": "Label for Musixmatch language input field" - }, - "dialogUnsavedChanges": "У вас є незбережені зміни. Ви хочете їх скасувати?", - "setupChooseFromFiles": "Вибрати з файлів", - "@setupChooseFromFiles": { - "description": "iOS file picker option" - }, - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", - "@backupRestoreConfirmButton": { - "description": "Confirm button to proceed with restore" - }, - "@queueEmptyAlbumsSubtitle": { - "description": "Empty state subtitle for album downloads" - }, - "collectionRemovedFromWishlist": "\"{trackName}\" видалено зі списку бажань", - "@collectionRemovedFromWishlist": { - "description": "Snackbar after removing track from wishlist", + "cacheClearSuccess": "Очищено: {target}", + "@cacheClearSuccess": { + "description": "Snackbar after clearing selected cache", "placeholders": { - "trackName": { + "target": { "type": "String" } } }, - "extensionsInstalledSuccess": "Розширення успішно встановлено", - "progressReadingCsv": "Читання CSV-файлу...", - "@progressReadingCsv": { - "description": "Progress indicator - parsing CSV file" + "cacheClearConfirmTitle": "Очистити кеш?", + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" }, - "artistReleases": "Releases", - "@artistReleases": { - "description": "Section header for all artist releases" + "cacheClearConfirmMessage": "Це очистить кешовані дані для {target}. Завантажені музичні файли не будуть видалені.", + "@cacheClearConfirmMessage": { + "description": "Dialog message before clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } }, - "extensionVerificationBrowserTitle": "Verification browser", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" + "cacheClearAllConfirmTitle": "Очистити увесь кеш?", + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" }, - "optionsArtistTagModeJoinedSubtitle": "Для максимальної сумісності програвача напишіть одне значення ARTIST, наприклад, «Виконавець A, Виконавець B».", - "downloadLossy320": "Lossy (із втратами) 320 кбіт/с", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" + "cacheClearAllConfirmMessage": "Це очистить усі категорії кешу на цій сторінці. Завантажені музичні файли не будуть видалені.", + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" }, - "queueFlacAction": "Черга FLAC", - "@queueFlacAction": { - "description": "Action/button label for queueing FLAC redownloads for local tracks" + "cacheClearAll": "Очистити весь кеш", + "@cacheClearAll": { + "description": "Button label to clear all caches" }, - "@setupDownloadLocationIosMessage": { - "description": "iOS-specific folder info" + "cacheCleanupUnused": "Очищення невикористаних даних", + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" }, - "trackConvertOriginal": "Original", - "sectionLyricsProviderOptions": "Provider Options", - "nowPlayingTitle": "Now Playing", - "@nowPlayingTitle": { - "description": "Title for the now playing screen" + "cacheCleanupUnusedSubtitle": "Видалити історію утрачених завантажень файлів та відсутні записи бібліотеки", + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" }, - "@extensionHealthChecksConfigured": { - "description": "Extension service health check count", + "cacheCleanupResult": "Очищення завершено: {downloadCount} утрачених завантажень, {libraryCount} відсутніх записів бібліотеки", + "@cacheCleanupResult": { + "description": "Snackbar after unused data cleanup", "placeholders": { - "count": { + "downloadCount": { + "type": "int" + }, + "libraryCount": { "type": "int" } } }, - "@cacheClearAll": { - "description": "Button label to clear all caches" - }, - "a11yDeselectTrack": "Deselect track", - "@a11yDeselectTrack": { - "description": "Accessibility label for deselecting a track" + "cacheRefreshStats": "Оновити статистику", + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" }, - "@lyricsProvidersInfoText": { - "description": "Info tip on lyrics provider priority page" + "trackSaveCoverArt": "Зберегти обкладинку", + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" }, - "queueEmptyHistory": "Немає історії завантажень", - "dialogClear": "Очистити", - "@dialogClear": { - "description": "Dialog button - clear items" + "trackSaveLyrics": "Зберегти текст пісні (.lrc)", + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" }, - "allFilesAccessDescription": "Увімкніть цю опцію, якщо під час збереження у власні папки виникають помилки запису. Android 13+ за замовчуванням обмежує доступ до певних каталогів.", - "@allFilesAccessDescription": { - "description": "Description explaining when to enable all files access" + "trackSaveLyricsProgress": "Збереження тексту пісні...", + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" }, - "trackConvertConfirmTitle": "Підтвердити конверсію", - "storeCategoryLyrics": "Lyrics", - "@storeCategoryLyrics": { - "description": "Store extension category - lyrics" + "trackReEnrich": "Перезбагачувати", + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" }, - "@lyricsProvidersDescription": { - "description": "Description on the lyrics provider priority page" + "trackReEnrichOnlineSubtitle": "Пошук метаданих в Інтернеті та вбудовування у файл", + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" }, - "tooltipLoveAll": "Уподобати всіх", - "downloadDirectory": "Каталог завантажень", - "@downloadDirectory": { - "description": "Setting - download folder" + "trackReEnrichFieldCover": "Обкладинка", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" }, - "@tutorialExtensionsTip2": { - "description": "Tutorial extensions tip 2" + "trackReEnrichFieldLyrics": "Тексти пісень", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" }, - "libraryFolder": "Папка бібліотеки", - "@metadataProviderPriorityTitle": { - "description": "Metadata priority page title" + "trackReEnrichFieldBasicTags": "Альбом, Виконавець альбому", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "@cleanupOrphanedDownloadsResult": { - "description": "Snackbar after orphan cleanup", + "trackReEnrichFieldTrackInfo": "Номер треку та диска", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Дата та ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Жанр, Лейбл, Авторське право", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Вибрати все", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" + }, + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" + }, + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" + }, + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" + }, + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" + }, + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", "placeholders": { - "count": { + "changeCount": { + "type": "int" + }, + "trackCount": { "type": "int" } } }, - "cacheExploreFeedDesc": "Переглянути вміст вкладки (нові випуски, тренди). Оновиться під час наступного відвідування.", - "@cacheExploreFeedDesc": { - "description": "Description of what explore feed cache contains" + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" }, - "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", - "@a11yOpenTrackByArtist": { - "description": "Accessibility label for opening a track item", + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, + "trackEditMetadata": "Редагувати метадані", + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" + }, + "trackCoverSaved": "Обкладинку збережено до {fileName}", + "@trackCoverSaved": { + "description": "Snackbar after cover art saved", "placeholders": { - "trackName": { + "fileName": { "type": "String" - }, - "artistName": { + } + } + }, + "trackCoverNoSource": "Джерело обкладинки недоступне", + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" + }, + "trackLyricsSaved": "Текст пісні збережено в {fileName}", + "@trackLyricsSaved": { + "description": "Snackbar after lyrics saved", + "placeholders": { + "fileName": { "type": "String" } } }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", - "libraryFilterSortAlbumDesc": "Альбом (Я-А)", - "@libraryFilterSortAlbumDesc": { - "description": "Sort option - album descending" + "trackReEnrichProgress": "Повторне збагачення метаданих...", + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" }, - "trackConvertBitrate": "Бітрейт", - "@trackConvertBitrate": { - "description": "Label for bitrate selection" + "trackReEnrichSearching": "Пошук метаданих в Інтернеті...", + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" }, - "audioAnalysisFileSize": "Розмір", - "extensionHealthServiceOnline": "Service online", - "@extensionHealthServiceOnline": { - "description": "Tooltip for online extension service" + "trackReEnrichSuccess": "Метадані повторно збагачені успішно", + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" }, - "logEntries": "Записи ({count})", - "@logEntries": { - "description": "Total log count", + "trackReEnrichFfmpegFailed": "Не вдалося вбудувати метадані FFmpeg", + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + }, + "queueFlacAction": "Черга FLAC", + "@queueFlacAction": { + "description": "Action/button label for queueing FLAC redownloads for local tracks" + }, + "queueFlacConfirmMessage": "Пошук онлайн-збігів для вибраних треків та додавання завантажень FLAC до черги.\n\nІснуючі файли не будуть змінені або видалені.\n\nАвтоматично додаються до черги лише збіги з високою достовірністю.\n\n{count} вибрано", + "@queueFlacConfirmMessage": { + "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { "count": { "type": "int" } } }, + "queueFlacNoReliableMatches": "Не знайдено надійних онлайн-відповідей для вибраного запиту", + "@queueFlacNoReliableMatches": { + "description": "Snackbar when no safe FLAC redownload matches were found" + }, + "queueFlacQueuedWithSkipped": "Додано {addedCount} треків до черги, пропущено {skippedCount}", + "@queueFlacQueuedWithSkipped": { + "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "placeholders": { + "addedCount": { + "type": "int" + }, + "skippedCount": { + "type": "int" + } + } + }, + "trackSaveFailed": "Не вдалося: {error}", + "@trackSaveFailed": { + "description": "Snackbar when save operation fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "trackConvertFormat": "Конвертувати формат", + "@trackConvertFormat": { + "description": "Menu item - convert audio format" + }, + "trackConvertTitle": "Конвертувати аудіо", + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" + }, + "trackConvertTargetFormat": "Цільовий формат", + "@trackConvertTargetFormat": { + "description": "Label for format selection" + }, + "trackConvertBitrate": "Бітрейт", + "@trackConvertBitrate": { + "description": "Label for bitrate selection" + }, + "trackConvertKeepOriginal": "Keep original file", + "@trackConvertKeepOriginal": { + "description": "Toggle to preserve the source file during conversion" + }, + "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", + "@trackConvertKeepOriginalDescription": { + "description": "Description for preserving the source file during conversion" + }, + "trackConvertConfirmTitle": "Підтвердити конверсію", + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" + }, "trackConvertConfirmMessage": "Конвертувати з {sourceFormat} в {targetFormat} із бітрейтом {bitrate}?\n\nОригінальний файл буде видалено після конвертації.", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", @@ -3307,1570 +3399,1522 @@ } } }, - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" + "trackConvertConfirmMessageLossless": "Конвертувати з {sourceFormat} у {targetFormat}? (Lossless — без втрати якості)\n\nОригінальний файл буде видалено після конвертації.", + "@trackConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless-to-lossless conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "folderOrganizationByAlbum": "За альбомом", - "@folderOrganizationByAlbum": { - "description": "Folder option - album folders" + "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", + "@trackConvertConfirmKeepOriginal": { + "description": "Confirmation message when the source file will be preserved", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "libraryPlayback": "Playback", - "@storeFilterAll": { - "description": "Repo filter - all extensions" + "trackConvertLosslessHint": "Lossless конвертація — без втрати якості", + "@trackConvertLosslessHint": { + "description": "Hint shown when converting between lossless formats" }, - "aboutApp": "Додаток", - "@aboutApp": { - "description": "Section for app info" + "trackConvertConverting": "Конвертування аудіо...", + "@trackConvertConverting": { + "description": "Snackbar while converting" }, - "optionsReplayGainSubtitleOff": "Вимкнено: немає тегів нормалізації гучності", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" - }, - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" + "trackConvertSuccess": "Конвертовано в {format} успішно", + "@trackConvertSuccess": { + "description": "Snackbar after successful conversion", + "placeholders": { + "format": { + "type": "String" + } + } }, - "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", - "storeFilterIntegration": "Інтеграція", - "@storeFilterIntegration": { - "description": "Repo filter - integrations" + "trackConvertFailed": "Конвертація не вдалася", + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" }, - "@lyricsProvidersAtLeastOne": { - "description": "Snackbar when user tries to disable the last enabled provider" + "cueSplitTitle": "Розділений аркуш CUE", + "@cueSplitTitle": { + "description": "Title for CUE split bottom sheet" }, - "@appearanceHistoryViewGrid": { - "description": "Grid layout option" + "cueSplitAlbum": "Альбом: {album}", + "@cueSplitAlbum": { + "description": "Album name in CUE split sheet", + "placeholders": { + "album": { + "type": "String" + } + } }, - "trackDownloaded": "Завантажено", - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", - "setupDownloadLocationIosMessage": "На iOS завантаження зберігаються в папці «Документи» програми. Ви можете отримати до них доступ через програму «Файли».", - "optionsArtistTagModeDescription": "Виберіть, як будуть записуватися кілька виконавців у вбудовані теги.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" + "cueSplitArtist": "Артист: {artist}", + "@cueSplitArtist": { + "description": "Artist name in CUE split sheet", + "placeholders": { + "artist": { + "type": "String" + } + } }, - "@queueRetryAllFailed": { - "description": "Button to retry every failed download in the queue", + "cueSplitTrackCount": "{count} треків", + "@cueSplitTrackCount": { + "description": "Number of tracks in CUE sheet", "placeholders": { "count": { "type": "int" } } }, - "@trackConvertDitherTriangularHp": { - "description": "Lossless conversion high-pass triangular dither option" - }, - "@extensionVerificationCopyLink": { - "description": "Button to copy the extension verification URL" - }, - "searchSongs": "Пісні", - "@searchSongs": { - "description": "Search result category - songs" - }, - "@appearanceHistoryView": { - "description": "Layout style for history" - }, - "sectionFileSettings": "Налаштування файлу", - "@sectionFileSettings": { - "description": "Settings section header" - }, - "@cancelDownloadTitle": { - "description": "Dialog title when confirming cancellation of an active download" - }, - "@cacheLibraryCover": { - "description": "Cache item title for local library cover art images" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "dialogDelete": "Видалити", - "@dialogDelete": { - "description": "Dialog button - delete item" - }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", - "@tutorialLibraryDesc": { - "description": "Tutorial library page description" + "cueSplitConfirmTitle": "Розділений альбом CUE", + "@cueSplitConfirmTitle": { + "description": "CUE split confirmation dialog title" }, - "@queueDownloadSpeedStatus": { - "description": "Queue status while downloading with speed", + "cueSplitConfirmMessage": "Розділити \"{album}\" на {count} окремих FLAC-файлів?\n\nФайли будуть збережені в одному каталозі.", + "@cueSplitConfirmMessage": { + "description": "CUE split confirmation dialog message", "placeholders": { - "speed": { + "album": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "cacheCleanupResult": "Очищення завершено: {downloadCount} утрачених завантажень, {libraryCount} відсутніх записів бібліотеки", - "@cacheCleanupResult": { - "description": "Snackbar after unused data cleanup", + "cueSplitSplitting": "Розділення аркуша CUE... ({current}/{total})", + "@cueSplitSplitting": { + "description": "Snackbar while splitting CUE", "placeholders": { - "downloadCount": { + "current": { "type": "int" }, - "libraryCount": { + "total": { "type": "int" } } }, - "trackConvertLosslessHint": "Lossless конвертація — без втрати якості", - "@trackConvertLosslessHint": { - "description": "Hint shown when converting between lossless formats" - }, - "collectionRenamePlaylist": "Перейменувати список відтворення", - "@collectionRenamePlaylist": { - "description": "Action to rename playlist" - }, - "@libraryFilterTitle": { - "description": "Filter bottom sheet title" - }, - "@storageModeAppFolder": { - "description": "Storage mode option - app-managed folder" - }, - "logTotalErrors": "Total errors: {count}", - "@logTotalErrors": { - "description": "Total error count in log issue analysis", + "cueSplitSuccess": "Розділено на {count} треків успішно", + "@cueSplitSuccess": { + "description": "Snackbar after successful CUE split", "placeholders": { "count": { "type": "int" } } }, - "@setupStorageRequired": { - "description": "Title when storage permission needed" + "cueSplitFailed": "Розділення CUE не вдалося", + "@cueSplitFailed": { + "description": "Snackbar when CUE split fails" }, - "@snackbarMetadataProviderSaved": { - "description": "Snackbar - metadata provider order saved" + "cueSplitNoAudioFile": "Аудіофайл для цього аркуша CUE не знайдено", + "@cueSplitNoAudioFile": { + "description": "Error when CUE audio file is missing" }, - "@selectionBatchConvertConfirmTitle": { - "description": "Confirmation dialog title for batch conversion" + "cueSplitButton": "Розділити на треки", + "@cueSplitButton": { + "description": "Button text to start CUE splitting" }, - "extensionsHomeFeedAutoSubtitle": "Автоматично вибирати найкращий доступний", - "@extensionsHomeFeedAutoSubtitle": { - "description": "Extensions page - subtitle for auto home feed option" + "actionCreate": "Створити", + "@actionCreate": { + "description": "Generic action button - create" }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "settingsBackupSubtitle": "Move your library, history and settings to a new device", - "@settingsBackupSubtitle": { - "description": "Subtitle for backup and restore settings item" + "collectionFoldersTitle": "Мої папки", + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" }, - "recentTypeArtist": "Артист", - "@recentTypeArtist": { - "description": "Recent access item type - artist" + "collectionWishlist": "Список бажань", + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" }, - "collectionPlaylistEmptySubtitle": "Тривале натискання + на будь-якій доріжці додасть її сюди", - "artistCompilations": "Збірники", - "@artistCompilations": { - "description": "Section header for compilations" + "collectionLoved": "Вподобані", + "@collectionLoved": { + "description": "Custom folder for favorite tracks" }, - "snackbarFolderPickerFailed": "Не вдалося відкрити засіб вибору папок: {error}", - "@snackbarFolderPickerFailed": { - "description": "Snackbar shown when folder picker fails to open", - "placeholders": { - "error": { - "type": "String" - } - } + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" }, - "@optionsDetailedLoggingOn": { - "description": "Status when logging enabled" + "collectionPlaylist": "Список відтворення", + "@collectionPlaylist": { + "description": "Single playlist label" }, - "settingsSaveDownloadHistory": "Save download history", - "@settingsSaveDownloadHistory": { - "description": "Settings switch title for storing completed downloads in history" + "collectionAddToPlaylist": "Додати до списку відтворення", + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" }, - "@storeCategoryIntegration": { - "description": "Store extension category - integration" + "collectionCreatePlaylist": "Створити плейлист", + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" }, - "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", - "@a11yOpenItemCount": { - "description": "Accessibility label for opening a grouped item with count", + "collectionNoPlaylistsYet": "Поки що немає списків відтворення", + "@collectionNoPlaylistsYet": { + "description": "Empty state title when user has no playlists" + }, + "collectionPlaylistTracks": "{count, plural, =1{1 трек} other{{count} треків}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", "placeholders": { - "title": { - "type": "String" - }, "count": { "type": "int" } } }, - "trackFileInfo": "Інформація про файл", - "@trackFileInfo": { - "description": "Tab title - file information" + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "libraryFilterMetadataMissingAlbumArtist": "Відсутній виконавець альбому", - "audioAnalysisNoClipping": "No clipping", - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", - "@tutorialSettingsDesc": { - "description": "Tutorial settings page description" + "collectionAddedToPlaylist": "Додано до \"{playlistName}\"", + "@collectionAddedToPlaylist": { + "description": "Snackbar after adding track to playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "lyricsModeExternalSubtitle": "Окремий файл .lrc для плеєрів, таких як Samsung Music", - "@lyricsModeExternalSubtitle": { - "description": "Subtitle for external option" + "collectionAlreadyInPlaylist": "Вже у списку відтворення \"{playlistName}\"", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "trackLoadLyrics": "Завантажити текст пісні", - "@trackLoadLyrics": { - "description": "Action - fetch lyrics" + "collectionPlaylistNameHint": "Назва списку відтворення", + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", - "@extensionVerificationHelpTitleWaiting": { - "description": "Dialog title when verification is taking longer than expected" - }, - "libraryFilterReset": "Скинути", - "@libraryFilterReset": { - "description": "Reset all filters button" - }, - "@downloadAlbumArtistMetadataFull": { - "description": "Status label when album-artist folder filtering uses full metadata" - }, - "storeTitle": "Репозиторій розширень", - "@storeTitle": { - "description": "Repo screen title" - }, - "libraryCleared": "Бібліотека очищена", - "@libraryCleared": { - "description": "Snackbar after clearing library" + "collectionPlaylistNameRequired": "Потрібно вказати назву списку відтворення", + "@collectionPlaylistNameRequired": { + "description": "Validation error for empty playlist name" }, - "queueDownloadCompleted": "Download completed", - "@queueDownloadCompleted": { - "description": "Accessibility label for completed download state in queue" + "collectionRenamePlaylist": "Перейменувати список відтворення", + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" }, - "libraryTitle": "Локальна бібліотека", - "@libraryTitle": { - "description": "Library settings page title" + "collectionDeletePlaylist": "Видалити список відтворення", + "@collectionDeletePlaylist": { + "description": "Action to delete playlist" }, - "queueAlbumCount": "{count, plural, =1{1 альбом} other{{count} альбомів}}", - "@queueAlbumCount": { - "description": "Album count label with plural support", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionPlaylistRenamed": "Список відтворення перейменовано", + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" }, - "libraryClearConfirmTitle": "Очистити бібліотеку", - "@backupExportSectionTitle": { - "description": "Section title for the export/backup card" + "collectionWishlistEmptyTitle": "Список бажань порожній", + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" }, - "dialogClearAll": "Очистити все", - "@dialogClearAll": { - "description": "Dialog title - clear all items" + "collectionWishlistEmptySubtitle": "Натисніть + на треках, щоб зберегти те, що ви хочете завантажити пізніше", + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", - "@tutorialExtensionsDesc": { - "description": "Tutorial extensions page description" + "collectionLovedEmptyTitle": "Папка \"Улюблені\" порожня", + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" }, - "libraryExternalPlayer": "External player", - "@libraryExternalPlayer": { - "description": "Setting option to use an external music player" + "collectionLovedEmptySubtitle": "Натисніть «Подобається» на треках, щоб зберегти у свої улюблені", + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" }, - "editMetadataFieldGenre": "Жанр", - "@tutorialLibraryTitle": { - "description": "Tutorial library page title" + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" }, - "folderOrganizationByPlaylist": "За списком відтворення", - "queueTrackCount": "{count, plural, =1{1 трек} other{{count} треків}}", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" }, - "editMetadataSelectNone": "None", - "@historyFilterSingles": { - "description": "Filter chip - show singles only" + "collectionPlaylistEmptyTitle": "Список відтворення порожній", + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" }, - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" + "collectionPlaylistEmptySubtitle": "Тривале натискання + на будь-якій доріжці додасть її сюди", + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" }, - "trackSaveCoverArt": "Зберегти обкладинку", - "@trackSaveCoverArt": { - "description": "Menu action - save album cover art as file" + "collectionRemoveFromPlaylist": "Видалити зі списку відтворення", + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" }, - "@downloadAlbumFolderStructure": { - "description": "Setting - album folder organization" + "collectionRemoveFromFolder": "Видалити з папки", + "@collectionRemoveFromFolder": { + "description": "Tooltip for removing track from wishlist/loved folder" }, - "lyricsProvidersAtLeastOne": "Принаймні один постачальник має залишатися ввімкненим", - "@notifDownloadCompleteCount": { - "description": "Notification title when download is complete, with count", + "collectionAddedToLoved": "\"{trackName}\" додано до списку улюблених", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", "placeholders": { - "completed": { - "type": "int" - }, - "total": { - "type": "int" + "trackName": { + "type": "String" } } }, - "setupUseDefault": "Використовувати за замовчуванням", - "@setupUseDefault": { - "description": "Button to use default folder" - }, - "logNoLogsYetSubtitle": "Журнали відображатимуться тут під час використання програми", - "@logNoLogsYetSubtitle": { - "description": "Empty state subtitle" - }, - "@dateToday": { - "description": "Relative date - today" - }, - "trackSaveLyricsProgress": "Збереження тексту пісні...", - "@trackSaveLyricsProgress": { - "description": "Snackbar while saving lyrics to file" + "collectionRemovedFromLoved": "\"{trackName}\" видалено з уподобань", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "trackCoverSaved": "Обкладинку збережено до {fileName}", - "@trackCoverSaved": { - "description": "Snackbar after cover art saved", + "collectionAddedToWishlist": "\"{trackName}\" додано до списку бажань", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", "placeholders": { - "fileName": { + "trackName": { "type": "String" } } }, - "trackReEnrichFieldLyrics": "Тексти пісень", - "@audioAnalysisRescan": { - "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" + "collectionRemovedFromWishlist": "\"{trackName}\" видалено зі списку бажань", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is on" + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, - "dialogDisableAndClear": "Turn off and clear", - "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", - "cleanupOrphanedDownloadsSubtitle": "Видалити записи історії для файлів, яких більше не існує", - "@notifLibraryScanProgressWithTotal": { - "description": "Notification body for library scan progress when total is known", + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", "placeholders": { - "scanned": { - "type": "int" - }, - "total": { - "type": "int" - }, - "percentage": { - "type": "int" + "artistName": { + "type": "String" } } }, - "@extensionDetailsTags": { - "description": "Section title for extension tags" + "trackOptionAddToLoved": "Додати до улюблених", + "@trackOptionAddToLoved": { + "description": "Bottom sheet action label - add track to loved folder" }, - "@albumFolderAlbumOnlySubtitle": { - "description": "Folder structure example" + "trackOptionRemoveFromLoved": "Видалити з улюблених", + "@trackOptionRemoveFromLoved": { + "description": "Bottom sheet action label - remove track from loved folder" }, - "@audioAnalysisAnalyzing": { - "description": "Loading text while analyzing audio" + "trackOptionAddToWishlist": "Додати до списку бажань", + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" }, - "@settingsDonate": { - "description": "Settings menu item - donate page" + "trackOptionRemoveFromWishlist": "Видалити зі списку бажань", + "@trackOptionRemoveFromWishlist": { + "description": "Bottom sheet action label - remove track from wishlist" }, - "@collectionPlaylistNameRequired": { - "description": "Validation error for empty playlist name" + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" }, - "@backupImportSectionDescription": { - "description": "Description for the restore action" + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" }, - "storeFilterLyrics": "Тексти пісень", - "libraryAutoScan": "Автоматичне сканування", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" + "collectionPlaylistChangeCover": "Змінити зображення обкладинки", + "@collectionPlaylistChangeCover": { + "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "safMigrationMessage1": "SpotiFLAC тепер використовує Android Storage Access Framework (SAF) для завантажень. Це виправляє помилки «відмовлено в доступі» на Android 10+.", - "@safMigrationMessage1": { - "description": "First paragraph of SAF migration dialog" + "collectionPlaylistRemoveCover": "Видалити зображення обкладинки", + "@collectionPlaylistRemoveCover": { + "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "setupStorageRequired": "Потрібен дозвіл на збереження файлів", - "@notifLibraryScanErrors": { - "description": "Library scan complete suffix - error count", + "selectionShareCount": "Поділитися {count} {count, plural, =1{трек} other{треків}}", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", "placeholders": { "count": { "type": "int" } } }, - "appearanceHistoryViewGrid": "Сітка", - "trackConvertConverting": "Конвертування аудіо...", - "@trackConvertConverting": { - "description": "Snackbar while converting" - }, - "@setupUseDefaultFolder": { - "description": "Dialog title for default folder" + "selectionShareNoFiles": "Файлів для спільного доступу не знайдено", + "@selectionShareNoFiles": { + "description": "Snackbar when no selected files exist on disk" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Для FLAC та Opus на кожного виконавця додати окремий тег виконавця; MP3 та M4A залишаються об’єднаними.", - "snackbarPlayingNext": "Playing next", - "@snackbarPlayingNext": { - "description": "Snackbar when a track is inserted as the next queue item" + "selectionConvertCount": "Конвертувати {count} {count, plural, =1{трек} other{треків}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "optionsDefaultSearchTabSubtitle": "Виберіть, яка вкладка відкриється першою для нових результатів пошуку.", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" - }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", - "@sectionService": { - "description": "Settings section header" - }, - "notifUpdateProgress": "{received} / {total} МБ • {percentage}%", - "@discographyDownloadSelected": { - "description": "Button - download selected albums" - }, - "cacheClearAllConfirmMessage": "Це очистить усі категорії кешу на цій сторінці. Завантажені музичні файли не будуть видалені.", - "@cacheClearAllConfirmMessage": { - "description": "Dialog message before clearing all caches" - }, - "extensionsHomeFeedProvider": "Постачальник оновлень домашньої стрічки", - "@extensionsHomeFeedProvider": { - "description": "Extensions page - label for home feed provider selector" - }, - "@cacheExploreFeed": { - "description": "Cache item title for explore home feed cache" + "selectionConvertNoConvertible": "Трансформованих треків не вибрано", + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" }, - "@audioAnalysisDynamicRange": { - "description": "Dynamic range metric label" + "selectionBatchConvertConfirmTitle": "Пакетне конвертування", + "@selectionBatchConvertConfirmTitle": { + "description": "Confirmation dialog title for batch conversion" }, - "unknownAlbum": "Unknown Album", - "trackCoverCurrent": "Current cover", - "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", - "downloadPrimaryArtistOnlyOff": "Primary only: Off", - "dialogDone": "Готово", - "@dialogDone": { - "description": "Dialog button - action completed" + "selectionBatchConvertConfirmMessage": "Конвертувати {count} {count, plural, =1{трек} other{треків}} у {format} з бітрейтом {bitrate}?\n\nОригінальні файли будуть видалені після конвертації.", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "storeRepoUrlLabel": "URL-адреса репозиторію", - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", - "@logIssueRateLimitedSuggestion": { - "description": "Diagnostic badge suggestion for rate limiting" + "selectionBatchConvertConfirmMessageLossless": "Конвертувати {count} {count, plural, =1{трек} other{треків}} у {format}? (Lossless — без втрати якості)\n\nОригінальні файли будуть видалені після конвертації.", + "@selectionBatchConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "libraryScanProgress": "{progress}% від {total} файлів", - "@libraryScanProgress": { - "description": "Scan progress display", + "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": { + "description": "Batch conversion confirmation when source files will be preserved", "placeholders": { - "progress": { + "count": { + "type": "int" + }, + "format": { "type": "String" + } + } + }, + "selectionBatchConvertSuccess": "Конвертовано {success} з {total} треків у {format}", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": { + "type": "int" }, "total": { "type": "int" + }, + "format": { + "type": "String" } } }, - "collectionLovedEmptyTitle": "Папка \"Улюблені\" порожня", - "tutorialExtensionsTitle": "Розширення", - "@tutorialExtensionsTitle": { - "description": "Tutorial extensions page title" + "downloadedAlbumDownloadedCount": "{count} завантажено", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "searchSortDurationShort": "Тривалість (найкоротша)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when album artist is used for folder names" }, - "trackCopyFilePath": "Копіювати шлях до файлу", - "@trackCopyFilePath": { - "description": "Action - copy file path" + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when track artist is used for folder names" }, - "albumFolderArtistAlbumFlatSubtitle": "Виконавець/Альбом/ та Виконавець/пісня.flac", - "@trackConvertResampler": { - "description": "Section label for lossless conversion resampler options" + "lyricsProvidersTitle": "Lyrics Provider Priority", + "@lyricsProvidersTitle": { + "description": "Settings item title for lyrics provider order" }, - "editMetadataFieldTrackNum": "Номер треку", - "@editMetadataFieldTrackNum": { - "description": "Chip label for track number field in auto-fill selector" + "lyricsProvidersDescription": "Увімкнення, вимкнення та зміна порядку джерел текстів пісень. Постачальники перевірятимуть зверху вниз, доки не буде знайдено текст пісні.", + "@lyricsProvidersDescription": { + "description": "Description on the lyrics provider priority page" }, - "snackbarFailedToUpdate": "Не вдалося оновити розширення", - "@snackbarFailedToUpdate": { - "description": "Snackbar - extension update error" + "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", + "@lyricsProvidersInfoText": { + "description": "Info tip on lyrics provider priority page" }, - "notifAlreadyInLibrary": "Вже в бібліотеці", - "@notifAlreadyInLibrary": { - "description": "Notification title when track is already in library" + "lyricsProvidersEnabledSection": "Увімкнено ({count})", + "@lyricsProvidersEnabledSection": { + "description": "Section header for enabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionPlaylistNameHint": "Назва списку відтворення", - "extensionVerificationCopyLink": "Copy link", - "@replayGainBatchAnalyzing": { - "description": "Progress dialog title while batch scanning ReplayGain" + "lyricsProvidersDisabledSection": "Вимкнено ({count})", + "@lyricsProvidersDisabledSection": { + "description": "Section header for disabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "setupLanguageTitle": "Choose Language", - "extensionId": "Ідентифікатор", - "@extensionId": { - "description": "Extension detail - unique ID" + "lyricsProvidersAtLeastOne": "Принаймні один постачальник має залишатися ввімкненим", + "@lyricsProvidersAtLeastOne": { + "description": "Snackbar when user tries to disable the last enabled provider" }, - "regionCountryBR": "Brazil", - "@updateNewVersionReady": { - "description": "Update subtitle" + "lyricsProvidersSaved": "Пріоритет постачальника текстів пісень збережено", + "@lyricsProvidersSaved": { + "description": "Snackbar after saving lyrics provider priority" }, - "@queueDownloadedFileMissing": { - "description": "Accessibility label when a downloaded file is missing from disk" + "lyricsProvidersDiscardContent": "У вас є незбережені зміни, які буде втрачено.", + "@lyricsProvidersDiscardContent": { + "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "@lyricsMode": { - "description": "Setting - how to save lyrics" + "lyricsProviderLrclibDesc": "Синхронізована база даних текстів пісень з відкритим кодом", + "@lyricsProviderLrclibDesc": { + "description": "Description for LRCLIB provider" }, - "@settingsAppearance": { - "description": "Settings section - visual customization" + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (добре підходить для азійських пісень)", + "@lyricsProviderNeteaseDesc": { + "description": "Description for Netease provider" }, - "@setupStorageAccessMessageAndroid11": { - "description": "Android 11+ specific explanation" + "lyricsProviderMusixmatchDesc": "Найбільша база даних текстів пісень (багатомовна)", + "@lyricsProviderMusixmatchDesc": { + "description": "Description for Musixmatch provider" }, - "@tutorialLibraryTip3": { - "description": "Tutorial library tip 3" + "lyricsProviderAppleMusicDesc": "Синхронізовані тексти пісень слово за словом (через проксі)", + "@lyricsProviderAppleMusicDesc": { + "description": "Description for Apple Music provider" }, - "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person lyrics is off" + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "@lyricsProviderQqMusicDesc": { + "description": "Description for QQ Music provider" }, - "libraryStorageAccessMessage": "SpotiFLAC потрібен доступ до сховища для сканування вашої музичної бібліотеки. Надайте дозвіл у налаштуваннях.", - "@libraryStorageAccessMessage": { - "description": "Dialog message for storage permission" + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" }, - "@tutorialLibraryTip1": { - "description": "Tutorial library tip 1" + "lyricsProviderExtensionDesc": "Постачальник розширень", + "@lyricsProviderExtensionDesc": { + "description": "Generic description for extension-based lyrics providers" }, - "dialogRemoveExtensionMessage": "Ви впевнені, що хочете видалити це розширення? Цю дію неможливо скасувати.", - "@dialogRemoveExtensionMessage": { - "description": "Dialog message - uninstall confirmation" + "safMigrationTitle": "Потрібне оновлення сховища", + "@safMigrationTitle": { + "description": "Title of SAF migration dialog" }, - "setupDownloadLocationTitle": "Розташування завантаження", - "@setupDownloadLocationTitle": { - "description": "Download location dialog title" + "safMigrationMessage1": "SpotiFLAC тепер використовує Android Storage Access Framework (SAF) для завантажень. Це виправляє помилки «відмовлено в доступі» на Android 10+.", + "@safMigrationMessage1": { + "description": "First paragraph of SAF migration dialog" }, - "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", - "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is on" + "safMigrationMessage2": "Будь ласка, виберіть папку завантажень ще раз, щоб перейти до нової системи зберігання.", + "@safMigrationMessage2": { + "description": "Second paragraph of SAF migration dialog" }, - "@audioAnalysisBitDepth": { - "description": "Bit depth metric label" + "safMigrationSuccess": "Папку завантажень оновлено до режиму SAF", + "@safMigrationSuccess": { + "description": "Snackbar after successfully migrating to SAF" }, - "trackOptionAddToLoved": "Додати до улюблених", - "@trackOptionAddToLoved": { - "description": "Bottom sheet action label - add track to loved folder" + "settingsDonate": "Support Development", + "@settingsDonate": { + "description": "Settings menu item - donate page" }, - "cacheAppDirectory": "Каталог кешу додатка", - "@cacheAppDirectory": { - "description": "Cache item title for app cache directory" + "settingsDonateSubtitle": "Buy the developer a coffee", + "@settingsDonateSubtitle": { + "description": "Subtitle for donate menu item" }, - "lyricsProviderMusixmatchDesc": "Найбільша база даних текстів пісень (багатомовна)", - "@navStore": { - "description": "Bottom navigation - Extension repo tab" + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" }, - "extensionPostProcessing": "Післяобробка", - "@searchTracks": { - "description": "Search filter label - tracks" + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" }, - "logCopied": "Журнали скопійовано в буфер обміну", - "@logCopied": { - "description": "Snackbar - logs copied" - }, - "@extensionHealthRequired": { - "description": "Label for a required extension service health check" + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" }, - "@previewPlay": { - "description": "Tooltip for the button that plays a short track preview snippet" + "backupExportSectionTitle": "Create backup", + "@backupExportSectionTitle": { + "description": "Section title for the export/backup card" }, - "clickableLookingUpArtist": "Looking up artist...", - "@clickableLookingUpArtist": { - "description": "Snackbar shown while clickable artist metadata is being resolved" + "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", + "@backupExportSectionDescription": { + "description": "Description of what a backup contains" }, - "@extensionVerificationBrowserSubtitleInApp": { - "description": "Subtitle when in-app browser is preferred for extension verification" + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" }, - "setupUseDefaultFolder": "Використати папку за замовчуванням?", - "tutorialSearchHint": "Paste or search...", - "@logIssueTrackNotFoundLabel": { - "description": "Diagnostic badge label when a track is unavailable" + "backupImportSectionTitle": "Restore backup", + "@backupImportSectionTitle": { + "description": "Section title for the import/restore card" }, - "@storageModeAppFolderSubtitle": { - "description": "Subtitle for app folder storage mode" + "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", + "@backupImportSectionDescription": { + "description": "Description for the restore action" }, - "downloadMusixmatchLanguage": "Мова Musixmatch", - "@downloadMusixmatchLanguage": { - "description": "Setting for Musixmatch lyrics translation language" + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" }, - "lyricsModeExternal": "Зовнішній файл .lrc", - "@setupSelectFolder": { - "description": "Button to select folder" + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" }, - "logSearchHint": "Пошук журналів...", + "backupCreateFailed": "Failed to create backup", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "@settingsSaveDownloadHistorySubtitle": { - "description": "Settings switch subtitle for storing completed downloads in history" - }, - "@albumFolderArtistAlbumFlat": { - "description": "Album folder option with singles directly in artist folder" - }, - "extensionHealthRequired": "required", - "actionCancel": "Скасувати", - "@actionCancel": { - "description": "Action button - cancel operation" - }, - "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", - "@optionsEmbedMetadataSubtitleOff": { - "description": "Subtitle when metadata embedding is disabled" - }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", - "@downloadAllowLocalNetworkDisabled": { - "description": "Subtitle when allow local network access is off" - }, - "@extensionsDownloadPrioritySubtitle": { - "description": "Subtitle for download priority" - }, - "downloadSingleFilenameFormat": "Формат імені одного файлу", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "cacheSummarySubtitle": "Очищення кешу не призведе до видалення завантажених музичних файлів.", - "@cacheSummarySubtitle": { - "description": "Helper text for cache summary card" - }, - "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", - "libraryFilterMetadataMissingTrackNumber": "Missing track number", - "@libraryFilterMetadataMissingTrackNumber": { - "description": "Filter option - items missing track number" - }, - "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", - "@backupIncludeSecretsDescription": { - "description": "Explanation for the include-credentials toggle" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" + "backupRestoreConfirmTitle": "Restore this backup?", + "@backupRestoreConfirmTitle": { + "description": "Confirmation dialog title before restoring a backup" }, - "@extensionServiceStatus": { - "description": "Extension detail section header for service status" + "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", + "@backupRestoreConfirmMessage": { + "description": "Confirmation dialog message before restoring a backup" }, - "queueEmptySingles": "Без окремих завантажень", - "@queueEmptySingles": { - "description": "Empty state title when no single track downloads exist" + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" }, - "@snackbarSelectedPlaylistsEmpty": { - "description": "Snackbar when selected playlists contain no tracks" + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" }, - "@errorRateLimited": { - "description": "Error title - too many requests" + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", - "@setupDownloadInFlac": { - "description": "App tagline in setup" + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" }, - "trackRemoveFromDevice": "Видалити з пристрою", - "@extensionsNoDownloadProvider": { - "description": "Empty state - no download providers" + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" }, - "@backupCreated": { - "description": "Snackbar after a backup file is created" + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" }, - "cacheSummaryTitle": "Огляд кешу", - "@cacheSummaryTitle": { - "description": "Heading for cache summary card" + "backupContentsSettings": "App settings", + "@backupContentsSettings": { + "description": "Backup contents row label for settings" }, - "selectionReplayGainCount": "ReplayGain ({count})", - "@selectionReplayGainCount": { - "description": "Batch selection action button label for ReplayGain", + "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "@backupContentsHistory": { + "description": "Backup contents row for history count", "placeholders": { "count": { "type": "int" } } }, - "@setupNotificationBackgroundDescription": { - "description": "Detailed notification explanation" - }, - "safMigrationTitle": "Потрібне оновлення сховища", - "snackbarMetadataSaved": "Метадані успішно збережено", - "@snackbarMetadataSaved": { - "description": "Snackbar after successfully saving track metadata" - }, - "@backupContentsSettings": { - "description": "Backup contents row label for settings" - }, - "logClearLogsTitle": "Очистити Журнали", - "extensionsCustomSearch": "Користувацький пошук", - "@extensionsCustomSearch": { - "description": "Label for custom search provider" - }, - "@downloadFrom": { - "description": "Label - download source" + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheSizeWithFiles": "{size} у {count} файлах", - "selectionShareNoFiles": "Файлів для спільного доступу не знайдено", - "@selectionShareNoFiles": { - "description": "Snackbar when no selected files exist on disk" + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "snackbarAddedTracksToQueue": "Додано {count} треків до черги", - "downloadFilenameInsertTag": "Натисніть, щоб вставити тег:", - "@downloadFilenameInsertTag": { - "description": "Label above filename tag chips" + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", "placeholders": { - "artistName": { - "type": "String" + "count": { + "type": "int" } } }, - "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", - "backupRestoreConfirmButton": "Restore", - "@libraryCleanupMissingFiles": { - "description": "Button to remove entries for missing files" + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "backupCreateFailed": "Failed to create backup", - "notifLibraryScanFailed": "Не вдалося сканувати бібліотеку", - "@notifLibraryScanFailed": { - "description": "Notification title when library scan fails" + "backupIncludeSecrets": "Include extension credentials", + "@backupIncludeSecrets": { + "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, - "audioAnalysisRescan": "Re-analyze", - "@trackTrackName": { - "description": "Metadata label - track title" + "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", + "@backupIncludeSecretsDescription": { + "description": "Explanation for the include-credentials toggle" }, - "@setupPermissionRequired": { - "description": "Generic permission required title", + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { - "permissionType": { - "type": "String", - "description": "Type of permission (Storage/Notification)" + "count": { + "type": "int" } } }, - "@nowPlayingNoLyrics": { - "description": "Empty state when the playing file has no embedded lyrics" + "tooltipLoveAll": "Уподобати всіх", + "@tooltipLoveAll": { + "description": "Tooltip for the Love All button on album/playlist screens" }, - "libraryFilesUnit": "{count, plural, =1{file} other{файлів}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", + "tooltipAddToPlaylist": "Додати до списку відтворення", + "@tooltipAddToPlaylist": { + "description": "Tooltip for the Add to Playlist button" + }, + "snackbarRemovedTracksFromLoved": "Видалено {count} треків з уподобань", + "@snackbarRemovedTracksFromLoved": { + "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { "count": { "type": "int" } } }, - "@extensionMetadataProvider": { - "description": "Capability - provides metadata" + "snackbarAddedTracksToLoved": "Додано {count} треків до списку \"Улюблені\"", + "@snackbarAddedTracksToLoved": { + "description": "Snackbar after adding multiple tracks to Loved folder", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@downloadFilterContributing": { - "description": "Setting to strip contributing artists from Album Artist folder name" + "dialogDownloadAllTitle": "Завантажити все", + "@dialogDownloadAllTitle": { + "description": "Dialog title for bulk download confirmation" }, - "libraryScanSelectFolderFirst": "Спочатку виберіть папку", - "@sectionDownload": { - "description": "Settings section header" + "dialogDownloadAllMessage": "Завантажити {count} треків?", + "@dialogDownloadAllMessage": { + "description": "Body of the Download All confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionHealthNotConfigured": "Not configured", - "queueRetryAllFailed": "Retry {count} failed", - "folderOrganizationByPlaylistSubtitle": "Окрема папка для кожного списку відтворення", - "@folderOrganizationByPlaylistSubtitle": { - "description": "Subtitle for playlist folder option" + "homeSkipAlreadyDownloaded": "Пропустити вже завантажені пісні", + "@homeSkipAlreadyDownloaded": { + "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "lyricsProviderExtensionDesc": "Постачальник розширень", - "@libraryFilterQualityHiRes": { - "description": "Filter option - high resolution audio" + "homeGoToAlbum": "Перейти до альбому", + "@homeGoToAlbum": { + "description": "Context menu item to navigate to the album page" }, - "trackConvertTitle": "Конвертувати аудіо", - "@trackConvertTitle": { - "description": "Title of convert bottom sheet" + "homeAlbumInfoUnavailable": "Інформація про альбом недоступна", + "@homeAlbumInfoUnavailable": { + "description": "Snackbar when album info cannot be loaded" }, - "setupSkipForNow": "Пропустити поки що", - "sectionDownload": "Завантажити", - "downloadLossyOpus256Subtitle": "Opus найкращої якості, ~8 МБ на трек", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" + "snackbarLoadingCueSheet": "Завантаження аркуша CUE...", + "@snackbarLoadingCueSheet": { + "description": "Snackbar while loading a CUE sheet file" }, - "@trackConvertActionLabelLossless": { - "description": "Convert button label for lossless conversion with quality cap", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" - } - } + "snackbarMetadataSaved": "Метадані успішно збережено", + "@snackbarMetadataSaved": { + "description": "Snackbar after successfully saving track metadata" }, - "storeRequiresVersion": "Requires v{version}+", - "@storeRequiresVersion": { - "description": "Store compatibility badge for minimum app version", + "snackbarFailedToEmbedLyrics": "Не вдалося вставити текст пісні", + "@snackbarFailedToEmbedLyrics": { + "description": "Snackbar when lyrics embedding fails" + }, + "snackbarFailedToWriteStorage": "Не вдалося перезаписати у сховище", + "@snackbarFailedToWriteStorage": { + "description": "Snackbar when writing metadata back to file fails" + }, + "snackbarError": "Помилка: {error}", + "@snackbarError": { + "description": "Generic error snackbar with error detail", "placeholders": { - "version": { + "error": { "type": "String" } } }, - "metadataProviderPriorityDescription": "Перетягніть, щоб змінити порядок постачальників метаданих. Додаток шукатиме постачальників зверху вниз під час пошуку треків та отримання метаданих.", - "@notifUpdateFailed": { - "description": "Notification title when app update download fails" + "snackbarNoActionDefined": "Для цієї кнопки не визначено жодної дії", + "@snackbarNoActionDefined": { + "description": "Snackbar when an extension button has no action configured" }, - "extensionsInfoTip": "Розширення можуть додавати нові метадані та завантажувати постачальників. Встановлюйте розширення лише з перевірених джерел.", - "@extensionsInfoTip": { - "description": "Security warning about extensions" + "noTracksFoundForAlbum": "Для цього альбому не знайдено жодних треків", + "@noTracksFoundForAlbum": { + "description": "Empty state message when an album has no tracks" }, - "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person lyrics is on" + "downloadLocationSubtitle": "Choose where to save your downloaded tracks", + "@downloadLocationSubtitle": { + "description": "Subtitle shown in the download location picker sheet" }, - "libraryFilterMetadataMissingYear": "Відсутній рік", - "extensionsDownloadPriority": "Пріоритет завантаження", - "@extensionsDownloadPriority": { - "description": "Setting - download provider order" + "storageModeAppFolder": "App Folder (Recommended)", + "@storageModeAppFolder": { + "description": "Storage mode option - app-managed folder" }, - "@downloadAllowLocalNetworkEnabled": { - "description": "Subtitle when allow local network access is on" + "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", + "@storageModeAppFolderSubtitle": { + "description": "Subtitle for app folder storage mode" }, - "libraryScan": "Сканувати бібліотеку", - "@libraryScan": { - "description": "Button to start library scan" + "storageModeSaf": "Custom Folder (SAF)", + "@storageModeSaf": { + "description": "Storage mode option - Storage Access Framework" }, - "editMetadataFieldLabel": "Лейбл", - "@editMetadataFieldLabel": { - "description": "Chip label for label field in auto-fill selector" + "storageModeSafSubtitle": "Pick any folder, including SD card", + "@storageModeSafSubtitle": { + "description": "Subtitle for SAF storage mode" }, - "updateDownloadFailed": "Не вдалося завантажити", - "@updateDownloadFailed": { - "description": "Update error title" + "downloadFolderAccessLostTitle": "Download folder access lost", + "@downloadFolderAccessLostTitle": { + "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" }, - "appearanceAmoledDarkSubtitle": "Чисто чорний фон", - "@appearanceAmoledDarkSubtitle": { - "description": "Subtitle for AMOLED dark" + "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", + "@downloadFolderAccessLostSubtitle": { + "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" }, - "setupIcloudNotSupported": "iCloud Drive не підтримується. Будь ласка, скористайтеся папкою «Документи» програми.", - "trackLyricsEmbeddedSource": "Embedded", - "@trackLyricsEmbeddedSource": { - "description": "Lyrics source label for embedded lyrics" + "downloadFolderReselect": "Re-select folder", + "@downloadFolderReselect": { + "description": "Button that reopens the folder picker to restore download folder access" }, - "@trackAlbumArtist": { - "description": "Metadata label - album artist" + "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", + "@downloadErrorSafPermissionLost": { + "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" }, - "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", - "@extensionsInstallPartialSuccess": { - "description": "Message when installing multiple extensions partially succeeds", - "placeholders": { - "installed": { - "type": "int", - "description": "Number of successfully installed extensions" - }, - "attempted": { - "type": "int", - "description": "Number of selected extensions" - } - } + "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", + "@downloadErrorFolderAccessLost": { + "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, - "@extensionSettingsCount": { - "description": "Count of settings exposed by an extension quality option", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", + "@downloadFilenameDescription": { + "description": "Description shown in filename format editor" }, - "notifLibraryScanCancelled": "Сканування бібліотеки скасовано", - "@notifLibraryScanCancelled": { - "description": "Notification title when library scan is cancelled by the user" + "downloadFilenameInsertTag": "Натисніть, щоб вставити тег:", + "@downloadFilenameInsertTag": { + "description": "Label above filename tag chips" }, - "collectionPlaylistNameRequired": "Потрібно вказати назву списку відтворення", - "libraryCleanupMissingFiles": "Очищення відсутніх файлів", - "storeCategoryUtility": "Utility", - "@storeCategoryUtility": { - "description": "Store extension category - utility" + "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", + "@downloadSeparateSinglesEnabled": { + "description": "Subtitle when separate singles folder is on" }, - "searchSortTitle": "Сортувати результати", - "@extensionVerificationBrowserExternal": { - "description": "Chip label for external browser verification mode" + "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", + "@downloadSeparateSinglesDisabled": { + "description": "Subtitle when separate singles folder is off" }, - "audioAnalysisLufs": "LUFS", - "@setupAllowAccessToManageFiles": { - "description": "Instruction for file access permission" + "downloadArtistNameFilters": "Фільтри імені виконавця", + "@downloadArtistNameFilters": { + "description": "Setting title for artist folder filter options" }, - "extensionsErrorLoading": "Помилка завантаження розширення", - "@actionPaste": { - "description": "Generic action - paste from clipboard" + "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", + "@downloadCreatePlaylistSourceFolder": { + "description": "Setting to create a subfolder per playlist source" }, - "aboutFeatureRequestSubtitle": "Запропонувати нові функції для програми", - "@aboutFeatureRequestSubtitle": { - "description": "Subtitle for feature request" + "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", + "@downloadCreatePlaylistSourceFolderEnabled": { + "description": "Subtitle when playlist folder is enabled" }, - "@aboutTitle": { - "description": "About page title" + "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", + "@downloadCreatePlaylistSourceFolderDisabled": { + "description": "Subtitle when playlist folder is disabled" }, - "@downloadNeteaseIncludeTranslation": { - "description": "Setting to include translated lyrics from Netease" + "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", + "@downloadCreatePlaylistSourceFolderRedundant": { + "description": "Subtitle when folder organization is already set to playlist" }, - "@actionGo": { - "description": "Generic action button label" + "downloadSongLinkRegion": "Регіон SongLink", + "@downloadSongLinkRegion": { + "description": "Setting for SongLink region used during fallback resolution" }, - "regionCountryFR": "France", - "trackConvertResamplerSoxr": "SoXr", - "extensionUpdated": "Оновлено", - "@extensionUpdated": { - "description": "Extension detail - last update" + "downloadNetworkCompatibilityMode": "Network Compatibility Mode", + "@downloadNetworkCompatibilityMode": { + "description": "Setting for legacy TLS/network handling" }, - "downloadLossyFormat": "Формат із втратами", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "@downloadNetworkCompatibilityModeEnabled": { + "description": "Subtitle when network compatibility mode is on" }, - "snackbarAlreadyInLibrary": "\"{trackName}\" вже є у вашій бібліотеці", - "@snackbarAlreadyInLibrary": { - "description": "Snackbar - track already exists in local library", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", + "@downloadNetworkCompatibilityModeDisabled": { + "description": "Subtitle when network compatibility mode is off" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", - "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", - "libraryFilterQuality": "Якість", - "@libraryFilterQuality": { - "description": "Filter section - audio quality" + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@downloadAllowLocalNetwork": { + "description": "Setting title for allowing requests to private/local network targets" }, - "editMetadataAutoFillDone": "Заповнено {count} {count, plural, =1{поле} other{полей}} з онлайн-метаданих", - "@editMetadataAutoFillDone": { - "description": "Snackbar confirming how many fields were auto-filled", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", + "@downloadAllowLocalNetworkEnabled": { + "description": "Subtitle when allow local network access is on" }, - "@discographyDownload": { - "description": "Button - download artist discography" + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" }, - "aboutFeatureRequest": "Запит на функцію", - "downloadSingleFilenameFormatDescription": "Шаблон назви файлу для синглів та міні-альбомів. Використовує ті самі теги, що й формат альбому.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" + "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "@downloadSelectServiceToEnable": { + "description": "Subtitle when quality picker is disabled due to extension service" }, - "queueClearAllMessage": "Ви впевнені, що хочете очистити всі завантаження?", - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", - "extensionLastChecked": "Last checked {time}", - "@extensionLastChecked": { - "description": "Timestamp for the latest extension service health check", - "placeholders": { - "time": { - "type": "String" - } - } + "downloadEmbedLyricsDisabled": "Enable metadata embedding first", + "@downloadEmbedLyricsDisabled": { + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "homeImportCsvTooltip": "Import playlist (CSV, M3U)", - "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "downloadNeteaseIncludeTranslation": "Netease: Включити переклад", + "@downloadNeteaseIncludeTranslation": { + "description": "Setting to include translated lyrics from Netease" }, - "trackConvertResamplerSwr": "SWR", - "@trackConvertResamplerSwr": { - "description": "Lossless conversion default FFmpeg swresample resampler option" + "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", + "@downloadNeteaseIncludeTranslationEnabled": { + "description": "Subtitle when Netease translation is on" }, - "@downloadFolderOrganization": { - "description": "Title of the folder organization picker bottom sheet" + "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", + "@downloadNeteaseIncludeTranslationDisabled": { + "description": "Subtitle when Netease translation is off" }, - "dialogClearHistoryTitle": "Очистити історію", - "@logClearSearch": { - "description": "Tooltip for clearing the log search field" + "downloadNeteaseIncludeRomanization": "Netease: Включити романізацію", + "@downloadNeteaseIncludeRomanization": { + "description": "Setting to include romanized lyrics from Netease" }, - "dialogImport": "Імпорт", - "@dialogImport": { - "description": "Dialog button - import data" + "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", + "@downloadNeteaseIncludeRomanizationEnabled": { + "description": "Subtitle when Netease romanization is on" }, - "@setupChangeFolderTooltip": { - "description": "Tooltip for editing the selected download folder" + "downloadNeteaseIncludeRomanizationDisabled": "No romanization", + "@downloadNeteaseIncludeRomanizationDisabled": { + "description": "Subtitle when Netease romanization is off" }, - "notifLibraryScanErrors": "{count} помилок", - "@downloadNetworkCompatibilityMode": { - "description": "Setting for legacy TLS/network handling" + "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", + "@downloadAppleQqMultiPerson": { + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, - "@metadataSaveFailedFfmpeg": { - "description": "Snackbar error when FFmpeg fails to write metadata" + "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", + "@downloadAppleQqMultiPersonEnabled": { + "description": "Subtitle when multi-person lyrics is on" }, - "dialogUninstallExtension": "Видалити розширення?", - "recentTypePlaylist": "Список відтворення", - "@recentTypePlaylist": { - "description": "Recent access item type - playlist" + "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", + "@downloadAppleQqMultiPersonDisabled": { + "description": "Subtitle when multi-person lyrics is off" }, - "trackDeleteConfirmMessage": "Це назавжди видалить завантажений файл і вилучить його з вашої історії.", - "@logIssueNetworkErrorDescription": { - "description": "Diagnostic badge description for generic network errors" + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "appearanceThemeSystem": "Системний", - "@appearanceThemeSystem": { - "description": "Follow system theme" + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "albumFolderArtistAlbumSingles": "Виконавець / Альбом + Сингли", - "@aboutTranslators": { - "description": "Section for translators" + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "shareSheetNotFound": "Not found", - "@shareSheetNotFound": { - "description": "Cross-service share sheet row subtitle when a service has no match" + "downloadMusixmatchLanguage": "Мова Musixmatch", + "@downloadMusixmatchLanguage": { + "description": "Setting for Musixmatch lyrics translation language" }, - "@tutorialDownloadInProgressSemantics": { - "description": "Accessibility label for active download state in tutorial demo" + "downloadMusixmatchLanguageAuto": "Auto (original language)", + "@downloadMusixmatchLanguageAuto": { + "description": "Subtitle when no language is set" }, - "editMetadataAutoFillNoneSelected": "Виберіть принаймні одне поле для автоматичного заповнення", - "@editMetadataAutoFillNoneSelected": { - "description": "Snackbar when user taps Fetch without selecting any fields" + "downloadFilterContributing": "Filter Contributing Artists", + "@downloadFilterContributing": { + "description": "Setting to strip contributing artists from Album Artist folder name" }, - "@snackbarViewQueue": { - "description": "Snackbar action - view download queue" + "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", + "@downloadFilterContributingEnabled": { + "description": "Subtitle when contributing artist filter is on" }, - "@optionsUpdateChannelPreview": { - "description": "Include beta/preview updates" + "downloadFilterContributingDisabled": "Full Album Artist string used", + "@downloadFilterContributingDisabled": { + "description": "Subtitle when contributing artist filter is off" }, - "editMetadataFieldComposer": "Composer", - "@editMetadataFieldComposer": { - "description": "Label for composer field in the edit metadata sheet" + "downloadProvidersNoneEnabled": "No providers enabled", + "@downloadProvidersNoneEnabled": { + "description": "Shown when no lyrics providers are active" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", - "@aboutSachinsenalDesc": { - "description": "Credit description for sachinsenal0x64" + "downloadMusixmatchLanguageCode": "Код мови", + "@downloadMusixmatchLanguageCode": { + "description": "Label for Musixmatch language input field" }, - "backupTitle": "Backup & Restore", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" + "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "@downloadMusixmatchLanguageHint": { + "description": "Placeholder for Musixmatch language input" }, - "setupStorageAccessRequired": "Потрібен доступ до сховища", - "@setupStorageAccessRequired": { - "description": "Title when storage access needed" + "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", + "@downloadMusixmatchLanguageDesc": { + "description": "Description in Musixmatch language picker" }, - "trackMetadataDelete": "Видалити", - "@trackMetadataDelete": { - "description": "Action button - delete track" + "downloadMusixmatchAuto": "Авто", + "@downloadMusixmatchAuto": { + "description": "Button to clear Musixmatch language (use auto)" }, - "libraryFilterMetadataMissingDiscNumber": "Missing disc number", - "@libraryFilterMetadataMissingDiscNumber": { - "description": "Filter option - items missing disc number" + "downloadNetworkAnySubtitle": "Use WiFi or mobile data", + "@downloadNetworkAnySubtitle": { + "description": "Subtitle for any-network option in picker" }, - "snackbarMetadataProviderSaved": "Пріоритет постачальника метаданих збережено", - "setupPermissionRequired": "{permissionType} Потрібен дозвіл", - "@selectionConvertNoConvertible": { - "description": "Snackbar when no selected tracks support conversion" + "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "@downloadNetworkWifiOnlySubtitle": { + "description": "Subtitle for WiFi-only option in picker" }, - "extensionHealthDegraded": "Degraded", - "regionCountryKR": "South Korea", - "@regionCountryKR": { - "description": "Country name for SongLink region picker" + "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", + "@downloadSongLinkRegionDesc": { + "description": "Description in SongLink region picker" }, - "trackLyricsNotInFile": "У цьому файлі не знайдено текстів пісень", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" + "snackbarUnsupportedAudioFormat": "Непідтримуваний аудіоформат", + "@snackbarUnsupportedAudioFormat": { + "description": "Snackbar when the audio format is not supported for the requested operation" }, - "@downloadedAlbumTapToSelect": { - "description": "Selection hint" + "cacheRefresh": "Оновити", + "@cacheRefresh": { + "description": "Tooltip for refresh button on cache management page" }, - "downloadArtistNameFilters": "Фільтри імені виконавця", - "@downloadArtistNameFilters": { - "description": "Setting title for artist folder filter options" + "dialogDownloadPlaylistsMessage": "Завантажити {trackCount} {trackCount, plural, =1{трек} other{треків}} з {playlistCount} {playlistCount, plural, =1{плейлист} other{плейлистів}}?", + "@dialogDownloadPlaylistsMessage": { + "description": "Dialog message for bulk playlist download confirmation", + "placeholders": { + "trackCount": { + "type": "int" + }, + "playlistCount": { + "type": "int" + } + } }, - "@libraryFilterMetadataMissingArtist": { - "description": "Filter option - items missing artist" + "bulkDownloadPlaylistsButton": "Завантажити {count} {count, plural, =1{плейлист} other{плейлистів}}", + "@bulkDownloadPlaylistsButton": { + "description": "Button label for bulk downloading selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "recentShowAllDownloads": "Показати всі завантаження", - "@appearanceThemeLight": { - "description": "Light theme" + "bulkDownloadSelectPlaylists": "Вибрати списки відтворення для завантаження", + "@bulkDownloadSelectPlaylists": { + "description": "Button label when no playlists are selected for download" }, - "trackReEnrichFieldTrackInfo": "Номер треку та диска", - "@appearanceThemeDark": { - "description": "Dark theme" + "snackbarSelectedPlaylistsEmpty": "Вибрані списки відтворення не містять треків", + "@snackbarSelectedPlaylistsEmpty": { + "description": "Snackbar when selected playlists contain no tracks" }, - "extensionVerificationLinkCopied": "Verification link copied", - "@extensionVerificationLinkCopied": { - "description": "Snackbar after copying the extension verification URL" + "playlistsCount": "{count, plural, =1{1 плейлист} other{{count} плейлистів}}", + "@playlistsCount": { + "description": "Playlist count display", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@extensionsHomeFeedDescription": { - "description": "Extensions page - description for home feed provider picker" + "editMetadataAutoFill": "Автоматичне заповнення з онлайн-ресурсів", + "@editMetadataAutoFill": { + "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", - "@downloadAlbumArtistMetadataPrimaryOnly": { - "description": "Status label when album-artist folder filtering uses primary artist only" + "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", + "@editMetadataAutoFillDesc": { + "description": "Description for the auto-fill section" }, - "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", - "setupNext": "Далі", - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", - "libraryAutoScanDaily": "Щоденно", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" + "editMetadataAutoFillSource": "Metadata source", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" }, - "@audioAnalysisDescription": { - "description": "Description for audio analysis tap-to-analyze prompt" + "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" }, - "nowPlayingUpNext": "Up next", - "@nowPlayingUpNext": { - "description": "Title for the playback queue sheet" + "editMetadataAutoFillFind": "Find metadata", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" }, - "nowPlayingPreviousTrack": "Previous track", - "nowPlayingNextTrack": "Next track", - "logAutoScrollOff": "Auto-scroll OFF", - "trackConvertFailed": "Конвертація не вдалася", - "@trackConvertFailed": { - "description": "Snackbar when conversion fails" + "editMetadataAutoFillPreview": "Data from {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } }, - "extensionsUninstall": "Видалити", - "safMigrationSuccess": "Папку завантажень оновлено до режиму SAF", - "optionsClearHistorySubtitle": "Видалити всі завантажені треки з історії", - "@optionsClearHistorySubtitle": { - "description": "Subtitle for clear history" + "editMetadataAutoFillCoverAvailable": "Cover artwork available", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" }, - "trackPlayNext": "Play next", - "extensionsNoHomeFeedExtensions": "Без розширень із домашньою стрічкою", - "optionsUpdateChannelStable": "Тільки стабільні релізи", - "@optionsUpdateChannelStable": { - "description": "Only stable updates" + "editMetadataAutoFillApply": "Apply selected data", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" }, - "@discographyDownloadAllSubtitle": { - "description": "Subtitle showing total tracks and albums", + "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" }, - "albumCount": { - "type": "int" + "source": { + "type": "String" } } }, - "searchPlaylists": "Списки відтворення", - "@searchPlaylists": { - "description": "Search result category - playlists" + "editMetadataAutoFillFetch": "Отримання та заповнення", + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" }, - "downloadNetworkCompatibilityMode": "Network Compatibility Mode", - "settingsAppearance": "Зовнішній вигляд", - "logIssueRateLimitedLabel": "RATE LIMITED", - "@logIssueRateLimitedLabel": { - "description": "Diagnostic badge label when the service rate limits requests" + "editMetadataAutoFillSearching": "Пошук в Інтернеті...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" }, - "logIssueSummary": "Issue Summary", - "@logIssueSummary": { - "description": "Header for log issue analysis summary" + "editMetadataAutoFillNoResults": "Відповідних метаданих в Інтернеті не знайдено", + "@editMetadataAutoFillNoResults": { + "description": "Snackbar when online metadata search returns no results" }, - "appName": "", - "storeRepoDialogCurrent": "Поточний репозиторій:", - "@optionsExtensionStoreSubtitle": { - "description": "Subtitle for extension repo toggle" + "editMetadataAutoFillDone": "Заповнено {count} {count, plural, =1{поле} other{полей}} з онлайн-метаданих", + "@editMetadataAutoFillDone": { + "description": "Snackbar confirming how many fields were auto-filled", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@trackLyrics": { - "description": "Tab title - lyrics" + "editMetadataAutoFillNoneSelected": "Виберіть принаймні одне поле для автоматичного заповнення", + "@editMetadataAutoFillNoneSelected": { + "description": "Snackbar when user taps Fetch without selecting any fields" }, - "@backupImportButton": { - "description": "Button to pick a backup file to restore" + "editMetadataFieldTitle": "Назва", + "@editMetadataFieldTitle": { + "description": "Chip label for title field in auto-fill selector" }, - "@setupFolderChoose": { - "description": "Button to choose folder" + "editMetadataFieldArtist": "Виконавець", + "@editMetadataFieldArtist": { + "description": "Chip label for artist field in auto-fill selector" }, - "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", - "@extensionsDisabled": { - "description": "Extension status - inactive" + "editMetadataFieldAlbum": "Альбом", + "@editMetadataFieldAlbum": { + "description": "Chip label for album field in auto-fill selector" }, - "@regionCountryAU": { - "description": "Country name for SongLink region picker" + "editMetadataFieldAlbumArtist": "Виконавець альбому", + "@editMetadataFieldAlbumArtist": { + "description": "Chip label for album artist field in auto-fill selector" }, - "@storeCategoryMetadata": { - "description": "Store extension category - metadata" + "editMetadataFieldDate": "Дата", + "@editMetadataFieldDate": { + "description": "Chip label for date field in auto-fill selector" }, - "libraryFilterApply": "Застосувати", - "@libraryFilterApply": { - "description": "Apply filters button" + "editMetadataFieldTrackNum": "Номер треку", + "@editMetadataFieldTrackNum": { + "description": "Chip label for track number field in auto-fill selector" }, - "@libraryFilterSortGenreAsc": { - "description": "Sort option - genre ascending" + "editMetadataFieldDiscNum": "Номер диска", + "@editMetadataFieldDiscNum": { + "description": "Chip label for disc number field in auto-fill selector" }, - "setupAllowAccessToManageFiles": "Будь ласка, увімкніть опцію «Дозволити доступ для керування всіма файлами» на наступному екрані.", - "@dialogSave": { - "description": "Dialog button - save changes" + "editMetadataFieldGenre": "Жанр", + "@editMetadataFieldGenre": { + "description": "Chip label for genre field in auto-fill selector" }, - "trackLyrics": "Тексти пісень", - "extensionSettingNotSet": "Not set", - "@extensionSettingNotSet": { - "description": "Value shown when an extension setting has no value" + "editMetadataFieldIsrc": "ISRC", + "@editMetadataFieldIsrc": { + "description": "Chip label for ISRC field in auto-fill selector" }, - "@audioAnalysisClipping": { - "description": "Clipping metric label" + "editMetadataFieldLabel": "Лейбл", + "@editMetadataFieldLabel": { + "description": "Chip label for label field in auto-fill selector" }, - "downloadNeteaseIncludeTranslation": "Netease: Включити переклад", - "@albumFolderArtistAlbumSubtitle": { - "description": "Folder structure example" + "editMetadataFieldCopyright": "Авторське право", + "@editMetadataFieldCopyright": { + "description": "Chip label for copyright field in auto-fill selector" }, - "@settingsDonateSubtitle": { - "description": "Subtitle for donate menu item" + "editMetadataFieldCover": "Обкладинка", + "@editMetadataFieldCover": { + "description": "Chip label for cover art field in auto-fill selector" }, - "cueSplitSuccess": "Розділено на {count} треків успішно", - "@cueSplitSuccess": { - "description": "Snackbar after successful CUE split", + "editMetadataSelectAll": "Усі", + "@editMetadataSelectAll": { + "description": "Button to select all fields for auto-fill" + }, + "editMetadataSelectEmpty": "Порожні (без мета даних)", + "@editMetadataSelectEmpty": { + "description": "Button to select only fields that are currently empty" + }, + "queueDownloadingCount": "Завантаження ({count})", + "@queueDownloadingCount": { + "description": "Header for active downloads section with count", "placeholders": { "count": { "type": "int" } } }, - "cueSplitArtist": "Артист: {artist}", - "@cueSplitArtist": { - "description": "Artist name in CUE split sheet", + "queueFilteringIndicator": "Фільтрування...", + "@queueFilteringIndicator": { + "description": "Shown while filter results are being computed" + }, + "queueTrackCount": "{count, plural, =1{1 трек} other{{count} треків}}", + "@queueTrackCount": { + "description": "Track count label with plural support", "placeholders": { - "artist": { - "type": "String" + "count": { + "type": "int" } } }, - "updateSeeReleaseNotes": "See release notes for details.", - "@updateSeeReleaseNotes": { - "description": "Fallback changelog text when release notes cannot be parsed" - }, - "@trackReEnrichFfmpegFailed": { - "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + "queueAlbumCount": "{count, plural, =1{1 альбом} other{{count} альбомів}}", + "@queueAlbumCount": { + "description": "Album count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionWishlist": "Список бажань", - "@collectionWishlist": { - "description": "Custom folder for saved tracks to download later" + "queueEmptyAlbums": "Немає завантажень альбомів", + "@queueEmptyAlbums": { + "description": "Empty state title when no album downloads exist" }, - "editMetadataAutoFillFetch": "Отримання та заповнення", - "@extensionsHomeFeedAuto": { - "description": "Label for auto-selected search provider" + "queueEmptyAlbumsSubtitle": "Завантажте кілька треків з альбому, щоб переглянути їх тут", + "@queueEmptyAlbumsSubtitle": { + "description": "Empty state subtitle for album downloads" }, - "providerPriorityDescription": "Перетягніть, щоб змінити порядок постачальників завантажень. Під час завантаження треків програма використовуватиме постачальників зверху вниз.", - "@providerPriorityDescription": { - "description": "Provider priority page description" + "queueEmptySingles": "Без окремих завантажень", + "@queueEmptySingles": { + "description": "Empty state title when no single track downloads exist" }, "queueEmptySinglesSubtitle": "Завантаження окремих треків з’являться тут", - "downloadLossyOpus128": "Opus 128 кбіт/с", - "downloadUseAlbumArtistForFolders": "Використовувати виконавця альбому для папок", - "@downloadUseAlbumArtistForFolders": { - "description": "Setting - choose whether artist folders use Album Artist or Track Artist" + "@queueEmptySinglesSubtitle": { + "description": "Empty state subtitle for single track downloads" }, - "@aboutLinks": { - "description": "Section for external links" + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadedAlbumDeleteCount": "Видалити {count} {count, plural, =1{трек} other{треків}}", - "updateLater": "Пізніше", - "@logIssueIspBlockingSuggestion": { - "description": "Diagnostic badge suggestion for ISP blocking" + "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" }, - "actionResume": "Відновити", - "optionsDetailedLoggingOff": "Увімкнути для звітів про помилки", - "@searchSortDefault": { - "description": "Sort option - default API order" + "libraryDefaultView": "Default view", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" }, - "@regionCountryCA": { - "description": "Country name for SongLink region picker" + "libraryDefaultViewLastUsed": "Last used", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" }, - "@sectionStorageAccess": { - "description": "Section header for storage access settings" + "queueEmptyHistory": "Немає історії завантажень", + "@queueEmptyHistory": { + "description": "Empty state title when download history is empty" }, - "downloadFilterContributing": "Filter Contributing Artists", - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", - "storeSearch": "Розширення пошуку...", - "@storeSearch": { - "description": "Repo search placeholder" + "queueEmptyHistorySubtitle": "Завантажені треки з’являться тут", + "@queueEmptyHistorySubtitle": { + "description": "Empty state subtitle for download history" }, - "aboutTelegramChat": "Telegram Спільнота", - "lyricsModeBoth": "Обидва", - "@lyricsModeBoth": { - "description": "Lyrics mode option - embed and external" + "selectionAllPlaylistsSelected": "Вибрано всі списки відтворення", + "@selectionAllPlaylistsSelected": { + "description": "Shown when all playlists are selected in selection mode" }, - "@permissionNotification": { - "description": "Notification permission type label" - }, - "libraryAutoScanSubtitle": "Автоматичне сканування бібліотеки на наявність нових файлів", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" + "selectionTapPlaylistsToSelect": "Торкніться списків відтворення, щоб вибрати", + "@selectionTapPlaylistsToSelect": { + "description": "Hint shown in playlist selection mode" }, - "libraryEnableLocalLibrary": "Увімкнути локальну бібліотеку", - "trackConvertTargetFormat": "Цільовий формат", - "@trackConvertTargetFormat": { - "description": "Label for format selection" + "selectionSelectPlaylistsToDelete": "Вибрати списки відтворення для видалення", + "@selectionSelectPlaylistsToDelete": { + "description": "Hint shown when no playlists are selected for deletion" }, - "extensionSettings": "Налаштування", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" + "audioAnalysisTitle": "Аналіз якості звуку", + "@audioAnalysisTitle": { + "description": "Title for audio analysis section" }, - "trackLyricsTimeout": "Час очікування запиту минув. Спробуйте ще раз пізніше.", - "settingsExtensions": "Розширення", - "@settingsBackup": { - "description": "Settings menu item - backup and restore page" + "audioAnalysisDescription": "Перевірити якість без втрат за допомогою спектрального аналізу", + "@audioAnalysisDescription": { + "description": "Description for audio analysis tap-to-analyze prompt" }, - "librarySourceDownloaded": "Завантажені", - "@librarySourceDownloaded": { - "description": "Badge for tracks downloaded via SpotiFLAC" + "audioAnalysisAnalyzing": "Аналіз аудіо...", + "@audioAnalysisAnalyzing": { + "description": "Loading text while analyzing audio" }, - "appearanceDynamicColor": "Динамічний колір", - "@appearanceDynamicColor": { - "description": "Material You dynamic colors" + "audioAnalysisSampleRate": "Частота дискретизації", + "@audioAnalysisSampleRate": { + "description": "Sample rate metric label" }, - "backupImportButton": "Choose backup file", - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@optionsEmbedMetadata": { - "description": "Settings toggle title for writing metadata into downloaded files" + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" }, - "appearanceTitle": "Зовнішній вигляд", - "downloadNeteaseIncludeRomanizationDisabled": "No romanization", - "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is off" + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" }, - "@libraryScanCancelled": { - "description": "Library scan status when a scan was cancelled" + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" }, - "tracksCount": "{count, plural, =1{1 трек} other{{count} треків}}", - "@snackbarFailedToUpdateNamed": { - "description": "Snackbar when extension update fails in the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "audioAnalysisBitDepth": "Глибина бітів", + "@audioAnalysisBitDepth": { + "description": "Bit depth metric label" }, - "@extensionQualityOptions": { - "description": "Capability - quality selection" + "audioAnalysisChannels": "Канали", + "@audioAnalysisChannels": { + "description": "Channels metric label" }, - "logClearSearch": "Clear search", - "trackSaveLyrics": "Зберегти текст пісні (.lrc)", - "@trackReEnrichSearching": { - "description": "Snackbar while searching metadata from internet for local items" + "audioAnalysisDuration": "Тривалість", + "@audioAnalysisDuration": { + "description": "Duration metric label" }, - "@editMetadataAutoFillNoResults": { - "description": "Snackbar when online metadata search returns no results" + "audioAnalysisNyquist": "Частота Найквіста", + "@audioAnalysisNyquist": { + "description": "Nyquist frequency metric label" }, - "notifDownloadComplete": "Завантаження завершено", - "snackbarAlreadyDownloaded": "\"{trackName}\" вже завантажено", - "folderOrganizationByAlbumSubtitle": "Окрема папка для кожного альбому", - "storeRepoUrlHint": "https://github.com/user/repo", - "trackConvertDitherTriangularHp": "Triangular HP", - "lyricsModeBothSubtitle": "Вбудувати та зберегти файл .lrc", - "trackReEnrichFieldExtra": "Жанр, Лейбл, Авторське право", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" + "audioAnalysisFileSize": "Розмір", + "@audioAnalysisFileSize": { + "description": "File size metric label" }, - "sectionLyrics": "Тексти пісень", - "@sectionLyrics": { - "description": "Settings section header" + "audioAnalysisDynamicRange": "Динамічний діапазон", + "@audioAnalysisDynamicRange": { + "description": "Dynamic range metric label" }, - "extensionStrategy": "Стратегія: {strategy}", - "@extensionStrategy": { - "description": "Track matching strategy name", - "placeholders": { - "strategy": { - "type": "String" - } - } + "audioAnalysisPeak": "Пік", + "@audioAnalysisPeak": { + "description": "Peak amplitude metric label" }, - "@downloadNativeWorker": { - "description": "Setting title for Android native download worker" + "audioAnalysisRms": "RMS", + "@audioAnalysisRms": { + "description": "RMS level metric label" }, - "optionsArtistTagModeSplitVorbis": "Розділені теги для FLAC/Opus", - "extensionsHomeFeedUse": "Використовувати {extensionName} головну стрічку", - "@cacheAppDirectoryDesc": { - "description": "Description of what app cache directory contains" + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" }, - "cancelDownloadTitle": "Скасувати завантаження?", - "updateWhatsNew": "Що нового", - "updateNewVersionReady": "Доступна нова версія", - "@extensionVerificationClose": { - "description": "Button to dismiss the extension verification help dialog" + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" }, - "a11ySelectTrack": "Select track", - "libraryClearSubtitle": "Видалити всі скановані треки", - "@libraryClearSubtitle": { - "description": "Subtitle for clear button" + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" }, - "@settingsDownloadNetworkSubtitle": { - "description": "Subtitle explaining network preference" + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" }, - "storeAnyVersion": "Any", - "@storeAnyVersion": { - "description": "Store detail value when any app version is accepted" + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" }, - "navStore": "Репозиторій", - "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", - "libraryScanSettings": "Налаштування сканування", - "@libraryScanSettings": { - "description": "Section header for scan settings" + "audioAnalysisCutoffNotDetected": "Not detected", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" }, - "trackDuration": "Тривалість", - "@trackDuration": { - "description": "Metadata label - track length" + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" }, - "extensionHealthOffline": "Offline", - "@extensionHealthOffline": { - "description": "Extension service health status - offline" + "audioAnalysisSamples": "Семпли", + "@audioAnalysisSamples": { + "description": "Total samples metric label" }, - "editMetadataFieldArtist": "Виконавець", - "@editMetadataFieldArtist": { - "description": "Chip label for artist field in auto-fill selector" + "audioAnalysisRescan": "Re-analyze", + "@audioAnalysisRescan": { + "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" }, - "libraryInLibrary": "У бібліотеці", - "pressBackAgainToExit": "Натисніть кнопку «Назад» ще раз, щоб вийти", - "@pressBackAgainToExit": { - "description": "Exit confirmation message" + "audioAnalysisRescanning": "Re-analyzing audio...", + "@audioAnalysisRescanning": { + "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "setupNotificationGranted": "Дозвіл на сповіщення надано!", - "@setupNotificationGranted": { - "description": "Success message for notification permission" + "extensionsHomeFeedProvider": "Постачальник оновлень домашньої стрічки", + "@extensionsHomeFeedProvider": { + "description": "Extensions page - label for home feed provider selector" }, - "settingsDonate": "Support Development", - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", - "backupContentsTitle": "Backup contents", - "updateDontRemind": "Не нагадувати", - "@dialogDiscard": { - "description": "Dialog button - discard changes" + "extensionsHomeFeedDescription": "Виберіть, яке розширення відображатиме домашню стрічку на головному екрані", + "@extensionsHomeFeedDescription": { + "description": "Extensions page - description for home feed provider picker" }, - "editMetadataAutoFillSearching": "Пошук в Інтернеті...", - "discographyDownloadSelected": "Завантажити вибране", - "trackConvertResampler": "Resampler", - "queueFilteringIndicator": "Фільтрування...", - "@queueFilteringIndicator": { - "description": "Shown while filter results are being computed" + "extensionsHomeFeedAuto": "Авто", + "@extensionsHomeFeedAuto": { + "description": "Label for auto-selected search provider" }, - "@dialogDownloadAllTitle": { - "description": "Dialog title for bulk download confirmation" + "extensionsHomeFeedAutoSubtitle": "Автоматично вибирати найкращий доступний", + "@extensionsHomeFeedAutoSubtitle": { + "description": "Extensions page - subtitle for auto home feed option" }, - "cueSplitConfirmMessage": "Розділити \"{album}\" на {count} окремих FLAC-файлів?\n\nФайли будуть збережені в одному каталозі.", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when folder organization is already set to playlist" + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" }, - "regionCountryCA": "Canada", - "cacheTempDirectory": "Тимчасовий каталог", - "@cacheTempDirectory": { - "description": "Cache item title for temporary files directory" + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" }, - "libraryShowDuplicateIndicator": "Показати індикатор дублікатів", - "@logFilterBySeverity": { - "description": "Filter dialog title" + "extensionsHomeFeedUse": "Використовувати {extensionName} головну стрічку", + "@extensionsHomeFeedUse": { + "description": "Extensions page - subtitle for a specific extension home feed option", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "homeSearchHintProvider": "Search with {providerName}...", - "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is off" + "extensionsNoHomeFeedExtensions": "Без розширень із домашньою стрічкою", + "@extensionsNoHomeFeedExtensions": { + "description": "Extensions page - shown when no installed extension has home feed" }, - "optionsCheckUpdates": "Перевірити наявність оновлень", - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", - "recentTypeAlbum": "Альбом", - "providerExtension": "Розширення", - "@providerExtension": { - "description": "Label for extension-provided providers" + "cancelDownloadTitle": "Скасувати завантаження?", + "@cancelDownloadTitle": { + "description": "Dialog title when confirming cancellation of an active download" }, - "trackCoverNoSource": "Джерело обкладинки недоступне", - "libraryFilterMetadata": "Метадані", - "albumFolderArtistYearAlbum": "Артист / [Рік] Альбом", - "@albumFolderArtistYearAlbum": { - "description": "Album folder option with year" - }, - "audioAnalysisClipping": "Clipping", - "@a11yOpenAlbumByArtistTrackCount": { - "description": "Accessibility label for opening an album item with track count", + "cancelDownloadContent": "Це скасує активне завантаження треку \"{trackName}\".", + "@cancelDownloadContent": { + "description": "Dialog body when confirming cancellation of an active download", "placeholders": { - "albumName": { - "type": "String" - }, - "artistName": { + "trackName": { "type": "String" - }, - "trackCount": { - "type": "int" } } }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", - "@backupExtensionsRestoreFailed": { - "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "cancelDownloadKeep": "Зберегти", + "@cancelDownloadKeep": { + "description": "Dialog button - keep the active download (do not cancel)" + }, + "queueCancelledTitle": "Download cancelled", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, + "metadataSaveFailedFfmpeg": "Не вдалося зберегти метадані через FFmpeg", + "@metadataSaveFailedFfmpeg": { + "description": "Snackbar error when FFmpeg fails to write metadata" + }, + "metadataSaveFailedStorage": "Не вдалося записати метадані назад у сховище", + "@metadataSaveFailedStorage": { + "description": "Snackbar error when writing metadata file back to storage fails" + }, + "snackbarFolderPickerFailed": "Не вдалося відкрити засіб вибору папок: {error}", + "@snackbarFolderPickerFailed": { + "description": "Snackbar shown when folder picker fails to open", "placeholders": { - "count": { - "type": "int" + "error": { + "type": "String" } } }, - "channelStable": "Стабільний", - "@channelStable": { - "description": "Update channel - stable releases" - }, - "tutorialSettingsTip3": "Налаштуйте тему та зовнішній вигляд програми", - "setupAppDocumentsFolderSubtitle": "Рекомендація – доступно через додаток Файли", - "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", - "@a11yPlayTrackByArtist": { - "description": "Accessibility label for playing a local library track", + "notifDownloadingTrack": "Завантаження {trackName}", + "@notifDownloadingTrack": { + "description": "Notification title while downloading a track", "placeholders": { "trackName": { "type": "String" - }, - "artistName": { - "type": "String" } } }, - "dialogRemove": "Видалити", - "extensionVerificationClose": "Close", - "bulkDownloadPlaylistsButton": "Завантажити {count} {count, plural, =1{плейлист} other{плейлистів}}", - "@bulkDownloadPlaylistsButton": { - "description": "Button label for bulk downloading selected playlists", + "notifFinalizingTrack": "Фіналізація {trackName}", + "@notifFinalizingTrack": { + "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" } } }, - "optionsAutoFallbackSubtitle": "Спробувати інші сервіси, якщо завантаження не вдається", - "@optionsAutoFallbackSubtitle": { - "description": "Subtitle for auto fallback" - }, - "extensionPatternsCount": "{count} шаблон(ів)", - "@libraryFilterLocal": { - "description": "Filter chip - show only local library items" - }, - "errorUrlNotRecognizedMessage": "Це посилання не підтримується. Переконайтеся, що URL-адреса правильна та встановлено сумісне розширення.", - "@errorUrlNotRecognizedMessage": { - "description": "Error message - URL not recognized explanation" - }, - "@extensionVerificationBrowserSubtitleExternal": { - "description": "Subtitle when external browser is preferred for extension verification" - }, - "optionsArtistTagMode": "Режим тегу виконавця", - "libraryFilterMetadataComplete": "Повні метадані", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" + "notifEmbeddingMetadata": "Вбудовування метаданих...", + "@notifEmbeddingMetadata": { + "description": "Notification body while embedding metadata into a downloaded track" }, - "@extensionsVersion": { - "description": "Extension version display", + "notifAlreadyInLibraryCount": "Вже в бібліотеці ({completed}/{total})", + "@notifAlreadyInLibraryCount": { + "description": "Notification title when track is already in library, with count", "placeholders": { - "version": { - "type": "String" + "completed": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "@downloadNetworkAnySubtitle": { - "description": "Subtitle for any-network option in picker" - }, - "optionsReplayGainSubtitleOn": "Сканування гучності та вбудовування тегів нормалізації звуку (EBU R128)", - "libraryScanning": "Сканування...", - "@libraryScanning": { - "description": "Status during scan" - }, - "cacheRefresh": "Оновити", - "@actionShuffle": { - "description": "Tooltip for shuffle playback action" - }, - "optionsEmbedLyricsSubtitle": "Save synced lyrics alongside your downloaded tracks", - "@optionsEmbedLyricsSubtitle": { - "description": "Subtitle for embed lyrics" - }, - "queueEmptyAlbumsSubtitle": "Завантажте кілька треків з альбому, щоб переглянути їх тут", - "extensionEnterValue": "Enter value", - "@settingsDownloadNetworkAny": { - "description": "Network option - use any connection" + "notifAlreadyInLibrary": "Вже в бібліотеці", + "@notifAlreadyInLibrary": { + "description": "Notification title when track is already in library" }, - "collectionLoved": "Вподобані", - "@collectionLoved": { - "description": "Custom folder for favorite tracks" + "notifDownloadCompleteCount": "Завантаження завершено ({completed}/{total})", + "@notifDownloadCompleteCount": { + "description": "Notification title when download is complete, with count", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } }, - "storeAddRepoTitle": "Додати репозиторій розширень", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" + "notifDownloadComplete": "Завантаження завершено", + "@notifDownloadComplete": { + "description": "Notification title when a single download is complete" }, - "collectionNoPlaylistsYet": "Поки що немає списків відтворення", - "@collectionNoPlaylistsYet": { - "description": "Empty state title when user has no playlists" + "notifDownloadsFinished": "Завантаження завершено ({completed} завершено, {failed} не вдалося)", + "@notifDownloadsFinished": { + "description": "Notification title when queue finishes with some failures", + "placeholders": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } }, - "libraryCleanupMissingFilesSubtitle": "Видалити записи для файлів, яких більше не існує", - "@libraryCleanupMissingFilesSubtitle": { - "description": "Subtitle for cleanup button" + "notifVerificationRequiredTitle": "Verification required", + "@notifVerificationRequiredTitle": { + "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" }, - "folderOrganizationByArtist": "За виконавцем", - "@folderOrganizationByArtist": { - "description": "Folder option - artist folders" + "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", + "@notifVerificationRequiredBody": { + "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, - "aboutTranslators": "Перекладачі", - "notifAlreadyInLibraryCount": "Вже в бібліотеці ({completed}/{total})", - "editMetadataFieldTitle": "Назва", - "@editMetadataFieldTitle": { - "description": "Chip label for title field in auto-fill selector" + "notifAllDownloadsComplete": "Усі завантаження завершено", + "@notifAllDownloadsComplete": { + "description": "Notification title when all downloads finish successfully" }, - "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", - "@downloadFilenameDescription": { - "description": "Description shown in filename format editor" + "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", + "@notifTracksDownloadedSuccess": { + "description": "Notification body for queue complete - how many tracks were downloaded", + "placeholders": { + "count": { + "type": "int" + } + } }, + "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -4882,371 +4926,430 @@ } } }, - "@libraryFolderNotExist": { - "description": "Error when folder doesn't exist" + "notifDownloadsCanceledTitle": "Downloads canceled", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" }, - "@playlistsCount": { - "description": "Playlist count display", + "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", + "@notifDownloadsCanceledBody": { + "description": "Notification body when downloads are canceled by the user", "placeholders": { "count": { "type": "int" } } }, - "@loadingSharedLink": { - "description": "Status when opening shared URL" - }, - "extensionServiceHealth": "Service health", - "@extensionServiceHealth": { - "description": "Extension capability label for service health checks" + "notifScanningLibrary": "Сканування локальної бібліотеки", + "@notifScanningLibrary": { + "description": "Notification title while scanning local library" }, - "@collectionDeletePlaylistsMessage": { - "description": "Confirmation message for deleting selected playlists", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} файлів • {percentage}%", + "@notifLibraryScanProgressWithTotal": { + "description": "Notification body for library scan progress when total is known", "placeholders": { - "count": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "percentage": { "type": "int" } } }, - "setupStorageDescription": "SpotiFLAC потребує дозволу на збереження, щоб зберегти завантажені музичні файли.", - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", - "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", - "appearanceThemeLight": "Світлий", - "queueEmptyHistorySubtitle": "Завантажені треки з’являться тут", - "@queueEmptyHistorySubtitle": { - "description": "Empty state subtitle for download history" - }, - "backupRestoreFailed": "Failed to restore backup", - "@backupRestoreFailed": { - "description": "Snackbar when restore fails" - }, - "queueFlacQueuedWithSkipped": "Додано {addedCount} треків до черги, пропущено {skippedCount}", - "@queueFlacQueuedWithSkipped": { - "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "notifLibraryScanProgressNoTotal": "{scanned} файлів скановано • {percentage}%", + "@notifLibraryScanProgressNoTotal": { + "description": "Notification body for library scan progress when total is unknown", "placeholders": { - "addedCount": { + "scanned": { "type": "int" }, - "skippedCount": { + "percentage": { "type": "int" } } }, - "@trackReplayGain": { - "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + "notifLibraryScanComplete": "Сканування бібліотеки завершено", + "@notifLibraryScanComplete": { + "description": "Notification title when library scan finishes" }, - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", - "placeholders": { + "notifLibraryScanCompleteBody": "{count} треків індексовано", + "@notifLibraryScanCompleteBody": { + "description": "Notification body for library scan complete - number of indexed tracks", + "placeholders": { "count": { "type": "int" } } }, - "setupFolderChoose": "Виберати папку для завантаження", - "dialogDownloadAllTitle": "Завантажити все", - "providerPriorityInfo": "Якщо трек недоступний у першого провайдера, додаток автоматично спробує наступного.", - "@providerPriorityInfo": { - "description": "Info tip about fallback behavior" - }, - "@dialogDiscardChanges": { - "description": "Dialog title - unsaved changes warning" - }, - "discographyNoAlbums": "Немає доступних альбомів", - "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", - "cacheNoData": "Кешованих даних немає", - "@cacheNoData": { - "description": "Label when cache category has no data" - }, - "tutorialStartDownloadSemantics": "Start download", - "@tutorialStartDownloadSemantics": { - "description": "Accessibility label for idle download button in tutorial demo" - }, - "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", - "aboutTitle": "Про нас", - "@cueSplitButton": { - "description": "Button text to start CUE splitting" - }, - "appearanceHistoryView": "Історія переглядів", - "audioAnalysisSampleRate": "Частота дискретизації", - "@settingsCache": { - "description": "Settings menu item - cache management" - }, - "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", - "cacheTrackLookup": "Відстеження кешу пошуку", - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@downloadUsePrimaryArtistOnly": { - "description": "Setting - strip featured artists from folder name" - }, - "@regionCountryIN": { - "description": "Country name for SongLink region picker" - }, - "@libraryFilterQualityLossy": { - "description": "Filter option - lossy compressed audio" + "notifLibraryScanExcluded": "{count} виключені", + "@notifLibraryScanExcluded": { + "description": "Library scan complete suffix - excluded track count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionRefreshStatus": "Refresh status", - "notifAllDownloadsComplete": "Усі завантаження завершено", - "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", - "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", - "@editMetadataFieldDateHint": { - "description": "Hint text for the edit metadata date field" + "notifLibraryScanErrors": "{count} помилок", + "@notifLibraryScanErrors": { + "description": "Library scan complete suffix - error count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "trackMetadataShare": "Поділитися", - "@trackMetadataShare": { - "description": "Action button - share track" + "notifLibraryScanFailed": "Не вдалося сканувати бібліотеку", + "@notifLibraryScanFailed": { + "description": "Notification title when library scan fails" }, - "discographyDownloadAllSubtitle": "{count} треків з {albumCount} релізів", - "settingsDonateSubtitle": "Buy the developer a coffee", - "libraryFilterDownloaded": "Завантажені", - "downloadNetworkAnySubtitle": "Use WiFi or mobile data", - "@cueSplitNoAudioFile": { - "description": "Error when CUE audio file is missing" + "notifLibraryScanCancelled": "Сканування бібліотеки скасовано", + "@notifLibraryScanCancelled": { + "description": "Notification title when library scan is cancelled by the user" }, "notifLibraryScanStopped": "Сканування зупинено до завершення.", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", - "trackCopyLyrics": "Скопіювати тексти пісень", - "@trackCopyLyrics": { - "description": "Action - copy lyrics to clipboard" - }, - "regionCountryAU": "Australia", - "downloadAlbumFolderStructure": "Структура папок альбому", - "downloadMusixmatchAuto": "Авто", - "actionDismiss": "Dismiss", - "storeFilterAll": "Усі", - "extensionsDisabled": "Вимкнені", - "@logClearLogs": { - "description": "Clear button tooltip" - }, - "dialogDownloadAllMessage": "Завантажити {count} треків?", - "@optionsEmbedLyrics": { - "description": "Embed lyrics in audio files" - }, - "tutorialLibraryTitle": "Ваша бібліотека", - "optionsCheckUpdatesSubtitle": "Повідомити, коли буде доступна нова версія", - "@optionsCheckUpdatesSubtitle": { - "description": "Subtitle for update check" + "@notifLibraryScanStopped": { + "description": "Notification body when library scan is cancelled" }, - "collectionPlaylist": "Список відтворення", - "@collectionPlaylist": { - "description": "Single playlist label" + "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", + "@notifDownloadingUpdate": { + "description": "Notification title while downloading an app update", + "placeholders": { + "version": { + "type": "String" + } + } }, - "dateMonthsAgo": "{count} місяців тому", - "@dateMonthsAgo": { - "description": "Relative date - months ago", + "notifUpdateProgress": "{received} / {total} МБ • {percentage}%", + "@notifUpdateProgress": { + "description": "Notification body showing update download progress", "placeholders": { - "count": { + "received": { + "type": "String" + }, + "total": { + "type": "String" + }, + "percentage": { "type": "int" } } }, - "@extensionRemoveButton": { - "description": "Button to uninstall extension" - }, - "collectionPlaylistRenamed": "Список відтворення перейменовано", - "collectionCreatePlaylist": "Створити плейлист", - "homeGoToAlbum": "Перейти до альбому", - "@homeGoToAlbum": { - "description": "Context menu item to navigate to the album page" - }, - "folderOrganizationByArtistSubtitle": "Окрема папка для кожного виконавця", - "@optionsClearHistory": { - "description": "Delete all download history" + "notifUpdateReady": "Оновлення готове", + "@notifUpdateReady": { + "description": "Notification title when app update download is complete" }, - "@searchAlbums": { - "description": "Search result category - albums" + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", + "@notifUpdateReadyBody": { + "description": "Notification body when app update is ready to install", + "placeholders": { + "version": { + "type": "String" + } + } }, - "@sectionDebug": { - "description": "Settings section header" + "notifUpdateFailed": "Не вдалося оновити", + "@notifUpdateFailed": { + "description": "Notification title when app update download fails" }, - "extensionsVersion": "Версія {version}", - "@navHome": { - "description": "Bottom navigation - Home tab" + "notifUpdateFailedBody": "Не вдалося завантажити оновлення. Спробуйте пізніше.", + "@notifUpdateFailedBody": { + "description": "Notification body when app update download fails" }, - "@editMetadataFieldDate": { - "description": "Chip label for date field in auto-fill selector" + "searchTracks": "Tracks", + "@searchTracks": { + "description": "Search filter label - tracks" }, - "downloadUsePrimaryArtistOnly": "Тільки основний виконавець для папок", - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", - "@setupStorageGranted": { - "description": "Success message for storage permission" + "homeSearchHintDefault": "Paste supported URL or search...", + "@homeSearchHintDefault": { + "description": "Default placeholder for the main search field on Home" }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", - "a11ySelectAlbum": "Select album {albumName}", - "@a11ySelectAlbum": { - "description": "Accessibility label for selecting an album", + "homeSearchHintProvider": "Search with {providerName}...", + "@homeSearchHintProvider": { + "description": "Placeholder for the main search field when a provider is selected", "placeholders": { - "albumName": { + "providerName": { "type": "String" } } }, - "aboutMobileSource": "Мобільний вихідний код", - "@aboutMobileSource": { - "description": "Link to mobile GitHub repo" + "homeImportCsvTooltip": "Import playlist (CSV, M3U)", + "@homeImportCsvTooltip": { + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, - "@extensionCustomUrlHandling": { - "description": "Extension detail section title for custom URL handling" + "homeChangeSearchProviderTooltip": "Change search provider", + "@homeChangeSearchProviderTooltip": { + "description": "Tooltip for the Home search provider picker" }, - "@downloadMusixmatchLanguageAuto": { - "description": "Subtitle when no language is set" + "actionPaste": "Paste", + "@actionPaste": { + "description": "Generic action - paste from clipboard" }, - "@cancelDownloadKeep": { - "description": "Dialog button - keep the active download (do not cancel)" + "tutorialSearchHint": "Paste or search...", + "@tutorialSearchHint": { + "description": "Placeholder shown in the tutorial search demo" }, - "libraryFilterSource": "Джерело", - "@libraryFilterSource": { - "description": "Filter section - source type" + "tutorialDownloadCompletedSemantics": "Download completed", + "@tutorialDownloadCompletedSemantics": { + "description": "Accessibility label for completed download state in tutorial demo" }, - "sectionStorageAccess": "Доступ до сховища", - "logFilterBySeverity": "Фільтрувати журнали за рівнем серйозності", - "libraryFolderNotExist": "Вибрана папка не існує", - "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", - "albumFolderArtistAlbum": "Артист / Альбом", - "@albumFolderArtistAlbum": { - "description": "Album folder option" + "tutorialDownloadInProgressSemantics": "Download in progress", + "@tutorialDownloadInProgressSemantics": { + "description": "Accessibility label for active download state in tutorial demo" }, - "allFilesAccessDeniedMessage": "У дозволі відмовлено. Будь ласка, увімкніть «Доступ до всіх файлів» вручну в налаштуваннях системи.", - "@allFilesAccessDeniedMessage": { - "description": "Message when permission is permanently denied" + "tutorialStartDownloadSemantics": "Start download", + "@tutorialStartDownloadSemantics": { + "description": "Accessibility label for idle download button in tutorial demo" }, - "editMetadataSelectEmpty": "Порожні (без мета даних)", - "settingsLocalLibrarySubtitle": "Сканування музики та виявлення дублікатів", - "@settingsAutoExportFailed": { - "description": "Setting toggle for auto-export" + "optionsEmbedMetadata": "Embed Metadata", + "@optionsEmbedMetadata": { + "description": "Settings toggle title for writing metadata into downloaded files" }, - "cacheCleanupUnusedSubtitle": "Видалити історію утрачених завантажень файлів та відсутні записи бібліотеки", - "@tutorialSettingsTitle": { - "description": "Tutorial settings page title" + "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", + "@optionsEmbedMetadataSubtitleOn": { + "description": "Subtitle when metadata embedding is enabled" }, - "libraryFilterMetadataMissingGenre": "Відсутній жанр", - "@appearanceSelectAccentColor": { - "description": "Accessibility label for picking an accent color", - "placeholders": { - "hex": { - "type": "String" - } - } + "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", + "@optionsEmbedMetadataSubtitleOff": { + "description": "Subtitle when metadata embedding is disabled" }, - "setupFolderDescription": "Виберіть папку, де буде збережено завантажену музику.", - "extensionDetailsTags": "Tags", - "unknownArtist": "Unknown Artist", - "trackFetchOnlineLyrics": "Отримати з Інтернету", - "snackbarNoActionDefined": "Для цієї кнопки не визначено жодної дії", - "@snackbarNoActionDefined": { - "description": "Snackbar when an extension button has no action configured" + "trackCoverNoEmbeddedArt": "No embedded album art found", + "@trackCoverNoEmbeddedArt": { + "description": "Message shown when a track file has no embedded cover art" }, - "downloadAllCount": "Завантажити все ({count})", - "@downloadAllCount": { - "description": "Download all button with count", + "trackCoverReplace": "Replace Cover", + "@trackCoverReplace": { + "description": "Button label for replacing selected cover art" + }, + "trackCoverPick": "Pick Cover", + "@trackCoverPick": { + "description": "Button label for selecting cover art" + }, + "trackCoverClearSelected": "Clear selected cover", + "@trackCoverClearSelected": { + "description": "Tooltip for clearing the newly selected cover art" + }, + "trackCoverCurrent": "Current cover", + "@trackCoverCurrent": { + "description": "Label for the currently embedded cover preview" + }, + "trackCoverSelected": "Selected cover", + "@trackCoverSelected": { + "description": "Label for the newly selected cover preview" + }, + "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", + "@trackCoverReplaceNotice": { + "description": "Notice shown when a new cover has been selected but not saved yet" + }, + "trackCoverResolution": "Cover resolution", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" + }, + "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" + }, + "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", + "@trackCoverResizeFailed": { + "description": "Error shown when resizing cover art before saving metadata fails" + }, + "actionStop": "Stop", + "@actionStop": { + "description": "Generic action - stop" + }, + "queueFinalizingDownload": "Finalizing download", + "@queueFinalizingDownload": { + "description": "Accessibility label for a queue item that is finalizing" + }, + "queueDownloadNext": "Download next", + "@queueDownloadNext": { + "description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it" + }, + "queueMoveUp": "Move up", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" + }, + "queueMoveDown": "Move down", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" + }, + "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" + }, + "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" + }, + "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" + }, + "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" + }, + "nowPlayingRepeatOff": "Repeat off", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" + }, + "nowPlayingRepeatAll": "Repeat all", + "@nowPlayingRepeatAll": { + "description": "Repeat toggle tooltip when the whole queue repeats" + }, + "nowPlayingRepeatOne": "Repeat one", + "@nowPlayingRepeatOne": { + "description": "Repeat toggle tooltip when the current track repeats" + }, + "queueNetworkFailedOffline": "{count} downloads failed while offline", + "@queueNetworkFailedOffline": { + "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", "placeholders": { "count": { "type": "int" } } }, - "downloadedAlbumDiscHeader": "Диск {discNumber}", - "@backupInvalidFile": { - "description": "Snackbar when the chosen file is not a valid backup" + "queueDownloadedFileMissing": "Downloaded file missing", + "@queueDownloadedFileMissing": { + "description": "Accessibility label when a downloaded file is missing from disk" }, - "@extensionHooksAvailable": { - "description": "Post-processing hooks count", + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." + }, + "queueDownloadCompleted": "Download completed", + "@queueDownloadCompleted": { + "description": "Accessibility label for completed download state in queue" + }, + "queueRateLimitTitle": "Service rate limited", + "@queueRateLimitTitle": { + "description": "Title shown on a failed queue item when the download service rate limits requests" + }, + "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", + "@queueRateLimitMessage": { + "description": "Explanation shown on a failed queue item when the download service rate limits requests" + }, + "appearanceSelectAccentColor": "Select accent color {hex}", + "@appearanceSelectAccentColor": { + "description": "Accessibility label for picking an accent color", "placeholders": { - "count": { - "type": "int" + "hex": { + "type": "String" } } }, - "@logIssueTrackNotFoundSuggestion": { - "description": "Diagnostic badge suggestion when a track is unavailable" + "logAutoScrollOn": "Auto-scroll ON", + "@logAutoScrollOn": { + "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "@snackbarFileNotFound": { - "description": "Snackbar - file doesn't exist" + "logAutoScrollOff": "Auto-scroll OFF", + "@logAutoScrollOff": { + "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "extensionHealthOnline": "Online", - "@extensionHealthOnline": { - "description": "Extension service health status - online" + "logCopyLogs": "Copy logs", + "@logCopyLogs": { + "description": "Tooltip for copying logs" }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", - "trackOptionRemoveFromWishlist": "Видалити зі списку бажань", - "extensionsFallbackTitle": "Резервні розширення", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" + "logClearSearch": "Clear search", + "@logClearSearch": { + "description": "Tooltip for clearing the log search field" }, - "metadataSaveFailedFfmpeg": "Не вдалося зберегти метадані через FFmpeg", - "@albumFolderAlbumOnly": { - "description": "Album folder option" + "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", + "@logIssueIspBlockingLabel": { + "description": "Diagnostic badge label when ISP blocking is detected" }, - "@albumFolderYearAlbumSubtitle": { - "description": "Folder structure example" + "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", + "@logIssueIspBlockingDescription": { + "description": "Diagnostic badge description for ISP blocking" }, - "downloadedAlbumDeleteSelected": "Видалити вибране", - "selectionSelectPlaylistsToDelete": "Вибрати списки відтворення для видалення", - "@selectionSelectPlaylistsToDelete": { - "description": "Hint shown when no playlists are selected for deletion" + "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", + "@logIssueIspBlockingSuggestion": { + "description": "Diagnostic badge suggestion for ISP blocking" }, - "storeAddRepoDescription": "Введіть URL-адресу репозиторію GitHub, яка містить файл registry.json, для перегляду та встановлення розширень.", - "appearanceThemeDark": "Темний", - "downloadedAlbumTapToSelect": "Натисніть на треки, щоб вибрати", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } + "logIssueRateLimitedLabel": "RATE LIMITED", + "@logIssueRateLimitedLabel": { + "description": "Diagnostic badge label when the service rate limits requests" }, - "@backupRestored": { - "description": "Snackbar after a successful restore" + "logIssueRateLimitedDescription": "Too many requests to the service", + "@logIssueRateLimitedDescription": { + "description": "Diagnostic badge description for rate limiting" }, - "nowPlayingLibraryEmpty": "Your library is empty", - "@nowPlayingLibraryEmpty": { - "description": "Snackbar when shuffle library is requested but library has no tracks" + "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", + "@logIssueRateLimitedSuggestion": { + "description": "Diagnostic badge suggestion for rate limiting" }, - "editMetadataAutoFillNoResults": "Відповідних метаданих в Інтернеті не знайдено", - "updateDownloading": "Завантаження...", - "trackLyricsSource": "Source: {source}", - "logFilterLevel": "Рівень", - "logNoLogsYet": "Журналів поки що немає", - "cacheSizeOnly": "{size}", - "@cacheSizeOnly": { - "description": "Cache size only", - "placeholders": { - "size": { - "type": "String" - } - } + "logIssueNetworkErrorLabel": "NETWORK ERROR", + "@logIssueNetworkErrorLabel": { + "description": "Diagnostic badge label for generic network errors" }, - "trackOpenInService": "Open in {serviceName}", - "@trackOpenInService": { - "description": "Button label to open a track in a named music service", + "logIssueNetworkErrorDescription": "Connection issues detected", + "@logIssueNetworkErrorDescription": { + "description": "Diagnostic badge description for generic network errors" + }, + "logIssueNetworkErrorSuggestion": "Check your internet connection", + "@logIssueNetworkErrorSuggestion": { + "description": "Diagnostic badge suggestion for generic network errors" + }, + "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", + "@logIssueTrackNotFoundLabel": { + "description": "Diagnostic badge label when a track is unavailable" + }, + "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", + "@logIssueTrackNotFoundDescription": { + "description": "Diagnostic badge description when a track is unavailable" + }, + "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", + "@logIssueTrackNotFoundSuggestion": { + "description": "Diagnostic badge suggestion when a track is unavailable" + }, + "clickableLookingUpArtist": "Looking up artist...", + "@clickableLookingUpArtist": { + "description": "Snackbar shown while clickable artist metadata is being resolved" + }, + "clickableInformationUnavailable": "{type} information not available", + "@clickableInformationUnavailable": { + "description": "Snackbar shown when clickable metadata cannot open a destination", "placeholders": { - "serviceName": { + "type": { "type": "String" } } }, - "@cacheLibraryCoverDesc": { - "description": "Description of what library cover cache contains" + "extensionDetailsTags": "Tags", + "@extensionDetailsTags": { + "description": "Section title for extension tags" }, - "libraryClearConfirmMessage": "Це видалить усі скановані треки з вашої бібліотеки. Ваші фактичні музичні файли не будуть видалені.", - "@dialogImportPlaylistMessage": { - "description": "Dialog message - import playlist confirmation", + "extensionDetailsInformation": "Information", + "@extensionDetailsInformation": { + "description": "Section title for extension metadata information" + }, + "extensionUtilityFunctions": "Utility Functions", + "@extensionUtilityFunctions": { + "description": "Capability label for utility-only extensions" + }, + "actionDismiss": "Dismiss", + "@actionDismiss": { + "description": "Generic action - dismiss" + }, + "setupChangeFolderTooltip": "Change folder", + "@setupChangeFolderTooltip": { + "description": "Tooltip for editing the selected download folder" + }, + "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", + "@a11yOpenTrackByArtist": { + "description": "Accessibility label for opening a track item", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" } } }, - "extensionsHomeFeedAuto": "Авто", - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "dateToday": "Сьогодні", "a11yOpenItem": "Open {itemType} {name}", "@a11yOpenItem": { "description": "Accessibility label for opening a generic item", @@ -5259,844 +5362,1187 @@ } } }, - "audioAnalysisBitDepth": "Глибина бітів", - "editMetadataFieldTrackTotal": "Track Total", - "@editMetadataFieldTrackTotal": { - "description": "Label for total tracks field in the edit metadata sheet" - }, - "@editMetadataFieldDiscTotal": { - "description": "Label for total discs field in the edit metadata sheet" - }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", - "@notifDownloadingUpdate": { - "description": "Notification title while downloading an app update", + "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", + "@a11yOpenItemCount": { + "description": "Accessibility label for opening a grouped item with count", "placeholders": { - "version": { + "title": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@csvImportTracks": { - "description": "Label shown in quality picker for CSV import", + "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", + "@a11yOpenAlbumByArtistTrackCount": { + "description": "Accessibility label for opening an album item with track count", "placeholders": { - "count": { + "albumName": { + "type": "String" + }, + "artistName": { + "type": "String" + }, + "trackCount": { "type": "int" } } }, - "trackEditMetadata": "Редагувати метадані", - "discographyDownloadAll": "Завантажити все", - "@discographyDownloadAll": { - "description": "Option - download entire discography" - }, - "@editMetadataFieldAlbum": { - "description": "Chip label for album field in auto-fill selector" - }, - "albumFolderArtistAlbumSubtitle": "Альбоми/Ім'я артиста/Назва альбому/", - "extensionHealthServiceUnknown": "Service status unknown", - "navHome": "Головна", - "queueDownloadStarting": "Starting...", - "@dialogRemoveExtension": { - "description": "Dialog title - uninstall extension" - }, - "notifLibraryScanProgressNoTotal": "{scanned} файлів скановано • {percentage}%", - "@appearanceAmoledDark": { - "description": "Theme option - pure black" - }, - "qualityHiResFlac": "FLAC високої роздільної здатності", - "selectionSelected": "Вибрано {count}", - "extensionDetailsInformation": "Information", - "@extensionDetailsInformation": { - "description": "Section title for extension metadata information" - }, - "discographyDownload": "Завантажити дискографію", - "editMetadataFieldCopyright": "Авторське право", - "@setupOpenSettings": { - "description": "Button to open system settings" - }, - "libraryFilterSort": "Сортувати", - "cacheLibraryCoverDesc": "Обкладинку витягнуто з локальних музичних файлів. Буде повторно витягнуто під час наступного сканування.", - "dialogRemoveExtension": "Видалити розширення", - "backupExportSectionTitle": "Create backup", - "downloadEmbedLyricsDisabled": "Enable metadata embedding first", - "openInOtherServices": "Open in Other Services", - "actionSelectAll": "Вибрати все", - "settingsDownloadNetworkSubtitle": "Вибрати мережу для завантажень. Якщо встановлено значення «Тільки Wi-Fi», завантаження призупиняться через мобільні дані.", - "downloadFolderOrganization": "Організація папок", - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", - "@tutorialWelcomeTip2": { - "description": "Tutorial welcome tip 2" - }, - "selectionAllSelected": "Усі треки вибрано", - "@selectionAllSelected": { - "description": "Status - all items selected" - }, - "settingsLogsSubtitle": "Перегляд журналів програми для налагодження", - "albumFolderYearAlbumSubtitle": "Альбоми/[2005] Назва Альбому/", - "cancelDownloadKeep": "Зберегти", - "optionsDetailedLoggingOn": "Ведеться детальний журнал", - "safMigrationMessage2": "Будь ласка, виберіть папку завантажень ще раз, щоб перейти до нової системи зберігання.", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" + "a11yTrackByArtist": "{trackName} by {artistName}", + "@a11yTrackByArtist": { + "description": "Accessibility label for a queue or list track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "regionCountryJP": "Japan", - "notifUpdateFailed": "Не вдалося оновити", - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", - "@trackLyricsSaved": { - "description": "Snackbar after lyrics saved", + "a11ySelectAlbum": "Select album {albumName}", + "@a11ySelectAlbum": { + "description": "Accessibility label for selecting an album", "placeholders": { - "fileName": { + "albumName": { "type": "String" } } }, - "downloadLocationSubtitle": "Choose where to save your downloaded tracks", - "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", - "lyricsProvidersDisabledSection": "Вимкнено ({count})", - "@dateDaysAgo": { - "description": "Relative date - days ago", + "a11yOpenAlbum": "Open album {albumName}", + "@a11yOpenAlbum": { + "description": "Accessibility label for opening an album", "placeholders": { - "count": { - "type": "int" + "albumName": { + "type": "String" } } }, - "librarySourceLocal": "Локальні", - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", - "sectionService": "Сервіс", - "lyricsProviderQqMusicDesc": "QQ Music (добре для китайських пісень, через проксі)", - "@lyricsProviderQqMusicDesc": { - "description": "Description for QQ Music provider" + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" }, - "cacheCleanupUnusedDesc": "Видалити історію втрачених завантажень та записи бібліотеки для відсутніх файлів.", - "selectionTapPlaylistsToSelect": "Торкніться списків відтворення, щоб вибрати", - "notifUpdateFailedBody": "Не вдалося завантажити оновлення. Спробуйте пізніше.", - "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", - "artistPopular": "Популярні", - "extensionRemoveButton": "Видалити розширення", - "allFilesAccessEnabledSubtitle": "Можна записувати в будь-яку папку", - "@allFilesAccessEnabledSubtitle": { - "description": "Subtitle when all files access is enabled" + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" }, - "extensionsSearchProvider": "Постачальник пошуку", - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", - "selectionBatchConvertConfirmTitle": "Пакетне конвертування", - "extensionMetadataProvider": "Постачальник метаданих", - "queueDownloadedFileMissing": "Downloaded file missing", - "logClearLogs": "Очистити журнали", - "@downloadAppleQqMultiPerson": { - "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", - "@tutorialWelcomeTip1": { - "description": "Tutorial welcome tip 1" + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" }, - "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", - "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", - "@regionCountryUS": { - "description": "Country name for SongLink region picker" + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" }, - "trackArtist": "Артист", - "extensionCustomUrlHandling": "Custom URL Handling", - "appearanceDynamicColorSubtitle": "Використати кольори зі своїх шпалер", - "@appearanceDynamicColorSubtitle": { - "description": "Subtitle for dynamic color" + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" }, - "searchSortDefault": "За замовчуванням", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" + "settingsApp": "App", + "@settingsApp": { + "description": "Settings menu item - app settings" }, - "albumFolderStructureDescription": "Choose how album folders are structured", - "@albumFolderStructureDescription": { - "description": "Album folder structure picker description" + "settingsAppSubtitle": "Updates, data, extension repo, debug", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" }, - "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", - "@libraryBuiltInPreviewPlayerSubtitle": { - "description": "Subtitle for built-in preview player option" + "sectionMetadataProviders": "Providers", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" }, - "storageModeAppFolder": "App Folder (Recommended)", - "@actionPause": { - "description": "Action button - pause download" + "sectionDuplicates": "Duplicates", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" }, - "actionPaste": "Paste", - "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", - "downloadNativeWorker": "Native download worker", - "releaseTypeEp": "EP", - "@releaseTypeEp": { - "description": "Badge label for EP releases" + "sectionLyricsProviderOptions": "Provider Options", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", - "cacheRefreshStats": "Оновити статистику", - "collectionPlaylistChangeCover": "Змінити зображення обкладинки", - "@collectionPlaylistChangeCover": { - "description": "Bottom sheet action to pick a custom cover image for a playlist" + "metadataProvidersTitle": "Metadata Provider Priority", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" }, - "optionsClearHistory": "Очистити історію завантажень", - "trackGenre": "Жанр", - "snackbarSelectedPlaylistsEmpty": "Вибрані списки відтворення не містять треків", - "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", - "downloadNeteaseIncludeRomanization": "Netease: Включити романізацію", - "libraryFilterMetadataMissingArtist": "Missing artist", - "extensionsNoCustomSearch": "Без розширень із користувацьким пошуком", - "@extensionsTitle": { - "description": "Extensions page title" + "metadataProvidersSubtitle": "Drag to set search and metadata source order", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" }, - "extensionDownloadProvider": "Постачальник завантажень", - "@extensionDownloadProvider": { - "description": "Capability - provides downloads" + "downloadDeduplication": "Skip Duplicate Downloads", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" }, - "lyricsMode": "Режим тексту пісні", - "aboutReportIssueSubtitle": "Повідомити про будь-які проблеми, з якими ви зіткнулися", - "@downloadSeparateSinglesFolder": { - "description": "Setting - separate folder for singles" + "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" }, - "appearanceAmoledDark": "Темний AMOLED", - "logIssueNetworkErrorDescription": "Connection issues detected", - "folderOrganizationByArtistAlbumSubtitle": "Вкладені папки для виконавця та альбому", - "@libraryForceFullScanSubtitle": { - "description": "Subtitle for force full scan button" + "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", + "@downloadDeduplicationWithQualityVariants": { + "description": "Deduplication subtitle when separate quality versions are allowed" }, - "setupGrantPermission": "Надати дозвіл", - "lyricsProvidersDescription": "Увімкнення, вимкнення та зміна порядку джерел текстів пісень. Постачальники перевірятимуть зверху вниз, доки не буде знайдено текст пісні.", - "dateDaysAgo": "{count} днів тому", - "extensionsHomeFeedDescription": "Виберіть, яке розширення відображатиме домашню стрічку на головному екрані", - "downloadLossyMp3Subtitle": "Найкраща сумісність, ~10 МБ на доріжку", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" }, - "nowPlayingDetails": "Details", - "collectionWishlistEmptyTitle": "Список бажань порожній", - "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", - "@snackbarExtensionUpdatedVersion": { - "description": "Snackbar after updating an extension from the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - }, - "version": { - "type": "String" - } - } + "downloadQualityVariants": "Allow different quality versions", + "@downloadQualityVariants": { + "description": "Setting to retain multiple quality versions of the same track" }, - "extensionHealthServiceDegraded": "Service degraded", - "selectionConvertNoConvertible": "Трансформованих треків не вибрано", - "setupStorageGranted": "Дозвіл на зберігання надано!", - "downloadAllowLocalNetwork": "Allow Local Network Access", - "nowPlayingNoLyrics": "No lyrics in this file", - "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", - "@selectionDeleteTracksCount": { - "description": "Button label for deleting selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", + "@downloadQualityVariantsDescription": { + "description": "Description for retaining multiple quality versions" }, - "@libraryForceFullScan": { - "description": "Button to force a complete rescan of library" + "trackOptionDownloadQualityVariant": "Download another quality", + "@trackOptionDownloadQualityVariant": { + "description": "Track menu action to download another quality version" }, - "notifLibraryScanExcluded": "{count} виключені", - "@aboutPaxsenixSubtitle": { - "description": "Subtitle for Paxsenix special thanks entry on the about page" + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" }, - "setupChangeFolderTooltip": "Change folder", - "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", - "@logIssueIspBlockingDescription": { - "description": "Diagnostic badge description for ISP blocking" + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" }, - "libraryClear": "Очистити бібліотеку", - "collectionRemoveFromPlaylist": "Видалити зі списку відтворення", - "@collectionRemoveFromPlaylist": { - "description": "Tooltip for removing track from playlist" + "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", + "@editMetadataFieldDateHint": { + "description": "Hint text for the edit metadata date field" }, - "backupIncludeSecrets": "Include extension credentials", - "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", - "storeCategoryMetadata": "Metadata", - "@trackLyricsEmbedded": { - "description": "Snackbar - lyrics saved to file" + "editMetadataFieldTrackTotal": "Track Total", + "@editMetadataFieldTrackTotal": { + "description": "Label for total tracks field in the edit metadata sheet" }, "editMetadataFieldDiscTotal": "Disc Total", - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", - "playlistsCount": "{count, plural, =1{1 плейлист} other{{count} плейлистів}}", - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" + "@editMetadataFieldDiscTotal": { + "description": "Label for total discs field in the edit metadata sheet" }, - "libraryFilterLocal": "Локальні", - "tutorialDownloadInProgressSemantics": "Download in progress", - "searchSortDurationLong": "Тривалість (найдовша)", - "@appearanceLanguage": { - "description": "Language setting title" + "editMetadataFieldComposer": "Composer", + "@editMetadataFieldComposer": { + "description": "Label for composer field in the edit metadata sheet" }, - "libraryAbout": "Про локальну бібліотеку", - "@libraryAbout": { - "description": "Section header for about info" + "editMetadataFieldComment": "Comment", + "@editMetadataFieldComment": { + "description": "Label for comment field in the edit metadata sheet" }, - "cueSplitNoAudioFile": "Аудіофайл для цього аркуша CUE не знайдено", - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", - "appearanceSelectAccentColor": "Select accent color {hex}", - "@homeAlbumInfoUnavailable": { - "description": "Snackbar when album info cannot be loaded" + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" }, - "trackReplayGain": "Rescan ReplayGain", - "downloadSeparateSinglesFolder": "Окрема папка для синглів", - "trackAlbumArtist": "Виконавець альбому", - "qualityFlacLossless": "FLAC без втрат", - "@extensionVerificationHelpMessageWaiting": { - "description": "Dialog message when verification may need manual browser help" + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" }, - "tutorialSettingsTitle": "Налаштуйте свій досвід", - "extensionActionFailed": "Action failed", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", - "trackCoverNoEmbeddedArt": "No embedded album art found", - "@trackCoverNoEmbeddedArt": { - "description": "Message shown when a track file has no embedded cover art" + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", - "setupStorageAccessMessageAndroid11": "Для збереження файлів у вибрану папку завантажень для Android 11+ потрібен дозвіл «Доступ до всіх файлів».", - "notifDownloadsFinished": "Завантаження завершено ({completed} завершено, {failed} не вдалося)", - "notifLibraryScanProgressWithTotal": "{scanned}/{total} файлів • {percentage}%", - "optionsPrimaryProvider": "Основний постачальник", - "@optionsPrimaryProvider": { - "description": "Main search provider setting" + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" }, - "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", - "collectionAddedToLoved": "\"{trackName}\" додано до списку улюблених", - "albumFolderArtistAlbumFlat": "Виконавець / Альбом (сингли без альбомів)", - "homeAlbumInfoUnavailable": "Інформація про альбом недоступна", - "settingsLyrics": "Lyrics", - "extensionVerificationBrowserExternal": "External", - "regionCountryIN": "India", - "extensionHealthUnknown": "Unknown", - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", - "settingsAutoExportFailed": "Автоматичний експорт невдалих завантажень", - "logFilterSection": "Фільтр", - "dialogDiscardChanges": "Відхилити зміни?", - "@qualityHiResFlacSubtitle": { - "description": "Technical spec for hi-res" + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" }, - "searchTracks": "Tracks", - "searchAlbums": "Альбоми", - "trackConvertFormat": "Конвертувати формат", - "metadataProviderPriorityTitle": "Пріоритет метаданих", - "libraryFolderHint": "Натисніть, щоб вибрати папку", - "downloadedAlbumDeleteMessage": "Видалити {count} {count, plural, =1{трек} other{треків}} з цього альбому?\n\nЦе також призведе до видалення файлів зі сховища.", - "@downloadedAlbumDeleteMessage": { - "description": "Delete confirmation with count", + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, + "editMetadataAdvanced": "Advanced", + "@editMetadataAdvanced": { + "description": "Expandable section label for advanced metadata fields" + }, + "libraryFilterMetadataMissingTrackNumber": "Missing track number", + "@libraryFilterMetadataMissingTrackNumber": { + "description": "Filter option - items missing track number" + }, + "libraryFilterMetadataMissingDiscNumber": "Missing disc number", + "@libraryFilterMetadataMissingDiscNumber": { + "description": "Filter option - items missing disc number" + }, + "libraryFilterMetadataMissingArtist": "Missing artist", + "@libraryFilterMetadataMissingArtist": { + "description": "Filter option - items missing artist" + }, + "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", + "@libraryFilterMetadataIncorrectIsrcFormat": { + "description": "Filter option - items with an invalid ISRC format" + }, + "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, + "libraryFilterMetadataMissingLabel": "Missing label", + "@libraryFilterMetadataMissingLabel": { + "description": "Filter option - items missing record label" + }, + "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", + "@collectionDeletePlaylistsMessage": { + "description": "Confirmation message for deleting selected playlists", "placeholders": { "count": { "type": "int" } } }, - "trackAlbum": "Альбом", - "updateAvailable": "Доступне оновлення", - "optionsEmbedLyrics": "Вбудований текст пісні", - "trackReEnrichProgress": "Повторне збагачення метаданих...", - "@trackReEnrichProgress": { - "description": "Snackbar while re-enriching metadata" - }, - "audioAnalysisPeak": "Пік", - "@audioAnalysisPeak": { - "description": "Peak amplitude metric label" - }, - "optionsExtensionStoreSubtitle": "Показати вкладку «Репозиторій» у навігації", - "settingsTitle": "Налаштування", - "@settingsAbout": { - "description": "Settings section - app info" + "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", + "@collectionPlaylistsDeleted": { + "description": "Snackbar after deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheExploreFeed": "Огляд кешу стрічки", - "@dialogDownloadPlaylistsMessage": { - "description": "Dialog message for bulk playlist download confirmation", + "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", + "@collectionAddedTracksToPlaylist": { + "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { - "trackCount": { + "count": { "type": "int" }, - "playlistCount": { - "type": "int" + "playlistName": { + "type": "String" } } }, - "downloadedAlbumSelectedCount": "Вибрано {count}", - "downloadAskQualitySubtitle": "Показувати вікно вибору якості для кожного завантаження", - "filenameShowAdvancedTags": "Показати розширені теги", - "@filenameShowAdvancedTags": { - "description": "Toggle label for showing advanced filename tags" - }, - "@editMetadataFieldComment": { - "description": "Label for comment field in the edit metadata sheet" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", - "cacheLibraryCover": "Кеш бібліотеки обкладинок", - "actionShuffle": "Shuffle", - "backupCreated": "Backup created", - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "actionCreate": "Створити", - "snackbarAddedToQueueGeneric": "Added to queue", - "downloadedAlbumDownloadedCount": "{count} завантажено", - "snackbarLoadingCueSheet": "Завантаження аркуша CUE...", - "@trackCoverClearSelected": { - "description": "Tooltip for clearing the newly selected cover art" - }, - "aboutOriginalCreator": "Творець оригінального SpotiFLAC", - "a11yTrackByArtist": "{trackName} by {artistName}", - "audioAnalysisDynamicRange": "Динамічний діапазон", - "homeChangeSearchProviderTooltip": "Change search provider", - "loadingSharedLink": "Завантаження спільного посилання...", - "lyricsModeEmbedSubtitle": "Тексти пісень зберігаються в метаданих FLAC", - "setupNotificationBackgroundDescription": "Отримуйте сповіщення про прогрес та завершення завантаження. Це допомагає відстежувати завантаження, коли програма працює у фоновому режимі.", - "snackbarViewQueue": "Переглянути чергу", - "@audioAnalysisDuration": { - "description": "Duration metric label" - }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", - "backupRestored": "Backup restored successfully", - "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", - "@trackConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless conversion of a single file", + "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", + "@collectionAddedTracksToPlaylistWithExisting": { + "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { - "sourceFormat": { - "type": "String" + "count": { + "type": "int" }, - "targetFormat": { + "playlistName": { "type": "String" }, - "quality": { - "type": "String" + "alreadyCount": { + "type": "int" } } }, - "discographySelectAlbumsSubtitle": "Виберіть конкретні альбоми або сингли", - "@discographySelectAlbumsSubtitle": { - "description": "Subtitle for select albums option" - }, - "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", - "errorUrlFetchFailed": "Не вдалося завантажити вміст за цим посиланням. Спробуйте ще раз.", - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", - "dialogSave": "Зберегти", - "trackReEnrichSearching": "Пошук метаданих в Інтернеті...", - "regionCountryUS": "United States", - "audioAnalysisDescription": "Перевірити якість без втрат за допомогою спектрального аналізу", - "downloadFilenameFormat": "Формат імені файлу", - "cueSplitTitle": "Розділений аркуш CUE", - "settingsAppSubtitle": "Updates, data, extension repo, debug", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "@setupPermissionRequiredMessage": { - "description": "Generic permission required message", + "itemCount": "{count} {count, plural, =1{item} other{items}}", + "@itemCount": { + "description": "Generic item count label", "placeholders": { - "permissionType": { - "type": "String" + "count": { + "type": "int" } } }, - "errorMissingExtensionSource": "Не вдається завантажити {item}: відсутній вихідний код розширення", - "albumFolderAlbumOnlySubtitle": "Альбоми/Назва Альбому/", - "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", - "extensionVerificationHelpTitleManual": "Open verification manually", - "dialogDiscard": "Відхилити", - "storageModeSaf": "Custom Folder (SAF)", - "errorRateLimited": "Обмежений тариф", - "downloadSelectQuality": "Вибрати якість", - "dialogDownloadPlaylistsMessage": "Завантажити {trackCount} {trackCount, plural, =1{трек} other{треків}} з {playlistCount} {playlistCount, plural, =1{плейлист} other{плейлистів}}?", - "collectionFoldersTitle": "Мої папки", - "progressFetchingMetadata": "Отримання метаданих... {current}/{total}", - "settingsDownloadNetworkAny": "Wi-Fi + мобільний інтернет", - "audioAnalysisDuration": "Тривалість", - "audioAnalysisAnalyzing": "Аналіз аудіо...", - "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", - "editMetadataFieldDiscNum": "Номер диска", - "@editMetadataFieldDiscNum": { - "description": "Chip label for disc number field in auto-fill selector" - }, - "@noTracksFoundForAlbum": { - "description": "Empty state message when an album has no tracks" - }, - "previewPlay": "Play preview", - "setupPermissionRequiredMessage": "{permissionType} Для найкращого досвіду потрібен дозвіл. Ви можете змінити це пізніше в налаштуваннях.", - "aboutVersion": "Версія", - "qualityHiResFlacSubtitle": "24-біт / до 96 кГц", - "audioAnalysisSamples": "Семпли", - "libraryFilterQualityHiRes": "Висока роздільна здатність (24 біти)", - "sectionMetadataProviders": "Providers", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "trackCopyright": "Авторське право", - "libraryForceFullScanSubtitle": "Пересканувати всі файли, ігноруючи кеш", - "trackCopiedToClipboard": "Скопійовано в буфер обміну", - "optionsEmbedMetadata": "Embed Metadata", - "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", - "@collectionAddedTracksToPlaylistWithExisting": { - "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", + "@trackReEnrichSuccessWithFailures": { + "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", "placeholders": { - "count": { + "successCount": { "type": "int" }, - "playlistName": { - "type": "String" + "total": { + "type": "int" }, - "alreadyCount": { + "failedCount": { "type": "int" } } }, - "storeCategoryIntegration": "Integration", - "storeClearFilters": "Очистити фільтри", - "navSettings": "Налаштування", - "@homeRecent": { - "description": "Section header for recent searches" + "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "@selectionDeleteTracksCount": { + "description": "Button label for deleting selected tracks", + "placeholders": { + "count": { + "type": "int" + } + } }, - "sectionApp": "Додаток", - "@sectionLanguage": { - "description": "Settings section header for language" + "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", + "@queueDownloadSpeedStatus": { + "description": "Queue status while downloading with speed", + "placeholders": { + "speed": { + "type": "String" + } + } }, - "downloadFilterContributingDisabled": "Full Album Artist string used", - "albumFolderArtistAlbumSinglesSubtitle": "Виконавець/Альбом/ та Виконавець/Сингли/", - "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", - "lyricsProvidersSaved": "Пріоритет постачальника текстів пісень збережено", - "@trackReplayGainFailed": { - "description": "Snackbar message when ReplayGain scan/write fails" + "queueDownloadStarting": "Starting...", + "queueCheckingDownloadSession": "Checking download session...", + "queueResolvingDownloadMetadata": "Resolving track metadata...", + "queueResolvingDownloadStream": "Preparing audio stream...", + "queueWaitingForVerification": "Waiting for verification...", + "queueResumingAfterVerification": "Resuming after verification...", + "@queueDownloadStarting": { + "description": "Queue status before download progress is available" }, - "trackTrackName": "Назва треку", - "homeRecent": "Нещодавні", - "recentEmpty": "Поки що немає нещодавніх записів", - "cacheClearAll": "Очистити весь кеш", - "trackReEnrichFieldReleaseInfo": "Дата та ISRC", - "regionCountryMX": "Mexico", - "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", - "editMetadataFieldAlbum": "Альбом", - "settingsAbout": "Про додаток", - "libraryFilterTitle": "Фільтри", - "cleanupOrphanedDownloadsResult": "Видалено {count} утрачених записів з історії", - "extensionHooksAvailable": "{count} доступних хуків", - "backupContentsSettings": "App settings", - "trackLyricsEmbedded": "Текст пісні успішно вбудовано в пісню", - "optionsUpdateChannelPreview": "Отримати попередні релізи", - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "libraryForceFullScan": "Примусове повне сканування", - "snackbarProviderPrioritySaved": "Пріоритет постачальника збережено", - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", - "extensionServiceStatus": "Service Status", - "dateWeeksAgo": "{count} тижнів тому", - "historyFilterSingles": "Сингли", - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", - "trackLyricsSaved": "Текст пісні збережено в {fileName}", - "cacheClearAllConfirmTitle": "Очистити увесь кеш?", - "noTracksFoundForAlbum": "Для цього альбому не знайдено жодних треків", - "sectionLanguage": "Мова", - "@logIssueTrackNotFoundDescription": { - "description": "Diagnostic badge description when a track is unavailable" + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." }, - "setupSelectFolder": "Вибрати папку", - "dateYesterday": "Вчора", - "collectionAddToPlaylist": "Додати до списку відтворення", - "snackbarUnsupportedAudioFormat": "Непідтримуваний аудіоформат", - "libraryScanCancelled": "Scan cancelled", - "appearanceLanguage": "Мова програми", - "extensionsTitle": "Розширення", - "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", - "permissionNotification": "Notification", - "notifUpdateReady": "Оновлення готове", - "lyricsModeDescription": "Виберіть, як тексти пісень зберігатимуться разом із завантаженнями пісень.", - "downloadFrom": "Завантажити з", - "collectionWishlistEmptySubtitle": "Натисніть + на треках, щоб зберегти те, що ви хочете завантажити пізніше", - "cueSplitSplitting": "Розділення аркуша CUE... ({current}/{total})", - "trackOptionAddToWishlist": "Додати до списку бажань", - "settingsBackup": "Backup & Restore", - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", - "notifDownloadCompleteCount": "Завантаження завершено ({completed}/{total})", - "extensionsNoDownloadProvider": "Без розширень із постачальником завантажень", - "libraryFilterSortGenreAsc": "Жанр (А-Я)", - "trackReplayGainFailed": "Failed to add ReplayGain tags", - "collectionPlaylistRemoveCover": "Видалити зображення обкладинки", - "storeEmptyNoResults": "Розширень не знайдено", - "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", - "editMetadataFieldComment": "Comment", - "settingsMetadata": "Metadata", - "settingsCache": "Сховище та Кеш", - "providerPriorityFallbackExtensionsHint": "Тут перелічені лише ввімкнені розширення з можливістю завантаження через постачальника послуг.", - "libraryFilterAll": "Усі", - "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", - "extensionsProviderPrioritySection": "Пріоритет постачальника", - "storeChangeRepoTooltip": "Змінити репозиторій", - "snackbarFailedToInstall": "Не вдалося встановити розширення", - "libraryScanSubtitle": "Сканувати для аудіофайлів", - "snackbarExtensionInstalled": "Розширення {extensionName} встановлено.", - "setupOpenSettings": "Відкрити налаштування", - "extensionsInstalledSection": "Встановлені розширення", - "aboutLinks": "Посилання", - "trackCoverClearSelected": "Clear selected cover", - "libraryAutoScanWeekly": "Щотижнево", - "downloadMusixmatchLanguageAuto": "Auto (original language)", - "optionsDefaultSearchTab": "Вкладка пошуку за замовчуванням", - "downloadPrimaryArtistOnlyOn": "Primary only: On", - "folderOrganizationDescription": "Упорядкувати завантажені файли в папки", - "@folderOrganizationDescription": { - "description": "Folder organization sheet description" + "a11ySelectTrack": "Select track", + "@a11ySelectTrack": { + "description": "Accessibility label for selecting a track" }, - "lyricsModeEmbed": "Вбудувати у файл", - "trackReEnrichFfmpegFailed": "Не вдалося вбудувати метадані FFmpeg", - "@extensionsSearchProviderDescription": { - "description": "Search provider setting description" + "a11yDeselectTrack": "Deselect track", + "@a11yDeselectTrack": { + "description": "Accessibility label for deselecting a track" }, - "libraryFilterQualityLossy": "Із втратами (lossy)", - "actionPause": "Пауза", - "csvImportTracks": "{count} треків з CSV", - "actionGo": "Go", - "sectionDebug": "Налагодження", - "editMetadataFieldDate": "Дата", - "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} годин тому}}", - "sectionPerformance": "Продуктивність", - "extensionsDownloadPrioritySubtitle": "Встановити порядок завантаження", - "cacheAppDirectoryDesc": "HTTP-відповіді, дані WebView та інші тимчасові дані додатків.", - "sectionData": "Дані", - "notifFinalizingTrack": "Фіналізація {trackName}", - "snackbarFileNotFound": "Файл не знайдено", - "extensionQualityOptions": "Варіанти якості", - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", - "storeRepoDialogTitle": "Репозиторій розширень", - "extensionsSearchProviderDescription": "Виберіть, який сервіс використовувати для пошуку треків", - "albumFolderAlbumOnly": "Тільки альбом", - "nowPlayingOpenInExternalPlayer": "Open in external player", - "cueSplitButton": "Розділити на треки", - "updateRequiredTitle": "Update required", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" + "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", + "@a11yPlayTrackByArtist": { + "description": "Accessibility label for playing a local library track", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", + "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", + "@storeExtensionsCount": { + "description": "Store extension result count", "placeholders": { "count": { "type": "int" } } }, - "appearanceHeroAnimations": "Hero animations", - "@appearanceHeroAnimations": { - "description": "Toggle for shared-element (Hero) transitions" + "storeRequiresVersion": "Requires v{version}+", + "@storeRequiresVersion": { + "description": "Store compatibility badge for minimum app version", + "placeholders": { + "version": { + "type": "String" + } + } }, - "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", - "@appearanceHeroAnimationsSubtitle": { - "description": "Subtitle for the Hero animations toggle" + "actionGo": "Go", + "@actionGo": { + "description": "Generic action button label" + }, + "logIssueSummary": "Issue Summary", + "@logIssueSummary": { + "description": "Header for log issue analysis summary" + }, + "logTotalErrors": "Total errors: {count}", + "@logTotalErrors": { + "description": "Total error count in log issue analysis", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "logAffectedDomains": "Affected: {domains}", + "@logAffectedDomains": { + "description": "Affected domains in log issue analysis", + "placeholders": { + "domains": { + "type": "String" + } + } + }, + "libraryScanCancelled": "Scan cancelled", + "@libraryScanCancelled": { + "description": "Library scan status when a scan was cancelled" + }, + "libraryScanCancelledSubtitle": "You can retry the scan when ready.", + "@libraryScanCancelledSubtitle": { + "description": "Library scan status subtitle after cancellation" + }, + "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", + "@libraryDownloadsHistoryExcluded": { + "description": "Library count note for downloaded history items excluded from the local list", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadNativeWorker": "Native download worker", + "@downloadNativeWorker": { + "description": "Setting title for Android native download worker" + }, + "downloadNativeWorkerSubtitle": "Android background service for extension downloads", + "@downloadNativeWorkerSubtitle": { + "description": "Setting subtitle for Android native download worker" + }, + "extensionServiceStatus": "Service Status", + "@extensionServiceStatus": { + "description": "Extension detail section header for service status" + }, + "extensionServiceHealth": "Service health", + "@extensionServiceHealth": { + "description": "Extension capability label for service health checks" + }, + "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", + "@extensionHealthChecksConfigured": { + "description": "Extension service health check count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", + "@extensionOauthConnectHint": { + "description": "Hint for an OAuth login link field before connecting Spotify" + }, + "extensionLastChecked": "Last checked {time}", + "@extensionLastChecked": { + "description": "Timestamp for the latest extension service health check", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "extensionRefreshStatus": "Refresh status", + "@extensionRefreshStatus": { + "description": "Tooltip for refreshing extension service health status" + }, + "extensionCustomUrlHandling": "Custom URL Handling", + "@extensionCustomUrlHandling": { + "description": "Extension detail section title for custom URL handling" + }, + "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", + "@extensionCustomUrlHandlingSubtitle": { + "description": "Extension detail subtitle for custom URL handling" + }, + "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", + "@extensionCustomUrlHandlingShareHint": { + "description": "Extension detail hint explaining share-to-app URL handling" + }, + "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", + "@extensionSettingsCount": { + "description": "Count of settings exposed by an extension quality option", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionHealthOnline": "Online", + "@extensionHealthOnline": { + "description": "Extension service health status - online" + }, + "extensionHealthDegraded": "Degraded", + "@extensionHealthDegraded": { + "description": "Extension service health status - degraded" + }, + "extensionHealthOffline": "Offline", + "@extensionHealthOffline": { + "description": "Extension service health status - offline" + }, + "extensionHealthNotConfigured": "Not configured", + "@extensionHealthNotConfigured": { + "description": "Extension service health status - not configured" + }, + "extensionHealthUnknown": "Unknown", + "@extensionHealthUnknown": { + "description": "Extension service health status - unknown" + }, + "extensionHealthRequired": "required", + "@extensionHealthRequired": { + "description": "Label for a required extension service health check" + }, + "extensionSettingNotSet": "Not set", + "@extensionSettingNotSet": { + "description": "Value shown when an extension setting has no value" + }, + "extensionActionFailed": "Action failed", + "@extensionActionFailed": { + "description": "Fallback error when an extension action fails without details" + }, + "extensionEnterValue": "Enter value", + "@extensionEnterValue": { + "description": "Hint for editing an extension setting value" + }, + "extensionHealthServiceOnline": "Service online", + "@extensionHealthServiceOnline": { + "description": "Tooltip for online extension service" + }, + "extensionHealthServiceDegraded": "Service degraded", + "@extensionHealthServiceDegraded": { + "description": "Tooltip for degraded extension service" + }, + "extensionHealthServiceOffline": "Service offline", + "@extensionHealthServiceOffline": { + "description": "Tooltip for offline extension service" + }, + "extensionHealthServiceUnknown": "Service status unknown", + "@extensionHealthServiceUnknown": { + "description": "Tooltip for unknown extension service health" + }, + "audioAnalysisStereo": "Stereo", + "@audioAnalysisStereo": { + "description": "Audio channel layout label - stereo" + }, + "audioAnalysisMono": "Mono", + "@audioAnalysisMono": { + "description": "Audio channel layout label - mono" + }, + "trackOpenInService": "Open in {serviceName}", + "@trackOpenInService": { + "description": "Button label to open a track in a named music service", + "placeholders": { + "serviceName": { + "type": "String" + } + } + }, + "trackLyricsEmbeddedSource": "Embedded", + "@trackLyricsEmbeddedSource": { + "description": "Lyrics source label for embedded lyrics" + }, + "unknownAlbum": "Unknown Album", + "@unknownAlbum": { + "description": "Fallback album name when metadata is missing" + }, + "unknownArtist": "Unknown Artist", + "@unknownArtist": { + "description": "Fallback artist name when metadata is missing" + }, + "permissionAudio": "Audio", + "@permissionAudio": { + "description": "Audio permission type label" + }, + "permissionStorage": "Storage", + "@permissionStorage": { + "description": "Storage permission type label" + }, + "permissionNotification": "Notification", + "@permissionNotification": { + "description": "Notification permission type label" + }, + "errorInvalidFolderSelected": "Invalid folder selected", + "@errorInvalidFolderSelected": { + "description": "Error when the selected folder is invalid" + }, + "storeAnyVersion": "Any", + "@storeAnyVersion": { + "description": "Store detail value when any app version is accepted" + }, + "storeCategoryMetadata": "Metadata", + "@storeCategoryMetadata": { + "description": "Store extension category - metadata" + }, + "storeCategoryDownload": "Download", + "@storeCategoryDownload": { + "description": "Store extension category - download" + }, + "storeCategoryUtility": "Utility", + "@storeCategoryUtility": { + "description": "Store extension category - utility" + }, + "storeCategoryLyrics": "Lyrics", + "@storeCategoryLyrics": { + "description": "Store extension category - lyrics" + }, + "storeCategoryIntegration": "Integration", + "@storeCategoryIntegration": { + "description": "Store extension category - integration" + }, + "artistReleases": "Releases", + "@artistReleases": { + "description": "Section header for all artist releases" + }, + "editMetadataSelectNone": "None", + "@editMetadataSelectNone": { + "description": "Button to clear selected fields for auto-fill" + }, + "queueRetryAllFailed": "Retry {count} failed", + "@queueRetryAllFailed": { + "description": "Button to retry every failed download in the queue", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "settingsSaveDownloadHistory": "Save download history", + "@settingsSaveDownloadHistory": { + "description": "Settings switch title for storing completed downloads in history" + }, + "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "@settingsSaveDownloadHistorySubtitle": { + "description": "Settings switch subtitle for storing completed downloads in history" + }, + "dialogDisableHistoryTitle": "Turn off download history?", + "@dialogDisableHistoryTitle": { + "description": "Confirmation dialog title shown before disabling download history" + }, + "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "@dialogDisableHistoryMessage": { + "description": "Confirmation dialog message shown before disabling download history" + }, + "dialogDisableAndClear": "Turn off and clear", + "@dialogDisableAndClear": { + "description": "Confirmation action to disable download history and clear existing entries" + }, + "openInOtherServices": "Open in Other Services", + "@openInOtherServices": { + "description": "Title and tooltip for finding the current collection in other services" + }, + "shareSheetNoExtensions": "No other compatible services", + "@shareSheetNoExtensions": { + "description": "Empty state when no extensions can be searched for cross-service links" + }, + "shareSheetNotFound": "Not found", + "@shareSheetNotFound": { + "description": "Cross-service share sheet row subtitle when a service has no match" + }, + "shareSheetCopyLink": "Copy Link", + "@shareSheetCopyLink": { + "description": "Tooltip for copying a cross-service link" + }, + "shareSheetLinkCopied": "{service} link copied", + "@shareSheetLinkCopied": { + "description": "Snackbar after copying a cross-service link", + "placeholders": { + "service": {} + } + }, + "libraryPlayback": "Playback", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "External player", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Built-in preview player", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Now Playing", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Nothing is playing", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimize", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Up next", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, + "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, + "nowPlayingOpenInExternalPlayer": "Open in external player", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Player", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lyrics", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "No lyrics in this file", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Your library is empty", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Shuffle on", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Play in order", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Shuffle library", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Queue is empty", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "No metadata available", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" + }, + "snackbarPlayingNext": "Playing next", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Added to queue", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Shuffle", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" + }, + "downloadPrimaryArtistOnlyOn": "Primary only: On", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Original quality", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "trackConvertDithering": "Dithering", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "Resampler", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "None", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "Triangular HP", + "@trackConvertDitherTriangularHp": { + "description": "Lossless conversion high-pass triangular dither option" + }, + "trackConvertResamplerSwr": "SWR", + "@trackConvertResamplerSwr": { + "description": "Lossless conversion default FFmpeg swresample resampler option" + }, + "trackConvertResamplerSoxr": "SoXr", + "@trackConvertResamplerSoxr": { + "description": "Lossless conversion SoX resampler option" + }, + "updateSeeReleaseNotes": "See release notes for details.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Unknown title", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Play next", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Add to queue", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + }, + "version": { + "type": "String" + } + } + }, + "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" + }, + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" + }, + "trackCoverOnline": "Online cover", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" + }, + "regionCountryUS": "United States", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" + }, + "regionCountryGB": "United Kingdom", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" + }, + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloads": "Concurrent downloads", - "@settingsConcurrentDownloads": { - "description": "Setting title - how many tracks download at the same time" + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", - "@settingsConcurrentDownloadsSubtitle": { - "description": "Subtitle explaining the concurrent downloads picker" + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsOne": "1 track at a time", - "@concurrentDownloadsOne": { - "description": "Concurrent downloads option - sequential" + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsCount": "Up to {count} tracks at once", - "@concurrentDownloadsCount": { - "description": "Concurrent downloads option - parallel", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalization": "Volume normalization", - "@libraryPlaybackNormalization": { - "description": "Toggle title for ReplayGain playback normalization in the built-in player" + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", - "@libraryPlaybackNormalizationSubtitle": { - "description": "Subtitle explaining playback volume normalization" + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysis": "Audio analysis cache", - "@cacheAudioAnalysis": { - "description": "Cache item title for saved audio analysis results" + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", - "@cacheAudioAnalysisDesc": { - "description": "Description of what audio analysis cache contains" + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginal": "Keep original file", - "@trackConvertKeepOriginal": { - "description": "Toggle to preserve the source file during conversion" + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", - "@trackConvertKeepOriginalDescription": { - "description": "Description for preserving the source file during conversion" + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" }, - "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", - "@trackConvertConfirmKeepOriginal": { - "description": "Confirmation message when the source file will be preserved", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" }, - "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": { - "description": "Batch conversion confirmation when source files will be preserved", - "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" }, - "downloadFolderAccessLostTitle": "Download folder access lost", - "@downloadFolderAccessLostTitle": { - "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" }, - "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", - "@downloadFolderAccessLostSubtitle": { - "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" }, - "downloadFolderReselect": "Re-select folder", - "@downloadFolderReselect": { - "description": "Button that reopens the folder picker to restore download folder access" + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" }, - "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", - "@downloadErrorSafPermissionLost": { - "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" + "extensionVerificationHelpTitleManual": "Open verification manually", + "@extensionVerificationHelpTitleManual": { + "description": "Dialog title when automatic browser launch for verification fails" }, - "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", - "@downloadErrorFolderAccessLost": { - "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" + "extensionVerificationHelpTitleWaiting": "Verification still waiting", + "@extensionVerificationHelpTitleWaiting": { + "description": "Dialog title when verification is taking longer than expected" }, - "notifVerificationRequiredTitle": "Verification required", - "@notifVerificationRequiredTitle": { - "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" + "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", + "@extensionVerificationHelpMessageManual": { + "description": "Dialog message when automatic browser launch for verification fails" }, - "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", - "@notifVerificationRequiredBody": { - "description": "Notification body prompting the user to return to the app to solve a verification challenge" + "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", + "@extensionVerificationHelpMessageWaiting": { + "description": "Dialog message when verification may need manual browser help" }, - "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", - "@downloadDeduplicationWithQualityVariants": { - "description": "Deduplication subtitle when separate quality versions are allowed" + "extensionVerificationClose": "Close", + "@extensionVerificationClose": { + "description": "Button to dismiss the extension verification help dialog" }, - "downloadQualityVariants": "Allow different quality versions", - "@downloadQualityVariants": { - "description": "Setting to retain multiple quality versions of the same track" + "extensionVerificationCopyLink": "Copy link", + "@extensionVerificationCopyLink": { + "description": "Button to copy the extension verification URL" }, - "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", - "@downloadQualityVariantsDescription": { - "description": "Description for retaining multiple quality versions" + "extensionVerificationLinkCopied": "Verification link copied", + "@extensionVerificationLinkCopied": { + "description": "Snackbar after copying the extension verification URL" }, - "trackOptionDownloadQualityVariant": "Download another quality", - "@trackOptionDownloadQualityVariant": { - "description": "Track menu action to download another quality version" + "extensionVerificationOpenBrowser": "Open browser", + "@extensionVerificationOpenBrowser": { + "description": "Button to open the extension verification URL in a browser" }, - "queueCheckingDownloadSession": "Checking download session...", - "queueResolvingDownloadMetadata": "Resolving track metadata...", - "queueResolvingDownloadStream": "Preparing audio stream...", - "queueWaitingForVerification": "Waiting for verification...", - "queueResumingAfterVerification": "Resuming after verification...", "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", - "collectionExportM3u": "Export as M3U8", - "collectionExportM3uDone": "Exported {exported} of {total} tracks", - "collectionExportM3uNone": "No downloaded files to export", - "collectionExportM3uFailed": "Export failed", - "trackOpenOn": "Open on...", - "trackOpenOnNoLinks": "No platform links found for this track.", - "libraryReviewDuplicates": "Review duplicates", - "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", - "duplicatesTitle": "Duplicates", - "duplicatesEmpty": "No duplicate tracks found.", - "duplicatesKeepBest": "Keep best", - "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", - "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", - "downloadAutoConvert": "Auto-convert after download", - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "downloadAutoConvertFormat": "Output format", - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "downloadAutoConvertBitrate": "Output quality", - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "appearanceForceBlur": "Always use blur effects", - "appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "editMetadataAutoFillSource": "Metadata source", - "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", - "editMetadataAutoFillFind": "Find metadata", - "editMetadataAutoFillPreview": "Data from {source}", - "editMetadataAutoFillCoverAvailable": "Cover artwork available", - "editMetadataAutoFillApply": "Apply selected data", - "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", - "libraryDefaultView": "Default view", - "libraryDefaultViewLastUsed": "Last used", - "audioAnalysisCutoffNotDetected": "Not detected", - "queueCancelledTitle": "Download cancelled", - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", - "trackCoverResolution": "Cover resolution", - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", - "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", - "queueDownloadNext": "Download next", - "queueMoveUp": "Move up", - "queueMoveDown": "Move down", - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", - "nowPlayingRepeatOff": "Repeat off", - "nowPlayingRepeatAll": "Repeat all", - "nowPlayingRepeatOne": "Repeat one", - "queueNetworkFailedOffline": "{count} downloads failed while offline", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "libraryFilterMetadataMissingIsrc": "Missing ISRC" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From eacfab8dea9c2815f7438308e4b7c2842f4cbbef Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:29 +0700 Subject: [PATCH 03/59] New translations app_en.arb (Italian) [ci skip] --- lib/l10n/arb/app_it.arb | 55 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/lib/l10n/arb/app_it.arb b/lib/l10n/arb/app_it.arb index 82b1d5f2a..b01b25e24 100644 --- a/lib/l10n/arb/app_it.arb +++ b/lib/l10n/arb/app_it.arb @@ -461,6 +461,18 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" + }, + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" + }, + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" + }, "aboutAppDescription": "Cerca i metadati, gestisci le estensioni e organizza la tua libreria.", "@aboutAppDescription": { "description": "App description in header card" @@ -3889,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -6047,6 +6059,45 @@ "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, "nowPlayingOpenInExternalPlayer": "Open in external player", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" @@ -6494,4 +6545,4 @@ "@optionsEmbeddedCoverSizeOriginal": { "description": "Option that preserves the provider artwork at its original resolution" } -} +} \ No newline at end of file From 8e6dace08c4ef749c31a3cb29722cf39d71e1878 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:32 +0700 Subject: [PATCH 04/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 9615 ++++++++++++++++++++------------------- 1 file changed, 4985 insertions(+), 4630 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index db10abe28..5a119e2bc 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -1,2741 +1,2662 @@ { "@@locale": "id", "@@last_modified": "2026-04-28", - "libraryEnableLocalLibrarySubtitle": "Scan and track your existing music", - "@libraryEnableLocalLibrarySubtitle": { - "description": "Subtitle for enable toggle" - }, - "@audioAnalysisCodec": { - "description": "Audio codec metric label" + "appName": "SpotiFLAC Mobile", + "@appName": { + "description": "App name - DO NOT TRANSLATE" }, - "extensionUtilityFunctions": "Utility Functions", - "@extensionUtilityFunctions": { - "description": "Capability label for utility-only extensions" + "navHome": "Beranda", + "@navHome": { + "description": "Bottom navigation - Home tab" }, - "logClearLogsMessage": "Apakah Anda yakin ingin menghapus semua log?", - "@logClearLogsMessage": { - "description": "Clear logs confirmation message" + "navLibrary": "Pustaka", + "@navLibrary": { + "description": "Bottom navigation - Library tab" }, - "@storeClearFilters": { - "description": "Button to clear all filters" + "navSettings": "Pengaturan", + "@navSettings": { + "description": "Bottom navigation - Settings tab" }, - "cacheCleanupUnused": "Cleanup unused data", - "@cacheCleanupUnused": { - "description": "Action title for cleaning unused entries" + "navStore": "Repositori", + "@navStore": { + "description": "Bottom navigation - Extension repo tab" }, - "trackConvertDitherNone": "None", - "@trackConvertDitherNone": { - "description": "Lossless conversion dither option with no dithering applied" + "homeTitle": "Beranda", + "@homeTitle": { + "description": "Home screen title" }, - "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", - "@libraryTracksUnit": { - "description": "Unit label for tracks count (without the number itself)", - "placeholders": { - "count": { - "type": "int" - } - } + "homeSubtitle": "Tempel URL yang didukung atau cari berdasarkan nama", + "@homeSubtitle": { + "description": "Subtitle shown below search box" }, - "folderOrganizationNone": "Tidak ada", - "@folderOrganizationNone": { - "description": "Folder option - flat structure" + "homeEmptyTitle": "Belum ada penyedia pencarian", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" }, - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" + "homeEmptySubtitle": "Instal ekstensi untuk melanjutkan.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" }, - "@trackConvertConfirmTitle": { - "description": "Confirmation dialog title" + "homeSupports": "Mendukung: URL Lagu, Album, Daftar Putar, dan Artis", + "@homeSupports": { + "description": "Info text about supported URL types" }, - "@extensionPatternsCount": { - "description": "URL patterns count", - "placeholders": { - "count": { - "type": "int" - } - } + "homeRecent": "Terbaru", + "@homeRecent": { + "description": "Section header for recent searches" }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" + "historyFilterAll": "Semua", + "@historyFilterAll": { + "description": "Filter chip - show all items" }, - "libraryAutoScanOff": "Off", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" + "historyFilterAlbums": "Album", + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" }, - "shareSheetLinkCopied": "{service} link copied", - "@shareSheetLinkCopied": { - "description": "Snackbar after copying a cross-service link", - "placeholders": { - "service": {} - } + "historyFilterSingles": "Single", + "@historyFilterSingles": { + "description": "Filter chip - show singles only" }, - "providerPriorityFallbackExtensionsDescription": "Pilih ekstensi unduhan terpasang mana yang dapat digunakan selama fallback otomatis.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" + "historySearchHint": "Cari riwayat...", + "@historySearchHint": { + "description": "Search bar placeholder in history" }, - "@replayGainBatchConfirmMessage": { - "description": "Message of the batch ReplayGain confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsTitle": "Pengaturan", + "@settingsTitle": { + "description": "Settings screen title" }, - "@extensionsHomeFeedUse": { - "description": "Extensions page - subtitle for a specific extension home feed option", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "settingsDownload": "Unduhan", + "@settingsDownload": { + "description": "Settings section - download options" }, - "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", - "@selectionShareCount": { - "description": "Share button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsAppearance": "Tampilan", + "@settingsAppearance": { + "description": "Settings section - visual customization" }, - "@storeExtensionsCount": { - "description": "Store extension result count", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsExtensions": "Ekstensi", + "@settingsExtensions": { + "description": "Settings section - extension management" }, - "@logSearchHint": { - "description": "Log search placeholder" + "settingsAbout": "Tentang", + "@settingsAbout": { + "description": "Settings section - app info" }, - "@audioAnalysisSamples": { - "description": "Total samples metric label" + "downloadTitle": "Unduhan", + "@downloadTitle": { + "description": "Download settings page title" }, - "trackCoverReplace": "Replace Cover", - "@trackCoverReplace": { - "description": "Button label for replacing selected cover art" + "downloadAskQualitySubtitle": "Tampilkan pemilih kualitas untuk setiap unduhan", + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" }, - "@discographyAddedToQueue": { - "description": "Snackbar - tracks added from discography", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameFormat": "Format Nama File", + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" + "downloadSingleFilenameFormat": "Format Nama Berkas Tunggal", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" }, - "@nowPlayingDetails": { - "description": "Menu item and section title for track metadata details" + "downloadSingleFilenameFormatDescription": "Pola nama file untuk single dan EP. Menggunakan tag yang sama dengan format album.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" }, - "@trackGenre": { - "description": "Metadata label - music genre" + "downloadFolderOrganization": "Organisasi Folder", + "@downloadFolderOrganization": { + "description": "Title of the folder organization picker bottom sheet" }, - "recentTypeSong": "Lagu", - "@recentTypeSong": { - "description": "Recent access item type - song/track" + "appearanceTitle": "Tampilan", + "@appearanceTitle": { + "description": "Appearance settings page title" }, - "logShareLogs": "Bagikan log", - "@logShareLogs": { - "description": "Share button tooltip" + "appearanceThemeSystem": "Sistem", + "@appearanceThemeSystem": { + "description": "Follow system theme" }, - "@storeFilterLyrics": { - "description": "Repo filter - lyrics providers" + "appearanceThemeLight": "Terang", + "@appearanceThemeLight": { + "description": "Light theme" }, - "extensionsInstallButton": "Pasang Ekstensi", - "@extensionsInstallButton": { - "description": "Button to install extension from file" + "appearanceThemeDark": "Gelap", + "@appearanceThemeDark": { + "description": "Dark theme" }, - "replayGainBatchSuccess": "ReplayGain ditambahkan ke {success} dari {total} trek", - "@replayGainBatchSuccess": { - "description": "Snackbar after batch ReplayGain completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "appearanceDynamicColor": "Warna Dinamis", + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" }, - "nowPlayingMinimize": "Minimize", - "@nowPlayingMinimize": { - "description": "Tooltip for minimizing the now playing screen" + "appearanceDynamicColorSubtitle": "Gunakan warna dari wallpaper Anda", + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" }, - "logIssueNetworkErrorSuggestion": "Check your internet connection", - "@logIssueNetworkErrorSuggestion": { - "description": "Diagnostic badge suggestion for generic network errors" + "appearanceHistoryView": "Gaya Tampilan Histori", + "@appearanceHistoryView": { + "description": "Layout style for history" }, - "extensionsNoExtensions": "Tidak ada ekstensi terpasang", - "@extensionsNoExtensions": { - "description": "Empty state - no extensions" + "appearanceHistoryViewList": "Daftar", + "@appearanceHistoryViewList": { + "description": "List layout option" }, - "@cacheRefresh": { - "description": "Tooltip for refresh button on cache management page" + "appearanceHistoryViewGrid": "Kisi", + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" }, - "@snackbarHistoryCleared": { - "description": "Snackbar - history deleted" + "optionsPrimaryProvider": "Provider Utama", + "@optionsPrimaryProvider": { + "description": "Main search provider setting" }, - "cueSplitFailed": "CUE split failed", - "@cueSplitFailed": { - "description": "Snackbar when CUE split fails" + "optionsPrimaryProviderSubtitle": "Layanan yang digunakan untuk mencari berdasarkan nama lagu atau album", + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" }, - "trackConvertLosslessSuffix": "Lossless", - "@trackConvertLosslessSuffix": { - "description": "Suffix used in converted lossless quality labels" - }, - "homeSubtitle": "Tempel URL yang didukung atau cari berdasarkan nama", - "@homeSubtitle": { - "description": "Subtitle shown below search box" - }, - "selectionBatchConvertConfirmMessageLossless": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.", - "@selectionBatchConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless batch conversion", + "optionsUsingExtension": "Menggunakan ekstensi: {extensionName}", + "@optionsUsingExtension": { + "description": "Shows active extension name", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "extensionName": { "type": "String" } } }, - "@extensionVerificationHelpMessageManual": { - "description": "Dialog message when automatic browser launch for verification fails" - }, - "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", - "@queueRateLimitMessage": { - "description": "Explanation shown on a failed queue item when the download service rate limits requests" - }, - "searchSortDateOldest": "Tanggal rilis (Terlama)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "nowPlayingShuffleOn": "Shuffle on", - "@nowPlayingShuffleOn": { - "description": "Tooltip when shuffle mode is enabled" - }, - "sectionColor": "Warna", - "@sectionColor": { - "description": "Settings section header" - }, - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "cacheCoverImage": "Cover image cache", - "@cacheCoverImage": { - "description": "Cache item title for persistent cover images" + "optionsDefaultSearchTab": "Tab Pencarian Default", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" }, - "@navSettings": { - "description": "Bottom navigation - Settings tab" + "optionsDefaultSearchTabSubtitle": "Pilih tab mana yang terbuka terlebih dahulu untuk hasil pencarian baru.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" }, - "@trackCoverReplaceNotice": { - "description": "Notice shown when a new cover has been selected but not saved yet" + "optionsAutoFallback": "Layanan Cadangan", + "@optionsAutoFallback": { + "description": "Auto-retry with other services" }, - "cueSplitConfirmTitle": "Split CUE Album", - "@cueSplitConfirmTitle": { - "description": "CUE split confirmation dialog title" + "optionsAutoFallbackSubtitle": "Coba layanan lain jika unduhan gagal", + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" }, - "@trackDeleteConfirmMessage": { - "description": "Delete confirmation message" + "optionsEmbedLyrics": "Sematkan Lirik", + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" }, - "cacheClearSuccess": "Cleared: {target}", - "@cacheClearSuccess": { - "description": "Snackbar after clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "optionsEmbedLyricsSubtitle": "Simpan lirik yang disinkronkan bersama dengan lagu yang Anda unduh", + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" }, - "editMetadataFieldCover": "Cover Art", - "@editMetadataFieldCover": { - "description": "Chip label for cover art field in auto-fill selector" + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" }, - "snackbarSelectExtFile": "Harap pilih file .spotiflac-ext", - "@snackbarSelectExtFile": { - "description": "Snackbar - wrong file type selected" + "optionsReplayGainSubtitleOn": "Pindai kenyaringan dan sematkan tag ReplayGain (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" }, - "libraryFilterFormat": "Format", - "@libraryFilterFormat": { - "description": "Filter section - file format" + "optionsReplayGainSubtitleOff": "Dinonaktifkan: tidak ada tag normalisasi kenyaringan", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" }, - "@downloadLossyAac": { - "description": "Lossy format option - AAC in M4A container at 320kbps" + "trackReplayGain": "Pindai ulang ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "@setupNext": { - "description": "Next button text" + "trackReplayGainScanning": "Menganalisis kenyaringan...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "@releaseTypeSingle": { - "description": "Badge label for single releases" + "trackReplayGainSuccess": "Tag ReplayGain ditambahkan", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" }, - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" + "trackReplayGainFailed": "Gagal menambahkan tag ReplayGain", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", - "@trackConvertLosslessOutputWithCap": { - "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", "placeholders": { - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "bulkDownloadSelectPlaylists": "Select playlists to download", - "@bulkDownloadSelectPlaylists": { - "description": "Button label when no playlists are selected for download" - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "@timeJustNow": { - "description": "Relative time - less than a minute ago" - }, - "downloadLossyOpus256": "Opus 256kbps", - "@downloadLossyOpus256": { - "description": "Lossy format option - Opus 256kbps" + "replayGainBatchConfirmTitle": "Tambah ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" }, - "discographySinglesOnlySubtitle": "​{count} lagu dari {albumCount} single", - "@discographySinglesOnlySubtitle": { - "description": "Subtitle showing singles tracks count", + "replayGainBatchConfirmMessage": "Analisis kenyaringan dan tulis tag ReplayGain ke {count} trek?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { "count": { "type": "int" - }, - "albumCount": { - "type": "int" } } }, - "optionsExtensionStore": "Repositori Ekstensi", - "@optionsExtensionStore": { - "description": "Show/hide repo tab" + "replayGainBatchAnalyzing": "Menganalisis ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" }, - "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", - "@libraryDownloadsHistoryExcluded": { - "description": "Library count note for downloaded history items excluded from the local list", + "replayGainBatchSuccess": "ReplayGain ditambahkan ke {success} dari {total} trek", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", "placeholders": { - "count": { + "success": { + "type": "int" + }, + "total": { "type": "int" } } }, - "@errorUrlFetchFailed": { - "description": "Error message - generic URL fetch failure" - }, - "@trackOptionAddToWishlist": { - "description": "Bottom sheet action label - add track to wishlist" + "optionsArtistTagMode": "Mode Tag Artis", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" }, - "discographySinglesOnly": "Hanya Single & EP", - "@discographySinglesOnly": { - "description": "Option - download only singles" + "optionsArtistTagModeDescription": "Pilih bagaimana beberapa artis dicantumkan dalam tag yang disematkan.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" }, - "@downloadSongLinkRegionDesc": { - "description": "Description in SongLink region picker" + "optionsArtistTagModeJoined": "Nilai gabungan tunggal", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" }, - "notifEmbeddingMetadata": "Embedding metadata...", - "@notifEmbeddingMetadata": { - "description": "Notification body while embedding metadata into a downloaded track" + "optionsArtistTagModeJoinedSubtitle": "Tuliskan satu nilai ARTIS seperti \"Artis A, Artis B\" untuk kompatibilitas pemain maksimal.", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" }, - "@settingsLocalLibrarySubtitle": { - "description": "Subtitle for local library settings" + "optionsArtistTagModeSplitVorbis": "Tag terpisah untuk FLAC/Opus", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "@downloadLocationSubtitle": { - "description": "Subtitle shown in the download location picker sheet" + "optionsArtistTagModeSplitVorbisSubtitle": "Tulis satu tag artis per artis untuk FLAC dan Opus; MP3 dan M4A tetap tergabung.", + "@optionsArtistTagModeSplitVorbisSubtitle": { + "description": "Subtitle for split Vorbis artist tag mode" }, - "trackConvertOriginalQuality": "Original quality", - "@trackConvertOriginalQuality": { - "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + "optionsExtensionStore": "Repositori Ekstensi", + "@optionsExtensionStore": { + "description": "Show/hide repo tab" }, - "nowPlayingTabLyrics": "Lyrics", - "@nowPlayingTabLyrics": { - "description": "Tab label for the lyrics view" + "optionsExtensionStoreSubtitle": "Tampilkan tab Repo di navigasi", + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension repo toggle" }, - "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", - "@selectionConvertCount": { - "description": "Convert button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsCheckUpdates": "Periksa Pembaruan", + "@optionsCheckUpdates": { + "description": "Auto update check toggle" }, - "@extensionsInstalledSection": { - "description": "Section header - installed extensions" + "optionsCheckUpdatesSubtitle": "Beritahu saat versi baru tersedia", + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" }, - "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is off" + "optionsUpdateChannel": "Saluran Pembaruan", + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" }, - "nowPlayingShuffleLibrary": "Shuffle library", - "@nowPlayingShuffleLibrary": { - "description": "Button label to shuffle and play the entire local library" + "optionsUpdateChannelStable": "Hanya rilis stabil", + "@optionsUpdateChannelStable": { + "description": "Only stable updates" }, - "trackReEnrichFieldCover": "Cover Art", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" + "optionsUpdateChannelPreview": "Dapatkan rilis preview", + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", - "@tutorialExtensionsTip3": { - "description": "Tutorial extensions tip 3" + "optionsUpdateChannelWarning": "Preview mungkin mengandung bug atau fitur belum lengkap", + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" }, - "@cacheCleanupUnusedDesc": { - "description": "Description of what cleanup unused data does" - }, - "a11yOpenAlbum": "Open album {albumName}", - "@a11yOpenAlbum": { - "description": "Accessibility label for opening an album", - "placeholders": { - "albumName": { - "type": "String" - } - } + "optionsClearHistory": "Hapus Riwayat Unduhan", + "@optionsClearHistory": { + "description": "Delete all download history" }, - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" + "optionsClearHistorySubtitle": "Hapus semua lagu dari riwayat", + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" }, - "nowPlayingQueueEmpty": "Queue is empty", - "@nowPlayingQueueEmpty": { - "description": "Empty state when the playback queue has no items" + "optionsDetailedLogging": "Log Detail", + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" }, - "@settingsDownload": { - "description": "Settings section - download options" + "optionsDetailedLoggingOn": "Log detail sedang direkam", + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", - "@notifTracksDownloadedSuccess": { - "description": "Notification body for queue complete - how many tracks were downloaded", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsDetailedLoggingOff": "Aktifkan untuk laporan bug", + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" }, - "storeCategoryDownload": "Download", - "@storeCategoryDownload": { - "description": "Store extension category - download" + "extensionsTitle": "Ekstensi", + "@extensionsTitle": { + "description": "Extensions page title" }, - "aboutTelegramChannel": "Saluran Telegram", - "@aboutTelegramChannel": { - "description": "Link to Telegram channel" + "extensionsDisabled": "Nonaktif", + "@extensionsDisabled": { + "description": "Extension status - inactive" }, - "@downloadedAlbumDiscHeader": { - "description": "Header for disc separator in multi-disc albums", + "extensionsVersion": "Versi {version}", + "@extensionsVersion": { + "description": "Extension version display", "placeholders": { - "discNumber": { - "type": "int", - "example": "1" + "version": { + "type": "String" } } }, - "@recentEmpty": { - "description": "Empty state text for recent access list" + "extensionsUninstall": "Copot", + "@extensionsUninstall": { + "description": "Uninstall extension button" }, - "@backupRestoreConfirmMessage": { - "description": "Confirmation dialog message before restoring a backup" + "storeTitle": "Repositori Ekstensi", + "@storeTitle": { + "description": "Repo screen title" }, - "@shareSheetCopyLink": { - "description": "Tooltip for copying a cross-service link" + "storeSearch": "Cari ekstensi...", + "@storeSearch": { + "description": "Repo search placeholder" }, - "regionCountryID": "Indonesia", - "@regionCountryID": { - "description": "Country name for SongLink region picker" + "storeInstall": "Pasang", + "@storeInstall": { + "description": "Install extension button" }, - "@libraryInLibrary": { - "description": "Badge shown on tracks that exist in local library" + "storeInstalled": "Terpasang", + "@storeInstalled": { + "description": "Already installed badge" }, - "extensionPostProcessingHooks": "Hook Pasca-Pemrosesan", - "@extensionPostProcessingHooks": { - "description": "Capability - post-processing" + "storeUpdate": "Perbarui", + "@storeUpdate": { + "description": "Update available button" }, - "@setupGrantPermission": { - "description": "Button to request permission" + "aboutTitle": "Tentang", + "@aboutTitle": { + "description": "About page title" }, - "storeFilterDownload": "Unduhan", - "@storeFilterDownload": { - "description": "Repo filter - download providers" + "aboutContributors": "Kontributor", + "@aboutContributors": { + "description": "Section for contributors" }, - "@collectionAddToPlaylist": { - "description": "Action to add a track to user playlist" + "aboutMobileDeveloper": "Pengembang versi mobile", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" }, - "@discographyFailedToFetch": { - "description": "Error - some albums failed to load" + "aboutOriginalCreator": "Pencipta SpotiFLAC asli", + "@aboutOriginalCreator": { + "description": "Role description for original creator" }, - "@updateWhatsNew": { - "description": "Changelog section title" + "aboutLogoArtist": "Seniman berbakat yang membuat logo aplikasi kita yang indah!", + "@aboutLogoArtist": { + "description": "Role description for logo artist" }, - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" + "aboutTranslators": "Penerjemah", + "@aboutTranslators": { + "description": "Section for translators" }, - "dialogDeleteSelectedTitle": "Hapus yang Dipilih", - "@dialogDeleteSelectedTitle": { - "description": "Dialog title - delete selected items" + "aboutSpecialThanks": "Terima Kasih Khusus", + "@aboutSpecialThanks": { + "description": "Section for special thanks" }, - "trackCoverPick": "Pick Cover", - "@trackCoverPick": { - "description": "Button label for selecting cover art" + "aboutLinks": "Tautan", + "@aboutLinks": { + "description": "Section for external links" }, - "@collectionCreatePlaylist": { - "description": "Action to create a new playlist" + "aboutMobileSource": "Kode sumber mobile", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" }, - "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", - "@selectionBatchConvertSuccess": { - "description": "Snackbar after batch conversion completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "aboutPCSource": "Kode sumber PC", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" }, - "qualityHiResFlacMax": "Hi-Res FLAC Max", - "@qualityHiResFlacMax": { - "description": "Quality option - maximum resolution FLAC" + "aboutKeepAndroidOpen": "Biarkan Android tetap terbuka", + "@aboutKeepAndroidOpen": { + "description": "Link to Keep Android Open campaign website" }, - "audioAnalysisStereo": "Stereo", - "@audioAnalysisStereo": { - "description": "Audio channel layout label - stereo" + "aboutReportIssue": "Laporkan masalah", + "@aboutReportIssue": { + "description": "Link to report bugs" }, - "backupExportButton": "Create backup file", - "@backupExportButton": { - "description": "Button to create and share a backup file" + "aboutReportIssueSubtitle": "Laporkan masalah yang Anda temui", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" }, - "settingsApp": "App", - "@settingsApp": { - "description": "Settings menu item - app settings" + "aboutFeatureRequest": "Permintaan fitur", + "@aboutFeatureRequest": { + "description": "Link to suggest features" }, - "clickableInformationUnavailable": "{type} information not available", - "@clickableInformationUnavailable": { - "description": "Snackbar shown when clickable metadata cannot open a destination", - "placeholders": { - "type": { - "type": "String" - } - } + "aboutFeatureRequestSubtitle": "Sarankan fitur baru untuk aplikasi", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" }, - "@logFilterLevel": { - "description": "Filter by log level" + "aboutTelegramChannel": "Saluran Telegram", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" }, - "sectionTheme": "Tema", - "@sectionTheme": { - "description": "Settings section header" + "aboutTelegramChannelSubtitle": "Pengumuman dan pembaruan", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" }, - "@extensionActionFailed": { - "description": "Fallback error when an extension action fails without details" + "aboutTelegramChat": "Komunitas Telegram", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" }, - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + "aboutTelegramChatSubtitle": "Berbincang dengan pengguna lain", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" }, - "@extensionsNoCustomSearch": { - "description": "Empty state - no search providers" + "aboutSocial": "Sosial", + "@aboutSocial": { + "description": "Section for social links" }, - "@collectionPlaylistRemoveCover": { - "description": "Bottom sheet action to remove custom cover image from a playlist" + "aboutApp": "Aplikasi", + "@aboutApp": { + "description": "Section for app info" }, - "@tutorialWelcomeDesc": { - "description": "Tutorial welcome page description" + "aboutVersion": "Versi", + "@aboutVersion": { + "description": "Version info label" }, - "@tutorialSearchDesc": { - "description": "Tutorial search page description" + "aboutBinimumDesc": "Pencipta QQDL & HiFi API. Proyek ini membantu membentuk dukungan unduhan lossless.", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" }, - "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", - "@collectionAddedToWishlist": { - "description": "Snackbar after adding track to wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } + "aboutSachinsenalDesc": "Pencipta proyek HiFi asli. Sebuah fondasi untuk integrasi sumber lossless.", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" }, - "logAffectedDomains": "Affected: {domains}", - "@logAffectedDomains": { - "description": "Affected domains in log issue analysis", - "placeholders": { - "domains": { - "type": "String" - } - } + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" }, - "@folderOrganizationByArtistSubtitle": { - "description": "Subtitle for artist folder option" + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" }, - "errorNoTracksFound": "Tidak ada lagu ditemukan", - "@errorNoTracksFound": { - "description": "Error - search returned no results" + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" }, - "providerPriorityTitle": "Prioritas Provider", - "@providerPriorityTitle": { - "description": "Provider priority page title" + "aboutAppDescription": "Cari metadata musik, kelola ekstensi, dan atur perpustakaan Anda.", + "@aboutAppDescription": { + "description": "App description in header card" }, - "@notifUpdateReadyBody": { - "description": "Notification body when app update is ready to install", + "artistAlbums": "Album", + "@artistAlbums": { + "description": "Section header for artist albums" + }, + "artistSingles": "Single & EP", + "@artistSingles": { + "description": "Section header for singles/EPs" + }, + "artistCompilations": "Kompilasi", + "@artistCompilations": { + "description": "Section header for compilations" + }, + "artistPopular": "Populer", + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, + "artistMonthlyListeners": "{count} pendengar bulanan", + "@artistMonthlyListeners": { + "description": "Monthly listener count display", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "String", + "description": "Formatted listener count" } } }, - "@settingsExtensions": { - "description": "Settings section - extension management" + "trackMetadataService": "Layanan", + "@trackMetadataService": { + "description": "Metadata field - download service used" }, - "trackDeleteConfirmTitle": "Hapus dari perangkat?", - "@trackDeleteConfirmTitle": { - "description": "Delete confirmation title" + "trackMetadataPlay": "Putar", + "@trackMetadataPlay": { + "description": "Action button - play track" }, - "@settingsDownloadNetwork": { - "description": "Setting for network type preference" + "trackMetadataShare": "Bagikan", + "@trackMetadataShare": { + "description": "Action button - share track" }, - "downloadProvidersNoneEnabled": "No providers enabled", - "@downloadProvidersNoneEnabled": { - "description": "Shown when no lyrics providers are active" + "trackMetadataDelete": "Hapus", + "@trackMetadataDelete": { + "description": "Action button - delete track" }, - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" + "setupGrantPermission": "Berikan Izin", + "@setupGrantPermission": { + "description": "Button to request permission" }, - "trackReEnrichFieldBasicTags": "Album, Album Artist", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + "setupSkip": "Lewati untuk sekarang", + "@setupSkip": { + "description": "Skip current step button" }, - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" + "setupStorageAccessRequired": "Akses Penyimpanan Diperlukan", + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" }, - "@logClearLogsTitle": { - "description": "Clear logs dialog title" + "setupStorageAccessMessageAndroid11": "Android 11+ memerlukan izin \"Akses semua file\" untuk menyimpan file ke folder unduhan pilihan Anda.", + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" }, - "storageModeSafSubtitle": "Pick any folder, including SD card", - "@storageModeSafSubtitle": { - "description": "Subtitle for SAF storage mode" + "setupOpenSettings": "Buka Pengaturan", + "@setupOpenSettings": { + "description": "Button to open system settings" }, - "@notifUpdateProgress": { - "description": "Notification body showing update download progress", + "setupPermissionDeniedMessage": "Izin ditolak. Harap berikan semua izin untuk melanjutkan.", + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, + "setupPermissionRequired": "Izin {permissionType} Diperlukan", + "@setupPermissionRequired": { + "description": "Generic permission required title", "placeholders": { - "received": { - "type": "String" - }, - "total": { - "type": "String" - }, - "percentage": { - "type": "int" + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" } } }, - "downloadUsePrimaryArtistOnlyEnabled": "Artis unggulan dihapus dari nama folder (misalnya Justin Bieber, Quavo → Justin Bieber)", - "@downloadUsePrimaryArtistOnlyEnabled": { - "description": "Subtitle when primary artist only is enabled" - }, - "notifScanningLibrary": "Scanning local library", - "@notifScanningLibrary": { - "description": "Notification title while scanning local library" - }, - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "setupGetStarted": "Mulai", - "@setupGetStarted": { - "description": "Final setup button" - }, - "libraryFilterQualityCD": "CD (16bit)", - "@libraryFilterQualityCD": { - "description": "Filter option - CD quality audio" - }, - "sectionLayout": "Tata Letak", - "@sectionLayout": { - "description": "Settings section header" - }, - "@tooltipLoveAll": { - "description": "Tooltip for the Love All button on album/playlist screens" - }, - "queueFinalizingDownload": "Finalizing download", - "@queueFinalizingDownload": { - "description": "Accessibility label for a queue item that is finalizing" - }, - "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", - "@trackConvertActionLabelLossy": { - "description": "Convert button label for lossy conversion", + "setupPermissionRequiredMessage": "Izin {permissionType} diperlukan untuk pengalaman terbaik. Anda dapat mengubahnya nanti di Pengaturan.", + "@setupPermissionRequiredMessage": { + "description": "Generic permission required message", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { + "permissionType": { "type": "String" } } }, - "extensionsMetadataPriority": "Prioritas Metadata", - "@extensionsMetadataPriority": { - "description": "Setting - metadata provider order" + "setupUseDefaultFolder": "Gunakan Folder Default?", + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" }, - "updateCurrent": "Saat ini", - "@updateCurrent": { - "description": "Label for current version" + "setupNoFolderSelected": "Tidak ada folder dipilih. Apakah Anda ingin menggunakan folder Musik default?", + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" }, - "@aboutFeatureRequest": { - "description": "Link to suggest features" + "setupUseDefault": "Gunakan Default", + "@setupUseDefault": { + "description": "Button to use default folder" }, - "@safMigrationSuccess": { - "description": "Snackbar after successfully migrating to SAF" + "setupDownloadLocationTitle": "Lokasi Unduhan", + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" }, - "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", - "@cleanupOrphanedDownloadsNone": { - "description": "Snackbar when no orphans found" + "setupDownloadLocationIosMessage": "Di iOS, unduhan disimpan ke folder Documents aplikasi. Anda dapat mengaksesnya melalui aplikasi Files.", + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", - "@lyricsProviderNeteaseDesc": { - "description": "Description for Netease provider" + "setupAppDocumentsFolder": "Folder Documents Aplikasi", + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" }, - "libraryScanCancelledSubtitle": "You can retry the scan when ready.", - "@libraryScanCancelledSubtitle": { - "description": "Library scan status subtitle after cancellation" + "setupAppDocumentsFolderSubtitle": "Direkomendasikan - dapat diakses via aplikasi Files", + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" }, - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" + "setupChooseFromFiles": "Pilih dari Files", + "@setupChooseFromFiles": { + "description": "iOS file picker option" }, - "@trackAlbum": { - "description": "Metadata label - album name" + "setupChooseFromFilesSubtitle": "Pilih lokasi iCloud atau lainnya", + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" }, - "dialogDeleteSelectedMessage": "Hapus {count} {count, plural, =1{lagu} other{lagu}} dari riwayat?\n\nIni juga akan menghapus file dari penyimpanan.", - "@dialogDeleteSelectedMessage": { - "description": "Dialog message - delete selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "setupIosEmptyFolderWarning": "Batasan iOS: Folder kosong tidak dapat dipilih. Pilih folder dengan minimal satu file.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" }, - "trackReEnrich": "Perkaya ulang", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "@trackReEnrichReviewSubtitle": { - "placeholders": { - "changeCount": { - "type": "int" - }, - "trackCount": { - "type": "int" - } - } + "setupIcloudNotSupported": "iCloud Drive tidak didukung. Silakan gunakan folder Dokumen di aplikasi.", + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" }, - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "@trackReEnrich": { - "description": "Menu action - re-embed metadata into audio file" + "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "@setupDownloadInFlac": { + "description": "App tagline in setup" }, - "@lyricsProvidersSaved": { - "description": "Snackbar after saving lyrics provider priority" + "setupStorageGranted": "Izin Penyimpanan Diberikan!", + "@setupStorageGranted": { + "description": "Success message for storage permission" }, - "@storageModeSaf": { - "description": "Storage mode option - Storage Access Framework" + "setupStorageRequired": "Izin Penyimpanan Diperlukan", + "@setupStorageRequired": { + "description": "Title when storage permission needed" }, - "libraryStorageAccessRequired": "Storage Access Required", - "@libraryStorageAccessRequired": { - "description": "Dialog title for storage permission" + "setupStorageDescription": "SpotiFLAC membutuhkan izin penyimpanan untuk menyimpan file musik yang diunduh.", + "@setupStorageDescription": { + "description": "Explanation for storage permission" }, - "@cacheClearAllConfirmTitle": { - "description": "Dialog title before clearing all caches" + "setupNotificationGranted": "Izin Notifikasi Diberikan!", + "@setupNotificationGranted": { + "description": "Success message for notification permission" }, - "@unknownArtist": { - "description": "Fallback artist name when metadata is missing" + "setupNotificationEnable": "Aktifkan Notifikasi", + "@setupNotificationEnable": { + "description": "Button to enable notifications" }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist folder is enabled" + "setupFolderChoose": "Pilih Folder Unduhan", + "@setupFolderChoose": { + "description": "Button to choose folder" }, - "dialogClearHistoryMessage": "Apakah Anda yakin ingin menghapus semua riwayat unduhan? Ini tidak dapat dibatalkan.", - "@dialogClearHistoryMessage": { - "description": "Dialog message - clear history confirmation" + "setupFolderDescription": "Pilih folder tempat musik yang diunduh akan disimpan.", + "@setupFolderDescription": { + "description": "Explanation for folder selection" }, - "@sectionData": { - "description": "Settings section header" + "setupSelectFolder": "Pilih Folder", + "@setupSelectFolder": { + "description": "Button to select folder" }, - "audioAnalysisRms": "RMS", - "@audioAnalysisRms": { - "description": "RMS level metric label" + "setupEnableNotifications": "Aktifkan Notifikasi", + "@setupEnableNotifications": { + "description": "Button to enable notifications" }, - "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", - "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is on" + "setupNotificationBackgroundDescription": "Dapatkan notifikasi tentang progres dan penyelesaian unduhan. Ini membantu Anda melacak unduhan saat aplikasi di latar belakang.", + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" }, - "timeJustNow": "Just now", - "@extensionCustomUrlHandlingShareHint": { - "description": "Extension detail hint explaining share-to-app URL handling" + "setupSkipForNow": "Lewati untuk sekarang", + "@setupSkipForNow": { + "description": "Skip button text" }, - "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", - "@cleanupOrphanedDownloads": { - "description": "Button to remove history entries for deleted files" + "setupNext": "Lanjut", + "@setupNext": { + "description": "Next button text" }, - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" + "setupGetStarted": "Mulai", + "@setupGetStarted": { + "description": "Final setup button" }, - "@tutorialWelcomeTitle": { - "description": "Tutorial welcome page title" + "setupAllowAccessToManageFiles": "Harap aktifkan \"Izinkan akses untuk mengelola semua file\" di layar berikutnya.", + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" }, - "collectionFavoriteArtists": "Favorite Artists", - "audioAnalysisRescanning": "Re-analyzing audio...", - "@audioAnalysisRescanning": { - "description": "Loading text while audio is being re-analyzed after an explicit refresh" + "setupLanguageTitle": "Pilih Bahasa", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" }, - "logTitle": "Log", - "@logTitle": { - "description": "Logs screen title" + "setupLanguageDescription": "Pilih bahasa pilihan Anda untuk aplikasi ini. Anda dapat mengubahnya nanti di Pengaturan.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" }, - "@regionCountryGB": { - "description": "Country name for SongLink region picker" + "setupLanguageSystemDefault": "Bawaan Sistem", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" }, - "@progressFetchingMetadata": { - "description": "Progress indicator - loading track info", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "dialogCancel": "Batal", + "@dialogCancel": { + "description": "Dialog button - cancel action" }, - "aboutLogoArtist": "Seniman berbakat yang membuat logo aplikasi kita yang indah!", - "@aboutLogoArtist": { - "description": "Role description for logo artist" + "dialogSave": "Simpan", + "@dialogSave": { + "description": "Dialog button - save changes" }, - "channelPreview": "Pratinjau", - "@channelPreview": { - "description": "Update channel - beta/preview releases" + "dialogDelete": "Hapus", + "@dialogDelete": { + "description": "Dialog button - delete item" }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", - "@collectionPlaylistsDeleted": { - "description": "Snackbar after deleting selected playlists", + "dialogRetry": "Coba Lagi", + "@dialogRetry": { + "description": "Dialog button - retry action" + }, + "dialogClear": "Hapus", + "@dialogClear": { + "description": "Dialog button - clear items" + }, + "dialogDone": "Selesai", + "@dialogDone": { + "description": "Dialog button - action completed" + }, + "dialogImport": "Impor", + "@dialogImport": { + "description": "Dialog button - import data" + }, + "dialogDownload": "Unduh", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, + "previewPlay": "Putar pratinjau", + "@previewPlay": { + "description": "Tooltip for the button that plays a short track preview snippet" + }, + "previewStop": "Hentikan pratinjau", + "@previewStop": { + "description": "Tooltip for the button that stops the playing track preview snippet" + }, + "previewUnavailable": "Pratinjau tidak tersedia", + "@previewUnavailable": { + "description": "Snackbar shown when a track preview snippet cannot be played" + }, + "dialogDiscard": "Buang", + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, + "dialogRemove": "Hapus", + "@dialogRemove": { + "description": "Dialog button - remove item" + }, + "dialogUninstall": "Copot", + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, + "dialogDiscardChanges": "Buang Perubahan?", + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, + "dialogUnsavedChanges": "Anda memiliki perubahan yang belum disimpan. Apakah Anda ingin membuangnya?", + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, + "dialogClearAll": "Hapus Semua", + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, + "dialogRemoveExtension": "Hapus Ekstensi", + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogRemoveExtensionMessage": "Apakah Anda yakin ingin menghapus ekstensi ini? Tindakan ini tidak dapat dibatalkan.", + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, + "dialogUninstallExtension": "Copot Ekstensi?", + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogUninstallExtensionMessage": "Apakah Anda yakin ingin menghapus {extensionName}?", + "@dialogUninstallExtensionMessage": { + "description": "Dialog message - uninstall specific extension", "placeholders": { - "count": { - "type": "int" + "extensionName": { + "type": "String" } } }, - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" + "dialogClearHistoryTitle": "Hapus Riwayat", + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" }, - "homeTitle": "Beranda", - "@homeTitle": { - "description": "Home screen title" + "dialogClearHistoryMessage": "Apakah Anda yakin ingin menghapus semua riwayat unduhan? Ini tidak dapat dibatalkan.", + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" }, - "extensionMinAppVersion": "Versi App Minimum", - "@extensionMinAppVersion": { - "description": "Extension detail - minimum app version" + "dialogDeleteSelectedTitle": "Hapus yang Dipilih", + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", - "@backupContentsLiked": { - "description": "Backup contents row for liked tracks count", + "dialogDeleteSelectedMessage": "Hapus {count} {count, plural, =1{lagu} other{lagu}} dari riwayat?\n\nIni juga akan menghapus file dari penyimpanan.", + "@dialogDeleteSelectedMessage": { + "description": "Dialog message - delete selected tracks", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" + "dialogImportPlaylistTitle": "Impor Playlist", + "@dialogImportPlaylistTitle": { + "description": "Dialog title - import CSV playlist" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", - "@notifDownloadsCanceledBody": { - "description": "Notification body when downloads are canceled by the user", + "dialogImportPlaylistMessage": "Menemukan {count} lagu di file playlist. Tambahkan ke antrean download?", + "csvImportTracks": "{count} trek dari CSV", + "@csvImportTracks": { + "description": "Label shown in quality picker for CSV import", "placeholders": { "count": { "type": "int" } } }, - "@dialogRetry": { - "description": "Dialog button - retry action" - }, - "@homeChangeSearchProviderTooltip": { - "description": "Tooltip for the Home search provider picker" - }, - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" + "collectionExportM3u": "Ekspor sebagai M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" }, - "@trackReEnrichSuccessWithFailures": { - "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "collectionExportM3uDone": "Mengekspor {exported} dari {total} lagu", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { - "successCount": { + "exported": { "type": "int" }, "total": { "type": "int" - }, - "failedCount": { - "type": "int" } } }, - "previewUnavailable": "Pratinjau tidak tersedia", - "@previewUnavailable": { - "description": "Snackbar shown when a track preview snippet cannot be played" + "collectionExportM3uNone": "Tidak ada file terdownload untuk diekspor", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" }, - "nowPlayingTabPlayer": "Player", - "@nowPlayingTabPlayer": { - "description": "Tab label for the player view" + "collectionExportM3uFailed": "Ekspor gagal", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "@backupContentsPlaylists": { - "description": "Backup contents row for playlist count", - "placeholders": { - "count": { - "type": "int" - } - } + "trackOpenOn": "Buka di...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" }, - "libraryLastScannedNever": "Never", - "@libraryLastScannedNever": { - "description": "Shown when library has never been scanned" + "trackOpenOnNoLinks": "Tidak menemukan link platform untuk lagu ini.", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" }, - "trackTrackNumber": "Nomor lagu", - "@trackTrackNumber": { - "description": "Metadata label - track number" + "libraryReviewDuplicates": "Tinjau duplikat", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" }, - "trackReplayGainScanning": "Menganalisis kenyaringan...", - "@trackReplayGainScanning": { - "description": "Snackbar/progress message while scanning ReplayGain for a single track" + "libraryReviewDuplicatesSubtitle": "Telusuri lagu yang disimpan lebih dari sekali", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" }, - "downloadLossyMp3": "MP3 320kbps", - "@downloadLossyMp3": { - "description": "Lossy format option - MP3 320kbps" + "duplicatesTitle": "Duplikat", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" }, - "@albumFolderArtistAlbumSingles": { - "description": "Album folder option with singles inside artist" + "duplicatesEmpty": "Tidak menemukan lagu duplikat.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" }, - "@extensionHealthNotConfigured": { - "description": "Extension service health status - not configured" + "duplicatesKeepBest": "Simpan lagu kualitas terbaik", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is off" + "duplicatesKeepBestMessage": "Hapus {count} salinan kualitas rendah lagu \"{trackName}\"?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", + "placeholders": { + "count": { + "type": "int" + }, + "trackName": { + "type": "String" + } + } }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting to create a subfolder per playlist source" + "duplicatesDeleteCopyMessage": "Hapus salinan lagu \"{trackName}\"?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@trackReleaseDate": { - "description": "Metadata label - release date" + "@dialogImportPlaylistMessage": { + "description": "Dialog message - import playlist confirmation", + "placeholders": { + "count": { + "type": "int" + } + } }, - "aboutContributors": "Kontributor", - "@aboutContributors": { - "description": "Section for contributors" + "snackbarAddedToQueue": "Menambahkan \"{trackName}\" ke antrian", + "@snackbarAddedToQueue": { + "description": "Snackbar - track added to download queue", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@audioAnalysisMono": { - "description": "Audio channel layout label - mono" + "snackbarAddedTracksToQueue": "Menambahkan {count} lagu ke antrian", + "@snackbarAddedTracksToQueue": { + "description": "Snackbar - multiple tracks added to queue", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@audioAnalysisNyquist": { - "description": "Nyquist frequency metric label" + "snackbarAlreadyDownloaded": "\"{trackName}\" sudah diunduh", + "@snackbarAlreadyDownloaded": { + "description": "Snackbar - track already exists", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "permissionStorage": "Storage", - "@permissionStorage": { - "description": "Storage permission type label" + "snackbarAlreadyInLibrary": "\"{trackName}\" sudah ada di perpustakaan Anda", + "@snackbarAlreadyInLibrary": { + "description": "Snackbar - track already exists in local library", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "permissionAudio": "Audio", - "@permissionAudio": { - "description": "Audio permission type label" + "snackbarHistoryCleared": "Riwayat dihapus", + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" }, - "@libraryScanSubtitle": { - "description": "Subtitle for scan button" + "snackbarDeletedTracks": "Menghapus {count} {count, plural, =1{lagu} other{lagu}}", + "@snackbarDeletedTracks": { + "description": "Snackbar - tracks deleted", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@snackbarUnsupportedAudioFormat": { - "description": "Snackbar when the audio format is not supported for the requested operation" + "snackbarCannotOpenFile": "Tidak dapat membuka file: {error}", + "@snackbarCannotOpenFile": { + "description": "Snackbar - file open error", + "placeholders": { + "error": { + "type": "String" + } + } }, - "@notifLibraryScanStopped": { - "description": "Notification body when library scan is cancelled" + "snackbarViewQueue": "Lihat Antrian", + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, - "@downloadMusixmatchAuto": { - "description": "Button to clear Musixmatch language (use auto)" + "snackbarUrlCopied": "URL {platform} disalin ke clipboard", + "@snackbarUrlCopied": { + "description": "Snackbar - URL copied", + "placeholders": { + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } + } }, - "@trackLyricsTimeout": { - "description": "Message when lyrics request times out" + "snackbarFileNotFound": "File tidak ditemukan", + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" }, - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" + "snackbarSelectExtFile": "Harap pilih file .spotiflac-ext", + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" }, - "@regionCountryXK": { - "description": "Country name for SongLink region picker" + "snackbarProviderPrioritySaved": "Prioritas provider disimpan", + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" }, - "aboutTelegramChatSubtitle": "Berbincang dengan pengguna lain", - "@aboutTelegramChatSubtitle": { - "description": "Subtitle for Telegram chat" + "snackbarMetadataProviderSaved": "Prioritas provider metadata disimpan", + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" }, - "selectionAllPlaylistsSelected": "All playlists selected", - "@selectionAllPlaylistsSelected": { - "description": "Shown when all playlists are selected in selection mode" + "snackbarExtensionInstalled": "{extensionName} terpasang.", + "@snackbarExtensionInstalled": { + "description": "Snackbar - extension installed successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", - "@cacheTrackLookupDesc": { - "description": "Description of what track lookup cache contains" + "snackbarExtensionUpdated": "{extensionName} diperbarui.", + "@snackbarExtensionUpdated": { + "description": "Snackbar - extension updated successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@unknownAlbum": { - "description": "Fallback album name when metadata is missing" + "snackbarFailedToInstall": "Gagal memasang ekstensi", + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" }, - "@extensionsErrorLoading": { - "description": "Error message when extension fails to load" + "snackbarFailedToUpdate": "Gagal memperbarui ekstensi", + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" }, - "@cacheTitle": { - "description": "Cache management page title" + "errorRateLimited": "Dibatasi", + "@errorRateLimited": { + "description": "Error title - too many requests" }, - "@downloadFilenameFormat": { - "description": "Setting for output filename pattern" + "errorRateLimitedMessage": "Terlalu banyak permintaan. Harap tunggu sebentar sebelum mencari lagi.", + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" + }, + "errorNoTracksFound": "Tidak ada lagu ditemukan", + "@errorNoTracksFound": { + "description": "Error - search returned no results" + }, + "searchEmptyResultSubtitle": "Coba kata kunci lain", + "@searchEmptyResultSubtitle": { + "description": "Subtitle shown under the empty search result state on the home screen" }, "errorUrlNotRecognized": "Tautan tidak dikenali", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when album artist is used for folder names" + "errorUrlNotRecognizedMessage": "Tautan ini tidak didukung. Pastikan URL sudah benar dan ekstensi yang kompatibel telah terpasang.", + "@errorUrlNotRecognizedMessage": { + "description": "Error message - URL not recognized explanation" }, - "@qualityFlacLossless": { - "description": "Quality option - CD quality FLAC" + "errorUrlFetchFailed": "Konten dari tautan ini gagal dimuat. Silakan coba lagi.", + "@errorUrlFetchFailed": { + "description": "Error message - generic URL fetch failure" }, - "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", - "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is on" + "errorMissingExtensionSource": "Tidak dapat memuat {item}: sumber ekstensi tidak ada", + "@errorMissingExtensionSource": { + "description": "Error - extension source not available", + "placeholders": { + "item": { + "type": "String" + } + } }, - "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", - "@collectionLovedEmptySubtitle": { - "description": "Loved empty state subtitle" + "actionPause": "Jeda", + "@actionPause": { + "description": "Action button - pause download" }, - "@libraryBuiltInPlayerInfo": { - "description": "Info note explaining the built-in player is for previews only" + "actionResume": "Lanjutkan", + "@actionResume": { + "description": "Action button - resume download" }, - "@notifLibraryScanProgressNoTotal": { - "description": "Notification body for library scan progress when total is unknown", + "actionCancel": "Batal", + "@actionCancel": { + "description": "Action button - cancel operation" + }, + "actionSelectAll": "Pilih Semua", + "@actionSelectAll": { + "description": "Action button - select all items" + }, + "actionDeselect": "Batal Pilih", + "@actionDeselect": { + "description": "Action button - deselect all" + }, + "selectionSelected": "{count} dipilih", + "@selectionSelected": { + "description": "Selection count indicator", "placeholders": { - "scanned": { - "type": "int" - }, - "percentage": { + "count": { "type": "int" } } }, - "@tutorialSearchTitle": { - "description": "Tutorial search page title" + "selectionAllSelected": "Semua lagu dipilih", + "@selectionAllSelected": { + "description": "Status - all items selected" }, - "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", - "@a11yTrackByArtist": { - "description": "Accessibility label for a queue or list track item", + "selectionSelectToDelete": "Pilih lagu untuk dihapus", + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "progressFetchingMetadata": "Mengambil metadata... {current}/{total}", + "@progressFetchingMetadata": { + "description": "Progress indicator - loading track info", "placeholders": { - "trackName": { - "type": "String" + "current": { + "type": "int" }, - "artistName": { - "type": "String" + "total": { + "type": "int" } } }, - "libraryFilterMetadataMissingLabel": "Missing label", - "@libraryFilterMetadataMissingLabel": { - "description": "Filter option - items missing record label" - }, - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "trackMetadata": "Metadata", - "@trackMetadata": { - "description": "Tab title - track metadata" + "progressReadingCsv": "Membaca CSV...", + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" }, - "trackOptionRemoveFromLoved": "Remove from Loved", - "@trackOptionRemoveFromLoved": { - "description": "Bottom sheet action label - remove track from loved folder" + "searchSongs": "Lagu", + "@searchSongs": { + "description": "Search result category - songs" }, - "@aboutTelegramChat": { - "description": "Link to Telegram chat group" + "searchArtists": "Artis", + "@searchArtists": { + "description": "Search result category - artists" }, - "@trackCopiedToClipboard": { - "description": "Snackbar - content copied" + "searchAlbums": "Album", + "@searchAlbums": { + "description": "Search result category - albums" }, - "aboutKeepAndroidOpen": "Biarkan Android tetap terbuka", - "@aboutKeepAndroidOpen": { - "description": "Link to Keep Android Open campaign website" + "searchPlaylists": "Playlist", + "@searchPlaylists": { + "description": "Search result category - playlists" }, - "@lyricsProvidersDisabledSection": { - "description": "Section header for disabled providers", - "placeholders": { - "count": { - "type": "int" - } - } + "searchSortTitle": "Urutkan hasil", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" }, - "@downloadAllowLocalNetwork": { - "description": "Setting title for allowing requests to private/local network targets" + "searchSortDefault": "Default", + "@searchSortDefault": { + "description": "Sort option - default API order" }, - "@openInOtherServices": { - "description": "Title and tooltip for finding the current collection in other services" + "searchSortTitleAZ": "Judul (A-Z)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" }, - "@extensionVerificationBrowserInApp": { - "description": "Chip label for in-app browser verification mode" + "searchSortTitleZA": "Judul (Z-A)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" }, - "sectionSearchSource": "Sumber Pencarian", - "@sectionSearchSource": { - "description": "Settings section header" + "searchSortArtistAZ": "Artis (A-Z)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" }, - "allFilesAccess": "All Files Access", - "@allFilesAccess": { - "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + "searchSortArtistZA": "Artis (Z-A)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" }, - "extensionsInstalledCount": "{count} ekstensi berhasil terpasang", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } + "searchSortDurationShort": "Durasi (Terpendek)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" }, - "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", - "@snackbarFailedToEmbedLyrics": { - "description": "Snackbar when lyrics embedding fails" + "searchSortDurationLong": "Durasi (Terpanjang)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" }, - "@lyricsProviderMusixmatchDesc": { - "description": "Description for Musixmatch provider" + "searchSortDateOldest": "Tanggal rilis (Terlama)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" }, - "queueRateLimitTitle": "Service rate limited", - "@queueRateLimitTitle": { - "description": "Title shown on a failed queue item when the download service rate limits requests" + "searchSortDateNewest": "Tanggal rilis (Terbaru)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" }, - "@notifDownloadComplete": { - "description": "Notification title when a single download is complete" + "tooltipPlay": "Putar", + "@tooltipPlay": { + "description": "Tooltip - play button" }, - "@homeSupports": { - "description": "Info text about supported URL types" + "filenameFormat": "Format Nama File", + "@filenameFormat": { + "description": "Setting title - filename pattern" }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" + "filenameShowAdvancedTags": "Tampilkan tag lanjutan", + "@filenameShowAdvancedTags": { + "description": "Toggle label for showing advanced filename tags" }, - "@lyricsModeEmbedSubtitle": { - "description": "Subtitle for embed option" + "filenameShowAdvancedTagsDescription": "Aktifkan tag yang diformat untuk padding trek dan pola tanggal", + "@filenameShowAdvancedTagsDescription": { + "description": "Description for advanced filename tag toggle" }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" + "folderOrganizationNone": "Tidak ada", + "@folderOrganizationNone": { + "description": "Folder option - flat structure" }, - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" + "folderOrganizationByPlaylist": "Berdasarkan Daftar Putar", + "@folderOrganizationByPlaylist": { + "description": "Folder option - playlist folders" }, - "@trackArtist": { - "description": "Metadata label - artist name" + "folderOrganizationByPlaylistSubtitle": "Setiap daftar putar memerlukan folder terpisah", + "@folderOrganizationByPlaylistSubtitle": { + "description": "Subtitle for playlist folder option" }, - "cacheCoverImageDesc": "Downloaded album and track cover art. Will re-download when viewed.", - "@cacheCoverImageDesc": { - "description": "Description of what cover image cache contains" + "folderOrganizationByArtist": "Berdasarkan Artis", + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" }, - "queueClearAll": "Hapus Semua", - "@queueClearAll": { - "description": "Button - clear all queue items" + "folderOrganizationByAlbum": "Berdasarkan Album", + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" }, - "downloadUsePrimaryArtistOnlyDisabled": "Nama lengkap artis digunakan untuk nama folder", - "@downloadUsePrimaryArtistOnlyDisabled": { - "description": "Subtitle when primary artist only is disabled" + "folderOrganizationByArtistAlbum": "Berdasarkan Artis & Album", + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" }, - "backupImportSectionTitle": "Restore backup", - "@backupImportSectionTitle": { - "description": "Section title for the import/restore card" + "folderOrganizationDescription": "Atur file yang diunduh ke dalam folder", + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" }, - "@downloadMusixmatchLanguageHint": { - "description": "Placeholder for Musixmatch language input" + "folderOrganizationNoneSubtitle": "Semua file di folder unduhan", + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" }, - "collectionRemoveFromFolder": "Remove from folder", - "@collectionRemoveFromFolder": { - "description": "Tooltip for removing track from wishlist/loved folder" + "folderOrganizationByArtistSubtitle": "Folder terpisah untuk setiap artis", + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" }, - "storeFilterMetadata": "Metadata", - "@storeFilterMetadata": { - "description": "Repo filter - metadata providers" + "folderOrganizationByAlbumSubtitle": "Folder terpisah untuk setiap album", + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" }, - "shareSheetCopyLink": "Copy Link", - "errorRateLimitedMessage": "Terlalu banyak permintaan. Harap tunggu sebentar sebelum mencari lagi.", - "@errorRateLimitedMessage": { - "description": "Error message - rate limit explanation" + "folderOrganizationByArtistAlbumSubtitle": "Folder bersarang untuk artis dan album", + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" }, - "libraryFilterSortGenreDesc": "Genre (Z-A)", - "@libraryFilterSortGenreDesc": { - "description": "Sort option - genre descending" + "updateAvailable": "Pembaruan Tersedia", + "@updateAvailable": { + "description": "Update dialog title" }, - "trackFileNotFound": "File tidak ditemukan", - "@trackFileNotFound": { - "description": "Error - file doesn't exist" + "updateLater": "Nanti", + "@updateLater": { + "description": "Update button - dismiss" }, - "@queueEmptySinglesSubtitle": { - "description": "Empty state subtitle for single track downloads" + "updateStartingDownload": "Memulai unduhan...", + "@updateStartingDownload": { + "description": "Update status - initializing" }, - "@queueDownloadStarting": { - "description": "Queue status before download progress is available" + "updateDownloadFailed": "Unduhan gagal", + "@updateDownloadFailed": { + "description": "Update error title" }, - "metadataProviderPriorityInfo": "Deezer tidak memiliki batas rate dan direkomendasikan sebagai utama. Spotify mungkin membatasi rate setelah banyak permintaan.", - "@metadataProviderPriorityInfo": { - "description": "Info tip about rate limits" + "updateFailedMessage": "Gagal mengunduh pembaruan", + "@updateFailedMessage": { + "description": "Update error message" }, - "aboutPCSource": "Kode sumber PC", - "@aboutPCSource": { - "description": "Link to PC GitHub repo" + "updateNewVersionReady": "Versi baru sudah siap", + "@updateNewVersionReady": { + "description": "Update subtitle" }, - "editMetadataAutoFill": "Auto-fill from online", - "@editMetadataAutoFill": { - "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + "updateRequiredTitle": "Harus update", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "snackbarDeletedTracks": "Menghapus {count} {count, plural, =1{lagu} other{lagu}}", - "@snackbarDeletedTracks": { - "description": "Snackbar - tracks deleted", + "updateRequiredNotice": "Versi yang Anda gunakan adalah {count} dan sudah tidak didukung. Update untuk terus menggunakan aplikasi.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { "count": { "type": "int" } } }, - "@extensionHealthServiceDegraded": { - "description": "Tooltip for degraded extension service" + "updateCurrent": "Saat ini", + "@updateCurrent": { + "description": "Label for current version" }, - "lyricsProviderLrclibDesc": "Open-source synced lyrics database", - "@lyricsProviderLrclibDesc": { - "description": "Description for LRCLIB provider" + "updateNew": "Baru", + "@updateNew": { + "description": "Label for new version" }, - "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", - "@downloadMusixmatchLanguageDesc": { - "description": "Description in Musixmatch language picker" + "updateDownloading": "Mengunduh...", + "@updateDownloading": { + "description": "Update status - downloading" }, - "@optionsEmbedMetadataSubtitleOn": { - "description": "Subtitle when metadata embedding is enabled" + "updateWhatsNew": "Apa yang baru", + "@updateWhatsNew": { + "description": "Changelog section title" }, - "@setupSkipForNow": { - "description": "Skip button text" + "updateDownloadInstall": "Unduh & Pasang", + "@updateDownloadInstall": { + "description": "Update button - download and install" }, - "@a11ySelectTrack": { - "description": "Accessibility label for selecting a track" + "updateDontRemind": "Jangan ingatkan", + "@updateDontRemind": { + "description": "Update button - skip this version" }, - "@folderOrganizationByAlbumSubtitle": { - "description": "Subtitle for album folder option" + "providerPriorityTitle": "Prioritas Provider", + "@providerPriorityTitle": { + "description": "Provider priority page title" }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@extensionVerificationBrowserTitle": { - "description": "Settings option title for extension verification browser preference" + "providerPriorityDescription": "Seret untuk mengatur ulang urutan provider unduhan. Aplikasi akan mencoba provider dari atas ke bawah saat mengunduh lagu.", + "@providerPriorityDescription": { + "description": "Provider priority page description" }, - "@backupContentsExtensions": { - "description": "Backup contents row for installed extensions count", - "placeholders": { - "count": { - "type": "int" - } - } + "providerPriorityInfo": "Jika lagu tidak tersedia di provider pertama, aplikasi akan otomatis mencoba yang berikutnya.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" }, - "snackbarUrlCopied": "URL {platform} disalin ke clipboard", - "@snackbarUrlCopied": { - "description": "Snackbar - URL copied", - "placeholders": { - "platform": { - "type": "String", - "description": "Platform name (Spotify/Deezer)" - } - } + "providerPriorityFallbackExtensionsDescription": "Pilih ekstensi unduhan terpasang mana yang dapat digunakan selama fallback otomatis.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" }, - "aboutBinimumDesc": "Pencipta QQDL & HiFi API. Proyek ini membantu membentuk dukungan unduhan lossless.", - "@aboutBinimumDesc": { - "description": "Credit description for binimum" + "providerPriorityFallbackExtensionsHint": "Hanya ekstensi yang diaktifkan dengan kemampuan penyedia unduhan yang tercantum di sini.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" }, - "discographyFetchingAlbum": "Memuat {current} dari {total}...", - "@discographyFetchingAlbum": { - "description": "Progress - fetching specific album", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "providerExtension": "Ekstensi", + "@providerExtension": { + "description": "Label for extension-provided providers" }, - "logAutoScrollOn": "Auto-scroll ON", - "@logAutoScrollOn": { - "description": "Tooltip when auto-scroll is enabled on the log screen" + "metadataProviderPriorityTitle": "Prioritas Metadata", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" }, - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" + "metadataProviderPriorityDescription": "Seret untuk mengatur ulang urutan provider metadata. Aplikasi akan mencoba provider dari atas ke bawah saat mencari lagu dan mengambil metadata.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" }, - "@regionCountryBR": { - "description": "Country name for SongLink region picker" + "metadataProviderPriorityInfo": "Deezer tidak memiliki batas rate dan direkomendasikan sebagai utama. Spotify mungkin membatasi rate setelah banyak permintaan.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" }, - "@lyricsProvidersTitle": { - "description": "Settings item title for lyrics provider order" + "logTitle": "Log", + "@logTitle": { + "description": "Logs screen title" }, - "trackMetadataService": "Layanan", - "@trackMetadataService": { - "description": "Metadata field - download service used" + "logCopied": "Log disalin ke clipboard", + "@logCopied": { + "description": "Snackbar - logs copied" }, - "discographyAddedToQueue": "{count} lagu ditambahkan ke antrean", - "cueSplitTrackCount": "{count} tracks", - "@cueSplitTrackCount": { - "description": "Number of tracks in CUE sheet", - "placeholders": { - "count": { - "type": "int" - } - } + "logSearchHint": "Cari log...", + "@logSearchHint": { + "description": "Log search placeholder" }, - "dialogImportPlaylistTitle": "Impor Playlist", - "@dialogImportPlaylistTitle": { - "description": "Dialog title - import CSV playlist" + "logFilterLevel": "Level", + "@logFilterLevel": { + "description": "Filter by log level" }, - "@cleanupOrphanedDownloadsSubtitle": { - "description": "Subtitle for orphaned cleanup button" + "logFilterSection": "Filter", + "@logFilterSection": { + "description": "Filter section title" }, - "settingsLocalLibrary": "Local Library", - "@settingsLocalLibrary": { - "description": "Settings menu item - local library" + "logShareLogs": "Bagikan log", + "@logShareLogs": { + "description": "Share button tooltip" }, - "@metadataSaveFailedStorage": { - "description": "Snackbar error when writing metadata file back to storage fails" + "logClearLogs": "Hapus log", + "@logClearLogs": { + "description": "Clear button tooltip" }, - "logCopyLogs": "Copy logs", - "@logCopyLogs": { - "description": "Tooltip for copying logs" + "logClearLogsTitle": "Hapus Log", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", - "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for WiFi-only option in picker" + "logClearLogsMessage": "Apakah Anda yakin ingin menghapus semua log?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" }, - "@lyricsModeBothSubtitle": { - "description": "Subtitle for both option" + "logFilterBySeverity": "Filter log berdasarkan tingkat keparahan", + "@logFilterBySeverity": { + "description": "Filter dialog title" }, - "@collectionAlreadyInPlaylist": { - "description": "Snackbar when track already exists in playlist", + "logNoLogsYet": "Belum ada log", + "@logNoLogsYet": { + "description": "Empty state title" + }, + "logNoLogsYetSubtitle": "Log akan muncul di sini saat Anda menggunakan aplikasi", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" + }, + "logEntriesFiltered": "Entri ({count} difilter)", + "@logEntriesFiltered": { + "description": "Log count with filter active", "placeholders": { - "playlistName": { - "type": "String" + "count": { + "type": "int" } } }, - "@collectionFoldersTitle": { - "description": "Library section title for custom folders" - }, - "searchSortDateNewest": "Tanggal rilis (Terbaru)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "@recentTypeAlbum": { - "description": "Recent access item type - album" - }, - "nowPlayingPlayInOrder": "Play in order", - "@nowPlayingPlayInOrder": { - "description": "Tooltip when shuffle mode is disabled" - }, - "@cueSplitConfirmMessage": { - "description": "CUE split confirmation dialog message", + "logEntries": "Entri ({count})", + "@logEntries": { + "description": "Total log count", "placeholders": { - "album": { - "type": "String" - }, "count": { "type": "int" } } }, - "@audioAnalysisFileSize": { - "description": "File size metric label" - }, - "artistSingles": "Single & EP", - "@artistSingles": { - "description": "Section header for singles/EPs" + "channelStable": "Stabil", + "@channelStable": { + "description": "Update channel - stable releases" }, - "@snackbarProviderPrioritySaved": { - "description": "Snackbar - provider order saved" + "channelPreview": "Pratinjau", + "@channelPreview": { + "description": "Update channel - beta/preview releases" }, - "@recentPlaylistInfo": { - "description": "Snackbar message when tapping playlist in recent access", - "placeholders": { - "name": { - "type": "String", - "description": "Playlist name" - } - } + "sectionSearchSource": "Sumber Pencarian", + "@sectionSearchSource": { + "description": "Settings section header" }, - "@lyricsProviderLyricsPlusDesc": { - "description": "Description for LyricsPlus provider" + "sectionDownload": "Unduhan", + "@sectionDownload": { + "description": "Settings section header" }, - "@libraryFilterDownloaded": { - "description": "Filter chip - show only downloaded items" + "sectionPerformance": "Performa", + "@sectionPerformance": { + "description": "Settings section header" }, - "recentPlaylistInfo": "Daftar Putar: {name}", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" + "sectionApp": "Aplikasi", + "@sectionApp": { + "description": "Settings section header" }, - "@actionCreate": { - "description": "Generic action button - create" + "sectionData": "Data", + "@sectionData": { + "description": "Settings section header" }, - "@downloadSelectQuality": { - "description": "Dialog title - choose audio quality" + "sectionDebug": "Debug", + "@sectionDebug": { + "description": "Settings section header" }, - "cueSplitAlbum": "Album: {album}", - "@cueSplitAlbum": { - "description": "Album name in CUE split sheet", - "placeholders": { - "album": { - "type": "String" - } - } + "sectionService": "Layanan", + "@sectionService": { + "description": "Settings section header" }, - "@trackCoverNoSource": { - "description": "Snackbar when no cover art URL or embedded cover" + "sectionAudioQuality": "Kualitas Audio", + "@sectionAudioQuality": { + "description": "Settings section header" }, - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" + "sectionFileSettings": "Pengaturan File", + "@sectionFileSettings": { + "description": "Settings section header" }, - "@notifLibraryScanCompleteBody": { - "description": "Notification body for library scan complete - number of indexed tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "sectionLyrics": "Lirik", + "@sectionLyrics": { + "description": "Settings section header" }, - "optionsDetailedLogging": "Log Detail", - "@optionsDetailedLogging": { - "description": "Enable verbose logs for debugging" + "lyricsMode": "Mode Lirik", + "@lyricsMode": { + "description": "Setting - how to save lyrics" }, - "@lyricsProvidersDiscardContent": { - "description": "Body text of the discard-changes dialog on lyrics provider page" + "lyricsModeDescription": "Pilih cara lirik disimpan bersama unduhan Anda", + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" }, - "@dialogDisableHistoryTitle": { - "description": "Confirmation dialog title shown before disabling download history" + "lyricsModeEmbed": "Sematkan dalam file", + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" }, - "downloadLossyOpus128Subtitle": "Ukuran terkecil, ~4MB per trek", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" + "lyricsModeEmbedSubtitle": "Lirik tersimpan di dalam metadata FLAC", + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" }, - "@appName": { - "description": "App name - DO NOT TRANSLATE" + "lyricsModeExternal": "File .lrc eksternal", + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" }, - "libraryActions": "Actions", - "@libraryActions": { - "description": "Section header for library actions" + "lyricsModeExternalSubtitle": "File .lrc terpisah untuk pemutar musik seperti Samsung Music", + "@lyricsModeExternalSubtitle": { + "description": "Subtitle for external option" }, - "setupNoFolderSelected": "Tidak ada folder dipilih. Apakah Anda ingin menggunakan folder Musik default?", - "@setupNoFolderSelected": { - "description": "Prompt when no folder selected" + "lyricsModeBoth": "Keduanya", + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", - "trackSaveFailed": "Failed: {error}", - "@trackSaveFailed": { - "description": "Snackbar when save operation fails", - "placeholders": { - "error": { - "type": "String" - } - } + "lyricsModeBothSubtitle": "Sematkan dan simpan file .lrc", + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" }, - "replayGainBatchConfirmTitle": "Tambah ReplayGain", - "@replayGainBatchConfirmTitle": { - "description": "Title of the batch ReplayGain confirmation dialog" + "sectionColor": "Warna", + "@sectionColor": { + "description": "Settings section header" }, - "tutorialExtensionsTip1": "Telusuri tab Repo untuk menemukan extension yang berguna", - "@tutorialExtensionsTip1": { - "description": "Tutorial extensions tip 1" + "sectionTheme": "Tema", + "@sectionTheme": { + "description": "Settings section header" }, - "@trackAddToQueue": { - "description": "Menu action to add a track to the playback queue" + "sectionLayout": "Tata Letak", + "@sectionLayout": { + "description": "Settings section header" }, - "@cacheTrackLookup": { - "description": "Cache item title for track ID lookup cache" + "sectionLanguage": "Bahasa", + "@sectionLanguage": { + "description": "Settings section header for language" }, - "@discographyNoAlbums": { - "description": "Error - no albums found for artist" + "appearanceLanguage": "Bahasa Aplikasi", + "@appearanceLanguage": { + "description": "Language setting title" }, - "@updateLater": { - "description": "Update button - dismiss" + "settingsAppearanceSubtitle": "Tema, warna, tampilan", + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" }, - "@snackbarFailedToInstall": { - "description": "Snackbar - extension install error" + "settingsDownloadSubtitle": "Layanan, kualitas, cadangan", + "@settingsDownloadSubtitle": { + "description": "Download settings description" }, - "@albumFolderArtistAlbumFlatSubtitle": { - "description": "Folder structure example for flat singles" + "settingsExtensionsSubtitle": "Kelola provider unduhan", + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" }, - "@errorMissingExtensionSource": { - "description": "Error - extension source not available", - "placeholders": { - "item": { - "type": "String" - } - } + "settingsLogsSubtitle": "Lihat log aplikasi untuk debugging", + "@settingsLogsSubtitle": { + "description": "Logs settings description" }, - "libraryFilterSortAlbumAsc": "Album (A-Z)", - "@libraryFilterSortAlbumAsc": { - "description": "Sort option - album ascending" + "loadingSharedLink": "Memuat link yang dibagikan...", + "@loadingSharedLink": { + "description": "Status when opening shared URL" }, - "@queueTrackCount": { - "description": "Track count label with plural support", + "pressBackAgainToExit": "Tekan kembali sekali lagi untuk keluar", + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, + "downloadAllCount": "Unduh Semua ({count})", + "@downloadAllCount": { + "description": "Download all button with count", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisMono": "Mono", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", + "tracksCount": "{count, plural, =1{1 lagu} other{{count} lagu}}", + "@tracksCount": { + "description": "Track count display", "placeholders": { - "source": { - "type": "String" + "count": { + "type": "int" } } }, - "@lyricsModeEmbed": { - "description": "Lyrics mode option - embed in audio file" + "trackCopyFilePath": "Salin lokasi file", + "@trackCopyFilePath": { + "description": "Action - copy file path" }, - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" + "trackRemoveFromDevice": "Hapus dari perangkat", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" }, - "@cacheRefreshStats": { - "description": "Button label to refresh cache statistics" + "trackLoadLyrics": "Muat Lirik", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" }, - "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", - "@lyricsProviderAppleMusicDesc": { - "description": "Description for Apple Music provider" + "trackMetadata": "Metadata", + "@trackMetadata": { + "description": "Tab title - track metadata" }, - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" + "trackFileInfo": "Info File", + "@trackFileInfo": { + "description": "Tab title - file information" }, - "updateFailedMessage": "Gagal mengunduh pembaruan", - "@updateFailedMessage": { - "description": "Update error message" + "trackLyrics": "Lirik", + "@trackLyrics": { + "description": "Tab title - lyrics" }, - "cacheEstimatedTotal": "Estimated cache usage: {size}", - "@cacheEstimatedTotal": { - "description": "Total cache size shown in summary", - "placeholders": { - "size": { - "type": "String" - } - } + "trackFileNotFound": "File tidak ditemukan", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" }, - "@aboutVersion": { - "description": "Version info label" + "trackOpenInDeezer": "Buka di Deezer", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" }, - "dialogRetry": "Coba Lagi", - "@cueSplitSplitting": { - "description": "Snackbar while splitting CUE", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "trackOpenInSpotify": "Buka di Spotify", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" }, - "@searchSortTitleZA": { - "description": "Sort option - title descending" + "trackTrackName": "Nama lagu", + "@trackTrackName": { + "description": "Metadata label - track title" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", - "@tutorialLibraryTip2": { - "description": "Tutorial library tip 2" + "trackArtist": "Artis", + "@trackArtist": { + "description": "Metadata label - artist name" }, - "extensionHealthServiceOffline": "Service offline", - "@extensionHealthServiceOffline": { - "description": "Tooltip for offline extension service" + "trackAlbumArtist": "Artis album", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" }, - "actionDeselect": "Batal Pilih", - "@actionDeselect": { - "description": "Action button - deselect all" + "trackAlbum": "Album", + "@trackAlbum": { + "description": "Metadata label - album name" }, - "@trackConvertOriginal": { - "description": "Label for keeping original bit depth or sample rate during conversion" + "trackTrackNumber": "Nomor lagu", + "@trackTrackNumber": { + "description": "Metadata label - track number" }, - "@libraryClearConfirmTitle": { - "description": "Dialog title for clear confirmation" + "trackDiscNumber": "Nomor disc", + "@trackDiscNumber": { + "description": "Metadata label - disc number" }, - "@dialogDownloadAllMessage": { - "description": "Body of the Download All confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDuration": "Durasi", + "@trackDuration": { + "description": "Metadata label - track length" }, - "homeSupports": "Mendukung: URL Lagu, Album, Daftar Putar, dan Artis", - "@downloadedAlbumDeleteSelected": { - "description": "Button - delete selected tracks" + "trackAudioQuality": "Kualitas audio", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" }, - "@recentShowAllDownloads": { - "description": "Button label to unhide hidden downloads in recent access" + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" + "trackReleaseDate": "Tanggal rilis", + "@trackReleaseDate": { + "description": "Metadata label - release date" }, - "collectionPlaylistEmptyTitle": "Playlist is empty", - "@collectionPlaylistEmptyTitle": { - "description": "Playlist empty state title" + "trackGenre": "Genre", + "@trackGenre": { + "description": "Metadata label - music genre" }, - "libraryFilterSortLatest": "Latest", - "@libraryFilterSortLatest": { - "description": "Sort option - newest first" + "trackLabel": "Label", + "@trackLabel": { + "description": "Metadata label - record label" }, - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" + "trackCopyright": "Hak cipta", + "@trackCopyright": { + "description": "Metadata label - copyright information" }, - "@selectionSelected": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDownloaded": "Diunduh", + "@trackDownloaded": { + "description": "Metadata label - download date" }, - "@tracksCount": { - "description": "Track count display", + "trackCopyLyrics": "Salin lirik", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsSource": "Sumber: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", "placeholders": { - "count": { - "type": "int" + "source": { + "type": "String" } } }, - "@optionsCheckUpdates": { - "description": "Auto update check toggle" - }, - "@qualityHiResFlacMaxSubtitle": { - "description": "Technical spec for hi-res max" - }, - "actionStop": "Stop", - "@actionStop": { - "description": "Generic action - stop" - }, - "@selectionSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "folderOrganizationNoneSubtitle": "Semua file di folder unduhan", - "@folderOrganizationNoneSubtitle": { - "description": "Subtitle for no organization option" - }, - "@updateDownloading": { - "description": "Update status - downloading" + "trackLyricsNotAvailable": "Lirik tidak tersedia untuk lagu ini", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" }, - "artistAlbums": "Album", - "@artistAlbums": { - "description": "Section header for artist albums" + "trackLyricsNotInFile": "Tidak ditemukan lirik dalam file ini", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" }, - "trackConvertDitherTriangular": "TPDF", - "@trackConvertDitherTriangular": { - "description": "Lossless conversion triangular probability density function dither option" + "trackFetchOnlineLyrics": "Ambil dari Online", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", - "@nowPlayingShuffleLibraryFailed": { - "description": "Snackbar when shuffling the library fails", - "placeholders": { - "error": { - "type": "String" - } - } + "trackLyricsTimeout": "Permintaan habis waktu. Coba lagi nanti.", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" }, - "@setupIcloudNotSupported": { - "description": "Error when user selects iCloud Drive on iOS" + "trackLyricsLoadFailed": "Gagal memuat lirik", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" }, - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + "trackEmbedLyrics": "Sematkan Lirik", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" }, - "@extensionsProviderPrioritySection": { - "description": "Section header - provider priority" + "trackLyricsEmbedded": "Lirik berhasil disematkan", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" }, - "@libraryShowDuplicateIndicatorSubtitle": { - "description": "Subtitle for duplicate indicator toggle" + "trackInstrumental": "Lagu instrumental", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" }, - "sectionDuplicates": "Duplicates", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" + "trackCopiedToClipboard": "Disalin ke clipboard", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" }, - "@backupTitle": { - "description": "App bar title for the backup and restore page" + "trackDeleteConfirmTitle": "Hapus dari perangkat?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" }, - "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", - "trackCoverResolution": "Cover resolution", - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", - "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", - "cacheSectionMaintenance": "Maintenance", - "@cacheSectionMaintenance": { - "description": "Section header for cleanup actions" + "trackDeleteConfirmMessage": "Ini akan menghapus file unduhan secara permanen dan menghapusnya dari riwayat Anda.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" }, - "@editMetadataFieldGenre": { - "description": "Chip label for genre field in auto-fill selector" + "dateToday": "Hari ini", + "@dateToday": { + "description": "Relative date - today" }, - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" + "dateYesterday": "Kemarin", + "@dateYesterday": { + "description": "Relative date - yesterday" }, - "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", - "@selectionBatchConvertConfirmMessage": { - "description": "Confirmation dialog message for batch conversion", + "dateDaysAgo": "{count} hari lalu", + "@dateDaysAgo": { + "description": "Relative date - days ago", "placeholders": { "count": { "type": "int" - }, - "format": { - "type": "String" - }, - "bitrate": { - "type": "String" } } }, - "@selectionTapPlaylistsToSelect": { - "description": "Hint shown in playlist selection mode" - }, - "qualityHiResFlacMaxSubtitle": "24-bit / hingga 192kHz", - "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", - "@snackbarRemovedTracksFromLoved": { - "description": "Snackbar after removing multiple tracks from Loved folder", + "dateWeeksAgo": "{count} minggu lalu", + "@dateWeeksAgo": { + "description": "Relative date - weeks ago", "placeholders": { "count": { "type": "int" } } }, - "folderOrganizationByArtistAlbum": "Berdasarkan Artis & Album", - "@folderOrganizationByArtistAlbum": { - "description": "Folder option - nested folders" - }, - "snackbarCannotOpenFile": "Tidak dapat membuka file: {error}", - "@snackbarCannotOpenFile": { - "description": "Snackbar - file open error", + "dateMonthsAgo": "{count} bulan lalu", + "@dateMonthsAgo": { + "description": "Relative date - months ago", "placeholders": { - "error": { - "type": "String" + "count": { + "type": "int" } } }, - "@optionsDetailedLoggingOff": { - "description": "Status when logging disabled" - }, - "@setupStorageDescription": { - "description": "Explanation for storage permission" - }, - "audioAnalysisCodec": "Codec", - "@regionCountryFR": { - "description": "Country name for SongLink region picker" - }, - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" + "storeFilterAll": "Semua", + "@storeFilterAll": { + "description": "Repo filter - all extensions" }, - "@libraryClearConfirmMessage": { - "description": "Dialog message for clear confirmation" + "storeFilterMetadata": "Metadata", + "@storeFilterMetadata": { + "description": "Repo filter - metadata providers" }, - "trackLyricsNotAvailable": "Lirik tidak tersedia untuk lagu ini", - "@trackLyricsNotAvailable": { - "description": "Message when lyrics not found" + "storeFilterDownload": "Unduhan", + "@storeFilterDownload": { + "description": "Repo filter - download providers" }, "storeFilterUtility": "Utilitas", "@storeFilterUtility": { "description": "Repo filter - utility extensions" }, - "collectionAddedToPlaylist": "Added to \"{playlistName}\"", - "@collectionAddedToPlaylist": { - "description": "Snackbar after adding track to playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } - }, - "cacheClearConfirmTitle": "Clear cache?", - "@cacheClearConfirmTitle": { - "description": "Dialog title before clearing one cache category" + "storeFilterLyrics": "Lirik", + "@storeFilterLyrics": { + "description": "Repo filter - lyrics providers" }, - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" + "storeFilterIntegration": "Integrasi", + "@storeFilterIntegration": { + "description": "Repo filter - integrations" }, - "@aboutMobileDeveloper": { - "description": "Role description for mobile dev" + "storeClearFilters": "Hapus filter", + "@storeClearFilters": { + "description": "Button to clear all filters" }, - "albumFolderYearAlbum": "[Tahun] Album", - "@albumFolderYearAlbum": { - "description": "Album folder option with year" + "storeAddRepoTitle": "Tambahkan Repositori Ekstensi", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" }, - "cacheTitle": "Storage & Cache", - "@extensionPostProcessing": { - "description": "Capability - post-download processing" + "storeAddRepoDescription": "Masukkan URL repositori GitHub yang berisi file registry.json untuk menelusuri dan memasang ekstensi.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" }, - "extensionsNoMetadataProvider": "Tidak ada ekstensi dengan provider metadata", - "@extensionsNoMetadataProvider": { - "description": "Empty state - no metadata providers" + "storeRepoUrlLabel": "Tautan Repositori", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" }, - "searchSortTitleZA": "Judul (Z-A)", - "@queueClearAllMessage": { - "description": "Clear queue confirmation" + "storeRepoUrlHint": "https://github.com/user/repo", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" }, - "audioAnalysisTitle": "Audio Quality Analysis", - "@audioAnalysisTitle": { - "description": "Title for audio analysis section" + "storeAddRepoButton": "Tambahkan Repositori", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" }, - "@aboutReportIssueSubtitle": { - "description": "Subtitle for report issue" + "storeChangeRepoTooltip": "Ubah repositori", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" }, - "@audioAnalysisSampleRate": { - "description": "Sample rate metric label" + "storeRepoDialogTitle": "Repositori Ekstensi", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" }, - "@discographySelectedCount": { - "description": "Selection count badge", - "placeholders": { - "count": { - "type": "int" - } - } + "storeRepoDialogCurrent": "Repositori saat ini:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" }, - "qualityFlacLosslessSubtitle": "16-bit / 44.1kHz", - "@qualityFlacLosslessSubtitle": { - "description": "Technical spec for lossless" + "storeNewRepoUrlLabel": "URL Repositori Baru", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" }, - "libraryScanFinalizing": "Finalizing library...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" + "storeLoadError": "Gagal memuat repositori", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" }, - "@trackEditMetadata": { - "description": "Menu action - edit embedded metadata" + "storeEmptyNoExtensions": "Tidak ada ekstensi yang tersedia", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" }, - "@downloadNeteaseIncludeRomanization": { - "description": "Setting to include romanized lyrics from Netease" + "storeEmptyNoResults": "Tidak ada ekstensi ditemukan", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" }, - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" + "extensionId": "ID", + "@extensionId": { + "description": "Extension detail - unique ID" }, - "regionCountryDE": "Germany", - "@regionCountryDE": { - "description": "Country name for SongLink region picker" + "extensionError": "Terjadi kesalahan", + "@extensionError": { + "description": "Extension detail - error message" }, - "optionsAutoFallback": "Layanan Cadangan", - "@optionsAutoFallback": { - "description": "Auto-retry with other services" + "extensionCapabilities": "Kemampuan", + "@extensionCapabilities": { + "description": "Section header - extension features" }, - "@trackMetadataPlay": { - "description": "Action button - play track" + "extensionMetadataProvider": "Provider Metadata", + "@extensionMetadataProvider": { + "description": "Capability - provides metadata" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" + "extensionDownloadProvider": "Provider Unduhan", + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" }, - "aboutMobileDeveloper": "Pengembang versi mobile", - "@trackDownloaded": { - "description": "Metadata label - download date" + "extensionLyricsProvider": "Provider Lirik", + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" }, - "homeSkipAlreadyDownloaded": "Skip already downloaded songs", - "@homeSkipAlreadyDownloaded": { - "description": "Checkbox label in import dialog to skip already-downloaded songs" + "extensionUrlHandler": "Penanganan URL", + "@extensionUrlHandler": { + "description": "Capability - handles URLs" }, - "dialogUninstall": "Copot", - "@dialogUninstall": { - "description": "Dialog button - uninstall extension" + "extensionQualityOptions": "Opsi Kualitas", + "@extensionQualityOptions": { + "description": "Capability - quality selection" }, - "collectionDeletePlaylist": "Delete playlist", - "@collectionDeletePlaylist": { - "description": "Action to delete playlist" + "extensionPostProcessingHooks": "Hook Pasca-Pemrosesan", + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" }, - "trackCoverOnline": "Online cover", - "@trackCoverOnline": { - "description": "Label shown when metadata autofill downloaded cover art from the internet" + "extensionPermissions": "Izin", + "@extensionPermissions": { + "description": "Section header - required permissions" }, - "downloadTitle": "Unduhan", - "@downloadTitle": { - "description": "Download settings page title" + "extensionSettings": "Pengaturan", + "@extensionSettings": { + "description": "Section header - extension settings" }, - "searchArtists": "Artis", - "@searchArtists": { - "description": "Search result category - artists" + "extensionRemoveButton": "Hapus Ekstensi", + "@extensionRemoveButton": { + "description": "Button to uninstall extension" }, - "extensionUrlHandler": "Penanganan URL", - "@extensionUrlHandler": { - "description": "Capability - handles URLs" + "extensionUpdated": "Diperbarui", + "@extensionUpdated": { + "description": "Extension detail - last update" }, - "@timeHoursAgo": { - "description": "Relative time - hours ago", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionMinAppVersion": "Versi App Minimum", + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" }, - "editMetadataAdvanced": "Advanced", - "@editMetadataAdvanced": { - "description": "Expandable section label for advanced metadata fields" + "extensionCustomTrackMatching": "Pencocokan Lagu Kustom", + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" }, - "@actionSelectAll": { - "description": "Action button - select all items" + "extensionPostProcessing": "Pasca-Pemrosesan", + "@extensionPostProcessing": { + "description": "Capability - post-download processing" }, - "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", - "@timeMinutesAgo": { - "description": "Relative time - minutes ago", + "extensionHooksAvailable": "{count} hook tersedia", + "@extensionHooksAvailable": { + "description": "Post-processing hooks count", "placeholders": { "count": { "type": "int" } } }, - "regionCountryXK": "Kosovo", - "@downloadAskQualitySubtitle": { - "description": "Subtitle for ask quality toggle" - }, - "setupLanguageSystemDefault": "Bawaan Sistem", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "@updateAvailable": { - "description": "Update dialog title" - }, - "cacheEntries": "{count} entries", - "@cacheEntries": { - "description": "Track cache entry count", + "extensionPatternsCount": "{count} pola", + "@extensionPatternsCount": { + "description": "URL patterns count", "placeholders": { "count": { "type": "int" } } }, - "@notifLibraryScanExcluded": { - "description": "Library scan complete suffix - excluded track count", + "extensionStrategy": "Strategi: {strategy}", + "@extensionStrategy": { + "description": "Track matching strategy name", "placeholders": { - "count": { - "type": "int" + "strategy": { + "type": "String" } } }, - "extensionsMetadataPrioritySubtitle": "Atur urutan sumber pencarian & metadata", - "@extensionsMetadataPrioritySubtitle": { - "description": "Subtitle for metadata priority" + "extensionsProviderPrioritySection": "Prioritas Provider", + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" }, - "downloadedAlbumSelectToDelete": "Pilih lagu untuk dihapus", - "@downloadedAlbumSelectToDelete": { - "description": "Placeholder when nothing selected" + "extensionsInstalledSection": "Ekstensi Terpasang", + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" }, - "@dialogClearHistoryTitle": { - "description": "Dialog title - clear download history" + "extensionsNoExtensions": "Tidak ada ekstensi terpasang", + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" }, - "tutorialSettingsTip1": "Ubah lokasi unduhan dan pengaturan folder", - "@tutorialSettingsTip1": { - "description": "Tutorial settings tip 1" + "extensionsNoExtensionsSubtitle": "Pasang file .spotiflac-ext untuk menambahkan provider baru", + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, + "extensionsInstallButton": "Pasang Ekstensi", + "@extensionsInstallButton": { + "description": "Button to install extension from file" + }, + "extensionsInfoTip": "Ekstensi dapat menambahkan provider metadata dan unduhan baru. Hanya pasang ekstensi dari sumber terpercaya.", + "@extensionsInfoTip": { + "description": "Security warning about extensions" }, + "extensionsInstalledSuccess": "Ekstensi berhasil dipasang", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "allFilesAccessDisabledSubtitle": "Limited to media folders only", - "@allFilesAccessDisabledSubtitle": { - "description": "Subtitle when all files access is disabled" - }, - "@appearanceHistoryViewList": { - "description": "List layout option" + "extensionsInstalledCount": "{count} ekstensi berhasil terpasang", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } }, - "@notifAlreadyInLibraryCount": { - "description": "Notification title when track is already in library, with count", + "extensionsInstallPartialSuccess": "Ekstensi yang terpasang berjumlah {installed} dari {attempted}", + "@extensionsInstallPartialSuccess": { + "description": "Message when installing multiple extensions partially succeeds", "placeholders": { - "completed": { - "type": "int" + "installed": { + "type": "int", + "description": "Number of successfully installed extensions" }, - "total": { - "type": "int" + "attempted": { + "type": "int", + "description": "Number of selected extensions" } } }, - "@libraryFilterAll": { - "description": "Filter chip - show all library items" + "extensionsDownloadPriority": "Prioritas Unduhan", + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" }, - "settingsDownload": "Unduhan", - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "@libraryFilterSort": { - "description": "Filter section - sort order" + "extensionsDownloadPrioritySubtitle": "Atur urutan layanan unduhan", + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" }, - "metadataProvidersSubtitle": "Drag to set search and metadata source order", - "@extensionPermissions": { - "description": "Section header - required permissions" + "extensionsFallbackTitle": "Ekstensi Cadangan", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "selectionSelectToDelete": "Pilih lagu untuk dihapus", - "@libraryExternalPlayerSubtitle": { - "description": "Subtitle for external player option" + "extensionsFallbackSubtitle": "Pilih ekstensi unduhan terpasang mana yang dapat digunakan sebagai cadangan", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" }, - "extensionVerificationOpenBrowser": "Open browser", - "@extensionVerificationOpenBrowser": { - "description": "Button to open the extension verification URL in a browser" + "extensionsNoDownloadProvider": "Tidak ada ekstensi dengan provider unduhan", + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" }, - "@trackConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless-to-lossless conversion", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionsMetadataPriority": "Prioritas Metadata", + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" }, - "@snackbarAddedTracksToQueue": { - "description": "Snackbar - multiple tracks added to queue", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsMetadataPrioritySubtitle": "Atur urutan sumber pencarian & metadata", + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" }, - "@backupContentsWishlist": { - "description": "Backup contents row for wishlist tracks count", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsNoMetadataProvider": "Tidak ada ekstensi dengan provider metadata", + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" }, - "@cacheCleanupUnusedSubtitle": { - "description": "Subtitle for cleanup unused data action" + "extensionsSearchProvider": "Provider Pencarian", + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" }, - "trackLabel": "Label", - "@trackLabel": { - "description": "Metadata label - record label" + "extensionsNoCustomSearch": "Tidak ada ekstensi dengan pencarian kustom", + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" }, - "@collectionAddedToLoved": { - "description": "Snackbar after adding track to loved folder", - "placeholders": { - "trackName": { - "type": "String" - } - } + "extensionsSearchProviderDescription": "Pilih layanan yang digunakan untuk mencari lagu", + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" }, - "regionCountryGB": "United Kingdom", - "dialogCancel": "Batal", - "@dialogCancel": { - "description": "Dialog button - cancel action" + "extensionsCustomSearch": "Pencarian kustom", + "@extensionsCustomSearch": { + "description": "Label for custom search provider" }, - "@folderOrganizationByArtistAlbumSubtitle": { - "description": "Subtitle for nested folder option" + "extensionsErrorLoading": "Error memuat ekstensi", + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" }, - "@notifAllDownloadsComplete": { - "description": "Notification title when all downloads finish successfully" + "qualityFlacLossless": "FLAC Lossless", + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" }, - "setupEnableNotifications": "Aktifkan Notifikasi", - "@setupEnableNotifications": { - "description": "Button to enable notifications" + "qualityFlacLosslessSubtitle": "16-bit / 44.1kHz", + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" }, - "@notifFinalizingTrack": { - "description": "Notification title while finalizing (embedding metadata) a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "qualityHiResFlac": "Hi-Res FLAC", + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" }, - "@downloadLossy320FormatDesc": { - "description": "Description in the lossy format picker" + "qualityHiResFlacSubtitle": "24-bit / hingga 96kHz", + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" }, - "filenameFormat": "Format Nama File", - "@filenameFormat": { - "description": "Setting title - filename pattern" + "qualityHiResFlacMax": "Hi-Res FLAC Max", + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" }, - "historySearchHint": "Cari riwayat...", - "@historySearchHint": { - "description": "Search bar placeholder in history" + "qualityHiResFlacMaxSubtitle": "24-bit / hingga 192kHz", + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" }, - "@tutorialReadyMessage": { - "description": "Tutorial completion message" + "downloadLossy320": "Lossy 320kbps", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" }, - "cacheTempDirectoryDesc": "Temporary files from downloads and audio conversion.", - "@cacheTempDirectoryDesc": { - "description": "Description of what temporary directory contains" + "downloadLossyFormat": "Format Lossy", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" }, - "@trackSaveLyrics": { - "description": "Menu action - save lyrics as .lrc file" + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" }, - "@notifDownloadsFinished": { - "description": "Notification title when queue finishes with some failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" }, - "@historyFilterAlbums": { - "description": "Filter chip - show albums only" + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" }, - "trackEmbedLyrics": "Sematkan Lirik", - "@trackEmbedLyrics": { - "description": "Action - embed lyrics into audio file" + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" }, - "@downloadPrimaryArtistOnlyOff": { - "description": "Status label when primary-artist-only folder naming is disabled" + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" }, - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" }, - "snackbarHistoryCleared": "Riwayat dihapus", - "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", - "@artistPopular": { - "description": "Section header for popular/top tracks" + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" }, - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" }, - "extensionLyricsProvider": "Provider Lirik", - "@extensionLyricsProvider": { - "description": "Capability - provides lyrics" + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" }, - "historyFilterAll": "Semua", - "@historyFilterAll": { - "description": "Filter chip - show all items" + "downloadLossy320Format": "Format Lossy 320kbps", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" }, - "tutorialSearchTitle": "Menemukan Musik", - "@lyricsModeExternal": { - "description": "Lyrics mode option - separate LRC file" + "downloadLossy320FormatDesc": "Pilih format output untuk unduhan lossy 320kbps. Aliran data asli akan dikonversi ke format yang Anda pilih bila diperlukan.", + "@downloadLossy320FormatDesc": { + "description": "Description in the lossy format picker" }, - "@actionDismiss": { - "description": "Generic action - dismiss" + "downloadLossyMp3": "MP3 320kbps", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" }, - "trackOpenInSpotify": "Buka di Spotify", - "@trackOpenInSpotify": { - "description": "Action - open track in Spotify app" + "downloadLossyMp3Subtitle": "Kompatibilitas terbaik, ~10MB per trek", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" }, - "@libraryClear": { - "description": "Button to clear all library entries" + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "discographyFailedToFetch": "Failed to fetch some albums", - "@filenameShowAdvancedTagsDescription": { - "description": "Description for advanced filename tag toggle" + "downloadLossyAacSubtitle": "Kompatibilitas seluler terbaik, kontainer M4A", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" }, - "@storeUpdate": { - "description": "Update available button" + "downloadLossyOpus256": "Opus 256kbps", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" }, - "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", - "@collectionPlaylistTracks": { - "description": "Track count label for custom playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadLossyOpus256Subtitle": "Opus kualitas terbaik, ~8MB per trek", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" }, - "optionsPrimaryProviderSubtitle": "Layanan yang digunakan untuk mencari berdasarkan nama lagu atau album", - "@optionsPrimaryProviderSubtitle": { - "description": "Subtitle for primary provider" + "downloadLossyOpus128": "Opus 128kbps", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" }, - "@downloadEmbedLyricsDisabled": { - "description": "Subtitle when lyrics embedding is blocked by metadata toggle" - }, - "@librarySourceLocal": { - "description": "Badge for tracks from local library scan" + "downloadLossyOpus128Subtitle": "Ukuran terkecil, ~4MB per trek", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" }, - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" + "downloadAskBeforeDownload": "Tanya Sebelum Unduh", + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" }, - "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is off" + "downloadDirectory": "Direktori Unduhan", + "@downloadDirectory": { + "description": "Setting - download folder" }, - "queueDownloadingCount": "Downloading ({count})", - "@queueDownloadingCount": { - "description": "Header for active downloads section with count", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadSeparateSinglesFolder": "Folder Singles Terpisah", + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" }, - "extensionVerificationBrowserInApp": "In-app", - "trackAudioQuality": "Kualitas audio", - "@trackAudioQuality": { - "description": "Metadata label - audio quality" + "downloadAlbumFolderStructure": "Struktur Folder Album", + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" }, - "libraryQualityLabelFileFormat": "Format berkas", - "libraryRemovedMissingFiles": "Removed {count} missing files from library", - "@libraryRemovedMissingFiles": { - "description": "Snackbar after cleanup", - "placeholders": { - "count": { - "type": "int" - } - } + "albumFolderStructureDescription": "Pilih bagaimana struktur folder album akan dibuat", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" + "downloadUseAlbumArtistForFolders": "Gunakan Artis Album untuk folder", + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "@errorInvalidFolderSelected": { - "description": "Error when the selected folder is invalid" + "downloadUsePrimaryArtistOnly": "Hanya artis utama untuk folder", + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" }, - "@searchSortArtistZA": { - "description": "Sort option - artist descending" + "downloadUsePrimaryArtistOnlyEnabled": "Artis unggulan dihapus dari nama folder (misalnya Justin Bieber, Quavo → Justin Bieber)", + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" }, - "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", - "@snackbarAddedTracksToLoved": { - "description": "Snackbar after adding multiple tracks to Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadUsePrimaryArtistOnlyDisabled": "Nama lengkap artis digunakan untuk nama folder", + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" }, - "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", - "@cancelDownloadContent": { - "description": "Dialog body when confirming cancellation of an active download", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadSelectQuality": "Pilih Kualitas", + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" }, - "settingsCacheSubtitle": "View size and clear cached data", - "@settingsCacheSubtitle": { - "description": "Subtitle for cache management menu" + "downloadFrom": "Unduh Dari", + "@downloadFrom": { + "description": "Label - download source" }, - "notifLibraryScanCompleteBody": "{count} tracks indexed", - "@cacheSizeWithFiles": { - "description": "Cache size and file count", - "placeholders": { - "size": { - "type": "String" - }, - "count": { - "type": "int" - } - } + "appearanceAmoledDark": "AMOLED Gelap", + "@appearanceAmoledDark": { + "description": "Theme option - pure black" }, - "@downloadAskBeforeDownload": { - "description": "Setting - show quality picker" + "appearanceAmoledDarkSubtitle": "Latar belakang hitam murni", + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" }, - "@extensionHealthDegraded": { - "description": "Extension service health status - degraded" + "appearanceHeroAnimations": "Animasi hero", + "@appearanceHeroAnimations": { + "description": "Toggle for shared-element (Hero) transitions" }, - "@sectionPerformance": { - "description": "Settings section header" + "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", + "@appearanceHeroAnimationsSubtitle": { + "description": "Subtitle for the Hero animations toggle" }, - "@trackCoverCurrent": { - "description": "Label for the currently embedded cover preview" + "appearanceForceBlur": "Selalu gunakan efek blur", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" }, - "discographySelectAlbums": "Pilih Album...", - "@discographySelectAlbums": { - "description": "Option - manually select albums to download" + "appearanceForceBlurSubtitle": "Aktifkan efek buram bilah navigasi bahkan pada perangkat yang dinonaktifkan secara bawaan. Dapat memengaruhi performa.", + "@appearanceForceBlurSubtitle": { + "description": "Subtitle for the force-blur toggle" }, - "aboutAppDescription": "Cari metadata musik, kelola ekstensi, dan atur perpustakaan Anda.", - "@aboutAppDescription": { - "description": "App description in header card" + "queueClearAll": "Hapus Semua", + "@queueClearAll": { + "description": "Button - clear all queue items" }, - "extensionCustomTrackMatching": "Pencocokan Lagu Kustom", - "@extensionCustomTrackMatching": { - "description": "Capability - custom track matching algorithm" + "queueClearAllMessage": "Apakah Anda yakin ingin menghapus semua unduhan?", + "@queueClearAllMessage": { + "description": "Clear queue confirmation" }, - "@editMetadataSelectNone": { - "description": "Button to clear selected fields for auto-fill" + "settingsAutoExportFailed": "Unduhan yang gagal diekspor otomatis", + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" }, - "@trackPlayNext": { - "description": "Menu action to play a track as the next queue item" + "settingsAutoExportFailedSubtitle": "Simpan unduhan yang gagal ke file TXT secara otomatis", + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" }, - "extensionCapabilities": "Kemampuan", - "@extensionCapabilities": { - "description": "Section header - extension features" + "settingsDownloadNetwork": "Jaringan Unduhan", + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" }, - "@downloadSelectServiceToEnable": { - "description": "Subtitle when quality picker is disabled due to extension service" + "settingsDownloadNetworkAny": "WiFi + Data Seluler", + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" }, - "logIssueRateLimitedDescription": "Too many requests to the service", - "@logIssueRateLimitedDescription": { - "description": "Diagnostic badge description for rate limiting" + "settingsDownloadNetworkWifiOnly": "Hanya WiFi", + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" }, - "@actionResume": { - "description": "Action button - resume download" + "settingsDownloadNetworkSubtitle": "Pilih jaringan mana yang akan digunakan untuk mengunduh. Jika diatur ke Hanya WiFi, unduhan akan berhenti sementara dan menggunakan data seluler.", + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" }, - "@updateDownloadInstall": { - "description": "Update button - download and install" + "settingsConcurrentDownloads": "Unduhan bersamaan", + "@settingsConcurrentDownloads": { + "description": "Setting title - how many tracks download at the same time" }, - "downloadLossy320Format": "Format Lossy 320kbps", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" + "settingsConcurrentDownloadsSubtitle": "Mengunduh beberapa lagu sekaligus lebih cepat, tetapi beberapa penyedia mungkin membatasi permintaan paralel.", + "@settingsConcurrentDownloadsSubtitle": { + "description": "Subtitle explaining the concurrent downloads picker" }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@trackCopyright": { - "description": "Metadata label - copyright information" + "concurrentDownloadsOne": "1 lagu dalam satu waktu", + "@concurrentDownloadsOne": { + "description": "Concurrent downloads option - sequential" }, - "@snackbarExtensionInstalled": { - "description": "Snackbar - extension installed successfully", + "concurrentDownloadsCount": "Hingga {count} lagu dalam satu waktu", + "@concurrentDownloadsCount": { + "description": "Concurrent downloads option - parallel", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "@regionCountryJP": { - "description": "Country name for SongLink region picker" + "albumFolderArtistAlbum": "Artis / Album", + "@albumFolderArtistAlbum": { + "description": "Album folder option" }, - "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", - "@trackReEnrichOnlineSubtitle": { - "description": "Subtitle for re-enrich metadata action for local items" + "albumFolderArtistAlbumSubtitle": "Albums/Nama Artis/Nama Album/", + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" }, - "nowPlayingNothingPlaying": "Nothing is playing", - "@nowPlayingNothingPlaying": { - "description": "Empty state when no track is currently playing" + "albumFolderArtistYearAlbum": "Artis / [Tahun] Album", + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", - "@tutorialDownloadDesc": { - "description": "Tutorial download page description" + "albumFolderArtistYearAlbumSubtitle": "Albums/Nama Artis/[2005] Nama Album/", + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" }, - "@appearanceTitle": { - "description": "Appearance settings page title" + "albumFolderAlbumOnly": "Album Saja", + "@albumFolderAlbumOnly": { + "description": "Album folder option" }, - "@backupExportSectionDescription": { - "description": "Description of what a backup contains" + "albumFolderAlbumOnlySubtitle": "Albums/Nama Album/", + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" }, - "@downloadLossyOpus128": { - "description": "Lossy format option - Opus 128kbps" + "albumFolderYearAlbum": "[Tahun] Album", + "@albumFolderYearAlbum": { + "description": "Album folder option with year" }, - "@logFilterSection": { - "description": "Filter section title" + "albumFolderYearAlbumSubtitle": "Albums/[2005] Nama Album/", + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" }, - "trackReEnrichSuccess": "Metadata re-enriched successfully", - "@trackReEnrichSuccess": { - "description": "Snackbar after successful re-enrichment" + "albumFolderArtistAlbumSingles": "Artis / Album + Singel", + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", - "@backupContentsHistory": { - "description": "Backup contents row for history count", - "placeholders": { - "count": { - "type": "int" - } - } + "albumFolderArtistAlbumSinglesSubtitle": "Artis/Album/ dan Artis/Single/", + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" }, - "snackbarAddedToQueue": "Menambahkan \"{trackName}\" ke antrian", - "@snackbarAddedToQueue": { - "description": "Snackbar - track added to download queue", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "libraryAutoScanOnOpen": "Every app open", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "audioAnalysisChannels": "Channels", - "@audioAnalysisChannels": { - "description": "Channels metric label" - }, - "appearanceHistoryViewList": "Daftar", - "updateDownloadInstall": "Unduh & Pasang", - "@libraryShowDuplicateIndicator": { - "description": "Toggle for duplicate indicator in search" + "albumFolderArtistAlbumFlat": "Artis / Album (Single digabung)", + "@albumFolderArtistAlbumFlat": { + "description": "Album folder option with singles directly in artist folder" }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" + "albumFolderArtistAlbumFlatSubtitle": "Artis/Album/ dan Artis/lagu.flac", + "@albumFolderArtistAlbumFlatSubtitle": { + "description": "Folder structure example for flat singles" }, - "searchSortTitleAZ": "Judul (A-Z)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" + "downloadedAlbumDeleteSelected": "Hapus yang Dipilih", + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" }, - "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", - "@collectionRemovedFromLoved": { - "description": "Snackbar after removing track from loved folder", + "downloadedAlbumDeleteMessage": "Hapus {count} {count, plural, =1{lagu} other{lagu}} dari album ini?\n\nIni juga akan menghapus file dari penyimpanan.", + "@downloadedAlbumDeleteMessage": { + "description": "Delete confirmation with count", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "sectionAudioQuality": "Kualitas Audio", - "@sectionAudioQuality": { - "description": "Settings section header" - }, - "trackConvertSuccess": "Converted to {format} successfully", - "@trackConvertSuccess": { - "description": "Snackbar after successful conversion", + "downloadedAlbumSelectedCount": "{count} dipilih", + "@downloadedAlbumSelectedCount": { + "description": "Selection count indicator", "placeholders": { - "format": { - "type": "String" + "count": { + "type": "int" } } }, - "dialogUninstallExtensionMessage": "Apakah Anda yakin ingin menghapus {extensionName}?", - "@dialogUninstallExtensionMessage": { - "description": "Dialog message - uninstall specific extension", + "downloadedAlbumTapToSelect": "Ketuk lagu untuk memilih", + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" + }, + "downloadedAlbumDeleteCount": "Hapus {count} {count, plural, =1{lagu} other{lagu}}", + "@downloadedAlbumDeleteCount": { + "description": "Delete button text with count", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "downloadNativeWorkerSubtitle": "Layanan latar belakang Android untuk unduhan ekstensi", - "@downloadNativeWorkerSubtitle": { - "description": "Setting subtitle for Android native download worker" - }, - "storeUpdate": "Perbarui", - "libraryFilterMetadataMissingAny": "Missing any metadata", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" + "downloadedAlbumSelectToDelete": "Pilih lagu untuk dihapus", + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" }, - "@selectionBatchConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless batch conversion", + "downloadedAlbumDiscHeader": "Disc {discNumber}", + "@downloadedAlbumDiscHeader": { + "description": "Header for disc separator in multi-disc albums", "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - }, - "quality": { - "type": "String" + "discNumber": { + "type": "int", + "example": "1" } } }, - "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", - "@editMetadataAutoFillDesc": { - "description": "Description for the auto-fill section" + "recentTypeArtist": "Artis", + "@recentTypeArtist": { + "description": "Recent access item type - artist" }, - "editMetadataAutoFillSource": "Metadata source", - "@editMetadataAutoFillSource": { - "description": "Label for the metadata extension selector in online auto-fill" + "recentTypeAlbum": "Album", + "@recentTypeAlbum": { + "description": "Recent access item type - album" }, - "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", - "@editMetadataAutoFillSourceAutomatic": { - "description": "Automatic source option that follows configured metadata provider priority" + "recentTypeSong": "Lagu", + "@recentTypeSong": { + "description": "Recent access item type - song/track" }, - "editMetadataAutoFillFind": "Find metadata", - "@editMetadataAutoFillFind": { - "description": "Button label for finding an online metadata candidate" + "recentTypePlaylist": "Daftar putar", + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" }, - "editMetadataAutoFillPreview": "Data from {source}", - "@editMetadataAutoFillPreview": { - "description": "Title for the online metadata preview", + "recentEmpty": "Belum ada item terbaru", + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, + "recentShowAllDownloads": "Tampilkan Semua Unduhan", + "@recentShowAllDownloads": { + "description": "Button label to unhide hidden downloads in recent access" + }, + "recentPlaylistInfo": "Daftar Putar: {name}", + "@recentPlaylistInfo": { + "description": "Snackbar message when tapping playlist in recent access", "placeholders": { - "source": { - "type": "String" + "name": { + "type": "String", + "description": "Playlist name" } } }, - "editMetadataAutoFillCoverAvailable": "Cover artwork available", - "@editMetadataAutoFillCoverAvailable": { - "description": "Preview value when the selected metadata source provides cover artwork" + "discographyDownload": "Unduh Diskografi", + "@discographyDownload": { + "description": "Button - download artist discography" }, - "editMetadataAutoFillApply": "Apply selected data", - "@editMetadataAutoFillApply": { - "description": "Button label for applying the previewed metadata" + "discographyDownloadAll": "Unduh Semua", + "@discographyDownloadAll": { + "description": "Option - download entire discography" }, - "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", - "@editMetadataAutoFillDoneFromSource": { - "description": "Snackbar confirming fields applied from a selected metadata source", + "discographyDownloadAllSubtitle": "{count} lagu dari {albumCount} rilisan", + "@discographyDownloadAllSubtitle": { + "description": "Subtitle showing total tracks and albums", "placeholders": { "count": { "type": "int" }, - "source": { - "type": "String" + "albumCount": { + "type": "int" } } }, - "@lyricsProviderExtensionDesc": { - "description": "Generic description for extension-based lyrics providers" - }, - "downloadSongLinkRegion": "SongLink Region", - "@downloadSongLinkRegion": { - "description": "Setting for SongLink region used during fallback resolution" - }, - "shareSheetNoExtensions": "No other compatible services", - "@shareSheetNoExtensions": { - "description": "Empty state when no extensions can be searched for cross-service links" + "discographyAlbumsOnly": "Hanya Album", + "@discographyAlbumsOnly": { + "description": "Option - download only albums" }, - "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", - "@queueFlacConfirmMessage": { - "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", + "discographyAlbumsOnlySubtitle": "{count} lagu dari {albumCount} album", + "@discographyAlbumsOnlySubtitle": { + "description": "Subtitle showing album tracks count", "placeholders": { "count": { "type": "int" + }, + "albumCount": { + "type": "int" } } }, - "tooltipAddToPlaylist": "Add to Playlist", - "@tooltipAddToPlaylist": { - "description": "Tooltip for the Add to Playlist button" - }, - "@snackbarAddedToQueueGeneric": { - "description": "Snackbar when a track is added to the playback queue without naming it" - }, - "@tutorialSettingsTip2": { - "description": "Tutorial settings tip 2" - }, - "extensionPermissions": "Izin", - "releaseTypeSingle": "Single", - "aboutTelegramChannelSubtitle": "Pengumuman dan pembaruan", - "@aboutTelegramChannelSubtitle": { - "description": "Subtitle for Telegram channel" - }, - "@dialogDisableAndClear": { - "description": "Confirmation action to disable download history and clear existing entries" + "discographySinglesOnly": "Hanya Single & EP", + "@discographySinglesOnly": { + "description": "Option - download only singles" }, - "@homeSearchHintProvider": { - "description": "Placeholder for the main search field when a provider is selected", + "discographySinglesOnlySubtitle": "​{count} lagu dari {albumCount} single", + "@discographySinglesOnlySubtitle": { + "description": "Subtitle showing singles tracks count", "placeholders": { - "providerName": { - "type": "String" + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" } } }, - "metadataProvidersTitle": "Metadata Provider Priority", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" + "discographySelectAlbums": "Pilih Album...", + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" }, - "trackAddToQueue": "Add to queue", - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" + "discographySelectAlbumsSubtitle": "Pilih album atau single spesifik", + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" }, - "@editMetadataSelectEmpty": { - "description": "Button to select only fields that are currently empty" + "discographyFetchingTracks": "Memuat lagu...", + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" }, - "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", - "discographyAlbumsOnlySubtitle": "{count} lagu dari {albumCount} album", - "@discographyAlbumsOnlySubtitle": { - "description": "Subtitle showing album tracks count", + "discographyFetchingAlbum": "Memuat {current} dari {total}...", + "@discographyFetchingAlbum": { + "description": "Progress - fetching specific album", "placeholders": { - "count": { + "current": { "type": "int" }, - "albumCount": { + "total": { "type": "int" } } }, - "setupNotificationEnable": "Aktifkan Notifikasi", - "@setupNotificationEnable": { - "description": "Button to enable notifications" + "discographySelectedCount": "{count} dipilih", + "@discographySelectedCount": { + "description": "Selection count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "settingsAppearanceSubtitle": "Tema, warna, tampilan", - "@settingsAppearanceSubtitle": { - "description": "Appearance settings description" + "discographyDownloadSelected": "Unduh yang Dipilih", + "@discographyDownloadSelected": { + "description": "Button - download selected albums" }, - "@notifUpdateFailedBody": { - "description": "Notification body when app update download fails" + "discographyAddedToQueue": "{count} lagu ditambahkan ke antrean", + "@discographyAddedToQueue": { + "description": "Snackbar - tracks added from discography", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@aboutOriginalCreator": { - "description": "Role description for original creator" + "discographySkippedDownloaded": "{added} added, {skipped} already downloaded", + "@discographySkippedDownloaded": { + "description": "Snackbar - with skipped tracks count", + "placeholders": { + "added": { + "type": "int" + }, + "skipped": { + "type": "int" + } + } }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", - "@libraryBuiltInPreviewPlayer": { - "description": "Setting option to use the built-in preview player" + "discographyNoAlbums": "No albums available", + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" }, - "tooltipPlay": "Putar", - "@tooltipPlay": { - "description": "Tooltip - play button" + "discographyFailedToFetch": "Failed to fetch some albums", + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" }, - "@safMigrationMessage2": { - "description": "Second paragraph of SAF migration dialog" + "sectionStorageAccess": "Storage Access", + "@sectionStorageAccess": { + "description": "Section header for storage access settings" }, - "@extensionsSearchProvider": { - "description": "Setting - search provider selection" + "allFilesAccess": "All Files Access", + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "libraryAboutDescription": "Memindai koleksi musik yang sudah ada untuk mendeteksi duplikat saat mengunduh. Mendukung format FLAC, ALAC, M4A, MP3, Opus, OGG, WAV, AIFF, dan APE. Metadata dibaca dari tag file jika tersedia.", - "@libraryAboutDescription": { - "description": "Description of local library feature" + "allFilesAccessEnabledSubtitle": "Can write to any folder", + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" }, - "downloadAskBeforeDownload": "Tanya Sebelum Unduh", - "nowPlayingNoMetadata": "No metadata available", - "@nowPlayingNoMetadata": { - "description": "Empty state when track metadata cannot be loaded" + "allFilesAccessDisabledSubtitle": "Limited to media folders only", + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" }, - "trackInstrumental": "Lagu instrumental", - "@trackInstrumental": { - "description": "Message when track is instrumental (no lyrics)" + "allFilesAccessDescription": "Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.", + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" }, - "@collectionWishlistEmptyTitle": { - "description": "Wishlist empty state title" + "allFilesAccessDeniedMessage": "Permission was denied. Please enable 'All files access' manually in system settings.", + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", - "downloadDeduplication": "Skip Duplicate Downloads", - "libraryFilterSortOldest": "Oldest", - "@libraryFilterSortOldest": { - "description": "Sort option - oldest first" + "allFilesAccessDisabledMessage": "All Files Access disabled. The app will use limited storage access.", + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" }, - "setupSkip": "Lewati untuk sekarang", - "@setupSkip": { - "description": "Skip current step button" + "settingsLocalLibrary": "Local Library", + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" }, - "@setupFolderDescription": { - "description": "Explanation for folder selection" + "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" }, - "@settingsLogsSubtitle": { - "description": "Logs settings description" + "settingsCache": "Storage & Cache", + "@settingsCache": { + "description": "Settings menu item - cache management" }, - "storeNewRepoUrlLabel": "URL Repositori Baru", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" + "settingsCacheSubtitle": "View size and clear cached data", + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" }, - "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", - "@cacheClearConfirmMessage": { - "description": "Dialog message before clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "libraryTitle": "Local Library", + "@libraryTitle": { + "description": "Library settings page title" }, - "trackMetadataPlay": "Putar", + "libraryScanSettings": "Scan Settings", + "@libraryScanSettings": { + "description": "Section header for scan settings" + }, + "libraryEnableLocalLibrary": "Enable Local Library", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, - "optionsUpdateChannel": "Saluran Pembaruan", - "@optionsUpdateChannel": { - "description": "Stable vs preview releases" + "libraryEnableLocalLibrarySubtitle": "Scan and track your existing music", + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" }, - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist folder is disabled" + "libraryFolder": "Library Folder", + "@libraryFolder": { + "description": "Folder selection setting" }, - "@extensionRefreshStatus": { - "description": "Tooltip for refreshing extension service health status" + "libraryFolderHint": "Tap to select folder", + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", - "@backupRestoreRestartHint": { - "description": "Hint shown after restoring that an app restart is recommended" + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" }, - "@snackbarExtensionInstalledEnable": { - "description": "Snackbar after installing an extension from the repo tab", + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", "placeholders": { - "extensionName": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { "type": "String" } } }, - "settingsAutoExportFailedSubtitle": "Simpan unduhan yang gagal ke file TXT secara otomatis", - "@settingsAutoExportFailedSubtitle": { - "description": "Subtitle for auto-export setting" - }, - "searchSortArtistAZ": "Artis (A-Z)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" }, - "editMetadataFieldAlbumArtist": "Album Artist", - "@editMetadataFieldAlbumArtist": { - "description": "Chip label for album artist field in auto-fill selector" + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" }, - "@queueEmptyHistory": { - "description": "Empty state title when download history is empty" + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" }, - "@dialogDisableHistoryMessage": { - "description": "Confirmation dialog message shown before disabling download history" + "libraryShowDuplicateIndicator": "Show Duplicate Indicator", + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" }, - "queueFlacNoReliableMatches": "No reliable online matches found for the selection", - "@queueFlacNoReliableMatches": { - "description": "Snackbar when no safe FLAC redownload matches were found" + "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" }, - "trackOpenInDeezer": "Buka di Deezer", - "@trackOpenInDeezer": { - "description": "Action - open track in Deezer app" + "libraryAutoScan": "Auto Scan", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" }, - "setupChooseFromFilesSubtitle": "Pilih lokasi iCloud atau lainnya", - "@setupChooseFromFilesSubtitle": { - "description": "Subtitle for file picker" + "libraryAutoScanSubtitle": "Automatically scan your library for new files", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" }, - "artistMonthlyListeners": "{count} pendengar bulanan", - "@artistMonthlyListeners": { - "description": "Monthly listener count display", - "placeholders": { - "count": { - "type": "String", - "description": "Formatted listener count" - } - } + "libraryAutoScanOff": "Off", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" }, - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" + "libraryAutoScanOnOpen": "Every app open", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" }, - "cacheSectionStorage": "Cached Data", - "@cacheSectionStorage": { - "description": "Section header for cache entries" + "libraryAutoScanDaily": "Daily", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" }, + "libraryAutoScanWeekly": "Weekly", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "tutorialDownloadCompletedSemantics": "Download completed", - "@tutorialDownloadCompletedSemantics": { - "description": "Accessibility label for completed download state in tutorial demo" - }, - "@logNoLogsYet": { - "description": "Empty state title" + "libraryActions": "Actions", + "@libraryActions": { + "description": "Section header for library actions" }, - "@selectionDeletePlaylistsCount": { - "description": "Button label for deleting multiple selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryScan": "Scan Library", + "@libraryScan": { + "description": "Button to start library scan" }, - "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", - "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is on" + "libraryScanSubtitle": "Scan for audio files", + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" }, - "setupAppDocumentsFolder": "Folder Documents Aplikasi", - "@setupAppDocumentsFolder": { - "description": "iOS documents folder option" - }, - "storeLoadError": "Gagal memuat repositori", - "settingsDownloadNetwork": "Jaringan Unduhan", - "metadataSaveFailedStorage": "Failed to write metadata back to storage", - "@logAutoScrollOff": { - "description": "Tooltip when auto-scroll is disabled on the log screen" - }, - "@trackConvertFormat": { - "description": "Menu item - convert audio format" + "libraryScanSelectFolderFirst": "Select a folder first", + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" }, - "optionsArtistTagModeJoined": "Nilai gabungan tunggal", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" + "libraryCleanupMissingFiles": "Cleanup Missing Files", + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" }, - "@dateYesterday": { - "description": "Relative date - yesterday" + "libraryCleanupMissingFilesSubtitle": "Remove entries for files that no longer exist", + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" }, - "@settingsExtensionsSubtitle": { - "description": "Extensions settings description" + "libraryClear": "Clear Library", + "@libraryClear": { + "description": "Button to clear all library entries" }, - "searchSortArtistZA": "Artis (Z-A)", - "@extensionSettings": { - "description": "Section header - extension settings" + "libraryClearSubtitle": "Remove all scanned tracks", + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" }, - "@extensionOauthConnectHint": { - "description": "Hint for an OAuth login link field before connecting Spotify" + "libraryClearConfirmTitle": "Clear Library", + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" }, - "@notifUpdateReady": { - "description": "Notification title when app update download is complete" + "libraryClearConfirmMessage": "This will remove all scanned tracks from your library. Your actual music files will not be deleted.", + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" }, - "@regionCountryMX": { - "description": "Country name for SongLink region picker" + "libraryAbout": "About Local Library", + "@libraryAbout": { + "description": "Section header for about info" }, - "@nowPlayingOpenInExternalPlayer": { - "description": "Menu item to open the current track in an external player" + "libraryAboutDescription": "Memindai koleksi musik yang sudah ada untuk mendeteksi duplikat saat mengunduh. Mendukung format FLAC, ALAC, M4A, MP3, Opus, OGG, WAV, AIFF, dan APE. Metadata dibaca dari tag file jika tersedia.", + "@libraryAboutDescription": { + "description": "Description of local library feature" }, - "trackConvertDithering": "Dithering", - "@trackConvertDithering": { - "description": "Section label for lossless conversion dithering options" + "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": { + "type": "int" + } + } }, - "settingsDownloadSubtitle": "Layanan, kualitas, cadangan", - "@settingsDownloadSubtitle": { - "description": "Download settings description" + "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } }, "libraryLastScanned": "Last scanned: {time}", "@libraryLastScanned": { @@ -2746,749 +2667,759 @@ } } }, - "setupIosEmptyFolderWarning": "Batasan iOS: Folder kosong tidak dapat dipilih. Pilih folder dengan minimal satu file.", - "@setupIosEmptyFolderWarning": { - "description": "iOS folder selection warning" + "libraryLastScannedNever": "Never", + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" }, - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" + "libraryScanning": "Scanning...", + "@libraryScanning": { + "description": "Status during scan" }, - "@snackbarFailedToInstallNamed": { - "description": "Snackbar when extension install fails in the repo tab", + "libraryScanFinalizing": "Finalizing library...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, + "libraryScanProgress": "{progress}% of {total} files", + "@libraryScanProgress": { + "description": "Scan progress display", "placeholders": { - "extensionName": { + "progress": { "type": "String" + }, + "total": { + "type": "int" } } }, - "@collectionAddedTracksToPlaylist": { - "description": "Snackbar after adding multiple tracks to a playlist", + "libraryInLibrary": "In Library", + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, + "libraryRemovedMissingFiles": "Removed {count} missing files from library", + "@libraryRemovedMissingFiles": { + "description": "Snackbar after cleanup", "placeholders": { "count": { "type": "int" - }, - "playlistName": { - "type": "String" } } }, - "updateNew": "Baru", - "@updateNew": { - "description": "Label for new version" + "libraryCleared": "Library cleared", + "@libraryCleared": { + "description": "Snackbar after clearing library" }, - "settingsExtensionsSubtitle": "Kelola provider unduhan", - "@albumFolderArtistAlbumSinglesSubtitle": { - "description": "Folder structure example" + "libraryStorageAccessRequired": "Storage Access Required", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" }, - "trackReEnrichSelectAll": "Select All", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" + "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" }, - "@extensionsUninstall": { - "description": "Uninstall extension button" + "libraryFolderNotExist": "Selected folder does not exist", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" }, - "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when track artist is used for folder names" + "librarySourceDownloaded": "Downloaded", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" }, - "@logIssueNetworkErrorLabel": { - "description": "Diagnostic badge label for generic network errors" + "librarySourceLocal": "Local", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" }, - "albumFolderArtistYearAlbumSubtitle": "Albums/Nama Artis/[2005] Nama Album/", - "@albumFolderArtistYearAlbumSubtitle": { - "description": "Folder structure example" + "libraryFilterAll": "All", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" }, - "itemCount": "{count} {count, plural, =1{item} other{items}}", - "@itemCount": { - "description": "Generic item count label", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterDownloaded": "Downloaded", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" }, - "discographyFetchingTracks": "Memuat lagu...", - "@discographyFetchingTracks": { - "description": "Progress - fetching album tracks" + "libraryFilterLocal": "Local", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" }, - "@libraryFolder": { - "description": "Folder selection setting" + "libraryFilterTitle": "Filters", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" }, - "queueEmptyAlbums": "No album downloads", - "@queueEmptyAlbums": { - "description": "Empty state title when no album downloads exist" + "libraryFilterReset": "Reset", + "@libraryFilterReset": { + "description": "Reset all filters button" }, - "@metadataProviderPriorityDescription": { - "description": "Metadata priority page description" + "libraryFilterApply": "Apply", + "@libraryFilterApply": { + "description": "Apply filters button" }, - "@extensionVerificationHelpTitleManual": { - "description": "Dialog title when automatic browser launch for verification fails" + "libraryFilterSource": "Source", + "@libraryFilterSource": { + "description": "Filter section - source type" }, - "extensionError": "Terjadi kesalahan", - "@extensionError": { - "description": "Extension detail - error message" + "libraryFilterQuality": "Quality", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" }, - "@trackLyricsLoadFailed": { - "description": "Message when lyrics loading fails" + "libraryFilterQualityHiRes": "Hi-Res (24bit)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" }, - "@downloadedAlbumDeleteCount": { - "description": "Delete button text with count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterQualityCD": "CD (16bit)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" }, - "@extensionsNoHomeFeedExtensions": { - "description": "Extensions page - shown when no installed extension has home feed" + "libraryFilterQualityLossy": "Lossy", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" }, - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterFormat": "Format", + "@libraryFilterFormat": { + "description": "Filter section - file format" }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", - "@backupContentsArtists": { - "description": "Backup contents row for favorite artists count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadata": "Metadata", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" }, - "@trackRemoveFromDevice": { - "description": "Action - delete downloaded file" + "libraryFilterMetadataComplete": "Complete metadata", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" }, - "lyricsProvidersEnabledSection": "Enabled ({count})", - "@lyricsProvidersEnabledSection": { - "description": "Section header for enabled providers", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadataMissingAny": "Missing any metadata", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" }, - "@cueSplitTitle": { - "description": "Title for CUE split bottom sheet" + "libraryFilterMetadataMissingYear": "Missing year", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" }, - "@downloadedAlbumSelectedCount": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadataMissingGenre": "Missing genre", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" }, - "@trackOptionRemoveFromWishlist": { - "description": "Bottom sheet action label - remove track from wishlist" + "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" }, - "notifDownloadingTrack": "Downloading {trackName}", - "@notifDownloadingTrack": { - "description": "Notification title while downloading a track", + "libraryFilterSort": "Sort", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "Latest", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "Oldest", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" + }, + "libraryFilterSortAlbumAsc": "Album (A-Z)", + "@libraryFilterSortAlbumAsc": { + "description": "Sort option - album ascending" + }, + "libraryFilterSortAlbumDesc": "Album (Z-A)", + "@libraryFilterSortAlbumDesc": { + "description": "Sort option - album descending" + }, + "libraryFilterSortGenreAsc": "Genre (A-Z)", + "@libraryFilterSortGenreAsc": { + "description": "Sort option - genre ascending" + }, + "libraryFilterSortGenreDesc": "Genre (Z-A)", + "@libraryFilterSortGenreDesc": { + "description": "Sort option - genre descending" + }, + "timeJustNow": "Just now", + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, + "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", + "@timeMinutesAgo": { + "description": "Relative time - minutes ago", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "@discographySkippedDownloaded": { - "description": "Snackbar - with skipped tracks count", + "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", + "@timeHoursAgo": { + "description": "Relative time - hours ago", "placeholders": { - "added": { - "type": "int" - }, - "skipped": { + "count": { "type": "int" } } }, - "@tutorialSettingsTip3": { - "description": "Tutorial settings tip 3" - }, - "@announcementUnableToOpenLink": { - "description": "Snackbar shown when an announcement CTA link cannot be opened" + "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" }, - "trackReleaseDate": "Tanggal rilis", - "discographySelectedCount": "{count} dipilih", - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "logIssueNetworkErrorLabel": "NETWORK ERROR", - "updateStartingDownload": "Memulai unduhan...", - "@updateStartingDownload": { - "description": "Update status - initializing" + "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" }, - "trackDiscNumber": "Nomor disc", - "@trackDiscNumber": { - "description": "Metadata label - disc number" + "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" }, - "optionsUsingExtension": "Menggunakan ekstensi: {extensionName}", - "@optionsUsingExtension": { - "description": "Shows active extension name", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" }, - "dialogDisableHistoryTitle": "Turn off download history?", "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, - "@collectionPlaylistEmptySubtitle": { - "description": "Playlist empty state subtitle" - }, - "@tutorialSearchHint": { - "description": "Placeholder shown in the tutorial search demo" - }, - "cleanupOrphanedDownloadsNone": "No orphaned entries found", - "discographySkippedDownloaded": "{added} added, {skipped} already downloaded", - "@updateDontRemind": { - "description": "Update button - skip this version" + "tutorialSearchTitle": "Menemukan Musik", + "@tutorialSearchTitle": { + "description": "Tutorial search page title" }, - "@snackbarLoadingCueSheet": { - "description": "Snackbar while loading a CUE sheet file" + "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "@tutorialSearchDesc": { + "description": "Tutorial search page description" }, - "@dialogUninstallExtension": { - "description": "Dialog title - uninstall extension" + "tutorialDownloadTitle": "Mengunduh Musik", + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" }, - "lyricsProvidersTitle": "Lyrics Provider Priority", - "@dialogRemove": { - "description": "Dialog button - remove item" + "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" }, - "snackbarError": "Error: {error}", - "@snackbarError": { - "description": "Generic error snackbar with error detail", - "placeholders": { - "error": { - "type": "String" - } - } + "tutorialLibraryTitle": "Perpustakaan Anda", + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" }, - "@sectionApp": { - "description": "Settings section header" + "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" }, - "@libraryPlayback": { - "description": "Section header for playback settings in library settings" + "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" }, - "@downloadPrimaryArtistOnlyOn": { - "description": "Status label when primary-artist-only folder naming is enabled" + "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" }, - "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", - "previewStop": "Hentikan pratinjau", - "@previewStop": { - "description": "Tooltip for the button that stops the playing track preview snippet" + "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" }, - "trackConvertConfirmMessageLossless": "Convert from {sourceFormat} to {targetFormat}? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.", - "discographyAlbumsOnly": "Hanya Album", - "@discographyAlbumsOnly": { - "description": "Option - download only albums" + "tutorialExtensionsTitle": "Extensions", + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" }, - "@editMetadataFieldCopyright": { - "description": "Chip label for copyright field in auto-fill selector" + "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" }, - "extensionsFallbackSubtitle": "Pilih ekstensi unduhan terpasang mana yang dapat digunakan sebagai cadangan", - "aboutSocial": "Sosial", - "@aboutSocial": { - "description": "Section for social links" + "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" }, - "audioAnalysisNyquist": "Nyquist", - "trackCoverSelected": "Selected cover", - "@trackCoverSelected": { - "description": "Label for the newly selected cover preview" + "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" }, - "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" + "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" }, - "homeEmptyTitle": "Belum ada penyedia pencarian", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" + "tutorialSettingsTitle": "Customize Your Experience", + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" }, - "@extensionHealthUnknown": { - "description": "Extension service health status - unknown" + "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" }, - "storeInstalled": "Terpasang", - "@storeInstalled": { - "description": "Already installed badge" + "tutorialSettingsTip1": "Change download location and folder organization", + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" }, - "trackReplayGainSuccess": "Tag ReplayGain ditambahkan", - "@trackReplayGainSuccess": { - "description": "Snackbar message after ReplayGain tags written for a single track" + "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" }, - "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", - "@collectionPlaylistRenamed": { - "description": "Snackbar after renaming playlist" + "tutorialSettingsTip3": "Customize app theme and appearance", + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" }, - "@trackConvertResamplerSoxr": { - "description": "Lossless conversion SoX resampler option" + "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "@tutorialReadyMessage": { + "description": "Tutorial completion message" }, - "@dialogUnsavedChanges": { - "description": "Dialog message - unsaved changes" + "libraryForceFullScan": "Force Full Scan", + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" }, - "dialogDownload": "Unduh", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" + "libraryForceFullScanSubtitle": "Rescan all files, ignoring cache", + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" }, - "trackLyricsLoadFailed": "Gagal memuat lirik", - "@backupContentsTitle": { - "description": "Header above the list summarizing what the backup contains" + "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" }, - "@safMigrationTitle": { - "description": "Title of SAF migration dialog" + "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" }, - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" - }, - "setupPermissionDeniedMessage": "Izin ditolak. Harap berikan semua izin untuk melanjutkan.", - "@setupPermissionDeniedMessage": { - "description": "Error when permission denied" - }, - "settingsDownloadNetworkWifiOnly": "Hanya WiFi", - "@settingsDownloadNetworkWifiOnly": { - "description": "Network option - only use WiFi" - }, - "@backupIncludeSecrets": { - "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" - }, - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" - }, - "@extensionHealthServiceUnknown": { - "description": "Tooltip for unknown extension service health" - }, - "snackbarExtensionUpdated": "{extensionName} diperbarui.", - "@snackbarExtensionUpdated": { - "description": "Snackbar - extension updated successfully", + "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", + "@cleanupOrphanedDownloadsResult": { + "description": "Snackbar after orphan cleanup", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "homeEmptySubtitle": "Instal ekstensi untuk melanjutkan.", - "@settingsTitle": { - "description": "Settings screen title" - }, - "@libraryFilterMetadataIncorrectIsrcFormat": { - "description": "Filter option - items with an invalid ISRC format" - }, - "@notifLibraryScanComplete": { - "description": "Notification title when library scan finishes" - }, - "@logIssueIspBlockingLabel": { - "description": "Diagnostic badge label when ISP blocking is detected" + "cleanupOrphanedDownloadsNone": "No orphaned entries found", + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" }, - "tutorialDownloadTitle": "Mengunduh Musik", - "@tutorialDownloadTitle": { - "description": "Tutorial download page title" + "cacheTitle": "Storage & Cache", + "@cacheTitle": { + "description": "Cache management page title" }, - "unknownTitle": "Unknown title", - "@unknownTitle": { - "description": "Fallback track title when metadata is missing" + "cacheSummaryTitle": "Cache overview", + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" }, - "navLibrary": "Pustaka", - "@navLibrary": { - "description": "Bottom navigation - Library tab" + "cacheSummarySubtitle": "Clearing cache will not remove downloaded music files.", + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" }, - "@snackbarAlreadyDownloaded": { - "description": "Snackbar - track already exists", + "cacheEstimatedTotal": "Estimated cache usage: {size}", + "@cacheEstimatedTotal": { + "description": "Total cache size shown in summary", "placeholders": { - "trackName": { + "size": { "type": "String" } } }, - "editMetadataSelectAll": "All", - "@editMetadataSelectAll": { - "description": "Button to select all fields for auto-fill" + "cacheSectionStorage": "Cached Data", + "@cacheSectionStorage": { + "description": "Section header for cache entries" }, - "storeEmptyNoExtensions": "Tidak ada ekstensi yang tersedia", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" + "cacheSectionMaintenance": "Maintenance", + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" }, - "optionsUpdateChannelWarning": "Preview mungkin mengandung bug atau fitur belum lengkap", - "@optionsUpdateChannelWarning": { - "description": "Warning about preview channel" + "cacheAppDirectory": "App cache directory", + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" }, - "@collectionPlaylistNameHint": { - "description": "Hint text for playlist name input" + "cacheAppDirectoryDesc": "HTTP responses, WebView data, and other temporary app data.", + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" }, - "notifLibraryScanComplete": "Library scan complete", - "editMetadataFieldIsrc": "ISRC", - "@editMetadataFieldIsrc": { - "description": "Chip label for ISRC field in auto-fill selector" + "cacheTempDirectory": "Temporary directory", + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" }, - "@libraryFolderHint": { - "description": "Placeholder when no folder selected" + "cacheTempDirectoryDesc": "Temporary files from downloads and audio conversion.", + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" }, - "homeSearchHintDefault": "Paste supported URL or search...", - "@homeSearchHintDefault": { - "description": "Default placeholder for the main search field on Home" + "cacheCoverImage": "Cover image cache", + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" }, - "extensionsNoExtensionsSubtitle": "Pasang file .spotiflac-ext untuk menambahkan provider baru", - "@extensionsNoExtensionsSubtitle": { - "description": "Empty state subtitle" + "cacheCoverImageDesc": "Downloaded album and track cover art. Will re-download when viewed.", + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" }, - "@extensionEnterValue": { - "description": "Hint for editing an extension setting value" + "cacheLibraryCover": "Library cover cache", + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" }, - "backupRestoreConfirmTitle": "Restore this backup?", - "@backupRestoreConfirmTitle": { - "description": "Confirmation dialog title before restoring a backup" + "cacheLibraryCoverDesc": "Cover art extracted from local music files. Will re-extract on next scan.", + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" }, - "@libraryScanSelectFolderFirst": { - "description": "Message when trying to scan without folder" + "libraryPlaybackNormalization": "Volume normalization", + "@libraryPlaybackNormalization": { + "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, - "@qualityHiResFlac": { - "description": "Quality option - high resolution FLAC" + "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", + "@libraryPlaybackNormalizationSubtitle": { + "description": "Subtitle explaining playback volume normalization" }, - "aboutSpecialThanks": "Terima Kasih Khusus", - "@aboutSpecialThanks": { - "description": "Section for special thanks" + "cacheAudioAnalysis": "Audio analysis cache", + "@cacheAudioAnalysis": { + "description": "Cache item title for saved audio analysis results" }, - "storeInstall": "Pasang", - "@storeInstall": { - "description": "Install extension button" + "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", + "@cacheAudioAnalysisDesc": { + "description": "Description of what audio analysis cache contains" }, - "@collectionWishlistEmptySubtitle": { - "description": "Wishlist empty state subtitle" + "cacheExploreFeed": "Explore feed cache", + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" }, - "historyFilterAlbums": "Album", - "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", - "@extensionCustomUrlHandlingSubtitle": { - "description": "Extension detail subtitle for custom URL handling" + "cacheExploreFeedDesc": "Explore tab content (new releases, trending). Will refresh on next visit.", + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" }, - "filenameShowAdvancedTagsDescription": "Aktifkan tag yang diformat untuk padding trek dan pola tanggal", - "@aboutReportIssue": { - "description": "Link to report bugs" + "cacheTrackLookup": "Track lookup cache", + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" }, - "@folderOrganizationByPlaylist": { - "description": "Folder option - playlist folders" + "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" }, - "@dateWeeksAgo": { - "description": "Relative date - weeks ago", + "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" + }, + "cacheNoData": "No cached data", + "@cacheNoData": { + "description": "Label when cache category has no data" + }, + "cacheSizeWithFiles": "{size} in {count} files", + "@cacheSizeWithFiles": { + "description": "Cache size and file count", "placeholders": { + "size": { + "type": "String" + }, "count": { "type": "int" } } }, - "logEntriesFiltered": "Entri ({count} difilter)", - "@logEntriesFiltered": { - "description": "Log count with filter active", + "cacheSizeOnly": "{size}", + "@cacheSizeOnly": { + "description": "Cache size only", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheEntries": "{count} entries", + "@cacheEntries": { + "description": "Track cache entry count", "placeholders": { "count": { "type": "int" } } }, - "@lyricsModeDescription": { - "description": "Lyrics mode picker description" + "cacheClearSuccess": "Cleared: {target}", + "@cacheClearSuccess": { + "description": "Snackbar after clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } }, - "@setupAppDocumentsFolderSubtitle": { - "description": "Subtitle for documents folder" + "cacheClearConfirmTitle": "Clear cache?", + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" }, - "storeAddRepoButton": "Tambahkan Repositori", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" + "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", + "@cacheClearConfirmMessage": { + "description": "Dialog message before clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } }, - "@collectionLovedEmptyTitle": { - "description": "Loved empty state title" + "cacheClearAllConfirmTitle": "Clear all cache?", + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" }, - "aboutReportIssue": "Laporkan masalah", - "snackbarFailedToWriteStorage": "Failed to write back to storage", - "@snackbarFailedToWriteStorage": { - "description": "Snackbar when writing metadata back to file fails" + "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" }, - "errorInvalidFolderSelected": "Invalid folder selected", - "allFilesAccessDisabledMessage": "All Files Access disabled. The app will use limited storage access.", - "@allFilesAccessDisabledMessage": { - "description": "Snackbar message when user disables all files access" + "cacheClearAll": "Clear all cache", + "@cacheClearAll": { + "description": "Button label to clear all caches" }, - "downloadMusixmatchLanguageCode": "Language code", - "@downloadMusixmatchLanguageCode": { - "description": "Label for Musixmatch language input field" + "cacheCleanupUnused": "Cleanup unused data", + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" }, - "dialogUnsavedChanges": "Anda memiliki perubahan yang belum disimpan. Apakah Anda ingin membuangnya?", - "setupChooseFromFiles": "Pilih dari Files", - "@setupChooseFromFiles": { - "description": "iOS file picker option" - }, - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "downloadLossy320FormatDesc": "Pilih format output untuk unduhan lossy 320kbps. Aliran data asli akan dikonversi ke format yang Anda pilih bila diperlukan.", - "@backupRestoreConfirmButton": { - "description": "Confirm button to proceed with restore" - }, - "@queueEmptyAlbumsSubtitle": { - "description": "Empty state subtitle for album downloads" + "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" }, - "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", - "@collectionRemovedFromWishlist": { - "description": "Snackbar after removing track from wishlist", + "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", + "@cacheCleanupResult": { + "description": "Snackbar after unused data cleanup", "placeholders": { - "trackName": { - "type": "String" + "downloadCount": { + "type": "int" + }, + "libraryCount": { + "type": "int" } } }, - "extensionsInstalledSuccess": "Ekstensi berhasil dipasang", - "progressReadingCsv": "Membaca CSV...", - "@progressReadingCsv": { - "description": "Progress indicator - parsing CSV file" + "cacheRefreshStats": "Refresh stats", + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" }, - "artistReleases": "Releases", - "@artistReleases": { - "description": "Section header for all artist releases" + "trackSaveCoverArt": "Save Cover Art", + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" }, - "extensionVerificationBrowserTitle": "Verification browser", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" + "trackSaveLyrics": "Save Lyrics (.lrc)", + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" }, - "optionsArtistTagModeJoinedSubtitle": "Tuliskan satu nilai ARTIS seperti \"Artis A, Artis B\" untuk kompatibilitas pemain maksimal.", - "downloadLossy320": "Lossy 320kbps", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" + "trackSaveLyricsProgress": "Saving lyrics...", + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" }, - "queueFlacAction": "Queue FLAC", - "@queueFlacAction": { - "description": "Action/button label for queueing FLAC redownloads for local tracks" + "trackReEnrich": "Re-enrich", + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" }, - "@setupDownloadLocationIosMessage": { - "description": "iOS-specific folder info" + "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" }, - "trackConvertOriginal": "Original", - "sectionLyricsProviderOptions": "Provider Options", - "nowPlayingTitle": "Now Playing", - "@nowPlayingTitle": { - "description": "Title for the now playing screen" + "trackReEnrichFieldCover": "Cover Art", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" }, - "@extensionHealthChecksConfigured": { - "description": "Extension service health check count", - "placeholders": { - "count": { - "type": "int" - } - } + "trackReEnrichFieldLyrics": "Lyrics", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" }, - "@cacheClearAll": { - "description": "Button label to clear all caches" + "trackReEnrichFieldBasicTags": "Album, Album Artist", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "a11yDeselectTrack": "Deselect track", - "@a11yDeselectTrack": { - "description": "Accessibility label for deselecting a track" + "trackReEnrichFieldTrackInfo": "Track & Disc Number", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" }, - "@lyricsProvidersInfoText": { - "description": "Info tip on lyrics provider priority page" + "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" }, - "queueEmptyHistory": "No download history", - "dialogClear": "Hapus", - "@dialogClear": { - "description": "Dialog button - clear items" + "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" }, - "allFilesAccessDescription": "Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.", - "@allFilesAccessDescription": { - "description": "Description explaining when to enable all files access" + "trackReEnrichSelectAll": "Select All", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" }, - "trackConvertConfirmTitle": "Confirm Conversion", - "storeCategoryLyrics": "Lyrics", - "@storeCategoryLyrics": { - "description": "Store extension category - lyrics" + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" }, - "@lyricsProvidersDescription": { - "description": "Description on the lyrics provider priority page" + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" }, - "tooltipLoveAll": "Love All", - "downloadDirectory": "Direktori Unduhan", - "@downloadDirectory": { - "description": "Setting - download folder" + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" }, - "@tutorialExtensionsTip2": { - "description": "Tutorial extensions tip 2" + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" }, - "libraryFolder": "Library Folder", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "@metadataProviderPriorityTitle": { - "description": "Metadata priority page title" + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" }, - "@cleanupOrphanedDownloadsResult": { - "description": "Snackbar after orphan cleanup", + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", "placeholders": { - "count": { + "changeCount": { + "type": "int" + }, + "trackCount": { "type": "int" } } }, - "cacheExploreFeedDesc": "Explore tab content (new releases, trending). Will refresh on next visit.", - "@cacheExploreFeedDesc": { - "description": "Description of what explore feed cache contains" + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" }, - "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", - "@a11yOpenTrackByArtist": { - "description": "Accessibility label for opening a track item", + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, + "trackEditMetadata": "Edit Metadata", + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" + }, + "trackCoverSaved": "Cover art saved to {fileName}", + "@trackCoverSaved": { + "description": "Snackbar after cover art saved", "placeholders": { - "trackName": { + "fileName": { "type": "String" - }, - "artistName": { + } + } + }, + "trackCoverNoSource": "No cover art source available", + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" + }, + "trackLyricsSaved": "Lyrics saved to {fileName}", + "@trackLyricsSaved": { + "description": "Snackbar after lyrics saved", + "placeholders": { + "fileName": { "type": "String" } } }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", - "libraryFilterSortAlbumDesc": "Album (Z-A)", - "@libraryFilterSortAlbumDesc": { - "description": "Sort option - album descending" + "trackReEnrichProgress": "Re-enriching metadata...", + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" }, - "trackConvertBitrate": "Bitrate", - "@trackConvertBitrate": { - "description": "Label for bitrate selection" + "trackReEnrichSearching": "Searching metadata online...", + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" }, - "audioAnalysisFileSize": "Size", - "extensionHealthServiceOnline": "Service online", - "@extensionHealthServiceOnline": { - "description": "Tooltip for online extension service" + "trackReEnrichSuccess": "Metadata re-enriched successfully", + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" }, - "logEntries": "Entri ({count})", - "@logEntries": { - "description": "Total log count", + "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + }, + "queueFlacAction": "Queue FLAC", + "@queueFlacAction": { + "description": "Action/button label for queueing FLAC redownloads for local tracks" + }, + "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", + "@queueFlacConfirmMessage": { + "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { "count": { "type": "int" } } }, - "trackConvertConfirmMessage": "Convert from {sourceFormat} to {targetFormat} at {bitrate}?\n\nThe original file will be deleted after conversion.", - "@trackConvertConfirmMessage": { - "description": "Confirmation dialog message", + "queueFlacNoReliableMatches": "No reliable online matches found for the selection", + "@queueFlacNoReliableMatches": { + "description": "Snackbar when no safe FLAC redownload matches were found" + }, + "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", + "@queueFlacQueuedWithSkipped": { + "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" + "addedCount": { + "type": "int" }, - "bitrate": { - "type": "String" + "skippedCount": { + "type": "int" } } }, - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" + "trackSaveFailed": "Failed: {error}", + "@trackSaveFailed": { + "description": "Snackbar when save operation fails", + "placeholders": { + "error": { + "type": "String" + } + } }, - "folderOrganizationByAlbum": "Berdasarkan Album", - "@folderOrganizationByAlbum": { - "description": "Folder option - album folders" - }, - "libraryPlayback": "Playback", - "@storeFilterAll": { - "description": "Repo filter - all extensions" - }, - "aboutApp": "Aplikasi", - "@aboutApp": { - "description": "Section for app info" - }, - "optionsReplayGainSubtitleOff": "Dinonaktifkan: tidak ada tag normalisasi kenyaringan", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" + "trackConvertFormat": "Convert Format", + "@trackConvertFormat": { + "description": "Menu item - convert audio format" }, - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" + "trackConvertTitle": "Convert Audio", + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" + "trackConvertTargetFormat": "Target Format", + "@trackConvertTargetFormat": { + "description": "Label for format selection" }, - "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", - "storeFilterIntegration": "Integrasi", - "@storeFilterIntegration": { - "description": "Repo filter - integrations" + "trackConvertBitrate": "Bitrate", + "@trackConvertBitrate": { + "description": "Label for bitrate selection" }, - "@lyricsProvidersAtLeastOne": { - "description": "Snackbar when user tries to disable the last enabled provider" + "trackConvertKeepOriginal": "Keep original file", + "@trackConvertKeepOriginal": { + "description": "Toggle to preserve the source file during conversion" }, - "@appearanceHistoryViewGrid": { - "description": "Grid layout option" + "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", + "@trackConvertKeepOriginalDescription": { + "description": "Description for preserving the source file during conversion" }, - "trackDownloaded": "Diunduh", - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", - "setupDownloadLocationIosMessage": "Di iOS, unduhan disimpan ke folder Documents aplikasi. Anda dapat mengaksesnya melalui aplikasi Files.", - "optionsArtistTagModeDescription": "Pilih bagaimana beberapa artis dicantumkan dalam tag yang disematkan.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" + "trackConvertConfirmTitle": "Confirm Conversion", + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" }, - "@queueRetryAllFailed": { - "description": "Button to retry every failed download in the queue", + "trackConvertConfirmMessage": "Convert from {sourceFormat} to {targetFormat} at {bitrate}?\n\nThe original file will be deleted after conversion.", + "@trackConvertConfirmMessage": { + "description": "Confirmation dialog message", "placeholders": { - "count": { - "type": "int" + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" } } }, - "@trackConvertDitherTriangularHp": { - "description": "Lossless conversion high-pass triangular dither option" - }, - "@extensionVerificationCopyLink": { - "description": "Button to copy the extension verification URL" - }, - "searchSongs": "Lagu", - "@searchSongs": { - "description": "Search result category - songs" - }, - "@appearanceHistoryView": { - "description": "Layout style for history" - }, - "sectionFileSettings": "Pengaturan File", - "@sectionFileSettings": { - "description": "Settings section header" - }, - "@cancelDownloadTitle": { - "description": "Dialog title when confirming cancellation of an active download" - }, - "@cacheLibraryCover": { - "description": "Cache item title for local library cover art images" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "audioAnalysisCutoffNotDetected": "Not detected", - "dialogDelete": "Hapus", - "@dialogDelete": { - "description": "Dialog button - delete item" - }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", - "@tutorialLibraryDesc": { - "description": "Tutorial library page description" - }, - "@queueDownloadSpeedStatus": { - "description": "Queue status while downloading with speed", + "trackConvertConfirmMessageLossless": "Convert from {sourceFormat} to {targetFormat}? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.", + "@trackConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless-to-lossless conversion", "placeholders": { - "speed": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { "type": "String" } } }, - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", - "@cacheCleanupResult": { - "description": "Snackbar after unused data cleanup", + "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", + "@trackConvertConfirmKeepOriginal": { + "description": "Confirmation message when the source file will be preserved", "placeholders": { - "downloadCount": { - "type": "int" + "sourceFormat": { + "type": "String" }, - "libraryCount": { - "type": "int" + "targetFormat": { + "type": "String" } } }, @@ -3496,76 +3427,63 @@ "@trackConvertLosslessHint": { "description": "Hint shown when converting between lossless formats" }, - "collectionRenamePlaylist": "Rename playlist", - "@collectionRenamePlaylist": { - "description": "Action to rename playlist" - }, - "@libraryFilterTitle": { - "description": "Filter bottom sheet title" - }, - "@storageModeAppFolder": { - "description": "Storage mode option - app-managed folder" + "trackConvertConverting": "Converting audio...", + "@trackConvertConverting": { + "description": "Snackbar while converting" }, - "logTotalErrors": "Total errors: {count}", - "@logTotalErrors": { - "description": "Total error count in log issue analysis", + "trackConvertSuccess": "Converted to {format} successfully", + "@trackConvertSuccess": { + "description": "Snackbar after successful conversion", "placeholders": { - "count": { - "type": "int" + "format": { + "type": "String" } } }, - "@setupStorageRequired": { - "description": "Title when storage permission needed" - }, - "@snackbarMetadataProviderSaved": { - "description": "Snackbar - metadata provider order saved" - }, - "@selectionBatchConvertConfirmTitle": { - "description": "Confirmation dialog title for batch conversion" - }, - "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", - "@extensionsHomeFeedAutoSubtitle": { - "description": "Extensions page - subtitle for auto home feed option" - }, - "setupLanguageDescription": "Pilih bahasa pilihan Anda untuk aplikasi ini. Anda dapat mengubahnya nanti di Pengaturan.", - "settingsBackupSubtitle": "Move your library, history and settings to a new device", - "@settingsBackupSubtitle": { - "description": "Subtitle for backup and restore settings item" - }, - "recentTypeArtist": "Artis", - "@recentTypeArtist": { - "description": "Recent access item type - artist" + "trackConvertFailed": "Conversion failed", + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" }, - "collectionPlaylistEmptySubtitle": "Long-press + on any track to add it here", - "artistCompilations": "Kompilasi", - "@artistCompilations": { - "description": "Section header for compilations" + "cueSplitTitle": "Split CUE Sheet", + "@cueSplitTitle": { + "description": "Title for CUE split bottom sheet" }, - "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", - "@snackbarFolderPickerFailed": { - "description": "Snackbar shown when folder picker fails to open", + "cueSplitAlbum": "Album: {album}", + "@cueSplitAlbum": { + "description": "Album name in CUE split sheet", "placeholders": { - "error": { + "album": { "type": "String" } } }, - "@optionsDetailedLoggingOn": { - "description": "Status when logging enabled" + "cueSplitArtist": "Artist: {artist}", + "@cueSplitArtist": { + "description": "Artist name in CUE split sheet", + "placeholders": { + "artist": { + "type": "String" + } + } }, - "settingsSaveDownloadHistory": "Save download history", - "@settingsSaveDownloadHistory": { - "description": "Settings switch title for storing completed downloads in history" + "cueSplitTrackCount": "{count} tracks", + "@cueSplitTrackCount": { + "description": "Number of tracks in CUE sheet", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@storeCategoryIntegration": { - "description": "Store extension category - integration" + "cueSplitConfirmTitle": "Split CUE Album", + "@cueSplitConfirmTitle": { + "description": "CUE split confirmation dialog title" }, - "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", - "@a11yOpenItemCount": { - "description": "Accessibility label for opening a grouped item with count", + "cueSplitConfirmMessage": "Split \"{album}\" into {count} individual FLAC files?\n\nFiles will be saved to the same directory.", + "@cueSplitConfirmMessage": { + "description": "CUE split confirmation dialog message", "placeholders": { - "title": { + "album": { "type": "String" }, "count": { @@ -3573,1428 +3491,1430 @@ } } }, - "trackFileInfo": "Info File", - "@trackFileInfo": { - "description": "Tab title - file information" - }, - "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", - "audioAnalysisNoClipping": "No clipping", - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", - "@tutorialSettingsDesc": { - "description": "Tutorial settings page description" + "cueSplitSplitting": "Splitting CUE sheet... ({current}/{total})", + "@cueSplitSplitting": { + "description": "Snackbar while splitting CUE", + "placeholders": { + "current": { + "type": "int" + }, + "total": { + "type": "int" + } + } }, - "lyricsModeExternalSubtitle": "File .lrc terpisah untuk pemutar musik seperti Samsung Music", - "@lyricsModeExternalSubtitle": { - "description": "Subtitle for external option" + "cueSplitSuccess": "Split into {count} tracks successfully", + "@cueSplitSuccess": { + "description": "Snackbar after successful CUE split", + "placeholders": { + "count": { + "type": "int" + } + } }, - "trackLoadLyrics": "Muat Lirik", - "@trackLoadLyrics": { - "description": "Action - fetch lyrics" + "cueSplitFailed": "CUE split failed", + "@cueSplitFailed": { + "description": "Snackbar when CUE split fails" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", - "@extensionVerificationHelpTitleWaiting": { - "description": "Dialog title when verification is taking longer than expected" + "cueSplitNoAudioFile": "Audio file not found for this CUE sheet", + "@cueSplitNoAudioFile": { + "description": "Error when CUE audio file is missing" }, - "libraryFilterReset": "Reset", - "@libraryFilterReset": { - "description": "Reset all filters button" + "cueSplitButton": "Split into Tracks", + "@cueSplitButton": { + "description": "Button text to start CUE splitting" }, - "@downloadAlbumArtistMetadataFull": { - "description": "Status label when album-artist folder filtering uses full metadata" + "actionCreate": "Create", + "@actionCreate": { + "description": "Generic action button - create" }, - "storeTitle": "Repositori Ekstensi", - "@storeTitle": { - "description": "Repo screen title" + "collectionFoldersTitle": "My folders", + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" }, - "libraryCleared": "Library cleared", - "@libraryCleared": { - "description": "Snackbar after clearing library" + "collectionWishlist": "Wishlist", + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" }, - "queueDownloadCompleted": "Download completed", - "@queueDownloadCompleted": { - "description": "Accessibility label for completed download state in queue" + "collectionLoved": "Loved", + "@collectionLoved": { + "description": "Custom folder for favorite tracks" }, - "libraryTitle": "Local Library", - "@libraryTitle": { - "description": "Library settings page title" + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", - "@queueAlbumCount": { - "description": "Album count label with plural support", + "collectionPlaylist": "Playlist", + "@collectionPlaylist": { + "description": "Single playlist label" + }, + "collectionAddToPlaylist": "Add to playlist", + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" + }, + "collectionCreatePlaylist": "Create playlist", + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" + }, + "collectionNoPlaylistsYet": "No playlists yet", + "@collectionNoPlaylistsYet": { + "description": "Empty state title when user has no playlists" + }, + "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", "placeholders": { "count": { "type": "int" } } }, - "libraryClearConfirmTitle": "Clear Library", - "@backupExportSectionTitle": { - "description": "Section title for the export/backup card" - }, - "dialogClearAll": "Hapus Semua", - "@dialogClearAll": { - "description": "Dialog title - clear all items" - }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", - "@tutorialExtensionsDesc": { - "description": "Tutorial extensions page description" - }, - "libraryExternalPlayer": "External player", - "@libraryExternalPlayer": { - "description": "Setting option to use an external music player" - }, - "editMetadataFieldGenre": "Genre", - "@tutorialLibraryTitle": { - "description": "Tutorial library page title" - }, - "folderOrganizationByPlaylist": "Berdasarkan Daftar Putar", - "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" - }, - "editMetadataSelectNone": "None", - "@historyFilterSingles": { - "description": "Filter chip - show singles only" - }, - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "trackSaveCoverArt": "Save Cover Art", - "@trackSaveCoverArt": { - "description": "Menu action - save album cover art as file" - }, - "@downloadAlbumFolderStructure": { - "description": "Setting - album folder organization" - }, - "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", - "@notifDownloadCompleteCount": { - "description": "Notification title when download is complete, with count", + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", "placeholders": { - "completed": { - "type": "int" - }, - "total": { + "count": { "type": "int" } } }, - "setupUseDefault": "Gunakan Default", - "@setupUseDefault": { - "description": "Button to use default folder" - }, - "logNoLogsYetSubtitle": "Log akan muncul di sini saat Anda menggunakan aplikasi", - "@logNoLogsYetSubtitle": { - "description": "Empty state subtitle" - }, - "@dateToday": { - "description": "Relative date - today" - }, - "trackSaveLyricsProgress": "Saving lyrics...", - "@trackSaveLyricsProgress": { - "description": "Snackbar while saving lyrics to file" - }, - "trackCoverSaved": "Cover art saved to {fileName}", - "@trackCoverSaved": { - "description": "Snackbar after cover art saved", + "collectionAddedToPlaylist": "Added to \"{playlistName}\"", + "@collectionAddedToPlaylist": { + "description": "Snackbar after adding track to playlist", "placeholders": { - "fileName": { + "playlistName": { "type": "String" } } }, - "trackReEnrichFieldLyrics": "Lyrics", - "@audioAnalysisRescan": { - "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" - }, - "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is on" - }, - "dialogDisableAndClear": "Turn off and clear", - "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", - "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", - "@notifLibraryScanProgressWithTotal": { - "description": "Notification body for library scan progress when total is known", + "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", "placeholders": { - "scanned": { - "type": "int" - }, - "total": { - "type": "int" - }, - "percentage": { - "type": "int" + "playlistName": { + "type": "String" } } }, - "@extensionDetailsTags": { - "description": "Section title for extension tags" - }, - "@albumFolderAlbumOnlySubtitle": { - "description": "Folder structure example" - }, - "@audioAnalysisAnalyzing": { - "description": "Loading text while analyzing audio" - }, - "@settingsDonate": { - "description": "Settings menu item - donate page" + "collectionPlaylistNameHint": "Playlist name", + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" }, + "collectionPlaylistNameRequired": "Playlist name is required", "@collectionPlaylistNameRequired": { "description": "Validation error for empty playlist name" }, - "@backupImportSectionDescription": { - "description": "Description for the restore action" + "collectionRenamePlaylist": "Rename playlist", + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" }, - "storeFilterLyrics": "Lirik", - "libraryAutoScan": "Auto Scan", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" + "collectionDeletePlaylist": "Delete playlist", + "@collectionDeletePlaylist": { + "description": "Action to delete playlist" }, - "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", - "@safMigrationMessage1": { - "description": "First paragraph of SAF migration dialog" + "collectionPlaylistRenamed": "Playlist renamed", + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" }, - "setupStorageRequired": "Izin Penyimpanan Diperlukan", - "@notifLibraryScanErrors": { - "description": "Library scan complete suffix - error count", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionWishlistEmptyTitle": "Wishlist is empty", + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" }, - "appearanceHistoryViewGrid": "Kisi", - "trackConvertConverting": "Converting audio...", - "@trackConvertConverting": { - "description": "Snackbar while converting" + "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" }, - "@setupUseDefaultFolder": { - "description": "Dialog title for default folder" + "collectionLovedEmptyTitle": "Loved folder is empty", + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Tulis satu tag artis per artis untuk FLAC dan Opus; MP3 dan M4A tetap tergabung.", - "snackbarPlayingNext": "Playing next", - "@snackbarPlayingNext": { - "description": "Snackbar when a track is inserted as the next queue item" + "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" }, - "optionsDefaultSearchTabSubtitle": "Pilih tab mana yang terbuka terlebih dahulu untuk hasil pencarian baru.", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", - "@sectionService": { - "description": "Settings section header" + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" }, - "notifUpdateProgress": "{received} / {total} MB • {percentage}%", - "@discographyDownloadSelected": { - "description": "Button - download selected albums" + "collectionPlaylistEmptyTitle": "Playlist is empty", + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" }, - "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", - "@cacheClearAllConfirmMessage": { - "description": "Dialog message before clearing all caches" + "collectionPlaylistEmptySubtitle": "Long-press + on any track to add it here", + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" }, - "extensionsHomeFeedProvider": "Home Feed Provider", - "@extensionsHomeFeedProvider": { - "description": "Extensions page - label for home feed provider selector" + "collectionRemoveFromPlaylist": "Remove from playlist", + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" }, - "@cacheExploreFeed": { - "description": "Cache item title for explore home feed cache" + "collectionRemoveFromFolder": "Remove from folder", + "@collectionRemoveFromFolder": { + "description": "Tooltip for removing track from wishlist/loved folder" }, - "@audioAnalysisDynamicRange": { - "description": "Dynamic range metric label" + "collectionAddedToLoved": "\"{trackName}\" added to Loved", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "unknownAlbum": "Unknown Album", - "trackCoverCurrent": "Current cover", - "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", - "downloadPrimaryArtistOnlyOff": "Primary only: Off", - "dialogDone": "Selesai", - "@dialogDone": { - "description": "Dialog button - action completed" + "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "storeRepoUrlLabel": "Tautan Repositori", - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", - "@logIssueRateLimitedSuggestion": { - "description": "Diagnostic badge suggestion for rate limiting" + "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "libraryScanProgress": "{progress}% of {total} files", - "@libraryScanProgress": { - "description": "Scan progress display", + "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", "placeholders": { - "progress": { + "trackName": { "type": "String" - }, - "total": { - "type": "int" } } }, - "collectionLovedEmptyTitle": "Loved folder is empty", - "tutorialExtensionsTitle": "Extensions", - "@tutorialExtensionsTitle": { - "description": "Tutorial extensions page title" + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, - "searchSortDurationShort": "Durasi (Terpendek)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, - "trackCopyFilePath": "Salin lokasi file", - "@trackCopyFilePath": { - "description": "Action - copy file path" + "trackOptionAddToLoved": "Add to Loved", + "@trackOptionAddToLoved": { + "description": "Bottom sheet action label - add track to loved folder" }, - "albumFolderArtistAlbumFlatSubtitle": "Artis/Album/ dan Artis/lagu.flac", - "@trackConvertResampler": { - "description": "Section label for lossless conversion resampler options" + "trackOptionRemoveFromLoved": "Remove from Loved", + "@trackOptionRemoveFromLoved": { + "description": "Bottom sheet action label - remove track from loved folder" }, - "editMetadataFieldTrackNum": "Track #", - "@editMetadataFieldTrackNum": { - "description": "Chip label for track number field in auto-fill selector" + "trackOptionAddToWishlist": "Add to Wishlist", + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" }, - "snackbarFailedToUpdate": "Gagal memperbarui ekstensi", - "@snackbarFailedToUpdate": { - "description": "Snackbar - extension update error" + "trackOptionRemoveFromWishlist": "Remove from Wishlist", + "@trackOptionRemoveFromWishlist": { + "description": "Bottom sheet action label - remove track from wishlist" }, - "notifAlreadyInLibrary": "Already in Library", - "@notifAlreadyInLibrary": { - "description": "Notification title when track is already in library" + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" }, - "collectionPlaylistNameHint": "Playlist name", - "extensionVerificationCopyLink": "Copy link", - "@replayGainBatchAnalyzing": { - "description": "Progress dialog title while batch scanning ReplayGain" + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" }, - "setupLanguageTitle": "Pilih Bahasa", - "extensionId": "ID", - "@extensionId": { - "description": "Extension detail - unique ID" + "collectionPlaylistChangeCover": "Change cover image", + "@collectionPlaylistChangeCover": { + "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "regionCountryBR": "Brazil", - "@updateNewVersionReady": { - "description": "Update subtitle" + "collectionPlaylistRemoveCover": "Remove cover image", + "@collectionPlaylistRemoveCover": { + "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "@queueDownloadedFileMissing": { - "description": "Accessibility label when a downloaded file is missing from disk" + "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@lyricsMode": { - "description": "Setting - how to save lyrics" + "selectionShareNoFiles": "No shareable files found", + "@selectionShareNoFiles": { + "description": "Snackbar when no selected files exist on disk" }, - "@settingsAppearance": { - "description": "Settings section - visual customization" + "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@setupStorageAccessMessageAndroid11": { - "description": "Android 11+ specific explanation" + "selectionConvertNoConvertible": "No convertible tracks selected", + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" }, - "@tutorialLibraryTip3": { - "description": "Tutorial library tip 3" + "selectionBatchConvertConfirmTitle": "Batch Convert", + "@selectionBatchConvertConfirmTitle": { + "description": "Confirmation dialog title for batch conversion" }, - "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person lyrics is off" + "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", - "@libraryStorageAccessMessage": { - "description": "Dialog message for storage permission" + "selectionBatchConvertConfirmMessageLossless": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "@tutorialLibraryTip1": { - "description": "Tutorial library tip 1" + "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": { + "description": "Batch conversion confirmation when source files will be preserved", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "dialogRemoveExtensionMessage": "Apakah Anda yakin ingin menghapus ekstensi ini? Tindakan ini tidak dapat dibatalkan.", - "@dialogRemoveExtensionMessage": { - "description": "Dialog message - uninstall confirmation" + "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "setupDownloadLocationTitle": "Lokasi Unduhan", - "@setupDownloadLocationTitle": { - "description": "Download location dialog title" + "downloadedAlbumDownloadedCount": "{count} diunduh", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadNetworkCompatibilityModeEnabled": "Mengizinkan endpoint HTTP lama; verifikasi TLS tetap aktif", - "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is on" + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when album artist is used for folder names" }, - "@audioAnalysisBitDepth": { - "description": "Bit depth metric label" + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when track artist is used for folder names" }, - "trackOptionAddToLoved": "Add to Loved", - "@trackOptionAddToLoved": { - "description": "Bottom sheet action label - add track to loved folder" + "lyricsProvidersTitle": "Lyrics Provider Priority", + "@lyricsProvidersTitle": { + "description": "Settings item title for lyrics provider order" }, - "cacheAppDirectory": "App cache directory", - "@cacheAppDirectory": { - "description": "Cache item title for app cache directory" + "lyricsProvidersDescription": "Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.", + "@lyricsProvidersDescription": { + "description": "Description on the lyrics provider priority page" }, - "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", - "@navStore": { - "description": "Bottom navigation - Extension repo tab" + "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", + "@lyricsProvidersInfoText": { + "description": "Info tip on lyrics provider priority page" }, - "extensionPostProcessing": "Pasca-Pemrosesan", - "@searchTracks": { - "description": "Search filter label - tracks" - }, - "logCopied": "Log disalin ke clipboard", - "@logCopied": { - "description": "Snackbar - logs copied" + "lyricsProvidersEnabledSection": "Enabled ({count})", + "@lyricsProvidersEnabledSection": { + "description": "Section header for enabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@extensionHealthRequired": { - "description": "Label for a required extension service health check" + "lyricsProvidersDisabledSection": "Disabled ({count})", + "@lyricsProvidersDisabledSection": { + "description": "Section header for disabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@previewPlay": { - "description": "Tooltip for the button that plays a short track preview snippet" + "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", + "@lyricsProvidersAtLeastOne": { + "description": "Snackbar when user tries to disable the last enabled provider" }, - "clickableLookingUpArtist": "Looking up artist...", - "@clickableLookingUpArtist": { - "description": "Snackbar shown while clickable artist metadata is being resolved" + "lyricsProvidersSaved": "Lyrics provider priority saved", + "@lyricsProvidersSaved": { + "description": "Snackbar after saving lyrics provider priority" }, - "@extensionVerificationBrowserSubtitleInApp": { - "description": "Subtitle when in-app browser is preferred for extension verification" + "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", + "@lyricsProvidersDiscardContent": { + "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "setupUseDefaultFolder": "Gunakan Folder Default?", - "tutorialSearchHint": "Paste or search...", - "@logIssueTrackNotFoundLabel": { - "description": "Diagnostic badge label when a track is unavailable" + "lyricsProviderLrclibDesc": "Open-source synced lyrics database", + "@lyricsProviderLrclibDesc": { + "description": "Description for LRCLIB provider" }, - "@storageModeAppFolderSubtitle": { - "description": "Subtitle for app folder storage mode" + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", + "@lyricsProviderNeteaseDesc": { + "description": "Description for Netease provider" }, - "downloadMusixmatchLanguage": "Musixmatch Language", - "@downloadMusixmatchLanguage": { - "description": "Setting for Musixmatch lyrics translation language" + "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", + "@lyricsProviderMusixmatchDesc": { + "description": "Description for Musixmatch provider" }, - "lyricsModeExternal": "File .lrc eksternal", - "@setupSelectFolder": { - "description": "Button to select folder" + "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", + "@lyricsProviderAppleMusicDesc": { + "description": "Description for Apple Music provider" }, - "logSearchHint": "Cari log...", - "@backupCreateFailed": { - "description": "Snackbar when backup creation fails" + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "@lyricsProviderQqMusicDesc": { + "description": "Description for QQ Music provider" }, - "@settingsSaveDownloadHistorySubtitle": { - "description": "Settings switch subtitle for storing completed downloads in history" + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" }, - "@albumFolderArtistAlbumFlat": { - "description": "Album folder option with singles directly in artist folder" + "lyricsProviderExtensionDesc": "Extension provider", + "@lyricsProviderExtensionDesc": { + "description": "Generic description for extension-based lyrics providers" }, - "extensionHealthRequired": "required", - "actionCancel": "Batal", - "@actionCancel": { - "description": "Action button - cancel operation" + "safMigrationTitle": "Storage Update Required", + "@safMigrationTitle": { + "description": "Title of SAF migration dialog" }, - "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", - "@optionsEmbedMetadataSubtitleOff": { - "description": "Subtitle when metadata embedding is disabled" + "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", + "@safMigrationMessage1": { + "description": "First paragraph of SAF migration dialog" }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", - "@downloadAllowLocalNetworkDisabled": { - "description": "Subtitle when allow local network access is off" + "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", + "@safMigrationMessage2": { + "description": "Second paragraph of SAF migration dialog" }, - "@extensionsDownloadPrioritySubtitle": { - "description": "Subtitle for download priority" + "safMigrationSuccess": "Download folder updated to SAF mode", + "@safMigrationSuccess": { + "description": "Snackbar after successfully migrating to SAF" }, - "downloadSingleFilenameFormat": "Format Nama Berkas Tunggal", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" + "settingsDonate": "Support Development", + "@settingsDonate": { + "description": "Settings menu item - donate page" }, - "cacheSummarySubtitle": "Clearing cache will not remove downloaded music files.", - "@cacheSummarySubtitle": { - "description": "Helper text for cache summary card" + "settingsDonateSubtitle": "Buy the developer a coffee", + "@settingsDonateSubtitle": { + "description": "Subtitle for donate menu item" }, - "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", - "libraryFilterMetadataMissingTrackNumber": "Missing track number", - "@libraryFilterMetadataMissingTrackNumber": { - "description": "Filter option - items missing track number" + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" }, - "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", - "@backupIncludeSecretsDescription": { - "description": "Explanation for the include-credentials toggle" + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" }, - "@extensionServiceStatus": { - "description": "Extension detail section header for service status" + "backupExportSectionTitle": "Create backup", + "@backupExportSectionTitle": { + "description": "Section title for the export/backup card" }, - "queueEmptySingles": "No single downloads", - "@queueEmptySingles": { - "description": "Empty state title when no single track downloads exist" + "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", + "@backupExportSectionDescription": { + "description": "Description of what a backup contains" }, - "@snackbarSelectedPlaylistsEmpty": { - "description": "Snackbar when selected playlists contain no tracks" + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" }, - "@errorRateLimited": { - "description": "Error title - too many requests" + "backupImportSectionTitle": "Restore backup", + "@backupImportSectionTitle": { + "description": "Section title for the import/restore card" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", - "@setupDownloadInFlac": { - "description": "App tagline in setup" + "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", + "@backupImportSectionDescription": { + "description": "Description for the restore action" }, - "trackRemoveFromDevice": "Hapus dari perangkat", - "@extensionsNoDownloadProvider": { - "description": "Empty state - no download providers" + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" }, + "backupCreated": "Backup created", "@backupCreated": { "description": "Snackbar after a backup file is created" }, - "cacheSummaryTitle": "Cache overview", - "@cacheSummaryTitle": { - "description": "Heading for cache summary card" + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" }, - "selectionReplayGainCount": "ReplayGain ({count})", - "@selectionReplayGainCount": { - "description": "Batch selection action button label for ReplayGain", - "placeholders": { - "count": { - "type": "int" - } - } + "backupRestoreConfirmTitle": "Restore this backup?", + "@backupRestoreConfirmTitle": { + "description": "Confirmation dialog title before restoring a backup" }, - "@setupNotificationBackgroundDescription": { - "description": "Detailed notification explanation" + "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", + "@backupRestoreConfirmMessage": { + "description": "Confirmation dialog message before restoring a backup" }, - "safMigrationTitle": "Storage Update Required", - "snackbarMetadataSaved": "Metadata saved successfully", - "@snackbarMetadataSaved": { - "description": "Snackbar after successfully saving track metadata" + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" }, - "@backupContentsSettings": { - "description": "Backup contents row label for settings" + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" }, - "logClearLogsTitle": "Hapus Log", - "extensionsCustomSearch": "Pencarian kustom", - "@extensionsCustomSearch": { - "description": "Label for custom search provider" + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" }, - "@downloadFrom": { - "description": "Label - download source" + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" }, - "cacheSizeWithFiles": "{size} in {count} files", - "selectionShareNoFiles": "No shareable files found", - "@selectionShareNoFiles": { - "description": "Snackbar when no selected files exist on disk" + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" }, - "snackbarAddedTracksToQueue": "Menambahkan {count} lagu ke antrian", - "downloadFilenameInsertTag": "Tap to insert tag:", - "@downloadFilenameInsertTag": { - "description": "Label above filename tag chips" + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", + "backupContentsSettings": "App settings", + "@backupContentsSettings": { + "description": "Backup contents row label for settings" + }, + "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "@backupContentsHistory": { + "description": "Backup contents row for history count", "placeholders": { - "artistName": { - "type": "String" + "count": { + "type": "int" } } }, - "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", - "backupRestoreConfirmButton": "Restore", - "@libraryCleanupMissingFiles": { - "description": "Button to remove entries for missing files" + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "backupCreateFailed": "Failed to create backup", - "notifLibraryScanFailed": "Library scan failed", - "@notifLibraryScanFailed": { - "description": "Notification title when library scan fails" - }, - "audioAnalysisRescan": "Re-analyze", - "@trackTrackName": { - "description": "Metadata label - track title" - }, - "@setupPermissionRequired": { - "description": "Generic permission required title", + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", "placeholders": { - "permissionType": { - "type": "String", - "description": "Type of permission (Storage/Notification)" + "count": { + "type": "int" } } }, - "@nowPlayingNoLyrics": { - "description": "Empty state when the playing file has no embedded lyrics" - }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", "placeholders": { "count": { "type": "int" } } }, - "@extensionMetadataProvider": { - "description": "Capability - provides metadata" + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@downloadFilterContributing": { - "description": "Setting to strip contributing artists from Album Artist folder name" + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "libraryScanSelectFolderFirst": "Select a folder first", - "@sectionDownload": { - "description": "Settings section header" + "backupIncludeSecrets": "Include extension credentials", + "@backupIncludeSecrets": { + "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, - "extensionHealthNotConfigured": "Not configured", - "queueRetryAllFailed": "Retry {count} failed", - "folderOrganizationByPlaylistSubtitle": "Setiap daftar putar memerlukan folder terpisah", - "@folderOrganizationByPlaylistSubtitle": { - "description": "Subtitle for playlist folder option" + "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", + "@backupIncludeSecretsDescription": { + "description": "Explanation for the include-credentials toggle" }, - "lyricsProviderExtensionDesc": "Extension provider", - "@libraryFilterQualityHiRes": { - "description": "Filter option - high resolution audio" + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } }, - "trackConvertTitle": "Convert Audio", - "@trackConvertTitle": { - "description": "Title of convert bottom sheet" + "tooltipLoveAll": "Love All", + "@tooltipLoveAll": { + "description": "Tooltip for the Love All button on album/playlist screens" }, - "setupSkipForNow": "Lewati untuk sekarang", - "sectionDownload": "Unduhan", - "downloadLossyOpus256Subtitle": "Opus kualitas terbaik, ~8MB per trek", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" + "tooltipAddToPlaylist": "Add to Playlist", + "@tooltipAddToPlaylist": { + "description": "Tooltip for the Add to Playlist button" }, - "@trackConvertActionLabelLossless": { - "description": "Convert button label for lossless conversion with quality cap", + "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", + "@snackbarRemovedTracksFromLoved": { + "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "storeRequiresVersion": "Requires v{version}+", - "@storeRequiresVersion": { - "description": "Store compatibility badge for minimum app version", + "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", + "@snackbarAddedTracksToLoved": { + "description": "Snackbar after adding multiple tracks to Loved folder", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "int" } } }, - "metadataProviderPriorityDescription": "Seret untuk mengatur ulang urutan provider metadata. Aplikasi akan mencoba provider dari atas ke bawah saat mencari lagu dan mengambil metadata.", - "@notifUpdateFailed": { - "description": "Notification title when app update download fails" - }, - "extensionsInfoTip": "Ekstensi dapat menambahkan provider metadata dan unduhan baru. Hanya pasang ekstensi dari sumber terpercaya.", - "@extensionsInfoTip": { - "description": "Security warning about extensions" - }, - "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person lyrics is on" + "dialogDownloadAllTitle": "Download All", + "@dialogDownloadAllTitle": { + "description": "Dialog title for bulk download confirmation" }, - "libraryFilterMetadataMissingYear": "Missing year", - "extensionsDownloadPriority": "Prioritas Unduhan", - "@extensionsDownloadPriority": { - "description": "Setting - download provider order" + "dialogDownloadAllMessage": "Download {count} tracks?", + "@dialogDownloadAllMessage": { + "description": "Body of the Download All confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@downloadAllowLocalNetworkEnabled": { - "description": "Subtitle when allow local network access is on" + "homeSkipAlreadyDownloaded": "Skip already downloaded songs", + "@homeSkipAlreadyDownloaded": { + "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "libraryScan": "Scan Library", - "@libraryScan": { - "description": "Button to start library scan" + "homeGoToAlbum": "Go to Album", + "@homeGoToAlbum": { + "description": "Context menu item to navigate to the album page" }, - "editMetadataFieldLabel": "Label", - "@editMetadataFieldLabel": { - "description": "Chip label for label field in auto-fill selector" + "homeAlbumInfoUnavailable": "Album info not available", + "@homeAlbumInfoUnavailable": { + "description": "Snackbar when album info cannot be loaded" }, - "updateDownloadFailed": "Unduhan gagal", - "@updateDownloadFailed": { - "description": "Update error title" + "snackbarLoadingCueSheet": "Loading CUE sheet...", + "@snackbarLoadingCueSheet": { + "description": "Snackbar while loading a CUE sheet file" }, - "appearanceAmoledDarkSubtitle": "Latar belakang hitam murni", - "@appearanceAmoledDarkSubtitle": { - "description": "Subtitle for AMOLED dark" + "snackbarMetadataSaved": "Metadata saved successfully", + "@snackbarMetadataSaved": { + "description": "Snackbar after successfully saving track metadata" }, - "setupIcloudNotSupported": "iCloud Drive tidak didukung. Silakan gunakan folder Dokumen di aplikasi.", - "trackLyricsEmbeddedSource": "Embedded", - "@trackLyricsEmbeddedSource": { - "description": "Lyrics source label for embedded lyrics" + "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", + "@snackbarFailedToEmbedLyrics": { + "description": "Snackbar when lyrics embedding fails" }, - "@trackAlbumArtist": { - "description": "Metadata label - album artist" + "snackbarFailedToWriteStorage": "Failed to write back to storage", + "@snackbarFailedToWriteStorage": { + "description": "Snackbar when writing metadata back to file fails" }, - "extensionsInstallPartialSuccess": "Ekstensi yang terpasang berjumlah {installed} dari {attempted}", - "@extensionsInstallPartialSuccess": { - "description": "Message when installing multiple extensions partially succeeds", + "snackbarError": "Error: {error}", + "@snackbarError": { + "description": "Generic error snackbar with error detail", "placeholders": { - "installed": { - "type": "int", - "description": "Number of successfully installed extensions" - }, - "attempted": { - "type": "int", - "description": "Number of selected extensions" + "error": { + "type": "String" } } }, - "@extensionSettingsCount": { - "description": "Count of settings exposed by an extension quality option", - "placeholders": { - "count": { - "type": "int" - } - } + "snackbarNoActionDefined": "No action defined for this button", + "@snackbarNoActionDefined": { + "description": "Snackbar when an extension button has no action configured" }, - "notifLibraryScanCancelled": "Library scan cancelled", - "@notifLibraryScanCancelled": { - "description": "Notification title when library scan is cancelled by the user" + "noTracksFoundForAlbum": "No tracks found for this album", + "@noTracksFoundForAlbum": { + "description": "Empty state message when an album has no tracks" }, - "collectionPlaylistNameRequired": "Playlist name is required", - "libraryCleanupMissingFiles": "Cleanup Missing Files", - "storeCategoryUtility": "Utility", - "@storeCategoryUtility": { - "description": "Store extension category - utility" + "downloadLocationSubtitle": "Choose where to save your downloaded tracks", + "@downloadLocationSubtitle": { + "description": "Subtitle shown in the download location picker sheet" }, - "searchSortTitle": "Urutkan hasil", - "@extensionVerificationBrowserExternal": { - "description": "Chip label for external browser verification mode" + "storageModeAppFolder": "App Folder (Recommended)", + "@storageModeAppFolder": { + "description": "Storage mode option - app-managed folder" }, - "audioAnalysisLufs": "LUFS", - "@setupAllowAccessToManageFiles": { - "description": "Instruction for file access permission" + "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", + "@storageModeAppFolderSubtitle": { + "description": "Subtitle for app folder storage mode" }, - "extensionsErrorLoading": "Error memuat ekstensi", - "@actionPaste": { - "description": "Generic action - paste from clipboard" + "storageModeSaf": "Custom Folder (SAF)", + "@storageModeSaf": { + "description": "Storage mode option - Storage Access Framework" }, - "aboutFeatureRequestSubtitle": "Sarankan fitur baru untuk aplikasi", - "@aboutFeatureRequestSubtitle": { - "description": "Subtitle for feature request" + "storageModeSafSubtitle": "Pick any folder, including SD card", + "@storageModeSafSubtitle": { + "description": "Subtitle for SAF storage mode" }, - "@aboutTitle": { - "description": "About page title" + "downloadFolderAccessLostTitle": "Download folder access lost", + "@downloadFolderAccessLostTitle": { + "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" }, - "@downloadNeteaseIncludeTranslation": { - "description": "Setting to include translated lyrics from Netease" + "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", + "@downloadFolderAccessLostSubtitle": { + "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" }, - "@actionGo": { - "description": "Generic action button label" + "downloadFolderReselect": "Re-select folder", + "@downloadFolderReselect": { + "description": "Button that reopens the folder picker to restore download folder access" }, - "regionCountryFR": "France", - "trackConvertResamplerSoxr": "SoXr", - "extensionUpdated": "Diperbarui", - "@extensionUpdated": { - "description": "Extension detail - last update" + "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", + "@downloadErrorSafPermissionLost": { + "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" }, - "downloadLossyFormat": "Format Lossy", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" + "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", + "@downloadErrorFolderAccessLost": { + "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, - "downloadAutoConvert": "Auto-convert after download", - "@downloadAutoConvert": { - "description": "Toggle for automatic post-download audio conversion" + "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", + "@downloadFilenameDescription": { + "description": "Description shown in filename format editor" }, - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "@downloadAutoConvertSubtitle": { - "description": "Explanation of safe automatic post-download conversion" + "downloadFilenameInsertTag": "Tap to insert tag:", + "@downloadFilenameInsertTag": { + "description": "Label above filename tag chips" }, - "downloadAutoConvertFormat": "Output format", - "@downloadAutoConvertFormat": { - "description": "Automatic conversion output format setting" + "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", + "@downloadSeparateSinglesEnabled": { + "description": "Subtitle when separate singles folder is on" }, - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "@downloadAutoConvertFormatSubtitle": { - "description": "Automatic conversion format picker explanation" + "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", + "@downloadSeparateSinglesDisabled": { + "description": "Subtitle when separate singles folder is off" }, - "downloadAutoConvertBitrate": "Output quality", - "@downloadAutoConvertBitrate": { - "description": "Automatic conversion bitrate setting" + "downloadArtistNameFilters": "Artist Name Filters", + "@downloadArtistNameFilters": { + "description": "Setting title for artist folder filter options" }, - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "@downloadAutoConvertBitrateSubtitle": { - "description": "Automatic conversion bitrate picker explanation" + "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", + "@downloadCreatePlaylistSourceFolder": { + "description": "Setting to create a subfolder per playlist source" }, - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "@downloadAutoConvertMp3Subtitle": { - "description": "MP3 automatic conversion option description" + "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", + "@downloadCreatePlaylistSourceFolderEnabled": { + "description": "Subtitle when playlist folder is enabled" }, - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "@downloadAutoConvertM4aSubtitle": { - "description": "M4A AAC automatic conversion option description" + "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", + "@downloadCreatePlaylistSourceFolderDisabled": { + "description": "Subtitle when playlist folder is disabled" }, - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "@downloadAutoConvertOpusSubtitle": { - "description": "Opus automatic conversion option description" + "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", + "@downloadCreatePlaylistSourceFolderRedundant": { + "description": "Subtitle when folder organization is already set to playlist" }, - "snackbarAlreadyInLibrary": "\"{trackName}\" sudah ada di perpustakaan Anda", - "@snackbarAlreadyInLibrary": { - "description": "Snackbar - track already exists in local library", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadSongLinkRegion": "SongLink Region", + "@downloadSongLinkRegion": { + "description": "Setting for SongLink region used during fallback resolution" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", - "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", - "libraryFilterQuality": "Quality", - "@libraryFilterQuality": { - "description": "Filter section - audio quality" + "downloadNetworkCompatibilityMode": "Network Compatibility Mode", + "@downloadNetworkCompatibilityMode": { + "description": "Setting for legacy TLS/network handling" }, - "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", - "@editMetadataAutoFillDone": { - "description": "Snackbar confirming how many fields were auto-filled", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "@downloadNetworkCompatibilityModeEnabled": { + "description": "Subtitle when network compatibility mode is on" }, - "@discographyDownload": { - "description": "Button - download artist discography" + "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", + "@downloadNetworkCompatibilityModeDisabled": { + "description": "Subtitle when network compatibility mode is off" }, - "aboutFeatureRequest": "Permintaan fitur", - "downloadSingleFilenameFormatDescription": "Pola nama file untuk single dan EP. Menggunakan tag yang sama dengan format album.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@downloadAllowLocalNetwork": { + "description": "Setting title for allowing requests to private/local network targets" }, - "queueClearAllMessage": "Apakah Anda yakin ingin menghapus semua unduhan?", - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", - "extensionLastChecked": "Last checked {time}", - "@extensionLastChecked": { - "description": "Timestamp for the latest extension service health check", - "placeholders": { - "time": { - "type": "String" - } - } + "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", + "@downloadAllowLocalNetworkEnabled": { + "description": "Subtitle when allow local network access is on" }, - "homeImportCsvTooltip": "Import playlist (CSV, M3U)", - "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" }, - "trackConvertResamplerSwr": "SWR", - "@trackConvertResamplerSwr": { - "description": "Lossless conversion default FFmpeg swresample resampler option" + "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "@downloadSelectServiceToEnable": { + "description": "Subtitle when quality picker is disabled due to extension service" }, - "@downloadFolderOrganization": { - "description": "Title of the folder organization picker bottom sheet" + "downloadEmbedLyricsDisabled": "Enable metadata embedding first", + "@downloadEmbedLyricsDisabled": { + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "dialogClearHistoryTitle": "Hapus Riwayat", - "@logClearSearch": { - "description": "Tooltip for clearing the log search field" + "downloadNeteaseIncludeTranslation": "Netease: Include Translation", + "@downloadNeteaseIncludeTranslation": { + "description": "Setting to include translated lyrics from Netease" }, - "dialogImport": "Impor", - "@dialogImport": { - "description": "Dialog button - import data" + "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", + "@downloadNeteaseIncludeTranslationEnabled": { + "description": "Subtitle when Netease translation is on" }, - "@setupChangeFolderTooltip": { - "description": "Tooltip for editing the selected download folder" + "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", + "@downloadNeteaseIncludeTranslationDisabled": { + "description": "Subtitle when Netease translation is off" }, - "notifLibraryScanErrors": "{count} errors", - "@downloadNetworkCompatibilityMode": { - "description": "Setting for legacy TLS/network handling" + "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", + "@downloadNeteaseIncludeRomanization": { + "description": "Setting to include romanized lyrics from Netease" }, - "@metadataSaveFailedFfmpeg": { - "description": "Snackbar error when FFmpeg fails to write metadata" + "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", + "@downloadNeteaseIncludeRomanizationEnabled": { + "description": "Subtitle when Netease romanization is on" }, - "dialogUninstallExtension": "Copot Ekstensi?", - "recentTypePlaylist": "Daftar putar", - "@recentTypePlaylist": { - "description": "Recent access item type - playlist" + "downloadNeteaseIncludeRomanizationDisabled": "No romanization", + "@downloadNeteaseIncludeRomanizationDisabled": { + "description": "Subtitle when Netease romanization is off" }, - "trackDeleteConfirmMessage": "Ini akan menghapus file unduhan secara permanen dan menghapusnya dari riwayat Anda.", - "@logIssueNetworkErrorDescription": { - "description": "Diagnostic badge description for generic network errors" + "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", + "@downloadAppleQqMultiPerson": { + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, - "appearanceThemeSystem": "Sistem", - "@appearanceThemeSystem": { - "description": "Follow system theme" + "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", + "@downloadAppleQqMultiPersonEnabled": { + "description": "Subtitle when multi-person lyrics is on" }, - "albumFolderArtistAlbumSingles": "Artis / Album + Singel", - "@aboutTranslators": { - "description": "Section for translators" + "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", + "@downloadAppleQqMultiPersonDisabled": { + "description": "Subtitle when multi-person lyrics is off" }, - "shareSheetNotFound": "Not found", - "@shareSheetNotFound": { - "description": "Cross-service share sheet row subtitle when a service has no match" + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "@tutorialDownloadInProgressSemantics": { - "description": "Accessibility label for active download state in tutorial demo" + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", - "@editMetadataAutoFillNoneSelected": { - "description": "Snackbar when user taps Fetch without selecting any fields" + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "@snackbarViewQueue": { - "description": "Snackbar action - view download queue" + "downloadMusixmatchLanguage": "Musixmatch Language", + "@downloadMusixmatchLanguage": { + "description": "Setting for Musixmatch lyrics translation language" }, - "@optionsUpdateChannelPreview": { - "description": "Include beta/preview updates" + "downloadMusixmatchLanguageAuto": "Auto (original language)", + "@downloadMusixmatchLanguageAuto": { + "description": "Subtitle when no language is set" }, - "editMetadataFieldComposer": "Composer", - "@editMetadataFieldComposer": { - "description": "Label for composer field in the edit metadata sheet" + "downloadFilterContributing": "Filter Contributing Artists", + "@downloadFilterContributing": { + "description": "Setting to strip contributing artists from Album Artist folder name" }, - "aboutSachinsenalDesc": "Pencipta proyek HiFi asli. Sebuah fondasi untuk integrasi sumber lossless.", - "@aboutSachinsenalDesc": { - "description": "Credit description for sachinsenal0x64" + "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", + "@downloadFilterContributingEnabled": { + "description": "Subtitle when contributing artist filter is on" }, - "backupTitle": "Backup & Restore", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" + "downloadFilterContributingDisabled": "Full Album Artist string used", + "@downloadFilterContributingDisabled": { + "description": "Subtitle when contributing artist filter is off" }, - "setupStorageAccessRequired": "Akses Penyimpanan Diperlukan", - "@setupStorageAccessRequired": { - "description": "Title when storage access needed" + "downloadProvidersNoneEnabled": "No providers enabled", + "@downloadProvidersNoneEnabled": { + "description": "Shown when no lyrics providers are active" }, - "trackMetadataDelete": "Hapus", - "@trackMetadataDelete": { - "description": "Action button - delete track" + "downloadMusixmatchLanguageCode": "Language code", + "@downloadMusixmatchLanguageCode": { + "description": "Label for Musixmatch language input field" }, - "libraryFilterMetadataMissingDiscNumber": "Missing disc number", - "@libraryFilterMetadataMissingDiscNumber": { - "description": "Filter option - items missing disc number" + "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "@downloadMusixmatchLanguageHint": { + "description": "Placeholder for Musixmatch language input" }, - "snackbarMetadataProviderSaved": "Prioritas provider metadata disimpan", - "setupPermissionRequired": "Izin {permissionType} Diperlukan", - "@selectionConvertNoConvertible": { - "description": "Snackbar when no selected tracks support conversion" + "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", + "@downloadMusixmatchLanguageDesc": { + "description": "Description in Musixmatch language picker" }, - "extensionHealthDegraded": "Degraded", - "regionCountryKR": "South Korea", - "@regionCountryKR": { - "description": "Country name for SongLink region picker" + "downloadMusixmatchAuto": "Auto", + "@downloadMusixmatchAuto": { + "description": "Button to clear Musixmatch language (use auto)" }, - "trackLyricsNotInFile": "Tidak ditemukan lirik dalam file ini", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" + "downloadNetworkAnySubtitle": "Use WiFi or mobile data", + "@downloadNetworkAnySubtitle": { + "description": "Subtitle for any-network option in picker" }, - "@downloadedAlbumTapToSelect": { - "description": "Selection hint" + "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "@downloadNetworkWifiOnlySubtitle": { + "description": "Subtitle for WiFi-only option in picker" }, - "downloadArtistNameFilters": "Artist Name Filters", - "@downloadArtistNameFilters": { - "description": "Setting title for artist folder filter options" + "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", + "@downloadSongLinkRegionDesc": { + "description": "Description in SongLink region picker" }, - "@libraryFilterMetadataMissingArtist": { - "description": "Filter option - items missing artist" + "snackbarUnsupportedAudioFormat": "Unsupported audio format", + "@snackbarUnsupportedAudioFormat": { + "description": "Snackbar when the audio format is not supported for the requested operation" }, - "recentShowAllDownloads": "Tampilkan Semua Unduhan", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "@recentClearAllMessage": { - "description": "Confirmation message before clearing all recent activity" + "cacheRefresh": "Refresh", + "@cacheRefresh": { + "description": "Tooltip for refresh button on cache management page" }, - "@appearanceThemeLight": { - "description": "Light theme" + "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", + "@dialogDownloadPlaylistsMessage": { + "description": "Dialog message for bulk playlist download confirmation", + "placeholders": { + "trackCount": { + "type": "int" + }, + "playlistCount": { + "type": "int" + } + } }, - "trackReEnrichFieldTrackInfo": "Track & Disc Number", - "@appearanceThemeDark": { - "description": "Dark theme" + "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", + "@bulkDownloadPlaylistsButton": { + "description": "Button label for bulk downloading selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionVerificationLinkCopied": "Verification link copied", - "@extensionVerificationLinkCopied": { - "description": "Snackbar after copying the extension verification URL" + "bulkDownloadSelectPlaylists": "Select playlists to download", + "@bulkDownloadSelectPlaylists": { + "description": "Button label when no playlists are selected for download" }, - "@extensionsHomeFeedDescription": { - "description": "Extensions page - description for home feed provider picker" + "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", + "@snackbarSelectedPlaylistsEmpty": { + "description": "Snackbar when selected playlists contain no tracks" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", - "@downloadAlbumArtistMetadataPrimaryOnly": { - "description": "Status label when album-artist folder filtering uses primary artist only" + "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@playlistsCount": { + "description": "Playlist count display", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", - "setupNext": "Lanjut", - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", - "libraryAutoScanDaily": "Daily", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" + "editMetadataAutoFill": "Auto-fill from online", + "@editMetadataAutoFill": { + "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "@audioAnalysisDescription": { - "description": "Description for audio analysis tap-to-analyze prompt" + "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", + "@editMetadataAutoFillDesc": { + "description": "Description for the auto-fill section" }, - "nowPlayingUpNext": "Up next", - "@nowPlayingUpNext": { - "description": "Title for the playback queue sheet" + "editMetadataAutoFillSource": "Metadata source", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" }, - "nowPlayingPreviousTrack": "Previous track", - "@nowPlayingPreviousTrack": { - "description": "Tooltip for the previous-track playback control" + "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" }, - "nowPlayingNextTrack": "Next track", - "@nowPlayingNextTrack": { - "description": "Tooltip for the next-track playback control" + "editMetadataAutoFillFind": "Find metadata", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" }, - "logAutoScrollOff": "Auto-scroll OFF", - "trackConvertFailed": "Conversion failed", - "@trackConvertFailed": { - "description": "Snackbar when conversion fails" + "editMetadataAutoFillPreview": "Data from {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } }, - "extensionsUninstall": "Copot", - "safMigrationSuccess": "Download folder updated to SAF mode", - "optionsClearHistorySubtitle": "Hapus semua lagu dari riwayat", - "@optionsClearHistorySubtitle": { - "description": "Subtitle for clear history" + "editMetadataAutoFillCoverAvailable": "Cover artwork available", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" }, - "trackPlayNext": "Play next", - "extensionsNoHomeFeedExtensions": "No extensions with home feed", - "optionsUpdateChannelStable": "Hanya rilis stabil", - "@optionsUpdateChannelStable": { - "description": "Only stable updates" + "editMetadataAutoFillApply": "Apply selected data", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" }, - "@discographyDownloadAllSubtitle": { - "description": "Subtitle showing total tracks and albums", + "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" }, - "albumCount": { - "type": "int" + "source": { + "type": "String" } } }, - "searchPlaylists": "Playlist", - "@searchPlaylists": { - "description": "Search result category - playlists" - }, - "downloadNetworkCompatibilityMode": "Network Compatibility Mode", - "settingsAppearance": "Tampilan", - "logIssueRateLimitedLabel": "RATE LIMITED", - "@logIssueRateLimitedLabel": { - "description": "Diagnostic badge label when the service rate limits requests" + "editMetadataAutoFillFetch": "Fetch & Fill", + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" }, - "logIssueSummary": "Issue Summary", - "@logIssueSummary": { - "description": "Header for log issue analysis summary" + "editMetadataAutoFillSearching": "Searching online...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" }, - "appName": "SpotiFLAC Mobile", - "storeRepoDialogCurrent": "Repositori saat ini:", - "@optionsExtensionStoreSubtitle": { - "description": "Subtitle for extension repo toggle" + "editMetadataAutoFillNoResults": "No matching metadata found online", + "@editMetadataAutoFillNoResults": { + "description": "Snackbar when online metadata search returns no results" }, - "@trackLyrics": { - "description": "Tab title - lyrics" + "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", + "@editMetadataAutoFillDone": { + "description": "Snackbar confirming how many fields were auto-filled", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@backupImportButton": { - "description": "Button to pick a backup file to restore" + "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", + "@editMetadataAutoFillNoneSelected": { + "description": "Snackbar when user taps Fetch without selecting any fields" }, - "@setupFolderChoose": { - "description": "Button to choose folder" + "editMetadataFieldTitle": "Title", + "@editMetadataFieldTitle": { + "description": "Chip label for title field in auto-fill selector" }, - "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", - "@extensionsDisabled": { - "description": "Extension status - inactive" + "editMetadataFieldArtist": "Artist", + "@editMetadataFieldArtist": { + "description": "Chip label for artist field in auto-fill selector" }, - "@regionCountryAU": { - "description": "Country name for SongLink region picker" + "editMetadataFieldAlbum": "Album", + "@editMetadataFieldAlbum": { + "description": "Chip label for album field in auto-fill selector" }, - "@storeCategoryMetadata": { - "description": "Store extension category - metadata" + "editMetadataFieldAlbumArtist": "Album Artist", + "@editMetadataFieldAlbumArtist": { + "description": "Chip label for album artist field in auto-fill selector" }, - "libraryFilterApply": "Apply", - "@libraryFilterApply": { - "description": "Apply filters button" + "editMetadataFieldDate": "Date", + "@editMetadataFieldDate": { + "description": "Chip label for date field in auto-fill selector" }, - "@libraryFilterSortGenreAsc": { - "description": "Sort option - genre ascending" + "editMetadataFieldTrackNum": "Track #", + "@editMetadataFieldTrackNum": { + "description": "Chip label for track number field in auto-fill selector" }, - "setupAllowAccessToManageFiles": "Harap aktifkan \"Izinkan akses untuk mengelola semua file\" di layar berikutnya.", - "@dialogSave": { - "description": "Dialog button - save changes" + "editMetadataFieldDiscNum": "Disc #", + "@editMetadataFieldDiscNum": { + "description": "Chip label for disc number field in auto-fill selector" }, - "trackLyrics": "Lirik", - "extensionSettingNotSet": "Not set", - "@extensionSettingNotSet": { - "description": "Value shown when an extension setting has no value" + "editMetadataFieldGenre": "Genre", + "@editMetadataFieldGenre": { + "description": "Chip label for genre field in auto-fill selector" }, - "@audioAnalysisClipping": { - "description": "Clipping metric label" + "editMetadataFieldIsrc": "ISRC", + "@editMetadataFieldIsrc": { + "description": "Chip label for ISRC field in auto-fill selector" }, - "downloadNeteaseIncludeTranslation": "Netease: Include Translation", - "@albumFolderArtistAlbumSubtitle": { - "description": "Folder structure example" + "editMetadataFieldLabel": "Label", + "@editMetadataFieldLabel": { + "description": "Chip label for label field in auto-fill selector" }, - "@settingsDonateSubtitle": { - "description": "Subtitle for donate menu item" + "editMetadataFieldCopyright": "Copyright", + "@editMetadataFieldCopyright": { + "description": "Chip label for copyright field in auto-fill selector" }, - "cueSplitSuccess": "Split into {count} tracks successfully", - "@cueSplitSuccess": { - "description": "Snackbar after successful CUE split", + "editMetadataFieldCover": "Cover Art", + "@editMetadataFieldCover": { + "description": "Chip label for cover art field in auto-fill selector" + }, + "editMetadataSelectAll": "All", + "@editMetadataSelectAll": { + "description": "Button to select all fields for auto-fill" + }, + "editMetadataSelectEmpty": "Empty only", + "@editMetadataSelectEmpty": { + "description": "Button to select only fields that are currently empty" + }, + "queueDownloadingCount": "Downloading ({count})", + "@queueDownloadingCount": { + "description": "Header for active downloads section with count", "placeholders": { "count": { "type": "int" } } }, - "cueSplitArtist": "Artist: {artist}", - "@cueSplitArtist": { - "description": "Artist name in CUE split sheet", + "queueFilteringIndicator": "Filtering...", + "@queueFilteringIndicator": { + "description": "Shown while filter results are being computed" + }, + "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "@queueTrackCount": { + "description": "Track count label with plural support", "placeholders": { - "artist": { - "type": "String" + "count": { + "type": "int" } } }, - "updateSeeReleaseNotes": "See release notes for details.", - "@updateSeeReleaseNotes": { - "description": "Fallback changelog text when release notes cannot be parsed" - }, - "@trackReEnrichFfmpegFailed": { - "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "@queueAlbumCount": { + "description": "Album count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionWishlist": "Wishlist", - "@collectionWishlist": { - "description": "Custom folder for saved tracks to download later" + "queueEmptyAlbums": "No album downloads", + "@queueEmptyAlbums": { + "description": "Empty state title when no album downloads exist" }, - "editMetadataAutoFillFetch": "Fetch & Fill", - "@extensionsHomeFeedAuto": { - "description": "Label for auto-selected search provider" + "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", + "@queueEmptyAlbumsSubtitle": { + "description": "Empty state subtitle for album downloads" }, - "providerPriorityDescription": "Seret untuk mengatur ulang urutan provider unduhan. Aplikasi akan mencoba provider dari atas ke bawah saat mengunduh lagu.", - "@providerPriorityDescription": { - "description": "Provider priority page description" + "queueEmptySingles": "No single downloads", + "@queueEmptySingles": { + "description": "Empty state title when no single track downloads exist" }, "queueEmptySinglesSubtitle": "Single track downloads will appear here", - "downloadLossyOpus128": "Opus 128kbps", - "downloadUseAlbumArtistForFolders": "Gunakan Artis Album untuk folder", - "@downloadUseAlbumArtistForFolders": { - "description": "Setting - choose whether artist folders use Album Artist or Track Artist" - }, - "@aboutLinks": { - "description": "Section for external links" + "@queueEmptySinglesSubtitle": { + "description": "Empty state subtitle for single track downloads" }, - "downloadedAlbumDeleteCount": "Hapus {count} {count, plural, =1{lagu} other{lagu}}", - "updateLater": "Nanti", - "@logIssueIspBlockingSuggestion": { - "description": "Diagnostic badge suggestion for ISP blocking" + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "actionResume": "Lanjutkan", - "optionsDetailedLoggingOff": "Aktifkan untuk laporan bug", - "@searchSortDefault": { - "description": "Sort option - default API order" + "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" }, - "@regionCountryCA": { - "description": "Country name for SongLink region picker" + "libraryDefaultView": "Default view", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" }, - "@sectionStorageAccess": { - "description": "Section header for storage access settings" + "libraryDefaultViewLastUsed": "Last used", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" }, - "downloadFilterContributing": "Filter Contributing Artists", - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", - "storeSearch": "Cari ekstensi...", - "@storeSearch": { - "description": "Repo search placeholder" + "queueEmptyHistory": "No download history", + "@queueEmptyHistory": { + "description": "Empty state title when download history is empty" }, - "aboutTelegramChat": "Komunitas Telegram", - "lyricsModeBoth": "Keduanya", - "@lyricsModeBoth": { - "description": "Lyrics mode option - embed and external" + "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", + "@queueEmptyHistorySubtitle": { + "description": "Empty state subtitle for download history" }, - "@permissionNotification": { - "description": "Notification permission type label" + "selectionAllPlaylistsSelected": "All playlists selected", + "@selectionAllPlaylistsSelected": { + "description": "Shown when all playlists are selected in selection mode" }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" + "selectionTapPlaylistsToSelect": "Tap playlists to select", + "@selectionTapPlaylistsToSelect": { + "description": "Hint shown in playlist selection mode" }, - "libraryEnableLocalLibrary": "Enable Local Library", - "trackConvertTargetFormat": "Target Format", - "@trackConvertTargetFormat": { - "description": "Label for format selection" + "selectionSelectPlaylistsToDelete": "Select playlists to delete", + "@selectionSelectPlaylistsToDelete": { + "description": "Hint shown when no playlists are selected for deletion" }, - "extensionSettings": "Pengaturan", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" + "audioAnalysisTitle": "Audio Quality Analysis", + "@audioAnalysisTitle": { + "description": "Title for audio analysis section" }, - "trackLyricsTimeout": "Permintaan habis waktu. Coba lagi nanti.", - "settingsExtensions": "Ekstensi", - "@settingsBackup": { - "description": "Settings menu item - backup and restore page" + "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", + "@audioAnalysisDescription": { + "description": "Description for audio analysis tap-to-analyze prompt" }, - "librarySourceDownloaded": "Downloaded", - "@librarySourceDownloaded": { - "description": "Badge for tracks downloaded via SpotiFLAC" + "audioAnalysisAnalyzing": "Analyzing audio...", + "@audioAnalysisAnalyzing": { + "description": "Loading text while analyzing audio" }, - "appearanceDynamicColor": "Warna Dinamis", - "@appearanceDynamicColor": { - "description": "Material You dynamic colors" + "audioAnalysisSampleRate": "Sample Rate", + "@audioAnalysisSampleRate": { + "description": "Sample rate metric label" }, - "backupImportButton": "Choose backup file", - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@optionsEmbedMetadata": { - "description": "Settings toggle title for writing metadata into downloaded files" + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" }, - "appearanceTitle": "Tampilan", - "downloadNeteaseIncludeRomanizationDisabled": "No romanization", - "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is off" + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" }, - "@libraryScanCancelled": { - "description": "Library scan status when a scan was cancelled" + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" }, - "tracksCount": "{count, plural, =1{1 lagu} other{{count} lagu}}", - "@snackbarFailedToUpdateNamed": { - "description": "Snackbar when extension update fails in the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "audioAnalysisBitDepth": "Bit Depth", + "@audioAnalysisBitDepth": { + "description": "Bit depth metric label" }, - "@extensionQualityOptions": { - "description": "Capability - quality selection" + "audioAnalysisChannels": "Channels", + "@audioAnalysisChannels": { + "description": "Channels metric label" }, - "logClearSearch": "Clear search", - "trackSaveLyrics": "Save Lyrics (.lrc)", - "@trackReEnrichSearching": { - "description": "Snackbar while searching metadata from internet for local items" + "audioAnalysisDuration": "Duration", + "@audioAnalysisDuration": { + "description": "Duration metric label" }, - "@editMetadataAutoFillNoResults": { - "description": "Snackbar when online metadata search returns no results" + "audioAnalysisNyquist": "Nyquist", + "@audioAnalysisNyquist": { + "description": "Nyquist frequency metric label" }, - "notifDownloadComplete": "Download Complete", - "snackbarAlreadyDownloaded": "\"{trackName}\" sudah diunduh", - "folderOrganizationByAlbumSubtitle": "Folder terpisah untuk setiap album", - "storeRepoUrlHint": "https://github.com/user/repo", - "trackConvertDitherTriangularHp": "Triangular HP", - "lyricsModeBothSubtitle": "Sematkan dan simpan file .lrc", - "trackReEnrichFieldExtra": "Genre, Label, Copyright", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" + "audioAnalysisFileSize": "Size", + "@audioAnalysisFileSize": { + "description": "File size metric label" }, - "sectionLyrics": "Lirik", - "@sectionLyrics": { - "description": "Settings section header" + "audioAnalysisDynamicRange": "Dynamic Range", + "@audioAnalysisDynamicRange": { + "description": "Dynamic range metric label" }, - "extensionStrategy": "Strategi: {strategy}", - "@extensionStrategy": { - "description": "Track matching strategy name", - "placeholders": { - "strategy": { - "type": "String" - } - } + "audioAnalysisPeak": "Peak", + "@audioAnalysisPeak": { + "description": "Peak amplitude metric label" }, - "@downloadNativeWorker": { - "description": "Setting title for Android native download worker" + "audioAnalysisRms": "RMS", + "@audioAnalysisRms": { + "description": "RMS level metric label" }, - "optionsArtistTagModeSplitVorbis": "Tag terpisah untuk FLAC/Opus", - "extensionsHomeFeedUse": "Use {extensionName} home feed", - "@cacheAppDirectoryDesc": { - "description": "Description of what app cache directory contains" + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" }, - "cancelDownloadTitle": "Cancel download?", - "updateWhatsNew": "Apa yang baru", - "updateNewVersionReady": "Versi baru sudah siap", - "@extensionVerificationClose": { - "description": "Button to dismiss the extension verification help dialog" + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" }, - "a11ySelectTrack": "Select track", - "libraryClearSubtitle": "Remove all scanned tracks", - "@libraryClearSubtitle": { - "description": "Subtitle for clear button" + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" }, - "@settingsDownloadNetworkSubtitle": { - "description": "Subtitle explaining network preference" - }, - "storeAnyVersion": "Any", - "@storeAnyVersion": { - "description": "Store detail value when any app version is accepted" + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" }, - "navStore": "Repositori", - "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", - "libraryScanSettings": "Scan Settings", - "@libraryScanSettings": { - "description": "Section header for scan settings" + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" }, - "trackDuration": "Durasi", - "@trackDuration": { - "description": "Metadata label - track length" + "audioAnalysisCutoffNotDetected": "Not detected", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" }, - "extensionHealthOffline": "Offline", - "@extensionHealthOffline": { - "description": "Extension service health status - offline" + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" }, - "editMetadataFieldArtist": "Artist", - "@editMetadataFieldArtist": { - "description": "Chip label for artist field in auto-fill selector" + "audioAnalysisSamples": "Samples", + "@audioAnalysisSamples": { + "description": "Total samples metric label" }, - "libraryInLibrary": "In Library", - "pressBackAgainToExit": "Tekan kembali sekali lagi untuk keluar", - "@pressBackAgainToExit": { - "description": "Exit confirmation message" + "audioAnalysisRescan": "Re-analyze", + "@audioAnalysisRescan": { + "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" }, - "setupNotificationGranted": "Izin Notifikasi Diberikan!", - "@setupNotificationGranted": { - "description": "Success message for notification permission" + "audioAnalysisRescanning": "Re-analyzing audio...", + "@audioAnalysisRescanning": { + "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "settingsDonate": "Support Development", - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", - "backupContentsTitle": "Backup contents", - "updateDontRemind": "Jangan ingatkan", - "@dialogDiscard": { - "description": "Dialog button - discard changes" + "extensionsHomeFeedProvider": "Home Feed Provider", + "@extensionsHomeFeedProvider": { + "description": "Extensions page - label for home feed provider selector" }, - "editMetadataAutoFillSearching": "Searching online...", - "discographyDownloadSelected": "Unduh yang Dipilih", - "trackConvertResampler": "Resampler", - "queueFilteringIndicator": "Filtering...", - "@queueFilteringIndicator": { - "description": "Shown while filter results are being computed" + "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", + "@extensionsHomeFeedDescription": { + "description": "Extensions page - description for home feed provider picker" }, - "@dialogDownloadAllTitle": { - "description": "Dialog title for bulk download confirmation" + "extensionsHomeFeedAuto": "Auto", + "@extensionsHomeFeedAuto": { + "description": "Label for auto-selected search provider" }, - "cueSplitConfirmMessage": "Split \"{album}\" into {count} individual FLAC files?\n\nFiles will be saved to the same directory.", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when folder organization is already set to playlist" + "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", + "@extensionsHomeFeedAutoSubtitle": { + "description": "Extensions page - subtitle for auto home feed option" }, - "regionCountryCA": "Canada", - "cacheTempDirectory": "Temporary directory", - "@cacheTempDirectory": { - "description": "Cache item title for temporary files directory" + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" }, - "libraryShowDuplicateIndicator": "Show Duplicate Indicator", - "@logFilterBySeverity": { - "description": "Filter dialog title" + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" }, - "homeSearchHintProvider": "Search with {providerName}...", - "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is off" + "extensionsHomeFeedUse": "Use {extensionName} home feed", + "@extensionsHomeFeedUse": { + "description": "Extensions page - subtitle for a specific extension home feed option", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "optionsCheckUpdates": "Periksa Pembaruan", - "replayGainBatchAnalyzing": "Menganalisis ReplayGain...", - "recentTypeAlbum": "Album", - "providerExtension": "Ekstensi", - "@providerExtension": { - "description": "Label for extension-provided providers" + "extensionsNoHomeFeedExtensions": "No extensions with home feed", + "@extensionsNoHomeFeedExtensions": { + "description": "Extensions page - shown when no installed extension has home feed" }, - "trackCoverNoSource": "No cover art source available", - "libraryFilterMetadata": "Metadata", - "albumFolderArtistYearAlbum": "Artis / [Tahun] Album", - "@albumFolderArtistYearAlbum": { - "description": "Album folder option with year" + "cancelDownloadTitle": "Cancel download?", + "@cancelDownloadTitle": { + "description": "Dialog title when confirming cancellation of an active download" }, - "audioAnalysisClipping": "Clipping", - "@a11yOpenAlbumByArtistTrackCount": { - "description": "Accessibility label for opening an album item with track count", + "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", + "@cancelDownloadContent": { + "description": "Dialog body when confirming cancellation of an active download", "placeholders": { - "albumName": { - "type": "String" - }, - "artistName": { + "trackName": { "type": "String" - }, - "trackCount": { - "type": "int" } } }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", - "@backupExtensionsRestoreFailed": { - "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "cancelDownloadKeep": "Keep", + "@cancelDownloadKeep": { + "description": "Dialog button - keep the active download (do not cancel)" + }, + "queueCancelledTitle": "Download cancelled", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, + "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", + "@metadataSaveFailedFfmpeg": { + "description": "Snackbar error when FFmpeg fails to write metadata" + }, + "metadataSaveFailedStorage": "Failed to write metadata back to storage", + "@metadataSaveFailedStorage": { + "description": "Snackbar error when writing metadata file back to storage fails" + }, + "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", + "@snackbarFolderPickerFailed": { + "description": "Snackbar shown when folder picker fails to open", "placeholders": { - "count": { - "type": "int" + "error": { + "type": "String" } } }, - "channelStable": "Stabil", - "@channelStable": { - "description": "Update channel - stable releases" + "notifDownloadingTrack": "Downloading {trackName}", + "@notifDownloadingTrack": { + "description": "Notification title while downloading a track", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "tutorialSettingsTip3": "Sesuaikan tema dan tampilan aplikasi", - "setupAppDocumentsFolderSubtitle": "Direkomendasikan - dapat diakses via aplikasi Files", - "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", - "@a11yPlayTrackByArtist": { - "description": "Accessibility label for playing a local library track", + "notifFinalizingTrack": "Finalizing {trackName}", + "@notifFinalizingTrack": { + "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { "trackName": { "type": "String" + } + } + }, + "notifEmbeddingMetadata": "Embedding metadata...", + "@notifEmbeddingMetadata": { + "description": "Notification body while embedding metadata into a downloaded track" + }, + "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", + "@notifAlreadyInLibraryCount": { + "description": "Notification title when track is already in library, with count", + "placeholders": { + "completed": { + "type": "int" }, - "artistName": { - "type": "String" + "total": { + "type": "int" } } }, - "dialogRemove": "Hapus", - "extensionVerificationClose": "Close", - "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", - "@bulkDownloadPlaylistsButton": { - "description": "Button label for bulk downloading selected playlists", + "notifAlreadyInLibrary": "Already in Library", + "@notifAlreadyInLibrary": { + "description": "Notification title when track is already in library" + }, + "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", + "@notifDownloadCompleteCount": { + "description": "Notification title when download is complete, with count", "placeholders": { - "count": { + "completed": { + "type": "int" + }, + "total": { "type": "int" } } }, - "optionsAutoFallbackSubtitle": "Coba layanan lain jika unduhan gagal", - "@optionsAutoFallbackSubtitle": { - "description": "Subtitle for auto fallback" + "notifDownloadComplete": "Download Complete", + "@notifDownloadComplete": { + "description": "Notification title when a single download is complete" }, - "extensionPatternsCount": "{count} pola", - "@libraryFilterLocal": { - "description": "Filter chip - show only local library items" + "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", + "@notifDownloadsFinished": { + "description": "Notification title when queue finishes with some failures", + "placeholders": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } }, - "errorUrlNotRecognizedMessage": "Tautan ini tidak didukung. Pastikan URL sudah benar dan ekstensi yang kompatibel telah terpasang.", - "@errorUrlNotRecognizedMessage": { - "description": "Error message - URL not recognized explanation" + "notifVerificationRequiredTitle": "Verification required", + "@notifVerificationRequiredTitle": { + "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" }, - "@extensionVerificationBrowserSubtitleExternal": { - "description": "Subtitle when external browser is preferred for extension verification" + "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", + "@notifVerificationRequiredBody": { + "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, - "optionsArtistTagMode": "Mode Tag Artis", - "libraryFilterMetadataComplete": "Complete metadata", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" + "notifAllDownloadsComplete": "All Downloads Complete", + "@notifAllDownloadsComplete": { + "description": "Notification title when all downloads finish successfully" }, - "@extensionsVersion": { - "description": "Extension version display", + "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", + "@notifTracksDownloadedSuccess": { + "description": "Notification body for queue complete - how many tracks were downloaded", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "int" } } }, - "@downloadNetworkAnySubtitle": { - "description": "Subtitle for any-network option in picker" - }, - "optionsReplayGainSubtitleOn": "Pindai kenyaringan dan sematkan tag ReplayGain (EBU R128)", - "libraryScanning": "Scanning...", - "@libraryScanning": { - "description": "Status during scan" - }, - "cacheRefresh": "Refresh", - "@actionShuffle": { - "description": "Tooltip for shuffle playback action" - }, - "optionsEmbedLyricsSubtitle": "Simpan lirik yang disinkronkan bersama dengan lagu yang Anda unduh", - "@optionsEmbedLyricsSubtitle": { - "description": "Subtitle for embed lyrics" - }, - "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", - "extensionEnterValue": "Enter value", - "@settingsDownloadNetworkAny": { - "description": "Network option - use any connection" - }, - "collectionLoved": "Loved", - "@collectionLoved": { - "description": "Custom folder for favorite tracks" - }, - "storeAddRepoTitle": "Tambahkan Repositori Ekstensi", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" - }, - "collectionNoPlaylistsYet": "No playlists yet", - "@collectionNoPlaylistsYet": { - "description": "Empty state title when user has no playlists" - }, - "libraryCleanupMissingFilesSubtitle": "Remove entries for files that no longer exist", - "@libraryCleanupMissingFilesSubtitle": { - "description": "Subtitle for cleanup button" - }, - "folderOrganizationByArtist": "Berdasarkan Artis", - "@folderOrganizationByArtist": { - "description": "Folder option - artist folders" - }, - "aboutTranslators": "Penerjemah", - "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", - "editMetadataFieldTitle": "Title", - "@editMetadataFieldTitle": { - "description": "Chip label for title field in auto-fill selector" - }, - "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", - "@downloadFilenameDescription": { - "description": "Description shown in filename format editor" - }, + "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -5006,371 +4926,430 @@ } } }, - "@libraryFolderNotExist": { - "description": "Error when folder doesn't exist" + "notifDownloadsCanceledTitle": "Downloads canceled", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" }, - "@playlistsCount": { - "description": "Playlist count display", + "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", + "@notifDownloadsCanceledBody": { + "description": "Notification body when downloads are canceled by the user", "placeholders": { "count": { "type": "int" } } }, - "@loadingSharedLink": { - "description": "Status when opening shared URL" - }, - "extensionServiceHealth": "Service health", - "@extensionServiceHealth": { - "description": "Extension capability label for service health checks" + "notifScanningLibrary": "Scanning local library", + "@notifScanningLibrary": { + "description": "Notification title while scanning local library" }, - "@collectionDeletePlaylistsMessage": { - "description": "Confirmation message for deleting selected playlists", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", + "@notifLibraryScanProgressWithTotal": { + "description": "Notification body for library scan progress when total is known", "placeholders": { - "count": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "percentage": { "type": "int" } } }, - "setupStorageDescription": "SpotiFLAC membutuhkan izin penyimpanan untuk menyimpan file musik yang diunduh.", - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", - "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", - "appearanceThemeLight": "Terang", - "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", - "@queueEmptyHistorySubtitle": { - "description": "Empty state subtitle for download history" - }, - "backupRestoreFailed": "Failed to restore backup", - "@backupRestoreFailed": { - "description": "Snackbar when restore fails" - }, - "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", - "@queueFlacQueuedWithSkipped": { - "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", + "@notifLibraryScanProgressNoTotal": { + "description": "Notification body for library scan progress when total is unknown", "placeholders": { - "addedCount": { + "scanned": { "type": "int" }, - "skippedCount": { + "percentage": { "type": "int" } } }, - "@trackReplayGain": { - "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + "notifLibraryScanComplete": "Library scan complete", + "@notifLibraryScanComplete": { + "description": "Notification title when library scan finishes" }, - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", + "notifLibraryScanCompleteBody": "{count} tracks indexed", + "@notifLibraryScanCompleteBody": { + "description": "Notification body for library scan complete - number of indexed tracks", "placeholders": { "count": { "type": "int" } } }, - "setupFolderChoose": "Pilih Folder Unduhan", - "dialogDownloadAllTitle": "Download All", - "providerPriorityInfo": "Jika lagu tidak tersedia di provider pertama, aplikasi akan otomatis mencoba yang berikutnya.", - "@providerPriorityInfo": { - "description": "Info tip about fallback behavior" - }, - "@dialogDiscardChanges": { - "description": "Dialog title - unsaved changes warning" + "notifLibraryScanExcluded": "{count} excluded", + "@notifLibraryScanExcluded": { + "description": "Library scan complete suffix - excluded track count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "discographyNoAlbums": "No albums available", - "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", - "cacheNoData": "No cached data", - "@cacheNoData": { - "description": "Label when cache category has no data" + "notifLibraryScanErrors": "{count} errors", + "@notifLibraryScanErrors": { + "description": "Library scan complete suffix - error count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "tutorialStartDownloadSemantics": "Start download", - "@tutorialStartDownloadSemantics": { - "description": "Accessibility label for idle download button in tutorial demo" + "notifLibraryScanFailed": "Library scan failed", + "@notifLibraryScanFailed": { + "description": "Notification title when library scan fails" }, - "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", - "aboutTitle": "Tentang", - "@cueSplitButton": { - "description": "Button text to start CUE splitting" + "notifLibraryScanCancelled": "Library scan cancelled", + "@notifLibraryScanCancelled": { + "description": "Notification title when library scan is cancelled by the user" }, - "appearanceHistoryView": "Gaya Tampilan Histori", - "audioAnalysisSampleRate": "Sample Rate", - "@settingsCache": { - "description": "Settings menu item - cache management" + "notifLibraryScanStopped": "Scan stopped before completion.", + "@notifLibraryScanStopped": { + "description": "Notification body when library scan is cancelled" }, - "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", - "cacheTrackLookup": "Track lookup cache", - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@downloadUsePrimaryArtistOnly": { - "description": "Setting - strip featured artists from folder name" + "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", + "@notifDownloadingUpdate": { + "description": "Notification title while downloading an app update", + "placeholders": { + "version": { + "type": "String" + } + } }, - "@regionCountryIN": { - "description": "Country name for SongLink region picker" + "notifUpdateProgress": "{received} / {total} MB • {percentage}%", + "@notifUpdateProgress": { + "description": "Notification body showing update download progress", + "placeholders": { + "received": { + "type": "String" + }, + "total": { + "type": "String" + }, + "percentage": { + "type": "int" + } + } }, - "@libraryFilterQualityLossy": { - "description": "Filter option - lossy compressed audio" + "notifUpdateReady": "Update Ready", + "@notifUpdateReady": { + "description": "Notification title when app update download is complete" }, - "extensionRefreshStatus": "Refresh status", - "notifAllDownloadsComplete": "All Downloads Complete", - "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", - "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", - "@editMetadataFieldDateHint": { - "description": "Hint text for the edit metadata date field" + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", + "@notifUpdateReadyBody": { + "description": "Notification body when app update is ready to install", + "placeholders": { + "version": { + "type": "String" + } + } }, - "trackMetadataShare": "Bagikan", - "@trackMetadataShare": { - "description": "Action button - share track" + "notifUpdateFailed": "Update Failed", + "@notifUpdateFailed": { + "description": "Notification title when app update download fails" }, - "discographyDownloadAllSubtitle": "{count} lagu dari {albumCount} rilisan", - "settingsDonateSubtitle": "Buy the developer a coffee", - "libraryFilterDownloaded": "Downloaded", - "downloadNetworkAnySubtitle": "Use WiFi or mobile data", - "@cueSplitNoAudioFile": { - "description": "Error when CUE audio file is missing" + "notifUpdateFailedBody": "Could not download update. Try again later.", + "@notifUpdateFailedBody": { + "description": "Notification body when app update download fails" }, - "notifLibraryScanStopped": "Scan stopped before completion.", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" + "searchTracks": "Tracks", + "@searchTracks": { + "description": "Search filter label - tracks" }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", - "trackCopyLyrics": "Salin lirik", - "@trackCopyLyrics": { - "description": "Action - copy lyrics to clipboard" + "homeSearchHintDefault": "Paste supported URL or search...", + "@homeSearchHintDefault": { + "description": "Default placeholder for the main search field on Home" }, - "regionCountryAU": "Australia", - "downloadAlbumFolderStructure": "Struktur Folder Album", - "downloadMusixmatchAuto": "Auto", - "actionDismiss": "Dismiss", - "storeFilterAll": "Semua", - "extensionsDisabled": "Nonaktif", - "@logClearLogs": { - "description": "Clear button tooltip" + "homeSearchHintProvider": "Search with {providerName}...", + "@homeSearchHintProvider": { + "description": "Placeholder for the main search field when a provider is selected", + "placeholders": { + "providerName": { + "type": "String" + } + } }, - "dialogDownloadAllMessage": "Download {count} tracks?", - "@optionsEmbedLyrics": { - "description": "Embed lyrics in audio files" + "homeImportCsvTooltip": "Import playlist (CSV, M3U)", + "@homeImportCsvTooltip": { + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, - "tutorialLibraryTitle": "Perpustakaan Anda", - "optionsCheckUpdatesSubtitle": "Beritahu saat versi baru tersedia", - "@optionsCheckUpdatesSubtitle": { - "description": "Subtitle for update check" + "homeChangeSearchProviderTooltip": "Change search provider", + "@homeChangeSearchProviderTooltip": { + "description": "Tooltip for the Home search provider picker" }, - "collectionPlaylist": "Playlist", - "@collectionPlaylist": { - "description": "Single playlist label" + "actionPaste": "Paste", + "@actionPaste": { + "description": "Generic action - paste from clipboard" }, - "dateMonthsAgo": "{count} bulan lalu", - "@dateMonthsAgo": { - "description": "Relative date - months ago", - "placeholders": { - "count": { - "type": "int" - } - } + "tutorialSearchHint": "Paste or search...", + "@tutorialSearchHint": { + "description": "Placeholder shown in the tutorial search demo" }, - "@extensionRemoveButton": { - "description": "Button to uninstall extension" + "tutorialDownloadCompletedSemantics": "Download completed", + "@tutorialDownloadCompletedSemantics": { + "description": "Accessibility label for completed download state in tutorial demo" }, - "collectionPlaylistRenamed": "Playlist renamed", - "collectionCreatePlaylist": "Create playlist", - "homeGoToAlbum": "Go to Album", - "@homeGoToAlbum": { - "description": "Context menu item to navigate to the album page" + "tutorialDownloadInProgressSemantics": "Download in progress", + "@tutorialDownloadInProgressSemantics": { + "description": "Accessibility label for active download state in tutorial demo" }, - "folderOrganizationByArtistSubtitle": "Folder terpisah untuk setiap artis", - "@optionsClearHistory": { - "description": "Delete all download history" + "tutorialStartDownloadSemantics": "Start download", + "@tutorialStartDownloadSemantics": { + "description": "Accessibility label for idle download button in tutorial demo" }, - "@searchAlbums": { - "description": "Search result category - albums" + "optionsEmbedMetadata": "Embed Metadata", + "@optionsEmbedMetadata": { + "description": "Settings toggle title for writing metadata into downloaded files" }, - "@sectionDebug": { - "description": "Settings section header" + "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", + "@optionsEmbedMetadataSubtitleOn": { + "description": "Subtitle when metadata embedding is enabled" }, - "extensionsVersion": "Versi {version}", - "@navHome": { - "description": "Bottom navigation - Home tab" + "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", + "@optionsEmbedMetadataSubtitleOff": { + "description": "Subtitle when metadata embedding is disabled" }, - "@editMetadataFieldDate": { - "description": "Chip label for date field in auto-fill selector" + "trackCoverNoEmbeddedArt": "No embedded album art found", + "@trackCoverNoEmbeddedArt": { + "description": "Message shown when a track file has no embedded cover art" }, - "downloadUsePrimaryArtistOnly": "Hanya artis utama untuk folder", - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", - "@setupStorageGranted": { - "description": "Success message for storage permission" + "trackCoverReplace": "Replace Cover", + "@trackCoverReplace": { + "description": "Button label for replacing selected cover art" }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", - "a11ySelectAlbum": "Select album {albumName}", - "@a11ySelectAlbum": { - "description": "Accessibility label for selecting an album", - "placeholders": { - "albumName": { - "type": "String" - } - } + "trackCoverPick": "Pick Cover", + "@trackCoverPick": { + "description": "Button label for selecting cover art" }, - "aboutMobileSource": "Kode sumber mobile", - "@aboutMobileSource": { - "description": "Link to mobile GitHub repo" + "trackCoverClearSelected": "Clear selected cover", + "@trackCoverClearSelected": { + "description": "Tooltip for clearing the newly selected cover art" }, - "@extensionCustomUrlHandling": { - "description": "Extension detail section title for custom URL handling" + "trackCoverCurrent": "Current cover", + "@trackCoverCurrent": { + "description": "Label for the currently embedded cover preview" }, - "@downloadMusixmatchLanguageAuto": { - "description": "Subtitle when no language is set" + "trackCoverSelected": "Selected cover", + "@trackCoverSelected": { + "description": "Label for the newly selected cover preview" }, - "@cancelDownloadKeep": { - "description": "Dialog button - keep the active download (do not cancel)" + "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", + "@trackCoverReplaceNotice": { + "description": "Notice shown when a new cover has been selected but not saved yet" }, - "libraryFilterSource": "Source", - "@libraryFilterSource": { - "description": "Filter section - source type" + "trackCoverResolution": "Cover resolution", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" }, - "sectionStorageAccess": "Storage Access", - "logFilterBySeverity": "Filter log berdasarkan tingkat keparahan", - "libraryFolderNotExist": "Selected folder does not exist", - "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", - "albumFolderArtistAlbum": "Artis / Album", - "@albumFolderArtistAlbum": { - "description": "Album folder option" + "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" }, - "allFilesAccessDeniedMessage": "Permission was denied. Please enable 'All files access' manually in system settings.", - "@allFilesAccessDeniedMessage": { - "description": "Message when permission is permanently denied" + "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" }, - "editMetadataSelectEmpty": "Empty only", - "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", - "@settingsAutoExportFailed": { - "description": "Setting toggle for auto-export" + "actionStop": "Stop", + "@actionStop": { + "description": "Generic action - stop" }, - "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", - "@tutorialSettingsTitle": { - "description": "Tutorial settings page title" + "queueFinalizingDownload": "Finalizing download", + "@queueFinalizingDownload": { + "description": "Accessibility label for a queue item that is finalizing" }, - "libraryFilterMetadataMissingGenre": "Missing genre", - "@appearanceSelectAccentColor": { - "description": "Accessibility label for picking an accent color", - "placeholders": { - "hex": { - "type": "String" - } - } + "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" }, - "setupFolderDescription": "Pilih folder tempat musik yang diunduh akan disimpan.", - "extensionDetailsTags": "Tags", - "unknownArtist": "Unknown Artist", - "trackFetchOnlineLyrics": "Ambil dari Online", - "snackbarNoActionDefined": "No action defined for this button", - "@snackbarNoActionDefined": { - "description": "Snackbar when an extension button has no action configured" + "queueMoveUp": "Move up", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" }, - "downloadAllCount": "Unduh Semua ({count})", - "@downloadAllCount": { - "description": "Download all button with count", - "placeholders": { - "count": { - "type": "int" - } - } + "queueMoveDown": "Move down", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" }, - "downloadedAlbumDiscHeader": "Disc {discNumber}", - "@backupInvalidFile": { - "description": "Snackbar when the chosen file is not a valid backup" + "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" }, - "@extensionHooksAvailable": { - "description": "Post-processing hooks count", + "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" } } }, - "@logIssueTrackNotFoundSuggestion": { - "description": "Diagnostic badge suggestion when a track is unavailable" - }, - "@snackbarFileNotFound": { - "description": "Snackbar - file doesn't exist" - }, - "extensionHealthOnline": "Online", - "@extensionHealthOnline": { - "description": "Extension service health status - online" + "queueDownloadedFileMissing": "Downloaded file missing", + "@queueDownloadedFileMissing": { + "description": "Accessibility label when a downloaded file is missing from disk" }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", - "trackOptionRemoveFromWishlist": "Remove from Wishlist", - "extensionsFallbackTitle": "Ekstensi Cadangan", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." }, - "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", - "@albumFolderAlbumOnly": { - "description": "Album folder option" + "queueDownloadCompleted": "Download completed", + "@queueDownloadCompleted": { + "description": "Accessibility label for completed download state in queue" }, - "@albumFolderYearAlbumSubtitle": { - "description": "Folder structure example" + "queueRateLimitTitle": "Service rate limited", + "@queueRateLimitTitle": { + "description": "Title shown on a failed queue item when the download service rate limits requests" }, - "downloadedAlbumDeleteSelected": "Hapus yang Dipilih", - "selectionSelectPlaylistsToDelete": "Select playlists to delete", - "@selectionSelectPlaylistsToDelete": { - "description": "Hint shown when no playlists are selected for deletion" + "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", + "@queueRateLimitMessage": { + "description": "Explanation shown on a failed queue item when the download service rate limits requests" }, - "storeAddRepoDescription": "Masukkan URL repositori GitHub yang berisi file registry.json untuk menelusuri dan memasang ekstensi.", - "appearanceThemeDark": "Gelap", - "downloadedAlbumTapToSelect": "Ketuk lagu untuk memilih", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", + "appearanceSelectAccentColor": "Select accent color {hex}", + "@appearanceSelectAccentColor": { + "description": "Accessibility label for picking an accent color", "placeholders": { - "artistName": { + "hex": { "type": "String" } } }, - "@backupRestored": { - "description": "Snackbar after a successful restore" + "logAutoScrollOn": "Auto-scroll ON", + "@logAutoScrollOn": { + "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "nowPlayingLibraryEmpty": "Your library is empty", - "@nowPlayingLibraryEmpty": { - "description": "Snackbar when shuffle library is requested but library has no tracks" + "logAutoScrollOff": "Auto-scroll OFF", + "@logAutoScrollOff": { + "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "editMetadataAutoFillNoResults": "No matching metadata found online", - "updateDownloading": "Mengunduh...", - "trackLyricsSource": "Sumber: {source}", - "logFilterLevel": "Level", - "logNoLogsYet": "Belum ada log", - "cacheSizeOnly": "{size}", - "@cacheSizeOnly": { - "description": "Cache size only", - "placeholders": { - "size": { - "type": "String" - } - } + "logCopyLogs": "Copy logs", + "@logCopyLogs": { + "description": "Tooltip for copying logs" }, - "trackOpenInService": "Open in {serviceName}", - "@trackOpenInService": { - "description": "Button label to open a track in a named music service", + "logClearSearch": "Clear search", + "@logClearSearch": { + "description": "Tooltip for clearing the log search field" + }, + "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", + "@logIssueIspBlockingLabel": { + "description": "Diagnostic badge label when ISP blocking is detected" + }, + "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", + "@logIssueIspBlockingDescription": { + "description": "Diagnostic badge description for ISP blocking" + }, + "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", + "@logIssueIspBlockingSuggestion": { + "description": "Diagnostic badge suggestion for ISP blocking" + }, + "logIssueRateLimitedLabel": "RATE LIMITED", + "@logIssueRateLimitedLabel": { + "description": "Diagnostic badge label when the service rate limits requests" + }, + "logIssueRateLimitedDescription": "Too many requests to the service", + "@logIssueRateLimitedDescription": { + "description": "Diagnostic badge description for rate limiting" + }, + "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", + "@logIssueRateLimitedSuggestion": { + "description": "Diagnostic badge suggestion for rate limiting" + }, + "logIssueNetworkErrorLabel": "NETWORK ERROR", + "@logIssueNetworkErrorLabel": { + "description": "Diagnostic badge label for generic network errors" + }, + "logIssueNetworkErrorDescription": "Connection issues detected", + "@logIssueNetworkErrorDescription": { + "description": "Diagnostic badge description for generic network errors" + }, + "logIssueNetworkErrorSuggestion": "Check your internet connection", + "@logIssueNetworkErrorSuggestion": { + "description": "Diagnostic badge suggestion for generic network errors" + }, + "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", + "@logIssueTrackNotFoundLabel": { + "description": "Diagnostic badge label when a track is unavailable" + }, + "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", + "@logIssueTrackNotFoundDescription": { + "description": "Diagnostic badge description when a track is unavailable" + }, + "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", + "@logIssueTrackNotFoundSuggestion": { + "description": "Diagnostic badge suggestion when a track is unavailable" + }, + "clickableLookingUpArtist": "Looking up artist...", + "@clickableLookingUpArtist": { + "description": "Snackbar shown while clickable artist metadata is being resolved" + }, + "clickableInformationUnavailable": "{type} information not available", + "@clickableInformationUnavailable": { + "description": "Snackbar shown when clickable metadata cannot open a destination", "placeholders": { - "serviceName": { + "type": { "type": "String" } } }, - "@cacheLibraryCoverDesc": { - "description": "Description of what library cover cache contains" + "extensionDetailsTags": "Tags", + "@extensionDetailsTags": { + "description": "Section title for extension tags" }, - "libraryClearConfirmMessage": "This will remove all scanned tracks from your library. Your actual music files will not be deleted.", - "@dialogImportPlaylistMessage": { - "description": "Dialog message - import playlist confirmation", + "extensionDetailsInformation": "Information", + "@extensionDetailsInformation": { + "description": "Section title for extension metadata information" + }, + "extensionUtilityFunctions": "Utility Functions", + "@extensionUtilityFunctions": { + "description": "Capability label for utility-only extensions" + }, + "actionDismiss": "Dismiss", + "@actionDismiss": { + "description": "Generic action - dismiss" + }, + "setupChangeFolderTooltip": "Change folder", + "@setupChangeFolderTooltip": { + "description": "Tooltip for editing the selected download folder" + }, + "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", + "@a11yOpenTrackByArtist": { + "description": "Accessibility label for opening a track item", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" } } }, - "extensionsHomeFeedAuto": "Auto", - "searchEmptyResultSubtitle": "Coba kata kunci lain", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "dateToday": "Hari ini", "a11yOpenItem": "Open {itemType} {name}", "@a11yOpenItem": { "description": "Accessibility label for opening a generic item", @@ -5383,236 +5362,296 @@ } } }, - "audioAnalysisBitDepth": "Bit Depth", - "editMetadataFieldTrackTotal": "Track Total", - "@editMetadataFieldTrackTotal": { - "description": "Label for total tracks field in the edit metadata sheet" - }, - "@editMetadataFieldDiscTotal": { - "description": "Label for total discs field in the edit metadata sheet" - }, - "replayGainBatchConfirmMessage": "Analisis kenyaringan dan tulis tag ReplayGain ke {count} trek?", - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", - "@notifDownloadingUpdate": { - "description": "Notification title while downloading an app update", + "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", + "@a11yOpenItemCount": { + "description": "Accessibility label for opening a grouped item with count", "placeholders": { - "version": { + "title": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@csvImportTracks": { - "description": "Label shown in quality picker for CSV import", + "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", + "@a11yOpenAlbumByArtistTrackCount": { + "description": "Accessibility label for opening an album item with track count", "placeholders": { - "count": { + "albumName": { + "type": "String" + }, + "artistName": { + "type": "String" + }, + "trackCount": { "type": "int" } } }, - "trackEditMetadata": "Edit Metadata", - "discographyDownloadAll": "Unduh Semua", - "@discographyDownloadAll": { - "description": "Option - download entire discography" - }, - "@editMetadataFieldAlbum": { - "description": "Chip label for album field in auto-fill selector" - }, - "albumFolderArtistAlbumSubtitle": "Albums/Nama Artis/Nama Album/", - "extensionHealthServiceUnknown": "Service status unknown", - "navHome": "Beranda", - "queueDownloadStarting": "Starting...", - "queueCheckingDownloadSession": "Memeriksa sesi unduhan...", - "queueResolvingDownloadMetadata": "Mencari metadata lagu...", - "queueResolvingDownloadStream": "Menyiapkan stream audio...", - "queueWaitingForVerification": "Menunggu verifikasi...", - "queueResumingAfterVerification": "Melanjutkan setelah verifikasi...", - "@dialogRemoveExtension": { - "description": "Dialog title - uninstall extension" - }, - "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", - "@appearanceAmoledDark": { - "description": "Theme option - pure black" - }, - "qualityHiResFlac": "Hi-Res FLAC", - "selectionSelected": "{count} dipilih", - "extensionDetailsInformation": "Information", - "@extensionDetailsInformation": { - "description": "Section title for extension metadata information" - }, - "discographyDownload": "Unduh Diskografi", - "editMetadataFieldCopyright": "Copyright", - "@setupOpenSettings": { - "description": "Button to open system settings" - }, - "libraryFilterSort": "Sort", - "cacheLibraryCoverDesc": "Cover art extracted from local music files. Will re-extract on next scan.", - "dialogRemoveExtension": "Hapus Ekstensi", - "backupExportSectionTitle": "Create backup", - "downloadEmbedLyricsDisabled": "Enable metadata embedding first", - "openInOtherServices": "Open in Other Services", - "actionSelectAll": "Pilih Semua", - "settingsDownloadNetworkSubtitle": "Pilih jaringan mana yang akan digunakan untuk mengunduh. Jika diatur ke Hanya WiFi, unduhan akan berhenti sementara dan menggunakan data seluler.", - "downloadFolderOrganization": "Organisasi Folder", - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", - "@tutorialWelcomeTip2": { - "description": "Tutorial welcome tip 2" - }, - "selectionAllSelected": "Semua lagu dipilih", - "@selectionAllSelected": { - "description": "Status - all items selected" - }, - "settingsLogsSubtitle": "Lihat log aplikasi untuk debugging", - "albumFolderYearAlbumSubtitle": "Albums/[2005] Nama Album/", - "cancelDownloadKeep": "Keep", - "optionsDetailedLoggingOn": "Log detail sedang direkam", - "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" + "a11yTrackByArtist": "{trackName} by {artistName}", + "@a11yTrackByArtist": { + "description": "Accessibility label for a queue or list track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "regionCountryJP": "Japan", - "notifUpdateFailed": "Update Failed", - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", - "@trackLyricsSaved": { - "description": "Snackbar after lyrics saved", + "a11ySelectAlbum": "Select album {albumName}", + "@a11ySelectAlbum": { + "description": "Accessibility label for selecting an album", "placeholders": { - "fileName": { + "albumName": { "type": "String" } } }, - "downloadLocationSubtitle": "Choose where to save your downloaded tracks", - "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", - "lyricsProvidersDisabledSection": "Disabled ({count})", - "@dateDaysAgo": { - "description": "Relative date - days ago", + "a11yOpenAlbum": "Open album {albumName}", + "@a11yOpenAlbum": { + "description": "Accessibility label for opening an album", "placeholders": { - "count": { - "type": "int" + "albumName": { + "type": "String" } } }, - "librarySourceLocal": "Local", - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", - "sectionService": "Layanan", - "lyricsProviderQqMusicDesc": "QQ Music (cocok untuk lagu berbahasa Mandarin, API langsung)", - "@lyricsProviderQqMusicDesc": { - "description": "Description for QQ Music provider" + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" }, - "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", - "selectionTapPlaylistsToSelect": "Tap playlists to select", - "notifUpdateFailedBody": "Could not download update. Try again later.", - "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", - "artistPopular": "Populer", - "extensionRemoveButton": "Hapus Ekstensi", - "allFilesAccessEnabledSubtitle": "Can write to any folder", - "@allFilesAccessEnabledSubtitle": { - "description": "Subtitle when all files access is enabled" + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" }, - "extensionsSearchProvider": "Provider Pencarian", - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", - "selectionBatchConvertConfirmTitle": "Batch Convert", - "extensionMetadataProvider": "Provider Metadata", - "queueDownloadedFileMissing": "Downloaded file missing", - "logClearLogs": "Hapus log", - "@downloadAppleQqMultiPerson": { - "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", - "@tutorialWelcomeTip1": { - "description": "Tutorial welcome tip 1" + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" }, - "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", - "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", - "@regionCountryUS": { - "description": "Country name for SongLink region picker" + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" }, - "trackArtist": "Artis", - "extensionCustomUrlHandling": "Custom URL Handling", - "appearanceDynamicColorSubtitle": "Gunakan warna dari wallpaper Anda", - "@appearanceDynamicColorSubtitle": { - "description": "Subtitle for dynamic color" + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" }, - "searchSortDefault": "Default", + "settingsApp": "App", + "@settingsApp": { + "description": "Settings menu item - app settings" + }, + "settingsAppSubtitle": "Updates, data, extension repo, debug", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" + }, + "sectionMetadataProviders": "Providers", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" + }, + "sectionDuplicates": "Duplicates", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" + }, + "sectionLyricsProviderOptions": "Provider Options", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" + }, + "metadataProvidersTitle": "Metadata Provider Priority", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" + }, + "metadataProvidersSubtitle": "Drag to set search and metadata source order", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" + }, + "downloadDeduplication": "Skip Duplicate Downloads", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" + }, + "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" + }, + "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", + "@downloadDeduplicationWithQualityVariants": { + "description": "Deduplication subtitle when separate quality versions are allowed" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadQualityVariants": "Allow different quality versions", + "@downloadQualityVariants": { + "description": "Setting to retain multiple quality versions of the same track" + }, + "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", + "@downloadQualityVariantsDescription": { + "description": "Description for retaining multiple quality versions" + }, + "trackOptionDownloadQualityVariant": "Download another quality", + "@trackOptionDownloadQualityVariant": { + "description": "Track menu action to download another quality version" + }, + "downloadFallbackExtensions": "Fallback Extensions", "@downloadFallbackExtensions": { "description": "Settings item for configuring fallback extension providers" }, - "albumFolderStructureDescription": "Pilih bagaimana struktur folder album akan dibuat", - "@albumFolderStructureDescription": { - "description": "Album folder structure picker description" + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" }, - "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", - "@libraryBuiltInPreviewPlayerSubtitle": { - "description": "Subtitle for built-in preview player option" + "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", + "@editMetadataFieldDateHint": { + "description": "Hint text for the edit metadata date field" }, - "storageModeAppFolder": "App Folder (Recommended)", - "@actionPause": { - "description": "Action button - pause download" + "editMetadataFieldTrackTotal": "Track Total", + "@editMetadataFieldTrackTotal": { + "description": "Label for total tracks field in the edit metadata sheet" }, - "actionPaste": "Paste", - "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", - "downloadNativeWorker": "Native download worker", - "releaseTypeEp": "EP", - "@releaseTypeEp": { - "description": "Badge label for EP releases" + "editMetadataFieldDiscTotal": "Disc Total", + "@editMetadataFieldDiscTotal": { + "description": "Label for total discs field in the edit metadata sheet" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", - "cacheRefreshStats": "Refresh stats", - "collectionPlaylistChangeCover": "Change cover image", - "@collectionPlaylistChangeCover": { - "description": "Bottom sheet action to pick a custom cover image for a playlist" + "editMetadataFieldComposer": "Composer", + "@editMetadataFieldComposer": { + "description": "Label for composer field in the edit metadata sheet" + }, + "editMetadataFieldComment": "Comment", + "@editMetadataFieldComment": { + "description": "Label for comment field in the edit metadata sheet" + }, + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" + }, + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" + }, + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" + }, + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" + }, + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" + }, + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" + }, + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, + "editMetadataAdvanced": "Advanced", + "@editMetadataAdvanced": { + "description": "Expandable section label for advanced metadata fields" + }, + "libraryFilterMetadataMissingTrackNumber": "Missing track number", + "@libraryFilterMetadataMissingTrackNumber": { + "description": "Filter option - items missing track number" + }, + "libraryFilterMetadataMissingDiscNumber": "Missing disc number", + "@libraryFilterMetadataMissingDiscNumber": { + "description": "Filter option - items missing disc number" }, - "optionsClearHistory": "Hapus Riwayat Unduhan", - "trackGenre": "Genre", - "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", - "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", - "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "libraryFilterMetadataMissingArtist": "Missing artist", - "extensionsNoCustomSearch": "Tidak ada ekstensi dengan pencarian kustom", - "@extensionsTitle": { - "description": "Extensions page title" + "@libraryFilterMetadataMissingArtist": { + "description": "Filter option - items missing artist" }, - "extensionDownloadProvider": "Provider Unduhan", - "@extensionDownloadProvider": { - "description": "Capability - provides downloads" + "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", + "@libraryFilterMetadataIncorrectIsrcFormat": { + "description": "Filter option - items with an invalid ISRC format" }, - "lyricsMode": "Mode Lirik", - "aboutReportIssueSubtitle": "Laporkan masalah yang Anda temui", - "@downloadSeparateSinglesFolder": { - "description": "Setting - separate folder for singles" + "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" }, - "appearanceAmoledDark": "AMOLED Gelap", - "logIssueNetworkErrorDescription": "Connection issues detected", - "folderOrganizationByArtistAlbumSubtitle": "Folder bersarang untuk artis dan album", - "@libraryForceFullScanSubtitle": { - "description": "Subtitle for force full scan button" + "libraryFilterMetadataMissingLabel": "Missing label", + "@libraryFilterMetadataMissingLabel": { + "description": "Filter option - items missing record label" }, - "setupGrantPermission": "Berikan Izin", - "lyricsProvidersDescription": "Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.", - "dateDaysAgo": "{count} hari lalu", - "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", - "downloadLossyMp3Subtitle": "Kompatibilitas terbaik, ~10MB per trek", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" + "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", + "@collectionDeletePlaylistsMessage": { + "description": "Confirmation message for deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "nowPlayingDetails": "Details", - "collectionWishlistEmptyTitle": "Wishlist is empty", - "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", - "@snackbarExtensionUpdatedVersion": { - "description": "Snackbar after updating an extension from the repo tab", + "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", + "@collectionPlaylistsDeleted": { + "description": "Snackbar after deleting selected playlists", "placeholders": { - "extensionName": { + "count": { + "type": "int" + } + } + }, + "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", + "@collectionAddedTracksToPlaylist": { + "description": "Snackbar after adding multiple tracks to a playlist", + "placeholders": { + "count": { + "type": "int" + }, + "playlistName": { "type": "String" + } + } + }, + "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", + "@collectionAddedTracksToPlaylistWithExisting": { + "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "placeholders": { + "count": { + "type": "int" }, - "version": { + "playlistName": { "type": "String" + }, + "alreadyCount": { + "type": "int" + } + } + }, + "itemCount": "{count} {count, plural, =1{item} other{items}}", + "@itemCount": { + "description": "Generic item count label", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", + "@trackReEnrichSuccessWithFailures": { + "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "placeholders": { + "successCount": { + "type": "int" + }, + "total": { + "type": "int" + }, + "failedCount": { + "type": "int" } } }, - "extensionHealthServiceDegraded": "Service degraded", - "selectionConvertNoConvertible": "No convertible tracks selected", - "setupStorageGranted": "Izin Penyimpanan Diberikan!", - "downloadAllowLocalNetwork": "Allow Local Network Access", - "nowPlayingNoLyrics": "No lyrics in this file", "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", "@selectionDeleteTracksCount": { "description": "Button label for deleting selected tracks", @@ -5622,572 +5661,888 @@ } } }, - "@libraryForceFullScan": { - "description": "Button to force a complete rescan of library" + "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", + "@queueDownloadSpeedStatus": { + "description": "Queue status while downloading with speed", + "placeholders": { + "speed": { + "type": "String" + } + } }, - "notifLibraryScanExcluded": "{count} excluded", - "@aboutPaxsenixSubtitle": { - "description": "Subtitle for Paxsenix special thanks entry on the about page" - }, - "setupChangeFolderTooltip": "Change folder", - "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", - "@logIssueIspBlockingDescription": { - "description": "Diagnostic badge description for ISP blocking" - }, - "libraryClear": "Clear Library", - "collectionRemoveFromPlaylist": "Remove from playlist", - "@collectionRemoveFromPlaylist": { - "description": "Tooltip for removing track from playlist" - }, - "backupIncludeSecrets": "Include extension credentials", - "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", - "storeCategoryMetadata": "Metadata", - "@trackLyricsEmbedded": { - "description": "Snackbar - lyrics saved to file" - }, - "editMetadataFieldDiscTotal": "Disc Total", - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "libraryFilterLocal": "Local", - "tutorialDownloadInProgressSemantics": "Download in progress", - "searchSortDurationLong": "Durasi (Terpanjang)", - "@appearanceLanguage": { - "description": "Language setting title" + "queueDownloadStarting": "Starting...", + "queueCheckingDownloadSession": "Checking download session...", + "queueResolvingDownloadMetadata": "Resolving track metadata...", + "queueResolvingDownloadStream": "Preparing audio stream...", + "queueWaitingForVerification": "Waiting for verification...", + "queueResumingAfterVerification": "Resuming after verification...", + "@queueDownloadStarting": { + "description": "Queue status before download progress is available" }, - "libraryAbout": "About Local Library", - "@libraryAbout": { - "description": "Section header for about info" + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." }, - "cueSplitNoAudioFile": "Audio file not found for this CUE sheet", - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", - "appearanceSelectAccentColor": "Select accent color {hex}", - "@homeAlbumInfoUnavailable": { - "description": "Snackbar when album info cannot be loaded" + "a11ySelectTrack": "Select track", + "@a11ySelectTrack": { + "description": "Accessibility label for selecting a track" }, - "trackReplayGain": "Pindai ulang ReplayGain", - "downloadSeparateSinglesFolder": "Folder Singles Terpisah", - "trackAlbumArtist": "Artis album", - "qualityFlacLossless": "FLAC Lossless", - "@extensionVerificationHelpMessageWaiting": { - "description": "Dialog message when verification may need manual browser help" + "a11yDeselectTrack": "Deselect track", + "@a11yDeselectTrack": { + "description": "Accessibility label for deselecting a track" }, - "tutorialSettingsTitle": "Customize Your Experience", - "extensionActionFailed": "Action failed", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" + "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", + "@a11yPlayTrackByArtist": { + "description": "Accessibility label for playing a local library track", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", - "trackCoverNoEmbeddedArt": "No embedded album art found", - "@trackCoverNoEmbeddedArt": { - "description": "Message shown when a track file has no embedded cover art" + "@storeExtensionsCount": { + "description": "Store extension result count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", - "setupStorageAccessMessageAndroid11": "Android 11+ memerlukan izin \"Akses semua file\" untuk menyimpan file ke folder unduhan pilihan Anda.", - "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", - "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", - "optionsPrimaryProvider": "Provider Utama", - "@optionsPrimaryProvider": { - "description": "Main search provider setting" + "storeRequiresVersion": "Requires v{version}+", + "@storeRequiresVersion": { + "description": "Store compatibility badge for minimum app version", + "placeholders": { + "version": { + "type": "String" + } + } }, - "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", - "collectionAddedToLoved": "\"{trackName}\" added to Loved", - "albumFolderArtistAlbumFlat": "Artis / Album (Single digabung)", - "homeAlbumInfoUnavailable": "Album info not available", - "settingsLyrics": "Lyrics", - "extensionVerificationBrowserExternal": "External", - "regionCountryIN": "India", - "extensionHealthUnknown": "Unknown", - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", - "settingsAutoExportFailed": "Unduhan yang gagal diekspor otomatis", - "logFilterSection": "Filter", - "dialogDiscardChanges": "Buang Perubahan?", - "@qualityHiResFlacSubtitle": { - "description": "Technical spec for hi-res" + "actionGo": "Go", + "@actionGo": { + "description": "Generic action button label" }, - "searchTracks": "Tracks", - "searchAlbums": "Album", - "trackConvertFormat": "Convert Format", - "metadataProviderPriorityTitle": "Prioritas Metadata", - "libraryFolderHint": "Tap to select folder", - "downloadedAlbumDeleteMessage": "Hapus {count} {count, plural, =1{lagu} other{lagu}} dari album ini?\n\nIni juga akan menghapus file dari penyimpanan.", - "@downloadedAlbumDeleteMessage": { - "description": "Delete confirmation with count", + "logIssueSummary": "Issue Summary", + "@logIssueSummary": { + "description": "Header for log issue analysis summary" + }, + "logTotalErrors": "Total errors: {count}", + "@logTotalErrors": { + "description": "Total error count in log issue analysis", "placeholders": { "count": { "type": "int" } } }, - "trackAlbum": "Album", - "updateAvailable": "Pembaruan Tersedia", - "optionsEmbedLyrics": "Sematkan Lirik", - "trackReEnrichProgress": "Re-enriching metadata...", - "@trackReEnrichProgress": { - "description": "Snackbar while re-enriching metadata" + "logAffectedDomains": "Affected: {domains}", + "@logAffectedDomains": { + "description": "Affected domains in log issue analysis", + "placeholders": { + "domains": { + "type": "String" + } + } }, - "audioAnalysisPeak": "Peak", - "@audioAnalysisPeak": { - "description": "Peak amplitude metric label" + "libraryScanCancelled": "Scan cancelled", + "@libraryScanCancelled": { + "description": "Library scan status when a scan was cancelled" }, - "optionsExtensionStoreSubtitle": "Tampilkan tab Repo di navigasi", - "settingsTitle": "Pengaturan", - "@settingsAbout": { - "description": "Settings section - app info" + "libraryScanCancelledSubtitle": "You can retry the scan when ready.", + "@libraryScanCancelledSubtitle": { + "description": "Library scan status subtitle after cancellation" }, - "cacheExploreFeed": "Explore feed cache", - "@dialogDownloadPlaylistsMessage": { - "description": "Dialog message for bulk playlist download confirmation", + "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", + "@libraryDownloadsHistoryExcluded": { + "description": "Library count note for downloaded history items excluded from the local list", "placeholders": { - "trackCount": { - "type": "int" - }, - "playlistCount": { + "count": { "type": "int" } } }, - "downloadedAlbumSelectedCount": "{count} dipilih", - "downloadAskQualitySubtitle": "Tampilkan pemilih kualitas untuk setiap unduhan", - "filenameShowAdvancedTags": "Tampilkan tag lanjutan", - "@filenameShowAdvancedTags": { - "description": "Toggle label for showing advanced filename tags" + "downloadNativeWorker": "Native download worker", + "@downloadNativeWorker": { + "description": "Setting title for Android native download worker" }, - "@editMetadataFieldComment": { - "description": "Label for comment field in the edit metadata sheet" + "downloadNativeWorkerSubtitle": "Android background service for extension downloads", + "@downloadNativeWorkerSubtitle": { + "description": "Setting subtitle for Android native download worker" }, - "downloadFallbackExtensions": "Fallback Extensions", - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", - "cacheLibraryCover": "Library cover cache", - "actionShuffle": "Shuffle", - "backupCreated": "Backup created", - "downloadLossyAacSubtitle": "Kompatibilitas seluler terbaik, kontainer M4A", - "actionCreate": "Create", - "snackbarAddedToQueueGeneric": "Added to queue", - "downloadedAlbumDownloadedCount": "{count} diunduh", - "snackbarLoadingCueSheet": "Loading CUE sheet...", - "@trackCoverClearSelected": { - "description": "Tooltip for clearing the newly selected cover art" + "extensionServiceStatus": "Service Status", + "@extensionServiceStatus": { + "description": "Extension detail section header for service status" }, - "aboutOriginalCreator": "Pencipta SpotiFLAC asli", - "a11yTrackByArtist": "{trackName} by {artistName}", - "audioAnalysisDynamicRange": "Dynamic Range", - "homeChangeSearchProviderTooltip": "Change search provider", - "loadingSharedLink": "Memuat link yang dibagikan...", - "lyricsModeEmbedSubtitle": "Lirik tersimpan di dalam metadata FLAC", - "setupNotificationBackgroundDescription": "Dapatkan notifikasi tentang progres dan penyelesaian unduhan. Ini membantu Anda melacak unduhan saat aplikasi di latar belakang.", - "snackbarViewQueue": "Lihat Antrian", - "@audioAnalysisDuration": { - "description": "Duration metric label" + "extensionServiceHealth": "Service health", + "@extensionServiceHealth": { + "description": "Extension capability label for service health checks" }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", - "backupRestored": "Backup restored successfully", - "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", - "@trackConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless conversion of a single file", + "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", + "@extensionHealthChecksConfigured": { + "description": "Extension service health check count", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "discographySelectAlbumsSubtitle": "Pilih album atau single spesifik", - "@discographySelectAlbumsSubtitle": { - "description": "Subtitle for select albums option" - }, - "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", - "errorUrlFetchFailed": "Konten dari tautan ini gagal dimuat. Silakan coba lagi.", - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", - "dialogSave": "Simpan", - "trackReEnrichSearching": "Searching metadata online...", - "regionCountryUS": "United States", - "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", - "downloadFilenameFormat": "Format Nama File", - "cueSplitTitle": "Split CUE Sheet", - "settingsAppSubtitle": "Updates, data, extension repo, debug", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" + "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", + "@extensionOauthConnectHint": { + "description": "Hint for an OAuth login link field before connecting Spotify" }, - "@setupPermissionRequiredMessage": { - "description": "Generic permission required message", + "extensionLastChecked": "Last checked {time}", + "@extensionLastChecked": { + "description": "Timestamp for the latest extension service health check", "placeholders": { - "permissionType": { + "time": { "type": "String" } } }, - "errorMissingExtensionSource": "Tidak dapat memuat {item}: sumber ekstensi tidak ada", - "albumFolderAlbumOnlySubtitle": "Albums/Nama Album/", - "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", - "extensionVerificationHelpTitleManual": "Open verification manually", - "dialogDiscard": "Buang", - "storageModeSaf": "Custom Folder (SAF)", - "errorRateLimited": "Dibatasi", - "downloadSelectQuality": "Pilih Kualitas", - "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", - "collectionFoldersTitle": "My folders", - "progressFetchingMetadata": "Mengambil metadata... {current}/{total}", - "settingsDownloadNetworkAny": "WiFi + Data Seluler", - "audioAnalysisDuration": "Duration", - "audioAnalysisAnalyzing": "Analyzing audio...", - "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", - "editMetadataFieldDiscNum": "Disc #", - "@editMetadataFieldDiscNum": { - "description": "Chip label for disc number field in auto-fill selector" + "extensionRefreshStatus": "Refresh status", + "@extensionRefreshStatus": { + "description": "Tooltip for refreshing extension service health status" }, - "@noTracksFoundForAlbum": { - "description": "Empty state message when an album has no tracks" + "extensionCustomUrlHandling": "Custom URL Handling", + "@extensionCustomUrlHandling": { + "description": "Extension detail section title for custom URL handling" }, - "previewPlay": "Putar pratinjau", - "setupPermissionRequiredMessage": "Izin {permissionType} diperlukan untuk pengalaman terbaik. Anda dapat mengubahnya nanti di Pengaturan.", - "aboutVersion": "Versi", - "qualityHiResFlacSubtitle": "24-bit / hingga 96kHz", - "audioAnalysisSamples": "Samples", - "libraryFilterQualityHiRes": "Hi-Res (24bit)", - "sectionMetadataProviders": "Providers", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" + "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", + "@extensionCustomUrlHandlingSubtitle": { + "description": "Extension detail subtitle for custom URL handling" + }, + "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", + "@extensionCustomUrlHandlingShareHint": { + "description": "Extension detail hint explaining share-to-app URL handling" + }, + "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", + "@extensionSettingsCount": { + "description": "Count of settings exposed by an extension quality option", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionHealthOnline": "Online", + "@extensionHealthOnline": { + "description": "Extension service health status - online" + }, + "extensionHealthDegraded": "Degraded", + "@extensionHealthDegraded": { + "description": "Extension service health status - degraded" + }, + "extensionHealthOffline": "Offline", + "@extensionHealthOffline": { + "description": "Extension service health status - offline" + }, + "extensionHealthNotConfigured": "Not configured", + "@extensionHealthNotConfigured": { + "description": "Extension service health status - not configured" + }, + "extensionHealthUnknown": "Unknown", + "@extensionHealthUnknown": { + "description": "Extension service health status - unknown" + }, + "extensionHealthRequired": "required", + "@extensionHealthRequired": { + "description": "Label for a required extension service health check" + }, + "extensionSettingNotSet": "Not set", + "@extensionSettingNotSet": { + "description": "Value shown when an extension setting has no value" + }, + "extensionActionFailed": "Action failed", + "@extensionActionFailed": { + "description": "Fallback error when an extension action fails without details" + }, + "extensionEnterValue": "Enter value", + "@extensionEnterValue": { + "description": "Hint for editing an extension setting value" + }, + "extensionHealthServiceOnline": "Service online", + "@extensionHealthServiceOnline": { + "description": "Tooltip for online extension service" + }, + "extensionHealthServiceDegraded": "Service degraded", + "@extensionHealthServiceDegraded": { + "description": "Tooltip for degraded extension service" + }, + "extensionHealthServiceOffline": "Service offline", + "@extensionHealthServiceOffline": { + "description": "Tooltip for offline extension service" + }, + "extensionHealthServiceUnknown": "Service status unknown", + "@extensionHealthServiceUnknown": { + "description": "Tooltip for unknown extension service health" + }, + "audioAnalysisStereo": "Stereo", + "@audioAnalysisStereo": { + "description": "Audio channel layout label - stereo" + }, + "audioAnalysisMono": "Mono", + "@audioAnalysisMono": { + "description": "Audio channel layout label - mono" + }, + "trackOpenInService": "Open in {serviceName}", + "@trackOpenInService": { + "description": "Button label to open a track in a named music service", + "placeholders": { + "serviceName": { + "type": "String" + } + } + }, + "trackLyricsEmbeddedSource": "Embedded", + "@trackLyricsEmbeddedSource": { + "description": "Lyrics source label for embedded lyrics" + }, + "unknownAlbum": "Unknown Album", + "@unknownAlbum": { + "description": "Fallback album name when metadata is missing" + }, + "unknownArtist": "Unknown Artist", + "@unknownArtist": { + "description": "Fallback artist name when metadata is missing" + }, + "permissionAudio": "Audio", + "@permissionAudio": { + "description": "Audio permission type label" + }, + "permissionStorage": "Storage", + "@permissionStorage": { + "description": "Storage permission type label" + }, + "permissionNotification": "Notification", + "@permissionNotification": { + "description": "Notification permission type label" + }, + "errorInvalidFolderSelected": "Invalid folder selected", + "@errorInvalidFolderSelected": { + "description": "Error when the selected folder is invalid" + }, + "storeAnyVersion": "Any", + "@storeAnyVersion": { + "description": "Store detail value when any app version is accepted" + }, + "storeCategoryMetadata": "Metadata", + "@storeCategoryMetadata": { + "description": "Store extension category - metadata" + }, + "storeCategoryDownload": "Download", + "@storeCategoryDownload": { + "description": "Store extension category - download" + }, + "storeCategoryUtility": "Utility", + "@storeCategoryUtility": { + "description": "Store extension category - utility" + }, + "storeCategoryLyrics": "Lyrics", + "@storeCategoryLyrics": { + "description": "Store extension category - lyrics" + }, + "storeCategoryIntegration": "Integration", + "@storeCategoryIntegration": { + "description": "Store extension category - integration" + }, + "artistReleases": "Releases", + "@artistReleases": { + "description": "Section header for all artist releases" + }, + "editMetadataSelectNone": "None", + "@editMetadataSelectNone": { + "description": "Button to clear selected fields for auto-fill" + }, + "queueRetryAllFailed": "Retry {count} failed", + "@queueRetryAllFailed": { + "description": "Button to retry every failed download in the queue", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "settingsSaveDownloadHistory": "Save download history", + "@settingsSaveDownloadHistory": { + "description": "Settings switch title for storing completed downloads in history" + }, + "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "@settingsSaveDownloadHistorySubtitle": { + "description": "Settings switch subtitle for storing completed downloads in history" + }, + "dialogDisableHistoryTitle": "Turn off download history?", + "@dialogDisableHistoryTitle": { + "description": "Confirmation dialog title shown before disabling download history" + }, + "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "@dialogDisableHistoryMessage": { + "description": "Confirmation dialog message shown before disabling download history" + }, + "dialogDisableAndClear": "Turn off and clear", + "@dialogDisableAndClear": { + "description": "Confirmation action to disable download history and clear existing entries" + }, + "openInOtherServices": "Open in Other Services", + "@openInOtherServices": { + "description": "Title and tooltip for finding the current collection in other services" + }, + "shareSheetNoExtensions": "No other compatible services", + "@shareSheetNoExtensions": { + "description": "Empty state when no extensions can be searched for cross-service links" + }, + "shareSheetNotFound": "Not found", + "@shareSheetNotFound": { + "description": "Cross-service share sheet row subtitle when a service has no match" + }, + "shareSheetCopyLink": "Copy Link", + "@shareSheetCopyLink": { + "description": "Tooltip for copying a cross-service link" + }, + "shareSheetLinkCopied": "{service} link copied", + "@shareSheetLinkCopied": { + "description": "Snackbar after copying a cross-service link", + "placeholders": { + "service": {} + } + }, + "libraryPlayback": "Playback", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "External player", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Built-in preview player", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Now Playing", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Nothing is playing", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimize", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Up next", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, + "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, + "nowPlayingOpenInExternalPlayer": "Open in external player", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Player", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lyrics", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "No lyrics in this file", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Your library is empty", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Shuffle on", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Play in order", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Shuffle library", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Queue is empty", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "No metadata available", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } }, - "trackCopyright": "Hak cipta", - "libraryForceFullScanSubtitle": "Rescan all files, ignoring cache", - "trackCopiedToClipboard": "Disalin ke clipboard", - "optionsEmbedMetadata": "Embed Metadata", - "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", - "@collectionAddedTracksToPlaylistWithExisting": { - "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", "placeholders": { "count": { "type": "int" }, - "playlistName": { + "format": { "type": "String" }, - "alreadyCount": { - "type": "int" + "quality": { + "type": "String" } } }, - "storeCategoryIntegration": "Integration", - "storeClearFilters": "Hapus filter", - "navSettings": "Pengaturan", - "@homeRecent": { - "description": "Section header for recent searches" + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } }, - "sectionApp": "Aplikasi", - "@sectionLanguage": { - "description": "Settings section header for language" + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "downloadFilterContributingDisabled": "Full Album Artist string used", - "albumFolderArtistAlbumSinglesSubtitle": "Artis/Album/ dan Artis/Single/", - "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", - "lyricsProvidersSaved": "Lyrics provider priority saved", - "@trackReplayGainFailed": { - "description": "Snackbar message when ReplayGain scan/write fails" + "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" }, - "trackTrackName": "Nama lagu", - "homeRecent": "Terbaru", - "recentEmpty": "Belum ada item terbaru", - "cacheClearAll": "Clear all cache", - "trackReEnrichFieldReleaseInfo": "Date & ISRC", - "regionCountryMX": "Mexico", - "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", - "editMetadataFieldAlbum": "Album", - "settingsAbout": "Tentang", - "libraryFilterTitle": "Filters", - "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", - "extensionHooksAvailable": "{count} hook tersedia", - "backupContentsSettings": "App settings", - "trackLyricsEmbedded": "Lirik berhasil disematkan", - "optionsUpdateChannelPreview": "Dapatkan rilis preview", - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "libraryForceFullScan": "Force Full Scan", - "snackbarProviderPrioritySaved": "Prioritas provider disimpan", - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", - "extensionServiceStatus": "Service Status", - "dateWeeksAgo": "{count} minggu lalu", - "historyFilterSingles": "Single", - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", - "trackLyricsSaved": "Lyrics saved to {fileName}", - "cacheClearAllConfirmTitle": "Clear all cache?", - "noTracksFoundForAlbum": "No tracks found for this album", - "sectionLanguage": "Bahasa", - "@logIssueTrackNotFoundDescription": { - "description": "Diagnostic badge description when a track is unavailable" + "snackbarPlayingNext": "Playing next", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Added to queue", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Shuffle", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" }, - "setupSelectFolder": "Pilih Folder", - "dateYesterday": "Kemarin", - "collectionAddToPlaylist": "Add to playlist", - "snackbarUnsupportedAudioFormat": "Unsupported audio format", - "libraryScanCancelled": "Scan cancelled", - "appearanceLanguage": "Bahasa Aplikasi", - "extensionsTitle": "Ekstensi", - "dialogImportPlaylistMessage": "Menemukan {count} lagu di file playlist. Tambahkan ke antrean download?", - "permissionNotification": "Notification", - "notifUpdateReady": "Update Ready", - "lyricsModeDescription": "Pilih cara lirik disimpan bersama unduhan Anda", - "downloadFrom": "Unduh Dari", - "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", - "cueSplitSplitting": "Splitting CUE sheet... ({current}/{total})", - "trackOptionAddToWishlist": "Add to Wishlist", - "settingsBackup": "Backup & Restore", - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", - "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", - "extensionsNoDownloadProvider": "Tidak ada ekstensi dengan provider unduhan", - "libraryFilterSortGenreAsc": "Genre (A-Z)", - "trackReplayGainFailed": "Gagal menambahkan tag ReplayGain", - "collectionPlaylistRemoveCover": "Remove cover image", - "storeEmptyNoResults": "Tidak ada ekstensi ditemukan", - "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", - "editMetadataFieldComment": "Comment", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "settingsMetadata": "Metadata", - "settingsCache": "Storage & Cache", - "providerPriorityFallbackExtensionsHint": "Hanya ekstensi yang diaktifkan dengan kemampuan penyedia unduhan yang tercantum di sini.", - "libraryFilterAll": "All", - "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", - "extensionsProviderPrioritySection": "Prioritas Provider", - "storeChangeRepoTooltip": "Ubah repositori", - "snackbarFailedToInstall": "Gagal memasang ekstensi", - "libraryScanSubtitle": "Scan for audio files", - "snackbarExtensionInstalled": "{extensionName} terpasang.", - "setupOpenSettings": "Buka Pengaturan", - "extensionsInstalledSection": "Ekstensi Terpasang", - "aboutLinks": "Tautan", - "trackCoverClearSelected": "Clear selected cover", - "libraryAutoScanWeekly": "Weekly", - "downloadMusixmatchLanguageAuto": "Auto (original language)", - "optionsDefaultSearchTab": "Tab Pencarian Default", "downloadPrimaryArtistOnlyOn": "Primary only: On", - "folderOrganizationDescription": "Atur file yang diunduh ke dalam folder", - "@folderOrganizationDescription": { - "description": "Folder organization sheet description" + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" }, - "lyricsModeEmbed": "Sematkan dalam file", - "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", - "@extensionsSearchProviderDescription": { - "description": "Search provider setting description" + "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" }, - "libraryFilterQualityLossy": "Lossy", - "actionPause": "Jeda", - "csvImportTracks": "{count} trek dari CSV", - "actionGo": "Go", - "sectionDebug": "Debug", - "editMetadataFieldDate": "Date", - "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", - "sectionPerformance": "Performa", - "extensionsDownloadPrioritySubtitle": "Atur urutan layanan unduhan", - "cacheAppDirectoryDesc": "HTTP responses, WebView data, and other temporary app data.", - "sectionData": "Data", - "notifFinalizingTrack": "Finalizing {trackName}", - "snackbarFileNotFound": "File tidak ditemukan", - "extensionQualityOptions": "Opsi Kualitas", - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", - "storeRepoDialogTitle": "Repositori Ekstensi", - "extensionsSearchProviderDescription": "Pilih layanan yang digunakan untuk mencari lagu", - "albumFolderAlbumOnly": "Album Saja", - "nowPlayingOpenInExternalPlayer": "Open in external player", - "cueSplitButton": "Split into Tracks", - "trackConvertKeepOriginal": "Pertahankan file asli", - "@trackConvertKeepOriginal": { - "description": "Toggle untuk mempertahankan file sumber saat konversi" + "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Original quality", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "trackConvertDithering": "Dithering", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "Resampler", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "None", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "Triangular HP", + "@trackConvertDitherTriangularHp": { + "description": "Lossless conversion high-pass triangular dither option" + }, + "trackConvertResamplerSwr": "SWR", + "@trackConvertResamplerSwr": { + "description": "Lossless conversion default FFmpeg swresample resampler option" + }, + "trackConvertResamplerSoxr": "SoXr", + "@trackConvertResamplerSoxr": { + "description": "Lossless conversion SoX resampler option" + }, + "updateSeeReleaseNotes": "See release notes for details.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" }, - "trackConvertKeepOriginalDescription": "Tambahkan file hasil konversi sebagai entri library terpisah", - "@trackConvertKeepOriginalDescription": { - "description": "Deskripsi opsi mempertahankan file sumber saat konversi" + "unknownTitle": "Unknown title", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" }, - "trackConvertConfirmKeepOriginal": "Konversi dari {sourceFormat} ke {targetFormat}?\n\nFile asli akan dipertahankan dan file hasil konversi akan ditambahkan sebagai entri library terpisah.", - "@trackConvertConfirmKeepOriginal": { - "description": "Konfirmasi konversi ketika file sumber dipertahankan", + "trackPlayNext": "Play next", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Add to queue", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", "placeholders": { - "sourceFormat": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { "type": "String" }, - "targetFormat": { + "version": { "type": "String" } } }, - "selectionBatchConvertConfirmKeepOriginal": "Konversi {count} lagu ke {format}?\n\nFile asli akan dipertahankan dan file hasil konversi akan ditambahkan sebagai entri library terpisah.", - "@selectionBatchConvertConfirmKeepOriginal": { - "description": "Konfirmasi konversi batch ketika file sumber dipertahankan", + "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "extensionName": { "type": "String" } } }, - "downloadQualityVariants": "Izinkan versi dengan kualitas berbeda", - "@downloadQualityVariants": { - "description": "Pengaturan untuk menyimpan beberapa versi kualitas dari lagu yang sama" + "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", - "@downloadQualityVariantsDescription": { - "description": "Deskripsi penyimpanan beberapa versi kualitas" + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" }, - "trackOptionDownloadQualityVariant": "Unduh kualitas lain", - "@trackOptionDownloadQualityVariant": { - "description": "Aksi menu lagu untuk mengunduh versi kualitas lain" + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" }, - "downloadDeduplicationWithQualityVariants": "File yang sudah ada pada kualitas yang dipilih akan dilewati", - "@downloadDeduplicationWithQualityVariants": { - "description": "Subtitle deduplikasi ketika versi kualitas terpisah diizinkan" + "trackCoverOnline": "Online cover", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" }, - "updateRequiredTitle": "Harus update", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" + "regionCountryUS": "United States", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" }, - "updateRequiredNotice": "Versi yang Anda gunakan adalah {count} dan sudah tidak didukung. Update untuk terus menggunakan aplikasi.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryGB": "United Kingdom", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" }, - "appearanceHeroAnimations": "Animasi hero", - "@appearanceHeroAnimations": { - "description": "Toggle for shared-element (Hero) transitions" + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" }, - "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", - "@appearanceHeroAnimationsSubtitle": { - "description": "Subtitle for the Hero animations toggle" + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloads": "Unduhan bersamaan", - "@settingsConcurrentDownloads": { - "description": "Setting title - how many tracks download at the same time" + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloadsSubtitle": "Mengunduh beberapa lagu sekaligus lebih cepat, tetapi beberapa penyedia mungkin membatasi permintaan paralel.", - "@settingsConcurrentDownloadsSubtitle": { - "description": "Subtitle explaining the concurrent downloads picker" + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsOne": "1 lagu dalam satu waktu", - "@concurrentDownloadsOne": { - "description": "Concurrent downloads option - sequential" + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsCount": "Hingga {count} lagu dalam satu waktu", - "@concurrentDownloadsCount": { - "description": "Concurrent downloads option - parallel", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalization": "Volume normalization", - "@libraryPlaybackNormalization": { - "description": "Toggle title for ReplayGain playback normalization in the built-in player" + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", - "@libraryPlaybackNormalizationSubtitle": { - "description": "Subtitle explaining playback volume normalization" + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysis": "Audio analysis cache", - "@cacheAudioAnalysis": { - "description": "Cache item title for saved audio analysis results" + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", - "@cacheAudioAnalysisDesc": { - "description": "Description of what audio analysis cache contains" + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" }, - "downloadFolderAccessLostTitle": "Download folder access lost", - "@downloadFolderAccessLostTitle": { - "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" }, - "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", - "@downloadFolderAccessLostSubtitle": { - "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" }, - "downloadFolderReselect": "Re-select folder", - "@downloadFolderReselect": { - "description": "Button that reopens the folder picker to restore download folder access" + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" }, - "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", - "@downloadErrorSafPermissionLost": { - "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" }, - "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", - "@downloadErrorFolderAccessLost": { - "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" }, - "notifVerificationRequiredTitle": "Verification required", - "@notifVerificationRequiredTitle": { - "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" }, - "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", - "@notifVerificationRequiredBody": { - "description": "Notification body prompting the user to return to the app to solve a verification challenge" + "extensionVerificationHelpTitleManual": "Open verification manually", + "@extensionVerificationHelpTitleManual": { + "description": "Dialog title when automatic browser launch for verification fails" + }, + "extensionVerificationHelpTitleWaiting": "Verification still waiting", + "@extensionVerificationHelpTitleWaiting": { + "description": "Dialog title when verification is taking longer than expected" + }, + "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", + "@extensionVerificationHelpMessageManual": { + "description": "Dialog message when automatic browser launch for verification fails" + }, + "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", + "@extensionVerificationHelpMessageWaiting": { + "description": "Dialog message when verification may need manual browser help" + }, + "extensionVerificationClose": "Close", + "@extensionVerificationClose": { + "description": "Button to dismiss the extension verification help dialog" + }, + "extensionVerificationCopyLink": "Copy link", + "@extensionVerificationCopyLink": { + "description": "Button to copy the extension verification URL" + }, + "extensionVerificationLinkCopied": "Verification link copied", + "@extensionVerificationLinkCopied": { + "description": "Snackbar after copying the extension verification URL" + }, + "extensionVerificationOpenBrowser": "Open browser", + "@extensionVerificationOpenBrowser": { + "description": "Button to open the extension verification URL in a browser" }, "settingsSearchHint": "Search settings", + "@settingsSearchHint": { + "description": "Placeholder of the search field on the Settings tab" + }, "settingsSearchNoResults": "No settings match \"{query}\"", + "@settingsSearchNoResults": { + "description": "Shown when a Settings search returns nothing", + "placeholders": { + "query": { + "type": "String" + } + } + }, "settingsGroupInterface": "Extensions & appearance", + "@settingsGroupInterface": { + "description": "Settings group covering look and feel" + }, "settingsGroupContent": "Content & metadata", + "@settingsGroupContent": { + "description": "Settings group covering the library, metadata and lyrics" + }, "settingsGroupDownloads": "Downloads & files", + "@settingsGroupDownloads": { + "description": "Settings group covering download behaviour and storage" + }, "settingsGroupSystem": "System", + "@settingsGroupSystem": { + "description": "Settings group covering app-level data, cache and logs" + }, "settingsGroupHelp": "About & support", - "libraryFilterMetadataMissingLyrics": "Lirik tidak tersedia", - "trackOptionCopyTrackName": "Salin judul lagu", - "trackOptionCopyArtist": "Salin artis", - "trackOptionCopyTrackAndArtist": "Salin judul dan artis", - "metadataCopyValue": "Salin nilai", - "metadataCopyField": "Salin field dan nilai", - "metadataCopyAll": "Salin semua metadata", - "optionsEmbeddedCoverSize": "Ukuran Cover Tertanam", - "optionsEmbeddedCoverSizeDescription": "Perkecil cover yang diunduh dari internet sebelum ditanamkan. Gambar yang sudah berada dalam batas tidak akan diubah.", - "optionsEmbeddedCoverSizeOriginal": "Resolusi asli", - "collectionExportM3u": "Ekspor sebagai M3U8", - "collectionExportM3uDone": "Mengekspor {exported} dari {total} lagu", - "collectionExportM3uNone": "Tidak ada file terdownload untuk diekspor", - "collectionExportM3uFailed": "Ekspor gagal", - "trackOpenOn": "Buka di...", - "trackOpenOnNoLinks": "Tidak menemukan link platform untuk lagu ini.", - "libraryReviewDuplicates": "Tinjau duplikat", - "libraryReviewDuplicatesSubtitle": "Telusuri lagu yang disimpan lebih dari sekali", - "duplicatesTitle": "Duplikat", - "duplicatesEmpty": "Tidak menemukan lagu duplikat.", - "duplicatesKeepBest": "Simpan lagu kualitas terbaik", - "duplicatesKeepBestMessage": "Hapus {count} salinan kualitas rendah lagu \"{trackName}\"?", - "duplicatesDeleteCopyMessage": "Hapus salinan lagu \"{trackName}\"?", - "appearanceForceBlur": "Selalu gunakan efek blur", - "appearanceForceBlurSubtitle": "Aktifkan efek buram bilah navigasi bahkan pada perangkat yang dinonaktifkan secara bawaan. Dapat memengaruhi performa.", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", - "libraryDefaultView": "Default view", - "libraryDefaultViewLastUsed": "Last used", - "queueCancelledTitle": "Download cancelled", - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", - "queueDownloadNext": "Download next", - "queueMoveUp": "Move up", - "queueMoveDown": "Move down", - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", - "nowPlayingRepeatOff": "Repeat off", - "nowPlayingRepeatAll": "Repeat all", - "nowPlayingRepeatOne": "Repeat one", - "queueNetworkFailedOffline": "{count} downloads failed while offline", - "libraryFilterMetadataMissingIsrc": "Missing ISRC" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From d7d0aec784a28db715b9bbd308f69d7ae122cb15 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:34 +0700 Subject: [PATCH 05/59] New translations app_en.arb (Chinese Traditional) [ci skip] --- lib/l10n/arb/app_zh_TW.arb | 57 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/lib/l10n/arb/app_zh_TW.arb b/lib/l10n/arb/app_zh_TW.arb index bd1346580..6adc4d629 100644 --- a/lib/l10n/arb/app_zh_TW.arb +++ b/lib/l10n/arb/app_zh_TW.arb @@ -1,5 +1,5 @@ { - "@@locale": "zh_TW", + "@@locale": "zh-TW", "@@last_modified": "2026-04-28", "appName": "SpotiFLAC 行動版", "@appName": { @@ -461,6 +461,18 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" + }, + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" + }, + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" + }, "aboutAppDescription": "搜尋音樂元數據、管理擴充功能,並整理各個音樂庫。", "@aboutAppDescription": { "description": "App description in header card" @@ -3889,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -6047,6 +6059,45 @@ "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, "nowPlayingOpenInExternalPlayer": "Open in external player", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" @@ -6494,4 +6545,4 @@ "@optionsEmbeddedCoverSizeOriginal": { "description": "Option that preserves the provider artwork at its original resolution" } -} +} \ No newline at end of file From 354fc02cd87d0ef0d6f2362e05a8a823553994ff Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:35 +0700 Subject: [PATCH 06/59] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 9702 ++++++++++++++++++++------------------- 1 file changed, 5074 insertions(+), 4628 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index 6a5319dcc..64de4f15c 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -1,2673 +1,2662 @@ { "@@locale": "fr", "@@last_modified": "2026-04-28", - "libraryEnableLocalLibrarySubtitle": "Analysez et gérez votre bibliothèque musicale", - "@libraryEnableLocalLibrarySubtitle": { - "description": "Subtitle for enable toggle" - }, - "@audioAnalysisCodec": { - "description": "Audio codec metric label" + "appName": "SpotiFLAC Mobile", + "@appName": { + "description": "App name - DO NOT TRANSLATE" }, - "extensionUtilityFunctions": "Fonctions utilitaires", - "@extensionUtilityFunctions": { - "description": "Capability label for utility-only extensions" + "navHome": "Accueil", + "@navHome": { + "description": "Bottom navigation - Home tab" }, - "logClearLogsMessage": "Êtes-vous sûr de vouloir effacer tous les journaux ?", - "@logClearLogsMessage": { - "description": "Clear logs confirmation message" + "navLibrary": "Bibliothèque", + "@navLibrary": { + "description": "Bottom navigation - Library tab" }, - "@storeClearFilters": { - "description": "Button to clear all filters" + "navSettings": "Paramètres", + "@navSettings": { + "description": "Bottom navigation - Settings tab" }, - "cacheCleanupUnused": "Nettoyer les données inutilisées", - "@cacheCleanupUnused": { - "description": "Action title for cleaning unused entries" + "navStore": "Dépôt", + "@navStore": { + "description": "Bottom navigation - Extension repo tab" }, - "trackConvertDitherNone": "Aucun", - "@trackConvertDitherNone": { - "description": "Lossless conversion dither option with no dithering applied" + "homeTitle": "Accueil", + "@homeTitle": { + "description": "Home screen title" }, - "libraryTracksUnit": "{count, plural, =1{piste} other{pistes}}", - "@libraryTracksUnit": { - "description": "Unit label for tracks count (without the number itself)", - "placeholders": { - "count": { - "type": "int" - } - } + "homeSubtitle": "Collez une URL prise en charge ou effectuez une recherche par nom", + "@homeSubtitle": { + "description": "Subtitle shown below search box" }, - "folderOrganizationNone": "Aucune organisation", - "@folderOrganizationNone": { - "description": "Folder option - flat structure" + "homeEmptyTitle": "Aucun moteur de recherche pour le moment", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" }, - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" + "homeEmptySubtitle": "Installez une extension pour continuer.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" }, - "@trackConvertConfirmTitle": { - "description": "Confirmation dialog title" + "homeSupports": "Prise en charge : URL de titres, d’albums, de playlists et d’artistes", + "@homeSupports": { + "description": "Info text about supported URL types" }, - "@extensionPatternsCount": { - "description": "URL patterns count", - "placeholders": { - "count": { - "type": "int" - } - } + "homeRecent": "Récent", + "@homeRecent": { + "description": "Section header for recent searches" }, - "audioAnalysisContainer": "Conteneur", - "@audioAnalysisContainer": { - "description": "Audio container metric label" + "historyFilterAll": "Tous", + "@historyFilterAll": { + "description": "Filter chip - show all items" }, - "libraryAutoScanOff": "Désactivée", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" + "historyFilterAlbums": "Albums", + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" }, - "shareSheetLinkCopied": "Lien {service} copié", - "@shareSheetLinkCopied": { - "description": "Snackbar after copying a cross-service link", - "placeholders": { - "service": {} - } + "historyFilterSingles": "Titres", + "@historyFilterSingles": { + "description": "Filter chip - show singles only" }, - "providerPriorityFallbackExtensionsDescription": "Sélectionnez les extensions de téléchargement installées qui peuvent être utilisées lors du basculement automatique.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" + "historySearchHint": "Historique de recherche...", + "@historySearchHint": { + "description": "Search bar placeholder in history" }, - "@replayGainBatchConfirmMessage": { - "description": "Message of the batch ReplayGain confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsTitle": "Paramètres", + "@settingsTitle": { + "description": "Settings screen title" }, - "@extensionsHomeFeedUse": { - "description": "Extensions page - subtitle for a specific extension home feed option", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "settingsDownload": "Télécharger", + "@settingsDownload": { + "description": "Settings section - download options" }, - "selectionShareCount": "Partager {count} {count, plural, =1{titre} other{titres}}", - "@selectionShareCount": { - "description": "Share button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsAppearance": "Apparence", + "@settingsAppearance": { + "description": "Settings section - visual customization" }, - "@storeExtensionsCount": { - "description": "Store extension result count", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsExtensions": "Extensions", + "@settingsExtensions": { + "description": "Settings section - extension management" }, - "@logSearchHint": { - "description": "Log search placeholder" + "settingsAbout": "À propos", + "@settingsAbout": { + "description": "Settings section - app info" }, - "@audioAnalysisSamples": { - "description": "Total samples metric label" + "downloadTitle": "Télécharger", + "@downloadTitle": { + "description": "Download settings page title" }, - "trackCoverReplace": "Remplacer la pochette", - "@trackCoverReplace": { - "description": "Button label for replacing selected cover art" + "downloadAskQualitySubtitle": "Afficher le sélecteur de qualité pour chaque téléchargement", + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" }, - "@discographyAddedToQueue": { - "description": "Snackbar - tracks added from discography", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameFormat": "Nom du fichier", + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" }, - "downloadAppleElrcWordSyncEnabled": "Conservation des horodatages bruts mot à mot", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" + "downloadSingleFilenameFormat": "Format de nom de fichier unique", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" }, - "@nowPlayingDetails": { - "description": "Menu item and section title for track metadata details" + "downloadSingleFilenameFormatDescription": "Modèle de nom de fichier pour les singles et les EP. Utilise les mêmes balises que le format album.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" }, - "@trackGenre": { - "description": "Metadata label - music genre" + "downloadFolderOrganization": "Organisation du dossier", + "@downloadFolderOrganization": { + "description": "Title of the folder organization picker bottom sheet" }, - "recentTypeSong": "Titre", - "@recentTypeSong": { - "description": "Recent access item type - song/track" + "appearanceTitle": "Apparence", + "@appearanceTitle": { + "description": "Appearance settings page title" }, - "logShareLogs": "Partager les journaux", - "@logShareLogs": { - "description": "Share button tooltip" + "appearanceThemeSystem": "Système", + "@appearanceThemeSystem": { + "description": "Follow system theme" }, - "@storeFilterLyrics": { - "description": "Repo filter - lyrics providers" + "appearanceThemeLight": "Clair", + "@appearanceThemeLight": { + "description": "Light theme" }, - "extensionsInstallButton": "Installer l'extension", - "@extensionsInstallButton": { - "description": "Button to install extension from file" + "appearanceThemeDark": "Sombre", + "@appearanceThemeDark": { + "description": "Dark theme" }, - "replayGainBatchSuccess": "ReplayGain ajouté à {success} de {total} pistes", - "@replayGainBatchSuccess": { - "description": "Snackbar after batch ReplayGain completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "appearanceDynamicColor": "Couleur dynamique", + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" }, - "nowPlayingMinimize": "Réduire", - "@nowPlayingMinimize": { - "description": "Tooltip for minimizing the now playing screen" + "appearanceDynamicColorSubtitle": "Utilisez les couleurs de votre fond d'écran", + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" }, - "logIssueNetworkErrorSuggestion": "Vérifiez votre connexion Internet", - "@logIssueNetworkErrorSuggestion": { - "description": "Diagnostic badge suggestion for generic network errors" + "appearanceHistoryView": "Historique", + "@appearanceHistoryView": { + "description": "Layout style for history" }, - "extensionsNoExtensions": "Aucune extension installée", - "@extensionsNoExtensions": { - "description": "Empty state - no extensions" + "appearanceHistoryViewList": "Liste", + "@appearanceHistoryViewList": { + "description": "List layout option" }, - "@cacheRefresh": { - "description": "Tooltip for refresh button on cache management page" + "appearanceHistoryViewGrid": "Grille", + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" }, - "@snackbarHistoryCleared": { - "description": "Snackbar - history deleted" + "optionsPrimaryProvider": "Fournisseur principal", + "@optionsPrimaryProvider": { + "description": "Main search provider setting" }, - "cueSplitFailed": "Échec de la division CUE", - "@cueSplitFailed": { - "description": "Snackbar when CUE split fails" + "optionsPrimaryProviderSubtitle": "Service permettant d'effectuer une recherche par titre de morceau ou d'album", + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" }, - "trackConvertLosslessSuffix": "Sans perte", - "@trackConvertLosslessSuffix": { - "description": "Suffix used in converted lossless quality labels" - }, - "homeSubtitle": "Collez une URL prise en charge ou effectuez une recherche par nom", - "@homeSubtitle": { - "description": "Subtitle shown below search box" - }, - "selectionBatchConvertConfirmMessageLossless": "Convertir {count} {count, plural, =1{titre} other{titres}} au format {format} ? (Sans perte — aucune perte de qualité)\n\nLes fichiers d'origine seront supprimés après la conversion.", - "@selectionBatchConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless batch conversion", + "optionsUsingExtension": "Utilisation de l'extension : {extensionName}", + "@optionsUsingExtension": { + "description": "Shows active extension name", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "extensionName": { "type": "String" } } }, - "@extensionVerificationHelpMessageManual": { - "description": "Dialog message when automatic browser launch for verification fails" - }, - "queueRateLimitMessage": "Ce titre est peut-être encore disponible. Patientez quelques minutes, réduisez le nombre de téléchargements simultanés, puis réessayez.", - "@queueRateLimitMessage": { - "description": "Explanation shown on a failed queue item when the download service rate limits requests" - }, - "searchSortDateOldest": "Date de sortie (la plus ancienne)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "nowPlayingShuffleOn": "Lecture aléatoire activée", - "@nowPlayingShuffleOn": { - "description": "Tooltip when shuffle mode is enabled" - }, - "sectionColor": "Couleur", - "@sectionColor": { - "description": "Settings section header" - }, - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "cacheCoverImage": "Cache des images de couverture", - "@cacheCoverImage": { - "description": "Cache item title for persistent cover images" + "optionsDefaultSearchTab": "Onglet de recherche par défaut", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" }, - "@navSettings": { - "description": "Bottom navigation - Settings tab" + "optionsDefaultSearchTabSubtitle": "Choisissez l'onglet qui s'ouvre en premier pour les nouveaux résultats de recherche.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" }, - "@trackCoverReplaceNotice": { - "description": "Notice shown when a new cover has been selected but not saved yet" + "optionsAutoFallback": "Récupération automatique", + "@optionsAutoFallback": { + "description": "Auto-retry with other services" }, - "cueSplitConfirmTitle": "Album CUE fractionné", - "@cueSplitConfirmTitle": { - "description": "CUE split confirmation dialog title" + "optionsAutoFallbackSubtitle": "Essayez d'autres services si le téléchargement échoue", + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" }, - "@trackDeleteConfirmMessage": { - "description": "Delete confirmation message" + "optionsEmbedLyrics": "Intégrer les paroles", + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" }, - "cacheClearSuccess": "Effacé : {target}", - "@cacheClearSuccess": { - "description": "Snackbar after clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "optionsEmbedLyricsSubtitle": "Enregistrez les paroles synchronisées avec vos morceaux téléchargés", + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" }, - "editMetadataFieldCover": "Illustration de couverture", - "@editMetadataFieldCover": { - "description": "Chip label for cover art field in auto-fill selector" + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" }, - "snackbarSelectExtFile": "Veuillez sélectionner un fichier .spotiflac-ext", - "@snackbarSelectExtFile": { - "description": "Snackbar - wrong file type selected" + "optionsReplayGainSubtitleOn": "Analyser le niveau sonore et intégrer des balises ReplayGain (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" }, - "libraryFilterFormat": "Format", - "@libraryFilterFormat": { - "description": "Filter section - file format" + "optionsReplayGainSubtitleOff": "Désactivé : aucune balise de normalisation du volume", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" }, - "@downloadLossyAac": { - "description": "Lossy format option - AAC in M4A container at 320kbps" + "trackReplayGain": "Réanalyser ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "@setupNext": { - "description": "Next button text" + "trackReplayGainScanning": "Analyse du volume sonore...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "@releaseTypeSingle": { - "description": "Badge label for single releases" + "trackReplayGainSuccess": "Ajout des balises ReplayGain", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" }, - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" + "trackReplayGainFailed": "Impossible d'ajouter les balises ReplayGain", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" }, - "trackConvertLosslessOutputWithCap": "Sortie sans perte avec une limite de {quality}", - "@trackConvertLosslessOutputWithCap": { - "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", "placeholders": { - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "bulkDownloadSelectPlaylists": "Sélectionnez les playlists à télécharger", - "@bulkDownloadSelectPlaylists": { - "description": "Button label when no playlists are selected for download" - }, - "artistOptionAddToFavorites": "Ajouter aux Artistes Favoris", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "@timeJustNow": { - "description": "Relative time - less than a minute ago" - }, - "downloadLossyOpus256": "Opus 256 kbps", - "@downloadLossyOpus256": { - "description": "Lossy format option - Opus 256kbps" + "replayGainBatchConfirmTitle": "Ajouter ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" }, - "discographySinglesOnlySubtitle": "{count} titres issus de {albumCount} singles", - "@discographySinglesOnlySubtitle": { - "description": "Subtitle showing singles tracks count", + "replayGainBatchConfirmMessage": "Analyser le niveau sonore et ajouter des balises ReplayGain à {count} piste(s) ?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { "count": { "type": "int" - }, - "albumCount": { - "type": "int" } } }, - "optionsExtensionStore": "Référentiel d'extensions", - "@optionsExtensionStore": { - "description": "Show/hide repo tab" + "replayGainBatchAnalyzing": "Analyse de ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" }, - "libraryDownloadsHistoryExcluded": "{count} dans l'historique des téléchargements (exclu de la liste)", - "@libraryDownloadsHistoryExcluded": { - "description": "Library count note for downloaded history items excluded from the local list", + "replayGainBatchSuccess": "ReplayGain ajouté à {success} de {total} pistes", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", "placeholders": { - "count": { + "success": { + "type": "int" + }, + "total": { "type": "int" } } }, - "@errorUrlFetchFailed": { - "description": "Error message - generic URL fetch failure" - }, - "@trackOptionAddToWishlist": { - "description": "Bottom sheet action label - add track to wishlist" + "optionsArtistTagMode": "Mode « Artiste »", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" }, - "discographySinglesOnly": "Uniquement les singles et les EP", - "@discographySinglesOnly": { - "description": "Option - download only singles" + "optionsArtistTagModeDescription": "Choisissez comment les noms de plusieurs artistes doivent apparaître dans les balises intégrées.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" }, - "@downloadSongLinkRegionDesc": { - "description": "Description in SongLink region picker" + "optionsArtistTagModeJoined": "Valeur unique combinée", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" }, - "notifEmbeddingMetadata": "Intégration des métadonnées...", - "@notifEmbeddingMetadata": { - "description": "Notification body while embedding metadata into a downloaded track" + "optionsArtistTagModeJoinedSubtitle": "Indiquez une seule valeur ARTIST, par exemple « Artiste A, Artiste B », pour garantir une compatibilité maximale avec les lecteurs.", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" }, - "@settingsLocalLibrarySubtitle": { - "description": "Subtitle for local library settings" + "optionsArtistTagModeSplitVorbis": "Diviser les balises pour FLAC/Opus", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "@downloadLocationSubtitle": { - "description": "Subtitle shown in the download location picker sheet" + "optionsArtistTagModeSplitVorbisSubtitle": "Créez une balise « artiste » par artiste pour les fichiers FLAC et Opus ; les fichiers MP3 et M4A restent regroupés.", + "@optionsArtistTagModeSplitVorbisSubtitle": { + "description": "Subtitle for split Vorbis artist tag mode" }, - "trackConvertOriginalQuality": "Qualité d'origine", - "@trackConvertOriginalQuality": { - "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + "optionsExtensionStore": "Référentiel d'extensions", + "@optionsExtensionStore": { + "description": "Show/hide repo tab" }, - "nowPlayingTabLyrics": "Paroles", - "@nowPlayingTabLyrics": { - "description": "Tab label for the lyrics view" + "optionsExtensionStoreSubtitle": "Afficher l'onglet « Dépôt » dans le menu de navigation", + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension repo toggle" }, - "selectionConvertCount": "Convertir {count} {count, plural, =1{titre} other{titres}}", - "@selectionConvertCount": { - "description": "Convert button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsCheckUpdates": "Vérifier les mises à jour", + "@optionsCheckUpdates": { + "description": "Auto update check toggle" }, - "@extensionsInstalledSection": { - "description": "Section header - installed extensions" + "optionsCheckUpdatesSubtitle": "M'avertir lorsqu'une nouvelle version est disponible", + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" }, - "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is off" + "optionsUpdateChannel": "Chaîne de mise à jour", + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" }, - "nowPlayingShuffleLibrary": "Lecture aléatoire de la bibliothèque", - "@nowPlayingShuffleLibrary": { - "description": "Button label to shuffle and play the entire local library" + "optionsUpdateChannelStable": "Uniquement les versions stables", + "@optionsUpdateChannelStable": { + "description": "Only stable updates" }, - "trackReEnrichFieldCover": "Illustration de couverture", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" + "optionsUpdateChannelPreview": "Accédez aux versions préliminaires", + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", - "@tutorialExtensionsTip3": { - "description": "Tutorial extensions tip 3" + "optionsUpdateChannelWarning": "La version préliminaire peut contenir des bogues ou des fonctionnalités incomplètes", + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" }, - "@cacheCleanupUnusedDesc": { - "description": "Description of what cleanup unused data does" - }, - "a11yOpenAlbum": "Ouvrir l'album {albumName}", - "@a11yOpenAlbum": { - "description": "Accessibility label for opening an album", - "placeholders": { - "albumName": { - "type": "String" - } - } + "optionsClearHistory": "Effacer l'historique des téléchargements", + "@optionsClearHistory": { + "description": "Delete all download history" }, - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" + "optionsClearHistorySubtitle": "Supprimez tous les morceaux téléchargés de l'historique", + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" }, - "nowPlayingQueueEmpty": "La file d'attente est vide", - "@nowPlayingQueueEmpty": { - "description": "Empty state when the playback queue has no items" + "optionsDetailedLogging": "Journalisation détaillée", + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" }, - "@settingsDownload": { - "description": "Settings section - download options" + "optionsDetailedLoggingOn": "Des journaux détaillés sont enregistrés", + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 piste téléchargée avec succès} other{{count} pistes téléchargées avec succès}}", - "@notifTracksDownloadedSuccess": { - "description": "Notification body for queue complete - how many tracks were downloaded", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsDetailedLoggingOff": "Activer pour les rapports de bogues", + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" }, - "storeCategoryDownload": "Télécharger", - "@storeCategoryDownload": { - "description": "Store extension category - download" + "extensionsTitle": "Extensions", + "@extensionsTitle": { + "description": "Extensions page title" }, - "aboutTelegramChannel": "Chaîne Telegram", - "@aboutTelegramChannel": { - "description": "Link to Telegram channel" + "extensionsDisabled": "Désactivée", + "@extensionsDisabled": { + "description": "Extension status - inactive" }, - "@downloadedAlbumDiscHeader": { - "description": "Header for disc separator in multi-disc albums", + "extensionsVersion": "Version {version}", + "@extensionsVersion": { + "description": "Extension version display", "placeholders": { - "discNumber": { - "type": "int", - "example": "1" + "version": { + "type": "String" } } }, - "@recentEmpty": { - "description": "Empty state text for recent access list" + "extensionsUninstall": "Désinstaller", + "@extensionsUninstall": { + "description": "Uninstall extension button" }, - "@backupRestoreConfirmMessage": { - "description": "Confirmation dialog message before restoring a backup" + "storeTitle": "Répertoire des extensions", + "@storeTitle": { + "description": "Repo screen title" }, - "@shareSheetCopyLink": { - "description": "Tooltip for copying a cross-service link" + "storeSearch": "Recherche d'extensions...", + "@storeSearch": { + "description": "Repo search placeholder" }, - "regionCountryID": "Indonésie", - "@regionCountryID": { - "description": "Country name for SongLink region picker" + "storeInstall": "Installer", + "@storeInstall": { + "description": "Install extension button" }, - "@libraryInLibrary": { - "description": "Badge shown on tracks that exist in local library" + "storeInstalled": "Installé", + "@storeInstalled": { + "description": "Already installed badge" }, - "extensionPostProcessingHooks": "Crochets de post-traitement", - "@extensionPostProcessingHooks": { - "description": "Capability - post-processing" + "storeUpdate": "Mettre à jour", + "@storeUpdate": { + "description": "Update available button" }, - "@setupGrantPermission": { - "description": "Button to request permission" + "aboutTitle": "À propos", + "@aboutTitle": { + "description": "About page title" }, - "storeFilterDownload": "Télécharger", - "@storeFilterDownload": { - "description": "Repo filter - download providers" + "aboutContributors": "Contributeurs", + "@aboutContributors": { + "description": "Section for contributors" }, - "@collectionAddToPlaylist": { - "description": "Action to add a track to user playlist" + "aboutMobileDeveloper": "Développeur de la version mobile", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" }, - "@discographyFailedToFetch": { - "description": "Error - some albums failed to load" + "aboutOriginalCreator": "Créateur de la version originale de SpotiFLAC", + "@aboutOriginalCreator": { + "description": "Role description for original creator" }, - "@updateWhatsNew": { - "description": "Changelog section title" + "aboutLogoArtist": "Le talentueux artiste qui a créé le magnifique logo de notre application !", + "@aboutLogoArtist": { + "description": "Role description for logo artist" }, - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" + "aboutTranslators": "Traducteurs", + "@aboutTranslators": { + "description": "Section for translators" }, - "dialogDeleteSelectedTitle": "Supprimer la sélection", - "@dialogDeleteSelectedTitle": { - "description": "Dialog title - delete selected items" + "aboutSpecialThanks": "Remerciements particuliers", + "@aboutSpecialThanks": { + "description": "Section for special thanks" }, - "trackCoverPick": "Choisir une pochette", - "@trackCoverPick": { - "description": "Button label for selecting cover art" + "aboutLinks": "Liens", + "@aboutLinks": { + "description": "Section for external links" }, - "@collectionCreatePlaylist": { - "description": "Action to create a new playlist" + "aboutMobileSource": "Code source pour mobile", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" }, - "selectionBatchConvertSuccess": "{success} pistes sur {total} ont été converties au format {format}", - "@selectionBatchConvertSuccess": { - "description": "Snackbar after batch conversion completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "aboutPCSource": "Code source pour PC", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" }, - "qualityHiResFlacMax": "FLAC haute résolution Max", - "@qualityHiResFlacMax": { - "description": "Quality option - maximum resolution FLAC" + "aboutKeepAndroidOpen": "Garder Android ouvert", + "@aboutKeepAndroidOpen": { + "description": "Link to Keep Android Open campaign website" }, - "audioAnalysisStereo": "Stéréo", - "@audioAnalysisStereo": { - "description": "Audio channel layout label - stereo" + "aboutReportIssue": "Signaler un problème", + "@aboutReportIssue": { + "description": "Link to report bugs" }, - "backupExportButton": "Créer un fichier de sauvegarde", - "@backupExportButton": { - "description": "Button to create and share a backup file" + "aboutReportIssueSubtitle": "Signalez tout problème que vous rencontrez", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" }, - "settingsApp": "Application", - "@settingsApp": { - "description": "Settings menu item - app settings" + "aboutFeatureRequest": "Demande de fonctionnalité", + "@aboutFeatureRequest": { + "description": "Link to suggest features" }, - "clickableInformationUnavailable": "Informations sur {type} non disponibles", - "@clickableInformationUnavailable": { - "description": "Snackbar shown when clickable metadata cannot open a destination", - "placeholders": { - "type": { - "type": "String" - } - } + "aboutFeatureRequestSubtitle": "Proposez de nouvelles fonctionnalités pour l'application", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" }, - "@logFilterLevel": { - "description": "Filter by log level" + "aboutTelegramChannel": "Chaîne Telegram", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" }, - "sectionTheme": "Thème", - "@sectionTheme": { - "description": "Settings section header" + "aboutTelegramChannelSubtitle": "Annonces et mises à jour", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" }, - "@extensionActionFailed": { - "description": "Fallback error when an extension action fails without details" + "aboutTelegramChat": "Communauté Telegram", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" }, - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + "aboutTelegramChatSubtitle": "Discutez avec d'autres utilisateurs", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" }, - "@extensionsNoCustomSearch": { - "description": "Empty state - no search providers" + "aboutSocial": "Réseaux sociaux", + "@aboutSocial": { + "description": "Section for social links" }, - "@collectionPlaylistRemoveCover": { - "description": "Bottom sheet action to remove custom cover image from a playlist" + "aboutApp": "Application", + "@aboutApp": { + "description": "Section for app info" }, - "@tutorialWelcomeDesc": { - "description": "Tutorial welcome page description" + "aboutVersion": "Version", + "@aboutVersion": { + "description": "Version info label" }, - "@tutorialSearchDesc": { - "description": "Tutorial search page description" + "aboutBinimumDesc": "Créateur de QQDL et de l'API HiFi. Ce projet a contribué à mettre en place la prise en charge des téléchargements sans perte.", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" }, - "collectionAddedToWishlist": "« {trackName} » a été ajouté à la liste de souhaits", - "@collectionAddedToWishlist": { - "description": "Snackbar after adding track to wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } + "aboutSachinsenalDesc": "Le créateur du projet HiFi original. Une base pour l'intégration de sources sans perte.", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" }, - "logAffectedDomains": "Concerne : {domains}", - "@logAffectedDomains": { - "description": "Affected domains in log issue analysis", - "placeholders": { - "domains": { - "type": "String" - } - } + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" }, - "@folderOrganizationByArtistSubtitle": { - "description": "Subtitle for artist folder option" + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" }, - "errorNoTracksFound": "Aucun titre trouvé", - "@errorNoTracksFound": { - "description": "Error - search returned no results" + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" }, - "providerPriorityTitle": "Priorité accordée aux prestataires", - "@providerPriorityTitle": { - "description": "Provider priority page title" + "aboutAppDescription": "Recherchez des métadonnées musicales, gérez les extensions et organisez votre bibliothèque.", + "@aboutAppDescription": { + "description": "App description in header card" }, - "@notifUpdateReadyBody": { - "description": "Notification body when app update is ready to install", + "artistAlbums": "Albums", + "@artistAlbums": { + "description": "Section header for artist albums" + }, + "artistSingles": "Singles & EPs", + "@artistSingles": { + "description": "Section header for singles/EPs" + }, + "artistCompilations": "Compilations", + "@artistCompilations": { + "description": "Section header for compilations" + }, + "artistPopular": "Populaire", + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, + "artistMonthlyListeners": "{count} auditeurs mensuels", + "@artistMonthlyListeners": { + "description": "Monthly listener count display", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "String", + "description": "Formatted listener count" } } }, - "@settingsExtensions": { - "description": "Settings section - extension management" + "trackMetadataService": "Service", + "@trackMetadataService": { + "description": "Metadata field - download service used" }, - "trackDeleteConfirmTitle": "Supprimer de l'appareil ?", - "@trackDeleteConfirmTitle": { - "description": "Delete confirmation title" + "trackMetadataPlay": "Lire", + "@trackMetadataPlay": { + "description": "Action button - play track" }, - "@settingsDownloadNetwork": { - "description": "Setting for network type preference" + "trackMetadataShare": "Partager", + "@trackMetadataShare": { + "description": "Action button - share track" }, - "downloadProvidersNoneEnabled": "Aucun fournisseur n'est activé", - "@downloadProvidersNoneEnabled": { - "description": "Shown when no lyrics providers are active" + "trackMetadataDelete": "Supprimer", + "@trackMetadataDelete": { + "description": "Action button - delete track" }, - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" + "setupGrantPermission": "Accorder l'autorisation", + "@setupGrantPermission": { + "description": "Button to request permission" }, - "trackReEnrichFieldBasicTags": "Album, Album Artiste", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + "setupSkip": "Ignorer pour le moment", + "@setupSkip": { + "description": "Skip current step button" }, - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" + "setupStorageAccessRequired": "Accès au stockage requis", + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" }, - "@logClearLogsTitle": { - "description": "Clear logs dialog title" + "setupStorageAccessMessageAndroid11": "Depuis Android 11, l'autorisation « Accès à tous les fichiers » est requise pour enregistrer des fichiers dans le dossier de téléchargement de votre choix.", + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" }, - "storageModeSafSubtitle": "Choisissez n'importe quel dossier, y compris la carte SD", - "@storageModeSafSubtitle": { - "description": "Subtitle for SAF storage mode" + "setupOpenSettings": "Ouvrir les paramètres", + "@setupOpenSettings": { + "description": "Button to open system settings" }, - "@notifUpdateProgress": { - "description": "Notification body showing update download progress", + "setupPermissionDeniedMessage": "Autorisation refusée. Veuillez accorder toutes les autorisations pour continuer.", + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, + "setupPermissionRequired": "Autorisation {permissionType} requise", + "@setupPermissionRequired": { + "description": "Generic permission required title", "placeholders": { - "received": { - "type": "String" - }, - "total": { - "type": "String" - }, - "percentage": { - "type": "int" + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" } } }, - "downloadUsePrimaryArtistOnlyEnabled": "Les noms des artistes mis en avant ont été supprimés du nom du dossier (par exemple : Justin Bieber, Quavo → Justin Bieber)", - "@downloadUsePrimaryArtistOnlyEnabled": { - "description": "Subtitle when primary artist only is enabled" - }, - "notifScanningLibrary": "Numérisation de la bibliothèque locale", - "@notifScanningLibrary": { - "description": "Notification title while scanning local library" - }, - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "setupGetStarted": "Démarrer", - "@setupGetStarted": { - "description": "Final setup button" - }, - "libraryFilterQualityCD": "CD (16 bits)", - "@libraryFilterQualityCD": { - "description": "Filter option - CD quality audio" - }, - "sectionLayout": "Mise en page", - "@sectionLayout": { - "description": "Settings section header" - }, - "@tooltipLoveAll": { - "description": "Tooltip for the Love All button on album/playlist screens" - }, - "queueFinalizingDownload": "Téléchargement en cours", - "@queueFinalizingDownload": { - "description": "Accessibility label for a queue item that is finalizing" - }, - "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", - "@trackConvertActionLabelLossy": { - "description": "Convert button label for lossy conversion", + "setupPermissionRequiredMessage": "L'autorisation {permissionType} est requise pour profiter pleinement de l'application. Vous pourrez modifier ce paramètre ultérieurement dans les Paramètres.", + "@setupPermissionRequiredMessage": { + "description": "Generic permission required message", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { + "permissionType": { "type": "String" } } }, - "extensionsMetadataPriority": "Priorité des métadonnées", - "@extensionsMetadataPriority": { - "description": "Setting - metadata provider order" + "setupUseDefaultFolder": "Utiliser le dossier par défaut ?", + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" }, - "updateCurrent": "Actuel", - "@updateCurrent": { - "description": "Label for current version" + "setupNoFolderSelected": "Aucun dossier n'est sélectionné. Souhaitez-vous utiliser le dossier Musique par défaut ?", + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" }, - "@aboutFeatureRequest": { - "description": "Link to suggest features" + "setupUseDefault": "Utiliser les paramètres par défaut", + "@setupUseDefault": { + "description": "Button to use default folder" }, - "@safMigrationSuccess": { - "description": "Snackbar after successfully migrating to SAF" + "setupDownloadLocationTitle": "Emplacement de téléchargement", + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" }, - "backupRestoreConfirmMessage": "Cette opération remplacera vos paramètres actuels, votre historique de téléchargements, vos titres favoris, votre liste de souhaits et vos listes de lecture par le contenu de la sauvegarde. Cette opération est irréversible.", - "@cleanupOrphanedDownloadsNone": { - "description": "Snackbar when no orphans found" + "setupDownloadLocationIosMessage": "Sous iOS, les fichiers téléchargés sont enregistrés dans le dossier « Documents » de l'application. Vous pouvez y accéder via l'application Fichiers.", + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (idéal pour les titres asiatiques)", - "@lyricsProviderNeteaseDesc": { - "description": "Description for Netease provider" + "setupAppDocumentsFolder": "Dossier « Documents » de l'application", + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" }, - "libraryScanCancelledSubtitle": "Vous pouvez relancer l'analyse dès que vous êtes prêt.", - "@libraryScanCancelledSubtitle": { - "description": "Library scan status subtitle after cancellation" + "setupAppDocumentsFolderSubtitle": "Recommandé - accessible via l'application Fichiers", + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" }, - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" + "setupChooseFromFiles": "Sélectionnez un fichier", + "@setupChooseFromFiles": { + "description": "iOS file picker option" }, - "@trackAlbum": { - "description": "Metadata label - album name" + "setupChooseFromFilesSubtitle": "Sélectionnez iCloud ou un autre emplacement", + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" }, - "dialogDeleteSelectedMessage": "Supprimer {count} {count, plural, =1{titre} other{titres}} de l'historique ?\n\nCela supprimera également les fichiers du stockage.", - "@dialogDeleteSelectedMessage": { - "description": "Dialog message - delete selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "setupIosEmptyFolderWarning": "Limitation iOS : les dossiers vides ne peuvent pas être sélectionnés. Choisissez un dossier contenant au moins un fichier.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" }, - "trackReEnrich": "Réenrichir", - "@trackReEnrich": { - "description": "Menu action - re-embed metadata into audio file" + "setupIcloudNotSupported": "iCloud Drive n'est pas pris en charge. Veuillez utiliser le dossier « Documents » de l'application.", + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" }, - "@lyricsProvidersSaved": { - "description": "Snackbar after saving lyrics provider priority" + "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "@setupDownloadInFlac": { + "description": "App tagline in setup" }, - "@storageModeSaf": { - "description": "Storage mode option - Storage Access Framework" + "setupStorageGranted": "Autorisation de stockage accordée !", + "@setupStorageGranted": { + "description": "Success message for storage permission" }, - "libraryStorageAccessRequired": "Accès au stockage requis", - "@libraryStorageAccessRequired": { - "description": "Dialog title for storage permission" + "setupStorageRequired": "Autorisation de stockage requise", + "@setupStorageRequired": { + "description": "Title when storage permission needed" }, - "@cacheClearAllConfirmTitle": { - "description": "Dialog title before clearing all caches" + "setupStorageDescription": "SpotiFLAC a besoin d'une autorisation d'accès au stockage pour enregistrer vos fichiers musicaux téléchargés.", + "@setupStorageDescription": { + "description": "Explanation for storage permission" }, - "@unknownArtist": { - "description": "Fallback artist name when metadata is missing" + "setupNotificationGranted": "Autorisation de notification accordée !", + "@setupNotificationGranted": { + "description": "Success message for notification permission" }, - "downloadCreatePlaylistSourceFolderEnabled": "Un sous-dossier est créé pour chaque playlist", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist folder is enabled" + "setupNotificationEnable": "Activer les notifications", + "@setupNotificationEnable": { + "description": "Button to enable notifications" }, - "dialogClearHistoryMessage": "Êtes-vous sûr de vouloir effacer tout l'historique des téléchargements ? Cette action ne peut pas être annulée.", - "@dialogClearHistoryMessage": { - "description": "Dialog message - clear history confirmation" + "setupFolderChoose": "Choisissez le dossier de téléchargement", + "@setupFolderChoose": { + "description": "Button to choose folder" }, - "@sectionData": { - "description": "Settings section header" + "setupFolderDescription": "Sélectionnez un dossier dans lequel votre musique téléchargée sera enregistrée.", + "@setupFolderDescription": { + "description": "Explanation for folder selection" }, - "audioAnalysisRms": "RMS", - "@audioAnalysisRms": { - "description": "RMS level metric label" + "setupSelectFolder": "Sélectionner un dossier", + "@setupSelectFolder": { + "description": "Button to select folder" }, - "downloadFilterContributingEnabled": "Les artistes ayant contribué à l'album ont été supprimés du nom du dossier « Artiste de l'album »", - "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is on" + "setupEnableNotifications": "Activer les notifications", + "@setupEnableNotifications": { + "description": "Button to enable notifications" }, - "timeJustNow": "Il y a quelques instants", - "@extensionCustomUrlHandlingShareHint": { - "description": "Extension detail hint explaining share-to-app URL handling" + "setupNotificationBackgroundDescription": "Recevez des notifications sur la progression et la fin du téléchargement. Cela vous permet de suivre les téléchargements lorsque l'application est en arrière-plan.", + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" }, - "cleanupOrphanedDownloads": "Nettoyage des téléchargements orphelins", - "@cleanupOrphanedDownloads": { - "description": "Button to remove history entries for deleted files" + "setupSkipForNow": "Ignorer pour le moment", + "@setupSkipForNow": { + "description": "Skip button text" }, - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" + "setupNext": "Suivant", + "@setupNext": { + "description": "Next button text" }, - "@tutorialWelcomeTitle": { - "description": "Tutorial welcome page title" + "setupGetStarted": "Démarrer", + "@setupGetStarted": { + "description": "Final setup button" }, - "collectionFavoriteArtists": "Artistes Favoris", - "audioAnalysisRescanning": "Réanalyse du fichier audio...", - "@audioAnalysisRescanning": { - "description": "Loading text while audio is being re-analyzed after an explicit refresh" + "setupAllowAccessToManageFiles": "Veuillez cocher la case « Autoriser l'accès pour gérer tous les fichiers » sur l'écran suivant.", + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" }, - "logTitle": "Journaux", - "@logTitle": { - "description": "Logs screen title" + "setupLanguageTitle": "Choisir la langue", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" }, - "@regionCountryGB": { - "description": "Country name for SongLink region picker" + "setupLanguageDescription": "Sélectionnez la langue de votre choix pour l'application. Vous pourrez la modifier ultérieurement dans les Paramètres.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" }, - "@progressFetchingMetadata": { - "description": "Progress indicator - loading track info", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "setupLanguageSystemDefault": "Paramètres par défaut du système", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" }, - "aboutLogoArtist": "Le talentueux artiste qui a créé le magnifique logo de notre application !", - "@aboutLogoArtist": { - "description": "Role description for logo artist" + "dialogCancel": "Annuler", + "@dialogCancel": { + "description": "Dialog button - cancel action" }, - "channelPreview": "Aperçu", - "@channelPreview": { - "description": "Update channel - beta/preview releases" + "dialogSave": "Sauvegarder", + "@dialogSave": { + "description": "Dialog button - save changes" }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} supprimées", - "@collectionPlaylistsDeleted": { - "description": "Snackbar after deleting selected playlists", + "dialogDelete": "Supprimer", + "@dialogDelete": { + "description": "Dialog button - delete item" + }, + "dialogRetry": "Réessayer", + "@dialogRetry": { + "description": "Dialog button - retry action" + }, + "dialogClear": "Effacer", + "@dialogClear": { + "description": "Dialog button - clear items" + }, + "dialogDone": "C'est fait", + "@dialogDone": { + "description": "Dialog button - action completed" + }, + "dialogImport": "Importer", + "@dialogImport": { + "description": "Dialog button - import data" + }, + "dialogDownload": "Télécharger", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, + "previewPlay": "Écouter un aperçu", + "@previewPlay": { + "description": "Tooltip for the button that plays a short track preview snippet" + }, + "previewStop": "Arrêter l'aperçu", + "@previewStop": { + "description": "Tooltip for the button that stops the playing track preview snippet" + }, + "previewUnavailable": "Aperçu indisponible", + "@previewUnavailable": { + "description": "Snackbar shown when a track preview snippet cannot be played" + }, + "dialogDiscard": "Ignorer", + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, + "dialogRemove": "Supprimer", + "@dialogRemove": { + "description": "Dialog button - remove item" + }, + "dialogUninstall": "Désinstaller", + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, + "dialogDiscardChanges": "Ignorer les modifications ?", + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, + "dialogUnsavedChanges": "Vous avez des modifications non enregistrées. Voulez-vous les ignorer ?", + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, + "dialogClearAll": "Tout effacer", + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, + "dialogRemoveExtension": "Supprimer l'extension", + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogRemoveExtensionMessage": "Êtes-vous sûr de vouloir supprimer cette extension ? Cette action ne peut pas être annulée.", + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, + "dialogUninstallExtension": "Supprimer l'extension ?", + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogUninstallExtensionMessage": "Êtes-vous sûr de vouloir supprimer {extensionName} ?", + "@dialogUninstallExtensionMessage": { + "description": "Dialog message - uninstall specific extension", "placeholders": { - "count": { - "type": "int" + "extensionName": { + "type": "String" } } }, - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" + "dialogClearHistoryTitle": "Effacer l'historique", + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" }, - "homeTitle": "Accueil", - "@homeTitle": { - "description": "Home screen title" + "dialogClearHistoryMessage": "Êtes-vous sûr de vouloir effacer tout l'historique des téléchargements ? Cette action ne peut pas être annulée.", + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" }, - "extensionMinAppVersion": "Version minimale de l'application", - "@extensionMinAppVersion": { - "description": "Extension detail - minimum app version" + "dialogDeleteSelectedTitle": "Supprimer la sélection", + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" }, - "backupContentsLiked": "{count} favoris {count, plural, =1{titre} other{titres}}", - "@backupContentsLiked": { - "description": "Backup contents row for liked tracks count", + "dialogDeleteSelectedMessage": "Supprimer {count} {count, plural, =1{titre} other{titres}} de l'historique ?\n\nCela supprimera également les fichiers du stockage.", + "@dialogDeleteSelectedMessage": { + "description": "Dialog message - delete selected tracks", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" + "dialogImportPlaylistTitle": "Importer une playlist", + "@dialogImportPlaylistTitle": { + "description": "Dialog title - import CSV playlist" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 téléchargement annulé par l'utilisateur} other{{count} téléchargements annulés par l'utilisateur}}", - "@notifDownloadsCanceledBody": { - "description": "Notification body when downloads are canceled by the user", + "dialogImportPlaylistMessage": "{count} titres ont été trouvés dans le fichier de la playlist. Voulez-vous les ajouter à la file d'attente de téléchargement ?", + "csvImportTracks": "{count} pistes issues d'un fichier CSV", + "@csvImportTracks": { + "description": "Label shown in quality picker for CSV import", "placeholders": { "count": { "type": "int" } } }, - "@dialogRetry": { - "description": "Dialog button - retry action" - }, - "@homeChangeSearchProviderTooltip": { - "description": "Tooltip for the Home search provider picker" - }, - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" + "collectionExportM3u": "Exporter au format M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" }, - "@trackReEnrichSuccessWithFailures": { - "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "collectionExportM3uDone": "{exported} titres exportés sur {total}", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { - "successCount": { + "exported": { "type": "int" }, "total": { "type": "int" - }, - "failedCount": { - "type": "int" } } }, - "previewUnavailable": "Aperçu indisponible", - "@previewUnavailable": { - "description": "Snackbar shown when a track preview snippet cannot be played" - }, - "nowPlayingTabPlayer": "Lecteur", - "@nowPlayingTabPlayer": { - "description": "Tab label for the player view" + "collectionExportM3uNone": "Aucun fichier téléchargé à exporter", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "@backupContentsPlaylists": { - "description": "Backup contents row for playlist count", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionExportM3uFailed": "L'exportation a échoué", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "libraryLastScannedNever": "Jamais", - "@libraryLastScannedNever": { - "description": "Shown when library has never been scanned" + "trackOpenOn": "Ouvrir sur...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" }, - "trackTrackNumber": "Numéro de piste", - "@trackTrackNumber": { - "description": "Metadata label - track number" + "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" }, - "trackReplayGainScanning": "Analyse du volume sonore...", - "@trackReplayGainScanning": { - "description": "Snackbar/progress message while scanning ReplayGain for a single track" + "libraryReviewDuplicates": "Vérifier les doublons", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" }, - "downloadLossyMp3": "MP3 320 kbps", - "@downloadLossyMp3": { - "description": "Lossy format option - MP3 320kbps" + "libraryReviewDuplicatesSubtitle": "Rechercher les titres enregistrés plusieurs fois", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" }, - "@albumFolderArtistAlbumSingles": { - "description": "Album folder option with singles inside artist" + "duplicatesTitle": "Doublons", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" }, - "@extensionHealthNotConfigured": { - "description": "Extension service health status - not configured" + "duplicatesEmpty": "Aucun titre en double n'a été détecté.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" }, - "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is off" + "duplicatesKeepBest": "Garder le meilleur", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "downloadCreatePlaylistSourceFolder": "Dossier source de la playlist", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting to create a subfolder per playlist source" + "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" + } + } }, - "@trackReleaseDate": { - "description": "Metadata label - release date" + "duplicatesDeleteCopyMessage": "Souhaitez-vous supprimer cette copie de « {trackName} » ?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "aboutContributors": "Contributeurs", - "@aboutContributors": { - "description": "Section for contributors" + "@dialogImportPlaylistMessage": { + "description": "Dialog message - import playlist confirmation", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@audioAnalysisMono": { - "description": "Audio channel layout label - mono" + "snackbarAddedToQueue": "Ajout de « {trackName} » à la file d'attente", + "@snackbarAddedToQueue": { + "description": "Snackbar - track added to download queue", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@audioAnalysisNyquist": { - "description": "Nyquist frequency metric label" + "snackbarAddedTracksToQueue": "{count} titres ont été ajoutés à la file d'attente", + "@snackbarAddedTracksToQueue": { + "description": "Snackbar - multiple tracks added to queue", + "placeholders": { + "count": { + "type": "int" + } + } }, - "permissionStorage": "Stockage", - "@permissionStorage": { - "description": "Storage permission type label" + "snackbarAlreadyDownloaded": "« {trackName} » a déjà été téléchargé", + "@snackbarAlreadyDownloaded": { + "description": "Snackbar - track already exists", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "permissionAudio": "Audio", - "@permissionAudio": { - "description": "Audio permission type label" + "snackbarAlreadyInLibrary": "« {trackName} » existe déjà dans votre bibliothèque", + "@snackbarAlreadyInLibrary": { + "description": "Snackbar - track already exists in local library", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@libraryScanSubtitle": { - "description": "Subtitle for scan button" + "snackbarHistoryCleared": "Historique effacé", + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" }, - "@snackbarUnsupportedAudioFormat": { - "description": "Snackbar when the audio format is not supported for the requested operation" + "snackbarDeletedTracks": "Supprimé {count} {count, plural, =1{titre} other{titres}}", + "@snackbarDeletedTracks": { + "description": "Snackbar - tracks deleted", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@notifLibraryScanStopped": { - "description": "Notification body when library scan is cancelled" + "snackbarCannotOpenFile": "Impossible d'ouvrir le fichier : {error}", + "@snackbarCannotOpenFile": { + "description": "Snackbar - file open error", + "placeholders": { + "error": { + "type": "String" + } + } }, - "@downloadMusixmatchAuto": { - "description": "Button to clear Musixmatch language (use auto)" + "snackbarViewQueue": "Afficher la file d'attente", + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, - "@trackLyricsTimeout": { - "description": "Message when lyrics request times out" + "snackbarUrlCopied": "L'URL de {platform} a été copiée dans le presse-papiers", + "@snackbarUrlCopied": { + "description": "Snackbar - URL copied", + "placeholders": { + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } + } }, - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" + "snackbarFileNotFound": "Fichier introuvable", + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" }, - "@regionCountryXK": { - "description": "Country name for SongLink region picker" + "snackbarSelectExtFile": "Veuillez sélectionner un fichier .spotiflac-ext", + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" }, - "aboutTelegramChatSubtitle": "Discutez avec d'autres utilisateurs", - "@aboutTelegramChatSubtitle": { - "description": "Subtitle for Telegram chat" + "snackbarProviderPrioritySaved": "Priorité du fournisseur enregistrée", + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" }, - "selectionAllPlaylistsSelected": "Toutes les playlists sélectionnées", - "@selectionAllPlaylistsSelected": { - "description": "Shown when all playlists are selected in selection mode" + "snackbarMetadataProviderSaved": "Priorité du fournisseur de métadonnées enregistrée", + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" }, - "cacheTrackLookupDesc": "Recherche d'identifiant de titre sur Spotify/Deezer. La suppression des données peut ralentir les prochaines recherches.", - "@cacheTrackLookupDesc": { - "description": "Description of what track lookup cache contains" + "snackbarExtensionInstalled": "{extensionName} est installée.", + "@snackbarExtensionInstalled": { + "description": "Snackbar - extension installed successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@unknownAlbum": { - "description": "Fallback album name when metadata is missing" + "snackbarExtensionUpdated": "{extensionName} a été mis à jour.", + "@snackbarExtensionUpdated": { + "description": "Snackbar - extension updated successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@extensionsErrorLoading": { - "description": "Error message when extension fails to load" + "snackbarFailedToInstall": "Échec de l'installation de l'extension", + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" }, - "@cacheTitle": { - "description": "Cache management page title" + "snackbarFailedToUpdate": "Échec de la mise à jour de l'extension", + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" }, - "@downloadFilenameFormat": { - "description": "Setting for output filename pattern" + "errorRateLimited": "Débit limité", + "@errorRateLimited": { + "description": "Error title - too many requests" + }, + "errorRateLimitedMessage": "Trop de requêtes. Veuillez patienter quelques instants avant de relancer la recherche.", + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" + }, + "errorNoTracksFound": "Aucun titre trouvé", + "@errorNoTracksFound": { + "description": "Error - search returned no results" + }, + "searchEmptyResultSubtitle": "Essayez un autre mot-clé", + "@searchEmptyResultSubtitle": { + "description": "Subtitle shown under the empty search result state on the home screen" }, "errorUrlNotRecognized": "Lien non reconnu", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "downloadAppleElrcWordSync": "Synchronisation des paroles Apple Music eLRC", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when album artist is used for folder names" + "errorUrlNotRecognizedMessage": "Ce lien n'est pas pris en charge. Vérifiez que l'URL est correcte et qu'une extension compatible est installée.", + "@errorUrlNotRecognizedMessage": { + "description": "Error message - URL not recognized explanation" }, - "@qualityFlacLossless": { - "description": "Quality option - CD quality FLAC" + "errorUrlFetchFailed": "Impossible de charger le contenu de ce lien. Veuillez réessayer.", + "@errorUrlFetchFailed": { + "description": "Error message - generic URL fetch failure" }, - "downloadNeteaseIncludeTranslationEnabled": "Lignes de traduction en chinois incluses", - "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is on" + "errorMissingExtensionSource": "Impossible de charger {item} : source de l'extension manquante", + "@errorMissingExtensionSource": { + "description": "Error - extension source not available", + "placeholders": { + "item": { + "type": "String" + } + } }, - "collectionLovedEmptySubtitle": "Appuyez sur les morceaux que vous aimez pour les ajouter à vos favoris", - "@collectionLovedEmptySubtitle": { - "description": "Loved empty state subtitle" + "actionPause": "Pause", + "@actionPause": { + "description": "Action button - pause download" }, - "@libraryBuiltInPlayerInfo": { - "description": "Info note explaining the built-in player is for previews only" + "actionResume": "Resumer", + "@actionResume": { + "description": "Action button - resume download" }, - "@notifLibraryScanProgressNoTotal": { - "description": "Notification body for library scan progress when total is unknown", + "actionCancel": "Annuler", + "@actionCancel": { + "description": "Action button - cancel operation" + }, + "actionSelectAll": "Tout sélectionner", + "@actionSelectAll": { + "description": "Action button - select all items" + }, + "actionDeselect": "Désélectionner", + "@actionDeselect": { + "description": "Action button - deselect all" + }, + "selectionSelected": "{count} sélectionnés", + "@selectionSelected": { + "description": "Selection count indicator", "placeholders": { - "scanned": { - "type": "int" - }, - "percentage": { + "count": { "type": "int" } } }, - "@tutorialSearchTitle": { - "description": "Tutorial search page title" + "selectionAllSelected": "Toutes les pistes sélectionnées", + "@selectionAllSelected": { + "description": "Status - all items selected" }, - "trackReEnrichSuccessWithFailures": "Les métadonnées ont été réenrichies avec succès ({successCount}/{total}) - Échec : {failedCount}", - "@a11yTrackByArtist": { - "description": "Accessibility label for a queue or list track item", + "selectionSelectToDelete": "Sélectionnez les titres à supprimer", + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "progressFetchingMetadata": "Récupération des métadonnées... {current}/{total}", + "@progressFetchingMetadata": { + "description": "Progress indicator - loading track info", "placeholders": { - "trackName": { - "type": "String" + "current": { + "type": "int" }, - "artistName": { - "type": "String" + "total": { + "type": "int" } } }, - "libraryFilterMetadataMissingLabel": "Label manquant", - "@libraryFilterMetadataMissingLabel": { - "description": "Filter option - items missing record label" - }, - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "trackMetadata": "Métadonnées", - "@trackMetadata": { - "description": "Tab title - track metadata" + "progressReadingCsv": "Lecture du fichier CSV...", + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" }, - "trackOptionRemoveFromLoved": "Supprimer des Favoris", - "@trackOptionRemoveFromLoved": { - "description": "Bottom sheet action label - remove track from loved folder" + "searchSongs": "Titres", + "@searchSongs": { + "description": "Search result category - songs" }, - "@aboutTelegramChat": { - "description": "Link to Telegram chat group" + "searchArtists": "Artistes", + "@searchArtists": { + "description": "Search result category - artists" }, - "@trackCopiedToClipboard": { - "description": "Snackbar - content copied" + "searchAlbums": "Albums", + "@searchAlbums": { + "description": "Search result category - albums" }, - "aboutKeepAndroidOpen": "Garder Android ouvert", - "@aboutKeepAndroidOpen": { - "description": "Link to Keep Android Open campaign website" + "searchPlaylists": "Playlists", + "@searchPlaylists": { + "description": "Search result category - playlists" }, - "@lyricsProvidersDisabledSection": { - "description": "Section header for disabled providers", - "placeholders": { - "count": { - "type": "int" - } - } + "searchSortTitle": "Trier les résultats", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" }, - "@downloadAllowLocalNetwork": { - "description": "Setting title for allowing requests to private/local network targets" + "searchSortDefault": "Par défaut", + "@searchSortDefault": { + "description": "Sort option - default API order" }, - "@openInOtherServices": { - "description": "Title and tooltip for finding the current collection in other services" + "searchSortTitleAZ": "Titre (A-Z)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" }, - "@extensionVerificationBrowserInApp": { - "description": "Chip label for in-app browser verification mode" + "searchSortTitleZA": "Titre (Z-A)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" }, - "sectionSearchSource": "Rechercher dans la source", - "@sectionSearchSource": { - "description": "Settings section header" + "searchSortArtistAZ": "Artiste (A-Z)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" }, - "allFilesAccess": "Accès à tous les fichiers", - "@allFilesAccess": { - "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + "searchSortArtistZA": "Artiste (Z-A)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" }, - "extensionsInstalledCount": "{count} extensions ont été installées avec succès", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } + "searchSortDurationShort": "Durée (la plus courte)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" }, - "snackbarFailedToEmbedLyrics": "Impossible d'intégrer les paroles", - "@snackbarFailedToEmbedLyrics": { - "description": "Snackbar when lyrics embedding fails" + "searchSortDurationLong": "Durée (la plus longue)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" }, - "@lyricsProviderMusixmatchDesc": { - "description": "Description for Musixmatch provider" + "searchSortDateOldest": "Date de sortie (la plus ancienne)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" }, - "queueRateLimitTitle": "Débit limité", - "@queueRateLimitTitle": { - "description": "Title shown on a failed queue item when the download service rate limits requests" + "searchSortDateNewest": "Date de sortie (la plus récente)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" }, - "@notifDownloadComplete": { - "description": "Notification title when a single download is complete" + "tooltipPlay": "Lecture", + "@tooltipPlay": { + "description": "Tooltip - play button" }, - "@homeSupports": { - "description": "Info text about supported URL types" + "filenameFormat": "Format des noms de fichiers", + "@filenameFormat": { + "description": "Setting title - filename pattern" }, - "notifDownloadsCanceledTitle": "Téléchargements annulés", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" + "filenameShowAdvancedTags": "Afficher les balises avancées", + "@filenameShowAdvancedTags": { + "description": "Toggle label for showing advanced filename tags" }, - "@lyricsModeEmbedSubtitle": { - "description": "Subtitle for embed option" + "filenameShowAdvancedTagsDescription": "Activer les balises de formatage pour le remplissage des pistes et les formats de date", + "@filenameShowAdvancedTagsDescription": { + "description": "Description for advanced filename tag toggle" }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" + "folderOrganizationNone": "Aucune organisation", + "@folderOrganizationNone": { + "description": "Folder option - flat structure" }, - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" + "folderOrganizationByPlaylist": "Par playlist", + "@folderOrganizationByPlaylist": { + "description": "Folder option - playlist folders" }, - "@trackArtist": { - "description": "Metadata label - artist name" + "folderOrganizationByPlaylistSubtitle": "Un dossier distinct pour chaque playlist", + "@folderOrganizationByPlaylistSubtitle": { + "description": "Subtitle for playlist folder option" }, - "cacheCoverImageDesc": "J'ai téléchargé les pochettes de l'album et des titres. Je les téléchargerai à nouveau lors de leur consultation.", - "@cacheCoverImageDesc": { - "description": "Description of what cover image cache contains" + "folderOrganizationByArtist": "Par artiste", + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" }, - "queueClearAll": "Tout effacer", - "@queueClearAll": { - "description": "Button - clear all queue items" + "folderOrganizationByAlbum": "Par album", + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" }, - "downloadUsePrimaryArtistOnlyDisabled": "Nom complet de l'artiste utilisé pour le nom du dossier", - "@downloadUsePrimaryArtistOnlyDisabled": { - "description": "Subtitle when primary artist only is disabled" + "folderOrganizationByArtistAlbum": "Artiste/Album", + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" }, - "backupImportSectionTitle": "Restaurer la sauvegarde", - "@backupImportSectionTitle": { - "description": "Section title for the import/restore card" + "folderOrganizationDescription": "Classer les fichiers téléchargés dans des dossiers", + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" }, - "@downloadMusixmatchLanguageHint": { - "description": "Placeholder for Musixmatch language input" + "folderOrganizationNoneSubtitle": "Tous les fichiers du dossier « Téléchargements »", + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" }, - "collectionRemoveFromFolder": "Supprimer du dossier", - "@collectionRemoveFromFolder": { - "description": "Tooltip for removing track from wishlist/loved folder" + "folderOrganizationByArtistSubtitle": "Un dossier distinct pour chaque artiste", + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" }, - "storeFilterMetadata": "Métadonnées", - "@storeFilterMetadata": { - "description": "Repo filter - metadata providers" + "folderOrganizationByAlbumSubtitle": "Un dossier distinct pour chaque album", + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" }, - "shareSheetCopyLink": "Copier le lien", - "errorRateLimitedMessage": "Trop de requêtes. Veuillez patienter quelques instants avant de relancer la recherche.", - "@errorRateLimitedMessage": { - "description": "Error message - rate limit explanation" + "folderOrganizationByArtistAlbumSubtitle": "Dossiers imbriqués pour les artistes et les albums", + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" }, - "libraryFilterSortGenreDesc": "Genre (Z-A)", - "@libraryFilterSortGenreDesc": { - "description": "Sort option - genre descending" + "updateAvailable": "Mise à jour disponible", + "@updateAvailable": { + "description": "Update dialog title" }, - "trackFileNotFound": "Fichier introuvable", - "@trackFileNotFound": { - "description": "Error - file doesn't exist" + "updateLater": "Plus tard", + "@updateLater": { + "description": "Update button - dismiss" }, - "@queueEmptySinglesSubtitle": { - "description": "Empty state subtitle for single track downloads" + "updateStartingDownload": "Début du téléchargement...", + "@updateStartingDownload": { + "description": "Update status - initializing" }, - "@queueDownloadStarting": { - "description": "Queue status before download progress is available" + "updateDownloadFailed": "Échec du téléchargement", + "@updateDownloadFailed": { + "description": "Update error title" }, - "metadataProviderPriorityInfo": "Deezer n'impose aucune limite de débit et est recommandé comme service principal. Spotify peut limiter le débit après un certain nombre de requêtes.", - "@metadataProviderPriorityInfo": { - "description": "Info tip about rate limits" + "updateFailedMessage": "Échec du téléchargement de la mise à jour", + "@updateFailedMessage": { + "description": "Update error message" }, - "aboutPCSource": "Code source pour PC", - "@aboutPCSource": { - "description": "Link to PC GitHub repo" + "updateNewVersionReady": "Une nouvelle version est disponible", + "@updateNewVersionReady": { + "description": "Update subtitle" }, - "editMetadataAutoFill": "Remplissage automatique en ligne", - "@editMetadataAutoFill": { - "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + "updateRequiredTitle": "Mise à jour requise", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "snackbarDeletedTracks": "Supprimé {count} {count, plural, =1{titre} other{titres}}", - "@snackbarDeletedTracks": { - "description": "Snackbar - tracks deleted", + "updateRequiredNotice": "Cette version a {count} versions de retard et n'est plus prise en charge. Effectuez la mise à jour pour continuer à utiliser l'application.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { "count": { "type": "int" } } }, - "@extensionHealthServiceDegraded": { - "description": "Tooltip for degraded extension service" - }, - "lyricsProviderLrclibDesc": "Base de données open source de paroles synchronisées", - "@lyricsProviderLrclibDesc": { - "description": "Description for LRCLIB provider" + "updateCurrent": "Actuel", + "@updateCurrent": { + "description": "Label for current version" }, - "downloadMusixmatchLanguageDesc": "Saisissez un code de langue BCP-47 (par exemple : en, de, ja) pour demander les paroles traduites à Musixmatch.", - "@downloadMusixmatchLanguageDesc": { - "description": "Description in Musixmatch language picker" + "updateNew": "Nouveau", + "@updateNew": { + "description": "Label for new version" }, - "@optionsEmbedMetadataSubtitleOn": { - "description": "Subtitle when metadata embedding is enabled" + "updateDownloading": "Téléchargement en cours...", + "@updateDownloading": { + "description": "Update status - downloading" }, - "@setupSkipForNow": { - "description": "Skip button text" - }, - "@a11ySelectTrack": { - "description": "Accessibility label for selecting a track" - }, - "@folderOrganizationByAlbumSubtitle": { - "description": "Subtitle for album folder option" - }, - "downloadLossyAac": "AAC/M4A 320 kbps", - "@extensionVerificationBrowserTitle": { - "description": "Settings option title for extension verification browser preference" + "updateWhatsNew": "Quoi de neuf ?", + "@updateWhatsNew": { + "description": "Changelog section title" }, - "@backupContentsExtensions": { - "description": "Backup contents row for installed extensions count", - "placeholders": { - "count": { - "type": "int" - } - } + "updateDownloadInstall": "Télécharger & Installer", + "@updateDownloadInstall": { + "description": "Update button - download and install" }, - "snackbarUrlCopied": "L'URL de {platform} a été copiée dans le presse-papiers", - "@snackbarUrlCopied": { - "description": "Snackbar - URL copied", - "placeholders": { - "platform": { - "type": "String", - "description": "Platform name (Spotify/Deezer)" - } - } + "updateDontRemind": "Ne plus me le rappeler", + "@updateDontRemind": { + "description": "Update button - skip this version" }, - "aboutBinimumDesc": "Créateur de QQDL et de l'API HiFi. Ce projet a contribué à mettre en place la prise en charge des téléchargements sans perte.", - "@aboutBinimumDesc": { - "description": "Credit description for binimum" + "providerPriorityTitle": "Priorité accordée aux prestataires", + "@providerPriorityTitle": { + "description": "Provider priority page title" }, - "discographyFetchingAlbum": "Récupération de {current} sur {total}...", - "@discographyFetchingAlbum": { - "description": "Progress - fetching specific album", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "providerPriorityDescription": "Faites glisser pour réorganiser les fournisseurs de téléchargement. L'application testera les fournisseurs dans l'ordre indiqué, de haut en bas, lors du téléchargement des morceaux.", + "@providerPriorityDescription": { + "description": "Provider priority page description" }, - "logAutoScrollOn": "Défilement automatique activé", - "@logAutoScrollOn": { - "description": "Tooltip when auto-scroll is enabled on the log screen" + "providerPriorityInfo": "Si un morceau n'est pas disponible chez le premier fournisseur, l'application essaiera automatiquement le suivant.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" }, - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" + "providerPriorityFallbackExtensionsDescription": "Sélectionnez les extensions de téléchargement installées qui peuvent être utilisées lors du basculement automatique.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" }, - "@regionCountryBR": { - "description": "Country name for SongLink region picker" + "providerPriorityFallbackExtensionsHint": "Seules les extensions activées disposant de la fonctionnalité « fournisseur de téléchargement » sont répertoriées ici.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" }, - "@lyricsProvidersTitle": { - "description": "Settings item title for lyrics provider order" + "providerExtension": "Extension", + "@providerExtension": { + "description": "Label for extension-provided providers" }, - "trackMetadataService": "Service", - "@trackMetadataService": { - "description": "Metadata field - download service used" + "metadataProviderPriorityTitle": "Priorité des métadonnées", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" }, - "discographyAddedToQueue": "{count} titres ont été ajoutés à la file d'attente", - "cueSplitTrackCount": "{count} titres", - "@cueSplitTrackCount": { - "description": "Number of tracks in CUE sheet", - "placeholders": { - "count": { - "type": "int" - } - } + "metadataProviderPriorityDescription": "Faites glisser pour réorganiser les fournisseurs de métadonnées. L'application testera les fournisseurs dans l'ordre de haut en bas lors de la recherche de morceaux et de la récupération des métadonnées.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" }, - "dialogImportPlaylistTitle": "Importer une playlist", - "@dialogImportPlaylistTitle": { - "description": "Dialog title - import CSV playlist" + "metadataProviderPriorityInfo": "Deezer n'impose aucune limite de débit et est recommandé comme service principal. Spotify peut limiter le débit après un certain nombre de requêtes.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" }, - "@cleanupOrphanedDownloadsSubtitle": { - "description": "Subtitle for orphaned cleanup button" + "logTitle": "Journaux", + "@logTitle": { + "description": "Logs screen title" }, - "settingsLocalLibrary": "Bibliothèque locale", - "@settingsLocalLibrary": { - "description": "Settings menu item - local library" + "logCopied": "Journaux copiés dans le presse-papiers", + "@logCopied": { + "description": "Snackbar - logs copied" }, - "@metadataSaveFailedStorage": { - "description": "Snackbar error when writing metadata file back to storage fails" + "logSearchHint": "Recherche dans les journaux...", + "@logSearchHint": { + "description": "Log search placeholder" }, - "logCopyLogs": "Copier les journaux", - "@logCopyLogs": { - "description": "Tooltip for copying logs" + "logFilterLevel": "Niveau", + "@logFilterLevel": { + "description": "Filter by log level" }, - "downloadNetworkWifiOnlySubtitle": "Les téléchargements sont mis en pause lors de l'utilisation des données mobiles", - "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for WiFi-only option in picker" + "logFilterSection": "Filtre", + "@logFilterSection": { + "description": "Filter section title" }, - "@lyricsModeBothSubtitle": { - "description": "Subtitle for both option" + "logShareLogs": "Partager les journaux", + "@logShareLogs": { + "description": "Share button tooltip" }, - "@collectionAlreadyInPlaylist": { - "description": "Snackbar when track already exists in playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "logClearLogs": "Effacer les journaux", + "@logClearLogs": { + "description": "Clear button tooltip" }, - "@collectionFoldersTitle": { - "description": "Library section title for custom folders" + "logClearLogsTitle": "Effacer les journaux", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" }, - "searchSortDateNewest": "Date de sortie (la plus récente)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" + "logClearLogsMessage": "Êtes-vous sûr de vouloir effacer tous les journaux ?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" }, - "downloadDeduplicationDisabled": "Tous les morceaux seront téléchargés, quel que soit l'historique", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" + "logFilterBySeverity": "Filtrer les journaux par niveau de gravité", + "@logFilterBySeverity": { + "description": "Filter dialog title" }, - "@recentTypeAlbum": { - "description": "Recent access item type - album" + "logNoLogsYet": "Pas encore de journal", + "@logNoLogsYet": { + "description": "Empty state title" }, - "nowPlayingPlayInOrder": "Lire dans l'ordre", - "@nowPlayingPlayInOrder": { - "description": "Tooltip when shuffle mode is disabled" + "logNoLogsYetSubtitle": "Les journaux s'afficheront ici au fur et à mesure que vous utiliserez l'application", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" }, - "@cueSplitConfirmMessage": { - "description": "CUE split confirmation dialog message", + "logEntriesFiltered": "Entrées ({count} résultats filtrés)", + "@logEntriesFiltered": { + "description": "Log count with filter active", "placeholders": { - "album": { - "type": "String" - }, "count": { "type": "int" } } }, - "@audioAnalysisFileSize": { - "description": "File size metric label" - }, - "artistSingles": "Singles & EPs", - "@artistSingles": { - "description": "Section header for singles/EPs" - }, - "@snackbarProviderPrioritySaved": { - "description": "Snackbar - provider order saved" - }, - "@recentPlaylistInfo": { - "description": "Snackbar message when tapping playlist in recent access", + "logEntries": "Entrées ({count})", + "@logEntries": { + "description": "Total log count", "placeholders": { - "name": { - "type": "String", - "description": "Playlist name" + "count": { + "type": "int" } } }, - "@lyricsProviderLyricsPlusDesc": { - "description": "Description for LyricsPlus provider" - }, - "@libraryFilterDownloaded": { - "description": "Filter chip - show only downloaded items" + "channelStable": "Stable", + "@channelStable": { + "description": "Update channel - stable releases" }, - "recentPlaylistInfo": "Playlist : {name}", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" + "channelPreview": "Aperçu", + "@channelPreview": { + "description": "Update channel - beta/preview releases" }, - "@actionCreate": { - "description": "Generic action button - create" + "sectionSearchSource": "Rechercher dans la source", + "@sectionSearchSource": { + "description": "Settings section header" }, - "@downloadSelectQuality": { - "description": "Dialog title - choose audio quality" + "sectionDownload": "Télécharger", + "@sectionDownload": { + "description": "Settings section header" }, - "cueSplitAlbum": "Album : {album}", - "@cueSplitAlbum": { - "description": "Album name in CUE split sheet", - "placeholders": { - "album": { - "type": "String" - } - } + "sectionPerformance": "Performances", + "@sectionPerformance": { + "description": "Settings section header" }, - "@trackCoverNoSource": { - "description": "Snackbar when no cover art URL or embedded cover" + "sectionApp": "Application", + "@sectionApp": { + "description": "Settings section header" }, - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" + "sectionData": "Données", + "@sectionData": { + "description": "Settings section header" }, - "@notifLibraryScanCompleteBody": { - "description": "Notification body for library scan complete - number of indexed tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "sectionDebug": "Débogage", + "@sectionDebug": { + "description": "Settings section header" }, - "optionsDetailedLogging": "Journalisation détaillée", - "@optionsDetailedLogging": { - "description": "Enable verbose logs for debugging" + "sectionService": "Service", + "@sectionService": { + "description": "Settings section header" }, - "@lyricsProvidersDiscardContent": { - "description": "Body text of the discard-changes dialog on lyrics provider page" + "sectionAudioQuality": "Qualité audio", + "@sectionAudioQuality": { + "description": "Settings section header" }, - "@dialogDisableHistoryTitle": { - "description": "Confirmation dialog title shown before disabling download history" + "sectionFileSettings": "Paramètres du fichier", + "@sectionFileSettings": { + "description": "Settings section header" }, - "downloadLossyOpus128Subtitle": "Taille minimale : environ 4 Mo par piste", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" + "sectionLyrics": "Paroles", + "@sectionLyrics": { + "description": "Settings section header" }, - "@appName": { - "description": "App name - DO NOT TRANSLATE" + "lyricsMode": "Mode Paroles", + "@lyricsMode": { + "description": "Setting - how to save lyrics" }, - "libraryActions": "Actions", - "@libraryActions": { - "description": "Section header for library actions" + "lyricsModeDescription": "Choisissez comment les paroles sont enregistrées avec vos téléchargements", + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" }, - "setupNoFolderSelected": "Aucun dossier n'est sélectionné. Souhaitez-vous utiliser le dossier Musique par défaut ?", - "@setupNoFolderSelected": { - "description": "Prompt when no folder selected" + "lyricsModeEmbed": "Intégrer dans un fichier", + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" }, - "downloadMusixmatchLanguageHint": "par exemple : en, de, ja", - "trackSaveFailed": "Échec : {error}", - "@trackSaveFailed": { - "description": "Snackbar when save operation fails", - "placeholders": { - "error": { - "type": "String" - } - } + "lyricsModeEmbedSubtitle": "Paroles enregistrées dans les métadonnées FLAC", + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" }, - "replayGainBatchConfirmTitle": "Ajouter ReplayGain", - "@replayGainBatchConfirmTitle": { - "description": "Title of the batch ReplayGain confirmation dialog" + "lyricsModeExternal": "Fichier .lrc externe", + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" }, - "tutorialExtensionsTip1": "Consultez l'onglet « Dépôt » pour découvrir des extensions utiles", - "@tutorialExtensionsTip1": { - "description": "Tutorial extensions tip 1" + "lyricsModeExternalSubtitle": "Fichier .lrc distinct pour les lecteurs tels que Samsung Music", + "@lyricsModeExternalSubtitle": { + "description": "Subtitle for external option" }, - "@trackAddToQueue": { - "description": "Menu action to add a track to the playback queue" + "lyricsModeBoth": "Les deux", + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" }, - "@cacheTrackLookup": { - "description": "Cache item title for track ID lookup cache" + "lyricsModeBothSubtitle": "Intégrer et enregistrer le fichier .lrc", + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" }, - "@discographyNoAlbums": { - "description": "Error - no albums found for artist" + "sectionColor": "Couleur", + "@sectionColor": { + "description": "Settings section header" }, - "@updateLater": { - "description": "Update button - dismiss" + "sectionTheme": "Thème", + "@sectionTheme": { + "description": "Settings section header" }, - "@snackbarFailedToInstall": { - "description": "Snackbar - extension install error" + "sectionLayout": "Mise en page", + "@sectionLayout": { + "description": "Settings section header" }, - "@albumFolderArtistAlbumFlatSubtitle": { - "description": "Folder structure example for flat singles" + "sectionLanguage": "Langue", + "@sectionLanguage": { + "description": "Settings section header for language" }, - "@errorMissingExtensionSource": { - "description": "Error - extension source not available", - "placeholders": { - "item": { - "type": "String" - } - } + "appearanceLanguage": "Langue de l'application", + "@appearanceLanguage": { + "description": "Language setting title" }, - "libraryFilterSortAlbumAsc": "Album (A-Z)", - "@libraryFilterSortAlbumAsc": { - "description": "Sort option - album ascending" + "settingsAppearanceSubtitle": "Thème, couleurs, affichage", + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" }, - "@queueTrackCount": { - "description": "Track count label with plural support", + "settingsDownloadSubtitle": "Service, qualité, solution de secours", + "@settingsDownloadSubtitle": { + "description": "Download settings description" + }, + "settingsExtensionsSubtitle": "Gérez les fournisseurs de téléchargement", + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" + }, + "settingsLogsSubtitle": "Consulter les journaux de l'application pour le débogage", + "@settingsLogsSubtitle": { + "description": "Logs settings description" + }, + "loadingSharedLink": "Chargement du lien partagé...", + "@loadingSharedLink": { + "description": "Status when opening shared URL" + }, + "pressBackAgainToExit": "Appuyez de nouveau sur retour pour quitter", + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, + "downloadAllCount": "Tout télécharger ({count})", + "@downloadAllCount": { + "description": "Download all button with count", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisMono": "Mono", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", + "tracksCount": "{count, plural, =1{1 titre} other{{count} titres}}", + "@tracksCount": { + "description": "Track count display", "placeholders": { - "source": { - "type": "String" + "count": { + "type": "int" } } }, - "@lyricsModeEmbed": { - "description": "Lyrics mode option - embed in audio file" + "trackCopyFilePath": "Copier le chemin d'accès au fichier", + "@trackCopyFilePath": { + "description": "Action - copy file path" }, - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" + "trackRemoveFromDevice": "Supprimer de l'appareil", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" }, - "@cacheRefreshStats": { - "description": "Button label to refresh cache statistics" + "trackLoadLyrics": "Charger les paroles", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" }, - "lyricsProviderAppleMusicDesc": "Paroles synchronisées mot à mot (via un proxy)", - "@lyricsProviderAppleMusicDesc": { - "description": "Description for Apple Music provider" + "trackMetadata": "Métadonnées", + "@trackMetadata": { + "description": "Tab title - track metadata" }, - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" + "trackFileInfo": "Informations sur le fichier", + "@trackFileInfo": { + "description": "Tab title - file information" }, - "updateFailedMessage": "Échec du téléchargement de la mise à jour", - "@updateFailedMessage": { - "description": "Update error message" + "trackLyrics": "Paroles", + "@trackLyrics": { + "description": "Tab title - lyrics" }, - "cacheEstimatedTotal": "Utilisation estimée du cache : {size}", - "@cacheEstimatedTotal": { - "description": "Total cache size shown in summary", - "placeholders": { - "size": { - "type": "String" - } - } + "trackFileNotFound": "Fichier introuvable", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" }, - "@aboutVersion": { - "description": "Version info label" + "trackOpenInDeezer": "Ouvrir dans Deezer", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" }, - "dialogRetry": "Réessayer", - "@cueSplitSplitting": { - "description": "Snackbar while splitting CUE", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "trackOpenInSpotify": "Ouvrir dans Spotify", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" }, - "@searchSortTitleZA": { - "description": "Sort option - title descending" + "trackTrackName": "Nom de la piste", + "@trackTrackName": { + "description": "Metadata label - track title" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", - "@tutorialLibraryTip2": { - "description": "Tutorial library tip 2" + "trackArtist": "Artiste", + "@trackArtist": { + "description": "Metadata label - artist name" }, - "extensionHealthServiceOffline": "Service hors ligne", - "@extensionHealthServiceOffline": { - "description": "Tooltip for offline extension service" + "trackAlbumArtist": "Artiste de l'album", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" }, - "actionDeselect": "Désélectionner", - "@actionDeselect": { - "description": "Action button - deselect all" + "trackAlbum": "Album", + "@trackAlbum": { + "description": "Metadata label - album name" }, - "@trackConvertOriginal": { - "description": "Label for keeping original bit depth or sample rate during conversion" + "trackTrackNumber": "Numéro de piste", + "@trackTrackNumber": { + "description": "Metadata label - track number" }, - "@libraryClearConfirmTitle": { - "description": "Dialog title for clear confirmation" + "trackDiscNumber": "Numéro de disque", + "@trackDiscNumber": { + "description": "Metadata label - disc number" }, - "@dialogDownloadAllMessage": { - "description": "Body of the Download All confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDuration": "Durée", + "@trackDuration": { + "description": "Metadata label - track length" }, - "homeSupports": "Prise en charge : URL de titres, d’albums, de playlists et d’artistes", - "@downloadedAlbumDeleteSelected": { - "description": "Button - delete selected tracks" + "trackAudioQuality": "Qualité audio", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" }, - "@recentShowAllDownloads": { - "description": "Button label to unhide hidden downloads in recent access" + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" }, - "artistOptionRemoveFromFavorites": "Supprimer des Artistes Favoris", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" + "trackReleaseDate": "Date de sortie", + "@trackReleaseDate": { + "description": "Metadata label - release date" }, - "collectionPlaylistEmptyTitle": "La playlist est vide", - "@collectionPlaylistEmptyTitle": { - "description": "Playlist empty state title" + "trackGenre": "Genre", + "@trackGenre": { + "description": "Metadata label - music genre" }, - "libraryFilterSortLatest": "Le plus récent", - "@libraryFilterSortLatest": { - "description": "Sort option - newest first" + "trackLabel": "Label", + "@trackLabel": { + "description": "Metadata label - record label" }, - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" + "trackCopyright": "Droits d'auteur", + "@trackCopyright": { + "description": "Metadata label - copyright information" }, - "@selectionSelected": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDownloaded": "Téléchargé", + "@trackDownloaded": { + "description": "Metadata label - download date" }, - "@tracksCount": { - "description": "Track count display", + "trackCopyLyrics": "Copier les paroles", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsSource": "Source : {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", "placeholders": { - "count": { - "type": "int" + "source": { + "type": "String" } } }, - "@optionsCheckUpdates": { - "description": "Auto update check toggle" - }, - "@qualityHiResFlacMaxSubtitle": { - "description": "Technical spec for hi-res max" - }, - "actionStop": "Arrêter", - "@actionStop": { - "description": "Generic action - stop" - }, - "@selectionSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "folderOrganizationNoneSubtitle": "Tous les fichiers du dossier « Téléchargements »", - "@folderOrganizationNoneSubtitle": { - "description": "Subtitle for no organization option" - }, - "@updateDownloading": { - "description": "Update status - downloading" + "trackLyricsNotAvailable": "Les paroles de ce morceau ne sont pas disponibles", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" }, - "artistAlbums": "Albums", - "@artistAlbums": { - "description": "Section header for artist albums" + "trackLyricsNotInFile": "Aucune parole n'a été trouvée dans ce fichier", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" }, - "trackConvertDitherTriangular": "TPDF", - "@trackConvertDitherTriangular": { - "description": "Lossless conversion triangular probability density function dither option" + "trackFetchOnlineLyrics": "Télécharger depuis Internet", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" }, - "nowPlayingShuffleLibraryFailed": "Impossible de lire aléatoirement la bibliothèque : {error}", - "@nowPlayingShuffleLibraryFailed": { - "description": "Snackbar when shuffling the library fails", - "placeholders": { - "error": { - "type": "String" - } - } + "trackLyricsTimeout": "La requête a expiré. Veuillez réessayer plus tard.", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" }, - "@setupIcloudNotSupported": { - "description": "Error when user selects iCloud Drive on iOS" + "trackLyricsLoadFailed": "Impossible de charger les paroles", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" }, - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + "trackEmbedLyrics": "Intégrer les paroles", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" }, - "@extensionsProviderPrioritySection": { - "description": "Section header - provider priority" + "trackLyricsEmbedded": "Les paroles ont été intégrées avec succès", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" }, - "@libraryShowDuplicateIndicatorSubtitle": { - "description": "Subtitle for duplicate indicator toggle" + "trackInstrumental": "Morceau instrumental", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" }, - "sectionDuplicates": "Doublons", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" + "trackCopiedToClipboard": "Copié dans le presse-papiers", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" }, - "@backupTitle": { - "description": "App bar title for the backup and restore page" + "trackDeleteConfirmTitle": "Supprimer de l'appareil ?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" }, - "trackCoverReplaceNotice": "La pochette sélectionnée remplacera la pochette actuellement intégrée lorsque vous appuierez sur « Enregistrer ».", - "cacheSectionMaintenance": "Entretien", - "@cacheSectionMaintenance": { - "description": "Section header for cleanup actions" + "trackDeleteConfirmMessage": "Cela supprimera définitivement le fichier téléchargé et l'effacera de votre historique.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" }, - "@editMetadataFieldGenre": { - "description": "Chip label for genre field in auto-fill selector" + "dateToday": "Aujourd'hui", + "@dateToday": { + "description": "Relative date - today" }, - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" + "dateYesterday": "Hier", + "@dateYesterday": { + "description": "Relative date - yesterday" }, - "selectionBatchConvertConfirmMessage": "Convertir {count} {count, plural, =1{titre} other{titres}} au format {format} avec un débit binaire de {bitrate} ?\n\nLes fichiers d'origine seront supprimés après la conversion.", - "@selectionBatchConvertConfirmMessage": { - "description": "Confirmation dialog message for batch conversion", + "dateDaysAgo": "Il y a {count} jours", + "@dateDaysAgo": { + "description": "Relative date - days ago", "placeholders": { "count": { "type": "int" - }, - "format": { - "type": "String" - }, - "bitrate": { - "type": "String" } } }, - "@selectionTapPlaylistsToSelect": { - "description": "Hint shown in playlist selection mode" - }, - "qualityHiResFlacMaxSubtitle": "24 bits / jusqu'à 192 kHz", - "snackbarRemovedTracksFromLoved": "{count} titres supprimés des Favoris", - "@snackbarRemovedTracksFromLoved": { - "description": "Snackbar after removing multiple tracks from Loved folder", + "dateWeeksAgo": "Il y a {count} semaines", + "@dateWeeksAgo": { + "description": "Relative date - weeks ago", "placeholders": { "count": { "type": "int" } } }, - "folderOrganizationByArtistAlbum": "Artiste/Album", - "@folderOrganizationByArtistAlbum": { - "description": "Folder option - nested folders" - }, - "snackbarCannotOpenFile": "Impossible d'ouvrir le fichier : {error}", - "@snackbarCannotOpenFile": { - "description": "Snackbar - file open error", + "dateMonthsAgo": "Il y a {count} mois", + "@dateMonthsAgo": { + "description": "Relative date - months ago", "placeholders": { - "error": { - "type": "String" + "count": { + "type": "int" } } }, - "@optionsDetailedLoggingOff": { - "description": "Status when logging disabled" - }, - "@setupStorageDescription": { - "description": "Explanation for storage permission" - }, - "audioAnalysisCodec": "Codec", - "@regionCountryFR": { - "description": "Country name for SongLink region picker" - }, - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" + "storeFilterAll": "Tout", + "@storeFilterAll": { + "description": "Repo filter - all extensions" }, - "@libraryClearConfirmMessage": { - "description": "Dialog message for clear confirmation" + "storeFilterMetadata": "Métadonnées", + "@storeFilterMetadata": { + "description": "Repo filter - metadata providers" }, - "trackLyricsNotAvailable": "Les paroles de ce morceau ne sont pas disponibles", - "@trackLyricsNotAvailable": { - "description": "Message when lyrics not found" + "storeFilterDownload": "Télécharger", + "@storeFilterDownload": { + "description": "Repo filter - download providers" }, "storeFilterUtility": "Utilitaire", "@storeFilterUtility": { "description": "Repo filter - utility extensions" }, - "collectionAddedToPlaylist": "Ajouté à « {playlistName} »", - "@collectionAddedToPlaylist": { - "description": "Snackbar after adding track to playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "storeFilterLyrics": "Paroles", + "@storeFilterLyrics": { + "description": "Repo filter - lyrics providers" }, - "cacheClearConfirmTitle": "Vider le cache ?", - "@cacheClearConfirmTitle": { - "description": "Dialog title before clearing one cache category" + "storeFilterIntegration": "Intégration", + "@storeFilterIntegration": { + "description": "Repo filter - integrations" }, - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" + "storeClearFilters": "Effacer les filtres", + "@storeClearFilters": { + "description": "Button to clear all filters" }, - "@aboutMobileDeveloper": { - "description": "Role description for mobile dev" + "storeAddRepoTitle": "Ajouter un dépôt d'extensions", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" }, - "albumFolderYearAlbum": "[Année] Album", - "@albumFolderYearAlbum": { - "description": "Album folder option with year" + "storeAddRepoDescription": "Saisissez l'URL d'un dépôt GitHub contenant un fichier registry.json pour parcourir et installer des extensions.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" }, - "cacheTitle": "Stockage & Cache", - "@extensionPostProcessing": { - "description": "Capability - post-download processing" + "storeRepoUrlLabel": "URL du dépôt", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" }, - "extensionsNoMetadataProvider": "Aucune extension avec fournisseur de métadonnées", - "@extensionsNoMetadataProvider": { - "description": "Empty state - no metadata providers" + "storeRepoUrlHint": "https://github.com/user/repo", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" }, - "searchSortTitleZA": "Titre (Z-A)", - "@queueClearAllMessage": { - "description": "Clear queue confirmation" + "storeAddRepoButton": "Ajouter un dépôt", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" }, - "audioAnalysisTitle": "Analyse de la qualité audio", - "@audioAnalysisTitle": { - "description": "Title for audio analysis section" - }, - "@aboutReportIssueSubtitle": { - "description": "Subtitle for report issue" + "storeChangeRepoTooltip": "Changer de dépôt", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" }, - "@audioAnalysisSampleRate": { - "description": "Sample rate metric label" + "storeRepoDialogTitle": "Répertoire des extensions", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" }, - "@discographySelectedCount": { - "description": "Selection count badge", - "placeholders": { - "count": { - "type": "int" - } - } + "storeRepoDialogCurrent": "Dépôt actuel :", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" }, - "qualityFlacLosslessSubtitle": "16 bits / 44,1 kHz", - "@qualityFlacLosslessSubtitle": { - "description": "Technical spec for lossless" + "storeNewRepoUrlLabel": "Nouvelle URL du dépôt", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" }, - "libraryScanFinalizing": "Finalisation de la bibliothèque...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" + "storeLoadError": "Échec du chargement du dépôt", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" }, - "@trackEditMetadata": { - "description": "Menu action - edit embedded metadata" + "storeEmptyNoExtensions": "Aucune extension disponible", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" }, - "@downloadNeteaseIncludeRomanization": { - "description": "Setting to include romanized lyrics from Netease" + "storeEmptyNoResults": "Aucune extension trouvée", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" }, - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" + "extensionId": "Identifiant", + "@extensionId": { + "description": "Extension detail - unique ID" }, - "regionCountryDE": "Allemagne", - "@regionCountryDE": { - "description": "Country name for SongLink region picker" + "extensionError": "Erreur", + "@extensionError": { + "description": "Extension detail - error message" }, - "optionsAutoFallback": "Récupération automatique", - "@optionsAutoFallback": { - "description": "Auto-retry with other services" + "extensionCapabilities": "Fonctionnalités", + "@extensionCapabilities": { + "description": "Section header - extension features" }, - "@trackMetadataPlay": { - "description": "Action button - play track" + "extensionMetadataProvider": "Fournisseur de métadonnées", + "@extensionMetadataProvider": { + "description": "Capability - provides metadata" }, - "settingsFiles": "Fichiers & Dossiers", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" + "extensionDownloadProvider": "Fournisseur de téléchargement", + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" }, - "aboutMobileDeveloper": "Développeur de la version mobile", - "@trackDownloaded": { - "description": "Metadata label - download date" + "extensionLyricsProvider": "Fournisseur de paroles", + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" }, - "homeSkipAlreadyDownloaded": "Ignorer les morceaux déjà téléchargés", - "@homeSkipAlreadyDownloaded": { - "description": "Checkbox label in import dialog to skip already-downloaded songs" + "extensionUrlHandler": "Gestionnaire d'URL", + "@extensionUrlHandler": { + "description": "Capability - handles URLs" }, - "dialogUninstall": "Désinstaller", - "@dialogUninstall": { - "description": "Dialog button - uninstall extension" + "extensionQualityOptions": "Options de qualité", + "@extensionQualityOptions": { + "description": "Capability - quality selection" }, - "collectionDeletePlaylist": "Supprimer la playlist", - "@collectionDeletePlaylist": { - "description": "Action to delete playlist" + "extensionPostProcessingHooks": "Crochets de post-traitement", + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" }, - "trackCoverOnline": "Pochette en ligne", - "@trackCoverOnline": { - "description": "Label shown when metadata autofill downloaded cover art from the internet" + "extensionPermissions": "Autorisations", + "@extensionPermissions": { + "description": "Section header - required permissions" }, - "downloadTitle": "Télécharger", - "@downloadTitle": { - "description": "Download settings page title" + "extensionSettings": "Paramètres", + "@extensionSettings": { + "description": "Section header - extension settings" }, - "searchArtists": "Artistes", - "@searchArtists": { - "description": "Search result category - artists" + "extensionRemoveButton": "Supprimer l'extension", + "@extensionRemoveButton": { + "description": "Button to uninstall extension" }, - "extensionUrlHandler": "Gestionnaire d'URL", - "@extensionUrlHandler": { - "description": "Capability - handles URLs" + "extensionUpdated": "Mis à jour", + "@extensionUpdated": { + "description": "Extension detail - last update" }, - "@timeHoursAgo": { - "description": "Relative time - hours ago", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionMinAppVersion": "Version minimale de l'application", + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" }, - "editMetadataAdvanced": "Avancé", - "@editMetadataAdvanced": { - "description": "Expandable section label for advanced metadata fields" + "extensionCustomTrackMatching": "Correspondance personnalisée des pistes", + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" }, - "@actionSelectAll": { - "description": "Action button - select all items" + "extensionPostProcessing": "Post-traitement", + "@extensionPostProcessing": { + "description": "Capability - post-download processing" }, - "timeMinutesAgo": "{count, plural, =1{il y a 1 minute} other{il y a {count} minutes}}", - "@timeMinutesAgo": { - "description": "Relative time - minutes ago", + "extensionHooksAvailable": "{count} crochet(s) disponibles", + "@extensionHooksAvailable": { + "description": "Post-processing hooks count", "placeholders": { "count": { "type": "int" } } }, - "regionCountryXK": "Kosovo", - "@downloadAskQualitySubtitle": { - "description": "Subtitle for ask quality toggle" - }, - "setupLanguageSystemDefault": "Paramètres par défaut du système", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "@updateAvailable": { - "description": "Update dialog title" - }, - "cacheEntries": "{count} entrées", - "@cacheEntries": { - "description": "Track cache entry count", + "extensionPatternsCount": "{count} motif(s)", + "@extensionPatternsCount": { + "description": "URL patterns count", "placeholders": { "count": { "type": "int" } } }, - "@notifLibraryScanExcluded": { - "description": "Library scan complete suffix - excluded track count", + "extensionStrategy": "Stratégie : {strategy}", + "@extensionStrategy": { + "description": "Track matching strategy name", "placeholders": { - "count": { - "type": "int" + "strategy": { + "type": "String" } } }, - "extensionsMetadataPrioritySubtitle": "Définissez l'ordre des sources de recherche et de métadonnées", - "@extensionsMetadataPrioritySubtitle": { - "description": "Subtitle for metadata priority" + "extensionsProviderPrioritySection": "Priorité accordée aux prestataires", + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" }, - "downloadedAlbumSelectToDelete": "Sélectionnez les pistes à supprimer", - "@downloadedAlbumSelectToDelete": { - "description": "Placeholder when nothing selected" + "extensionsInstalledSection": "Extensions installées", + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" }, - "@dialogClearHistoryTitle": { - "description": "Dialog title - clear download history" + "extensionsNoExtensions": "Aucune extension installée", + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" }, - "tutorialSettingsTip1": "Modifier l'emplacement de téléchargement et l'organisation des dossiers", - "@tutorialSettingsTip1": { - "description": "Tutorial settings tip 1" + "extensionsNoExtensionsSubtitle": "Installez les fichiers .spotiflac-ext pour ajouter de nouveaux fournisseurs", + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, + "extensionsInstallButton": "Installer l'extension", + "@extensionsInstallButton": { + "description": "Button to install extension from file" + }, + "extensionsInfoTip": "Les extensions permettent d'ajouter de nouvelles métadonnées et de nouveaux fournisseurs de téléchargement. N'installez que des extensions provenant de sources fiables.", + "@extensionsInfoTip": { + "description": "Security warning about extensions" }, + "extensionsInstalledSuccess": "L'extension a été installée avec succès", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "allFilesAccessDisabledSubtitle": "Réservé aux dossiers multimédias uniquement", - "@allFilesAccessDisabledSubtitle": { - "description": "Subtitle when all files access is disabled" - }, - "@appearanceHistoryViewList": { - "description": "List layout option" + "extensionsInstalledCount": "{count} extensions ont été installées avec succès", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } }, - "@notifAlreadyInLibraryCount": { - "description": "Notification title when track is already in library, with count", + "extensionsInstallPartialSuccess": "{installed} extensions sur {attempted}", + "@extensionsInstallPartialSuccess": { + "description": "Message when installing multiple extensions partially succeeds", "placeholders": { - "completed": { - "type": "int" + "installed": { + "type": "int", + "description": "Number of successfully installed extensions" }, - "total": { - "type": "int" + "attempted": { + "type": "int", + "description": "Number of selected extensions" } } }, - "@libraryFilterAll": { - "description": "Filter chip - show all library items" - }, - "settingsDownload": "Télécharger", - "settingsFilesSubtitle": "Emplacement de téléchargement, nom de fichier, structure des dossiers", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" + "extensionsDownloadPriority": "Priorité de téléchargement", + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" }, - "@libraryFilterSort": { - "description": "Filter section - sort order" + "extensionsDownloadPrioritySubtitle": "Définissez l'ordre des services de téléchargement", + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" }, - "metadataProvidersSubtitle": "Faites glisser pour définir l'ordre des sources de recherche et de métadonnées", - "@extensionPermissions": { - "description": "Section header - required permissions" + "extensionsFallbackTitle": "Extensions de secours", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "selectionSelectToDelete": "Sélectionnez les titres à supprimer", - "@libraryExternalPlayerSubtitle": { - "description": "Subtitle for external player option" + "extensionsFallbackSubtitle": "Choisissez les extensions de téléchargement installées qui peuvent servir de solution de secours", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" }, - "extensionVerificationOpenBrowser": "Ouvrir le navigateur", - "@extensionVerificationOpenBrowser": { - "description": "Button to open the extension verification URL in a browser" + "extensionsNoDownloadProvider": "Aucune extension avec le fournisseur de téléchargement", + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" }, - "@trackConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless-to-lossless conversion", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionsMetadataPriority": "Priorité des métadonnées", + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" }, - "@snackbarAddedTracksToQueue": { - "description": "Snackbar - multiple tracks added to queue", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsMetadataPrioritySubtitle": "Définissez l'ordre des sources de recherche et de métadonnées", + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" }, - "@backupContentsWishlist": { - "description": "Backup contents row for wishlist tracks count", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsNoMetadataProvider": "Aucune extension avec fournisseur de métadonnées", + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" }, - "@cacheCleanupUnusedSubtitle": { - "description": "Subtitle for cleanup unused data action" + "extensionsSearchProvider": "Moteur de recherche", + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" }, - "trackLabel": "Label", - "@trackLabel": { - "description": "Metadata label - record label" + "extensionsNoCustomSearch": "Aucune extension avec recherche personnalisée", + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" }, - "@collectionAddedToLoved": { - "description": "Snackbar after adding track to loved folder", - "placeholders": { - "trackName": { - "type": "String" - } - } + "extensionsSearchProviderDescription": "Choisissez le service que vous souhaitez utiliser pour rechercher des morceaux", + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" }, - "regionCountryGB": "Royaume-Uni", - "dialogCancel": "Annuler", - "@dialogCancel": { - "description": "Dialog button - cancel action" + "extensionsCustomSearch": "Recherche personnalisée", + "@extensionsCustomSearch": { + "description": "Label for custom search provider" }, - "@folderOrganizationByArtistAlbumSubtitle": { - "description": "Subtitle for nested folder option" + "extensionsErrorLoading": "Erreur lors du chargement de l'extension", + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" }, - "@notifAllDownloadsComplete": { - "description": "Notification title when all downloads finish successfully" + "qualityFlacLossless": "FLAC sans perte", + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" }, - "setupEnableNotifications": "Activer les notifications", - "@setupEnableNotifications": { - "description": "Button to enable notifications" + "qualityFlacLosslessSubtitle": "16 bits / 44,1 kHz", + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" }, - "@notifFinalizingTrack": { - "description": "Notification title while finalizing (embedding metadata) a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "qualityHiResFlac": "FLAC haute résolution", + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" }, - "@downloadLossy320FormatDesc": { - "description": "Description in the lossy format picker" + "qualityHiResFlacSubtitle": "24 bits / jusqu'à 96 kHz", + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" }, - "filenameFormat": "Format des noms de fichiers", - "@filenameFormat": { - "description": "Setting title - filename pattern" + "qualityHiResFlacMax": "FLAC haute résolution Max", + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" }, - "historySearchHint": "Historique de recherche...", - "@historySearchHint": { - "description": "Search bar placeholder in history" + "qualityHiResFlacMaxSubtitle": "24 bits / jusqu'à 192 kHz", + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" }, - "@tutorialReadyMessage": { - "description": "Tutorial completion message" + "downloadLossy320": "Compression avec perte à 320 kbps", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" }, - "cacheTempDirectoryDesc": "Fichiers temporaires liés aux téléchargements et à la conversion audio.", - "@cacheTempDirectoryDesc": { - "description": "Description of what temporary directory contains" + "downloadLossyFormat": "Format avec perte", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" }, - "@trackSaveLyrics": { - "description": "Menu action - save lyrics as .lrc file" + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" }, - "@notifDownloadsFinished": { - "description": "Notification title when queue finishes with some failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" }, - "@historyFilterAlbums": { - "description": "Filter chip - show albums only" + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" }, - "trackEmbedLyrics": "Intégrer les paroles", - "@trackEmbedLyrics": { - "description": "Action - embed lyrics into audio file" + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" }, - "@downloadPrimaryArtistOnlyOff": { - "description": "Status label when primary-artist-only folder naming is disabled" + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" }, - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" }, - "snackbarHistoryCleared": "Historique effacé", - "downloadNetworkCompatibilityModeDisabled": "Utilisation des paramètres réseau par défaut", - "@artistPopular": { - "description": "Section header for popular/top tracks" + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" }, - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" }, - "extensionLyricsProvider": "Fournisseur de paroles", - "@extensionLyricsProvider": { - "description": "Capability - provides lyrics" + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" }, - "historyFilterAll": "Tous", - "@historyFilterAll": { - "description": "Filter chip - show all items" + "downloadLossy320Format": "Format avec perte à 320 kbps", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" }, - "tutorialSearchTitle": "Trouver de la musique", - "@lyricsModeExternal": { - "description": "Lyrics mode option - separate LRC file" + "downloadLossy320FormatDesc": "Choisissez le format de sortie pour les téléchargements avec perte à 320 kbps. Le flux d'origine sera converti au format que vous aurez sélectionné lorsque cela sera nécessaire.", + "@downloadLossy320FormatDesc": { + "description": "Description in the lossy format picker" }, - "@actionDismiss": { - "description": "Generic action - dismiss" + "downloadLossyMp3": "MP3 320 kbps", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" }, - "trackOpenInSpotify": "Ouvrir dans Spotify", - "@trackOpenInSpotify": { - "description": "Action - open track in Spotify app" + "downloadLossyMp3Subtitle": "Compatibilité optimale, environ 10 Mo par piste", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" }, - "@libraryClear": { - "description": "Button to clear all library entries" + "downloadLossyAac": "AAC/M4A 320 kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "discographyFailedToFetch": "Impossible de récupérer certains albums", - "@filenameShowAdvancedTagsDescription": { - "description": "Description for advanced filename tag toggle" + "downloadLossyAacSubtitle": "Compatibilité optimale avec les appareils mobiles, format M4A", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" }, - "@storeUpdate": { - "description": "Update available button" + "downloadLossyOpus256": "Opus 256 kbps", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" }, - "collectionPlaylistTracks": "{count, plural, =1{1 titre} other{{count} titres}}", - "@collectionPlaylistTracks": { - "description": "Track count label for custom playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadLossyOpus256Subtitle": "Opus en qualité optimale, environ 8 Mo par piste", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" }, - "optionsPrimaryProviderSubtitle": "Service permettant d'effectuer une recherche par titre de morceau ou d'album", - "@optionsPrimaryProviderSubtitle": { - "description": "Subtitle for primary provider" + "downloadLossyOpus128": "Opus 128 kbps", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" }, - "@downloadEmbedLyricsDisabled": { - "description": "Subtitle when lyrics embedding is blocked by metadata toggle" + "downloadLossyOpus128Subtitle": "Taille minimale : environ 4 Mo par piste", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" }, - "@librarySourceLocal": { - "description": "Badge for tracks from local library scan" + "downloadAskBeforeDownload": "Demander avant de télécharger", + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" }, - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" + "downloadDirectory": "Répertoire de téléchargement", + "@downloadDirectory": { + "description": "Setting - download folder" }, - "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is off" + "downloadSeparateSinglesFolder": "Dossier dédié aux titres individuels", + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" }, - "queueDownloadingCount": "Téléchargement ({count})", - "@queueDownloadingCount": { - "description": "Header for active downloads section with count", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAlbumFolderStructure": "Structure du dossier de l'album", + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" }, - "extensionVerificationBrowserInApp": "Dans l'application", - "trackAudioQuality": "Qualité audio", - "@trackAudioQuality": { - "description": "Metadata label - audio quality" - }, - "libraryRemovedMissingFiles": "{count} fichiers manquants ont été supprimés de la bibliothèque", - "@libraryRemovedMissingFiles": { - "description": "Snackbar after cleanup", - "placeholders": { - "count": { - "type": "int" - } - } + "albumFolderStructureDescription": "Choisissez la structure des dossiers d'albums", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" }, - "collectionFavoriteArtistsEmptyTitle": "Pas encore d'artistes préférés", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" + "downloadUseAlbumArtistForFolders": "Utilisez l'artiste de l'album pour les dossiers", + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "@errorInvalidFolderSelected": { - "description": "Error when the selected folder is invalid" + "downloadUsePrimaryArtistOnly": "Artiste principal uniquement pour les dossiers", + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" }, - "@searchSortArtistZA": { - "description": "Sort option - artist descending" + "downloadUsePrimaryArtistOnlyEnabled": "Les noms des artistes mis en avant ont été supprimés du nom du dossier (par exemple : Justin Bieber, Quavo → Justin Bieber)", + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" }, - "snackbarAddedTracksToLoved": "{count} titres ajoutés aux Favoris", - "@snackbarAddedTracksToLoved": { - "description": "Snackbar after adding multiple tracks to Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadUsePrimaryArtistOnlyDisabled": "Nom complet de l'artiste utilisé pour le nom du dossier", + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" }, - "cancelDownloadContent": "Cela annulera le téléchargement en cours de « {trackName} ».", - "@cancelDownloadContent": { - "description": "Dialog body when confirming cancellation of an active download", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadSelectQuality": "Sélectionner la qualité", + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" }, - "settingsCacheSubtitle": "Afficher la taille et vider le cache", - "@settingsCacheSubtitle": { - "description": "Subtitle for cache management menu" + "downloadFrom": "Télécharger depuis", + "@downloadFrom": { + "description": "Label - download source" }, - "notifLibraryScanCompleteBody": "{count} titres indexés", - "@cacheSizeWithFiles": { - "description": "Cache size and file count", - "placeholders": { - "size": { - "type": "String" - }, - "count": { - "type": "int" - } - } + "appearanceAmoledDark": "Noir Amoled", + "@appearanceAmoledDark": { + "description": "Theme option - pure black" }, - "@downloadAskBeforeDownload": { - "description": "Setting - show quality picker" + "appearanceAmoledDarkSubtitle": "Fond noir pur", + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" }, - "@extensionHealthDegraded": { - "description": "Extension service health status - degraded" + "appearanceHeroAnimations": "Animations des héros", + "@appearanceHeroAnimations": { + "description": "Toggle for shared-element (Hero) transitions" }, - "@sectionPerformance": { - "description": "Settings section header" + "appearanceHeroAnimationsSubtitle": "Des fenêtres contextuelles apparaissent entre les écrans, par exemple lors de l'ouverture du lecteur", + "@appearanceHeroAnimationsSubtitle": { + "description": "Subtitle for the Hero animations toggle" }, - "@trackCoverCurrent": { - "description": "Label for the currently embedded cover preview" + "appearanceForceBlur": "Utilisez toujours des effets de flou", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" }, - "discographySelectAlbums": "Sélectionner des albums...", - "@discographySelectAlbums": { - "description": "Option - manually select albums to download" + "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" }, - "aboutAppDescription": "Recherchez des métadonnées musicales, gérez les extensions et organisez votre bibliothèque.", - "@aboutAppDescription": { - "description": "App description in header card" + "queueClearAll": "Tout effacer", + "@queueClearAll": { + "description": "Button - clear all queue items" }, - "extensionCustomTrackMatching": "Correspondance personnalisée des pistes", - "@extensionCustomTrackMatching": { - "description": "Capability - custom track matching algorithm" + "queueClearAllMessage": "Êtes-vous sûr de vouloir supprimer tous les fichiers téléchargés ?", + "@queueClearAllMessage": { + "description": "Clear queue confirmation" }, - "@editMetadataSelectNone": { - "description": "Button to clear selected fields for auto-fill" + "settingsAutoExportFailed": "Échec de l'exportation automatique des téléchargements", + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" }, - "@trackPlayNext": { - "description": "Menu action to play a track as the next queue item" + "settingsAutoExportFailedSubtitle": "Enregistrez automatiquement les téléchargements ayant échoué dans un fichier TXT", + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" }, - "extensionCapabilities": "Fonctionnalités", - "@extensionCapabilities": { - "description": "Section header - extension features" + "settingsDownloadNetwork": "Réseau de téléchargement", + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" }, - "@downloadSelectServiceToEnable": { - "description": "Subtitle when quality picker is disabled due to extension service" + "settingsDownloadNetworkAny": "Wi-Fi + données mobiles", + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" }, - "logIssueRateLimitedDescription": "Trop de requêtes adressées au service", - "@logIssueRateLimitedDescription": { - "description": "Diagnostic badge description for rate limiting" + "settingsDownloadNetworkWifiOnly": "Wi-Fi uniquement", + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" }, - "@actionResume": { - "description": "Action button - resume download" + "settingsDownloadNetworkSubtitle": "Choisissez le réseau à utiliser pour les téléchargements. Si vous sélectionnez « Wi-Fi uniquement », les téléchargements seront interrompus lorsque vous utilisez les données mobiles.", + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" }, - "@updateDownloadInstall": { - "description": "Update button - download and install" + "settingsConcurrentDownloads": "Téléchargements simultanés", + "@settingsConcurrentDownloads": { + "description": "Setting title - how many tracks download at the same time" }, - "downloadLossy320Format": "Format avec perte à 320 kbps", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" + "settingsConcurrentDownloadsSubtitle": "Le téléchargement simultané de plusieurs titres est plus rapide, mais certains fournisseurs peuvent limiter le débit des requêtes parallèles.", + "@settingsConcurrentDownloadsSubtitle": { + "description": "Subtitle explaining the concurrent downloads picker" }, - "settingsMetadataSubtitle": "Pochettes, balises, ReplayGain, fournisseurs", - "@trackCopyright": { - "description": "Metadata label - copyright information" + "concurrentDownloadsOne": "1 titre à la fois", + "@concurrentDownloadsOne": { + "description": "Concurrent downloads option - sequential" }, - "@snackbarExtensionInstalled": { - "description": "Snackbar - extension installed successfully", + "concurrentDownloadsCount": "Jusqu'à {count} titres à la fois", + "@concurrentDownloadsCount": { + "description": "Concurrent downloads option - parallel", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "@regionCountryJP": { - "description": "Country name for SongLink region picker" + "albumFolderArtistAlbum": "Artiste / Album", + "@albumFolderArtistAlbum": { + "description": "Album folder option" }, - "trackReEnrichOnlineSubtitle": "Rechercher des métadonnées en ligne et les intégrer dans un fichier", - "@trackReEnrichOnlineSubtitle": { - "description": "Subtitle for re-enrich metadata action for local items" + "albumFolderArtistAlbumSubtitle": "Albums/Nom de l'artiste/Titre de l'album/", + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" }, - "nowPlayingNothingPlaying": "Il n'y a rien à l'écran", - "@nowPlayingNothingPlaying": { - "description": "Empty state when no track is currently playing" + "albumFolderArtistYearAlbum": "Artiste / [Année] Album", + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", - "@tutorialDownloadDesc": { - "description": "Tutorial download page description" + "albumFolderArtistYearAlbumSubtitle": "Albums/Nom de l'artiste/[2005] Nom de l'album/", + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" }, - "@appearanceTitle": { - "description": "Appearance settings page title" + "albumFolderAlbumOnly": "Album uniquement", + "@albumFolderAlbumOnly": { + "description": "Album folder option" }, - "@backupExportSectionDescription": { - "description": "Description of what a backup contains" + "albumFolderAlbumOnlySubtitle": "Albums/Nom de l'album/", + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" }, - "@downloadLossyOpus128": { - "description": "Lossy format option - Opus 128kbps" + "albumFolderYearAlbum": "[Année] Album", + "@albumFolderYearAlbum": { + "description": "Album folder option with year" }, - "@logFilterSection": { - "description": "Filter section title" + "albumFolderYearAlbumSubtitle": "Albums/[2005] Titre de l'album/", + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" }, - "trackReEnrichSuccess": "Métadonnées réenrichies avec succès", - "@trackReEnrichSuccess": { - "description": "Snackbar after successful re-enrichment" + "albumFolderArtistAlbumSingles": "Artiste / Album + Singles", + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" }, - "backupContentsHistory": "{count} historique {count, plural, =1{élément} other{éléments}}", - "@backupContentsHistory": { - "description": "Backup contents row for history count", + "albumFolderArtistAlbumSinglesSubtitle": "Artiste/Album/ et Artiste/Singles/", + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistAlbumFlat": "Artiste / Album (singles)", + "@albumFolderArtistAlbumFlat": { + "description": "Album folder option with singles directly in artist folder" + }, + "albumFolderArtistAlbumFlatSubtitle": "Artiste/Album/ et Artiste/titre.flac", + "@albumFolderArtistAlbumFlatSubtitle": { + "description": "Folder structure example for flat singles" + }, + "downloadedAlbumDeleteSelected": "Supprimer la sélection", + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" + }, + "downloadedAlbumDeleteMessage": "Souhaitez-vous supprimer {count} {count, plural, =1{piste} other{pistes}} de cet album ?\n\nCela supprimera également les fichiers de l'espace de stockage.", + "@downloadedAlbumDeleteMessage": { + "description": "Delete confirmation with count", "placeholders": { "count": { "type": "int" } } }, - "snackbarAddedToQueue": "Ajout de « {trackName} » à la file d'attente", - "@snackbarAddedToQueue": { - "description": "Snackbar - track added to download queue", + "downloadedAlbumSelectedCount": "{count} sélectionnés", + "@downloadedAlbumSelectedCount": { + "description": "Selection count indicator", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "libraryAutoScanOnOpen": "À chaque ouverture de l'application", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "audioAnalysisChannels": "Chaînes", - "@audioAnalysisChannels": { - "description": "Channels metric label" + "downloadedAlbumTapToSelect": "Appuyez sur les titres pour les sélectionner", + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" }, - "appearanceHistoryViewList": "Liste", - "updateDownloadInstall": "Télécharger & Installer", - "@libraryShowDuplicateIndicator": { - "description": "Toggle for duplicate indicator in search" - }, - "extensionsHomeFeedOff": "Désactivé", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "searchSortTitleAZ": "Titre (A-Z)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "collectionRemovedFromLoved": "\"{trackName}\" supprimé des Favoris", - "@collectionRemovedFromLoved": { - "description": "Snackbar after removing track from loved folder", + "downloadedAlbumDeleteCount": "Supprimer {count} {count, plural, =1{piste} other{pistes}}", + "@downloadedAlbumDeleteCount": { + "description": "Delete button text with count", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "sectionAudioQuality": "Qualité audio", - "@sectionAudioQuality": { - "description": "Settings section header" + "downloadedAlbumSelectToDelete": "Sélectionnez les pistes à supprimer", + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" }, - "trackConvertSuccess": "Conversion vers {format} réussie", - "@trackConvertSuccess": { - "description": "Snackbar after successful conversion", + "downloadedAlbumDiscHeader": "Disque {discNumber}", + "@downloadedAlbumDiscHeader": { + "description": "Header for disc separator in multi-disc albums", "placeholders": { - "format": { - "type": "String" + "discNumber": { + "type": "int", + "example": "1" } } }, - "dialogUninstallExtensionMessage": "Êtes-vous sûr de vouloir supprimer {extensionName} ?", - "@dialogUninstallExtensionMessage": { - "description": "Dialog message - uninstall specific extension", + "recentTypeArtist": "Artiste", + "@recentTypeArtist": { + "description": "Recent access item type - artist" + }, + "recentTypeAlbum": "Album", + "@recentTypeAlbum": { + "description": "Recent access item type - album" + }, + "recentTypeSong": "Titre", + "@recentTypeSong": { + "description": "Recent access item type - song/track" + }, + "recentTypePlaylist": "Playlist", + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" + }, + "recentEmpty": "Aucun élément récent pour le moment", + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, + "recentShowAllDownloads": "Afficher tous les téléchargements", + "@recentShowAllDownloads": { + "description": "Button label to unhide hidden downloads in recent access" + }, + "recentPlaylistInfo": "Playlist : {name}", + "@recentPlaylistInfo": { + "description": "Snackbar message when tapping playlist in recent access", "placeholders": { - "extensionName": { - "type": "String" + "name": { + "type": "String", + "description": "Playlist name" } } }, - "downloadNativeWorkerSubtitle": "Service Android en arrière-plan pour les téléchargements d'extensions", - "@downloadNativeWorkerSubtitle": { - "description": "Setting subtitle for Android native download worker" + "discographyDownload": "Télécharger la discographie", + "@discographyDownload": { + "description": "Button - download artist discography" }, - "storeUpdate": "Mettre à jour", - "libraryFilterMetadataMissingAny": "Métadonnées manquantes", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" + "discographyDownloadAll": "Tout télécharger", + "@discographyDownloadAll": { + "description": "Option - download entire discography" }, - "@selectionBatchConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless batch conversion", + "discographyDownloadAllSubtitle": "{count} titres issus de {albumCount} albums", + "@discographyDownloadAllSubtitle": { + "description": "Subtitle showing total tracks and albums", "placeholders": { "count": { "type": "int" }, - "format": { - "type": "String" - }, - "quality": { - "type": "String" + "albumCount": { + "type": "int" } } }, - "editMetadataAutoFillDesc": "Choisissez une extension de métadonnées, sélectionnez les champs, puis vérifiez les données avant de l'appliquer", - "@editMetadataAutoFillDesc": { - "description": "Description for the auto-fill section" - }, - "@lyricsProviderExtensionDesc": { - "description": "Generic description for extension-based lyrics providers" - }, - "downloadSongLinkRegion": "Région SongLink", - "@downloadSongLinkRegion": { - "description": "Setting for SongLink region used during fallback resolution" - }, - "shareSheetNoExtensions": "Aucun autre service compatible", - "@shareSheetNoExtensions": { - "description": "Empty state when no extensions can be searched for cross-service links" + "discographyAlbumsOnly": "Albums uniquement", + "@discographyAlbumsOnly": { + "description": "Option - download only albums" }, - "queueFlacConfirmMessage": "Recherchez en ligne les correspondances pour les morceaux sélectionnés et ajoutez les téléchargements FLAC à la file d'attente.\n\nLes fichiers existants ne seront ni modifiés ni supprimés.\n\nSeules les correspondances hautement fiables sont automatiquement ajoutées à la file d'attente.\n\n{count} sélectionnés", - "@queueFlacConfirmMessage": { - "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", + "discographyAlbumsOnlySubtitle": "{count} titres issus de {albumCount} albums", + "@discographyAlbumsOnlySubtitle": { + "description": "Subtitle showing album tracks count", "placeholders": { "count": { "type": "int" + }, + "albumCount": { + "type": "int" } } }, - "tooltipAddToPlaylist": "Ajouter à la playlist", - "@tooltipAddToPlaylist": { - "description": "Tooltip for the Add to Playlist button" + "discographySinglesOnly": "Uniquement les singles et les EP", + "@discographySinglesOnly": { + "description": "Option - download only singles" }, - "@snackbarAddedToQueueGeneric": { - "description": "Snackbar when a track is added to the playback queue without naming it" + "discographySinglesOnlySubtitle": "{count} titres issus de {albumCount} singles", + "@discographySinglesOnlySubtitle": { + "description": "Subtitle showing singles tracks count", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } }, - "@tutorialSettingsTip2": { - "description": "Tutorial settings tip 2" + "discographySelectAlbums": "Sélectionner des albums...", + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" }, - "extensionPermissions": "Autorisations", - "releaseTypeSingle": "Single", - "aboutTelegramChannelSubtitle": "Annonces et mises à jour", - "@aboutTelegramChannelSubtitle": { - "description": "Subtitle for Telegram channel" + "discographySelectAlbumsSubtitle": "Choisissez des albums ou des titres spécifiques", + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" }, - "@dialogDisableAndClear": { - "description": "Confirmation action to disable download history and clear existing entries" + "discographyFetchingTracks": "Chargement des pistes...", + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" }, - "@homeSearchHintProvider": { - "description": "Placeholder for the main search field when a provider is selected", + "discographyFetchingAlbum": "Récupération de {current} sur {total}...", + "@discographyFetchingAlbum": { + "description": "Progress - fetching specific album", "placeholders": { - "providerName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "metadataProvidersTitle": "Priorité des fournisseurs de métadonnées", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "trackAddToQueue": "Ajouter à la file d'attente", - "audioAnalysisDecodedFormat": "Format décodé", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" + "discographySelectedCount": "{count} sélectionnés", + "@discographySelectedCount": { + "description": "Selection count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@editMetadataSelectEmpty": { - "description": "Button to select only fields that are currently empty" + "discographyDownloadSelected": "Télécharger la sélection", + "@discographyDownloadSelected": { + "description": "Button - download selected albums" }, - "collectionAlreadyInPlaylist": "Déjà présent dans « {playlistName} »", - "discographyAlbumsOnlySubtitle": "{count} titres issus de {albumCount} albums", - "@discographyAlbumsOnlySubtitle": { - "description": "Subtitle showing album tracks count", + "discographyAddedToQueue": "{count} titres ont été ajoutés à la file d'attente", + "@discographyAddedToQueue": { + "description": "Snackbar - tracks added from discography", "placeholders": { "count": { "type": "int" + } + } + }, + "discographySkippedDownloaded": "{added} ajouté, {skipped} déjà téléchargé", + "@discographySkippedDownloaded": { + "description": "Snackbar - with skipped tracks count", + "placeholders": { + "added": { + "type": "int" }, - "albumCount": { + "skipped": { "type": "int" } } }, - "setupNotificationEnable": "Activer les notifications", - "@setupNotificationEnable": { - "description": "Button to enable notifications" + "discographyNoAlbums": "Aucun album disponible", + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" }, - "settingsAppearanceSubtitle": "Thème, couleurs, affichage", - "@settingsAppearanceSubtitle": { - "description": "Appearance settings description" + "discographyFailedToFetch": "Impossible de récupérer certains albums", + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" }, - "@notifUpdateFailedBody": { - "description": "Notification body when app update download fails" + "sectionStorageAccess": "Accès au stockage", + "@sectionStorageAccess": { + "description": "Section header for storage access settings" }, - "@aboutOriginalCreator": { - "description": "Role description for original creator" + "allFilesAccess": "Accès à tous les fichiers", + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "libraryBuiltInPreviewPlayer": "Lecteur de prévisualisation intégré", - "@libraryBuiltInPreviewPlayer": { - "description": "Setting option to use the built-in preview player" + "allFilesAccessEnabledSubtitle": "Peut écrire dans n'importe quel dossier", + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" }, - "tooltipPlay": "Lecture", - "@tooltipPlay": { - "description": "Tooltip - play button" + "allFilesAccessDisabledSubtitle": "Réservé aux dossiers multimédias uniquement", + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" }, - "@safMigrationMessage2": { - "description": "Second paragraph of SAF migration dialog" + "allFilesAccessDescription": "Activez cette option si vous rencontrez des erreurs d'écriture lors de l'enregistrement dans des dossiers personnalisés. À partir d'Android 13, l'accès à certains répertoires est restreint par défaut.", + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" }, - "@extensionsSearchProvider": { - "description": "Setting - search provider selection" + "allFilesAccessDeniedMessage": "L'autorisation a été refusée. Veuillez activer manuellement l'option « Accès à tous les fichiers » dans les paramètres système.", + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" }, - "libraryAboutDescription": "Analyse votre bibliothèque musicale existante pour détecter les doublons lors du téléchargement. Prend en charge les formats FLAC, M4A, MP3, Opus et OGG. Les métadonnées sont extraites des balises des fichiers lorsqu'elles sont disponibles.", - "@libraryAboutDescription": { - "description": "Description of local library feature" + "allFilesAccessDisabledMessage": "L'accès à tous les fichiers est désactivé. L'application disposera d'un accès limité au stockage.", + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" }, - "downloadAskBeforeDownload": "Demander avant de télécharger", - "nowPlayingNoMetadata": "Aucune métadonnée disponible", - "@nowPlayingNoMetadata": { - "description": "Empty state when track metadata cannot be loaded" + "settingsLocalLibrary": "Bibliothèque locale", + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" }, - "trackInstrumental": "Morceau instrumental", - "@trackInstrumental": { - "description": "Message when track is instrumental (no lyrics)" + "settingsLocalLibrarySubtitle": "Analysez la musique et détectez les doublons", + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" }, - "@collectionWishlistEmptyTitle": { - "description": "Wishlist empty state title" + "settingsCache": "Stockage & Cache", + "@settingsCache": { + "description": "Settings menu item - cache management" }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convertir {count} {count, plural, =1{titre} other{titres}} en {format} ({quality}) ?\n\nLe fichier de sortie conservera un codec sans perte, mais la profondeur de bits et la fréquence d'échantillonnage seront limitées. Les fichiers d'origine seront supprimés après la conversion.", - "downloadDeduplication": "Éviter les téléchargements en double", - "libraryFilterSortOldest": "Le plus ancien", - "@libraryFilterSortOldest": { - "description": "Sort option - oldest first" + "settingsCacheSubtitle": "Afficher la taille et vider le cache", + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" }, - "setupSkip": "Ignorer pour le moment", - "@setupSkip": { - "description": "Skip current step button" + "libraryTitle": "Bibliothèque locale", + "@libraryTitle": { + "description": "Library settings page title" }, - "@setupFolderDescription": { - "description": "Explanation for folder selection" + "libraryScanSettings": "Paramètres de numérisation", + "@libraryScanSettings": { + "description": "Section header for scan settings" }, - "@settingsLogsSubtitle": { - "description": "Logs settings description" + "libraryEnableLocalLibrary": "Activer la bibliothèque locale", + "@libraryEnableLocalLibrary": { + "description": "Toggle to enable library scanning" }, - "storeNewRepoUrlLabel": "Nouvelle URL du dépôt", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" + "libraryEnableLocalLibrarySubtitle": "Analysez et gérez votre bibliothèque musicale", + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" }, - "cacheClearConfirmMessage": "Cette opération effacera les données mises en cache pour {target}. Les fichiers musicaux téléchargés ne seront pas supprimés.", - "@cacheClearConfirmMessage": { - "description": "Dialog message before clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "libraryFolder": "Dossier de bibliothèque", + "@libraryFolder": { + "description": "Folder selection setting" }, - "trackMetadataPlay": "Lire", - "@libraryEnableLocalLibrary": { - "description": "Toggle to enable library scanning" + "libraryFolderHint": "Appuyez pour sélectionner un dossier", + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" }, - "optionsUpdateChannel": "Chaîne de mise à jour", - "@optionsUpdateChannel": { - "description": "Stable vs preview releases" + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" }, - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist folder is disabled" + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" }, - "@extensionRefreshStatus": { - "description": "Tooltip for refreshing extension service health status" + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" }, - "backupRestoreRestartHint": "Redémarrez l'application pour vous assurer que toutes les modifications ont bien été prises en compte.", - "@backupRestoreRestartHint": { - "description": "Hint shown after restoring that an app restart is recommended" + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" }, - "@snackbarExtensionInstalledEnable": { - "description": "Snackbar after installing an extension from the repo tab", + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", "placeholders": { - "extensionName": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { "type": "String" } } }, - "settingsAutoExportFailedSubtitle": "Enregistrez automatiquement les téléchargements ayant échoué dans un fichier TXT", - "@settingsAutoExportFailedSubtitle": { - "description": "Subtitle for auto-export setting" - }, - "searchSortArtistAZ": "Artiste (A-Z)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" }, - "editMetadataFieldAlbumArtist": "Artiste de l'album", - "@editMetadataFieldAlbumArtist": { - "description": "Chip label for album artist field in auto-fill selector" + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" }, - "@queueEmptyHistory": { - "description": "Empty state title when download history is empty" + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" }, - "@dialogDisableHistoryMessage": { - "description": "Confirmation dialog message shown before disabling download history" + "libraryShowDuplicateIndicator": "Afficher l'indicateur de doublons", + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" }, - "queueFlacNoReliableMatches": "Aucun résultat pertinent n'a été trouvé en ligne pour cette sélection", - "@queueFlacNoReliableMatches": { - "description": "Snackbar when no safe FLAC redownload matches were found" + "libraryShowDuplicateIndicatorSubtitle": "Afficher lors de la recherche de pistes existantes", + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" }, - "trackOpenInDeezer": "Ouvrir dans Deezer", - "@trackOpenInDeezer": { - "description": "Action - open track in Deezer app" + "libraryAutoScan": "Analyse automatique", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" }, - "setupChooseFromFilesSubtitle": "Sélectionnez iCloud ou un autre emplacement", - "@setupChooseFromFilesSubtitle": { - "description": "Subtitle for file picker" + "libraryAutoScanSubtitle": "Analysez automatiquement votre bibliothèque à la recherche de nouveaux fichiers", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" }, - "artistMonthlyListeners": "{count} auditeurs mensuels", - "@artistMonthlyListeners": { - "description": "Monthly listener count display", - "placeholders": { - "count": { - "type": "String", - "description": "Formatted listener count" - } - } + "libraryAutoScanOff": "Désactivée", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" }, - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" + "libraryAutoScanOnOpen": "À chaque ouverture de l'application", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" }, - "cacheSectionStorage": "Données mises en cache", - "@cacheSectionStorage": { - "description": "Section header for cache entries" + "libraryAutoScanDaily": "Tous les jours", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" }, + "libraryAutoScanWeekly": "Hebdomadaire", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "tutorialDownloadCompletedSemantics": "Téléchargement terminé", - "@tutorialDownloadCompletedSemantics": { - "description": "Accessibility label for completed download state in tutorial demo" - }, - "@logNoLogsYet": { - "description": "Empty state title" + "libraryActions": "Actions", + "@libraryActions": { + "description": "Section header for library actions" }, - "@selectionDeletePlaylistsCount": { - "description": "Button label for deleting multiple selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryScan": "Analyse de la bibliothèque", + "@libraryScan": { + "description": "Button to start library scan" }, - "downloadSeparateSinglesEnabled": "Les singles et les EP sont enregistrés dans un dossier séparé", - "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is on" + "libraryScanSubtitle": "Recherchez des fichiers audio", + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" }, - "setupAppDocumentsFolder": "Dossier « Documents » de l'application", - "@setupAppDocumentsFolder": { - "description": "iOS documents folder option" + "libraryScanSelectFolderFirst": "Sélectionnez d'abord un dossier", + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" }, - "storeLoadError": "Échec du chargement du dépôt", - "settingsDownloadNetwork": "Réseau de téléchargement", - "metadataSaveFailedStorage": "Échec de la réécriture des métadonnées sur le support de stockage", - "@logAutoScrollOff": { - "description": "Tooltip when auto-scroll is disabled on the log screen" + "libraryCleanupMissingFiles": "Nettoyage des fichiers manquants", + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" }, - "@trackConvertFormat": { - "description": "Menu item - convert audio format" + "libraryCleanupMissingFilesSubtitle": "Supprimez les entrées correspondant aux fichiers qui n'existent plus", + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" }, - "optionsArtistTagModeJoined": "Valeur unique combinée", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" + "libraryClear": "Vider la bibliothèque", + "@libraryClear": { + "description": "Button to clear all library entries" }, - "@dateYesterday": { - "description": "Relative date - yesterday" + "libraryClearSubtitle": "Supprimez tous les titres numérisés", + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" }, - "@settingsExtensionsSubtitle": { - "description": "Extensions settings description" + "libraryClearConfirmTitle": "Vider la bibliothèque", + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" }, - "searchSortArtistZA": "Artiste (Z-A)", - "@extensionSettings": { - "description": "Section header - extension settings" + "libraryClearConfirmMessage": "Cette opération supprimera toutes les pistes numérisées de votre bibliothèque. Vos fichiers musicaux ne seront pas supprimés.", + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" }, - "@extensionOauthConnectHint": { - "description": "Hint for an OAuth login link field before connecting Spotify" + "libraryAbout": "À propos de la bibliothèque locale", + "@libraryAbout": { + "description": "Section header for about info" }, - "@notifUpdateReady": { - "description": "Notification title when app update download is complete" + "libraryAboutDescription": "Analyse votre bibliothèque musicale existante pour détecter les doublons lors du téléchargement. Prend en charge les formats FLAC, M4A, MP3, Opus et OGG. Les métadonnées sont extraites des balises des fichiers lorsqu'elles sont disponibles.", + "@libraryAboutDescription": { + "description": "Description of local library feature" }, - "@regionCountryMX": { - "description": "Country name for SongLink region picker" + "libraryTracksUnit": "{count, plural, =1{piste} other{pistes}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@nowPlayingOpenInExternalPlayer": { - "description": "Menu item to open the current track in an external player" - }, - "trackConvertDithering": "Hésitation", - "@trackConvertDithering": { - "description": "Section label for lossless conversion dithering options" - }, - "settingsDownloadSubtitle": "Service, qualité, solution de secours", - "@settingsDownloadSubtitle": { - "description": "Download settings description" + "libraryFilesUnit": "{count, plural, =1{fichier} other{fichiers}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } }, "libraryLastScanned": "Dernière analyse : {time}", "@libraryLastScanned": { @@ -2678,921 +2667,835 @@ } } }, - "setupIosEmptyFolderWarning": "Limitation iOS : les dossiers vides ne peuvent pas être sélectionnés. Choisissez un dossier contenant au moins un fichier.", - "@setupIosEmptyFolderWarning": { - "description": "iOS folder selection warning" + "libraryLastScannedNever": "Jamais", + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" }, - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" + "libraryScanning": "En cours d'analyse...", + "@libraryScanning": { + "description": "Status during scan" }, - "@snackbarFailedToInstallNamed": { - "description": "Snackbar when extension install fails in the repo tab", + "libraryScanFinalizing": "Finalisation de la bibliothèque...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, + "libraryScanProgress": "{progress} % des {total} fichiers", + "@libraryScanProgress": { + "description": "Scan progress display", "placeholders": { - "extensionName": { + "progress": { "type": "String" + }, + "total": { + "type": "int" } } }, - "@collectionAddedTracksToPlaylist": { - "description": "Snackbar after adding multiple tracks to a playlist", + "libraryInLibrary": "Dans la bibliothèque", + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, + "libraryRemovedMissingFiles": "{count} fichiers manquants ont été supprimés de la bibliothèque", + "@libraryRemovedMissingFiles": { + "description": "Snackbar after cleanup", "placeholders": { "count": { "type": "int" - }, - "playlistName": { - "type": "String" } } }, - "updateNew": "Nouveau", - "@updateNew": { - "description": "Label for new version" + "libraryCleared": "Bibliothèque vidée", + "@libraryCleared": { + "description": "Snackbar after clearing library" }, - "settingsExtensionsSubtitle": "Gérez les fournisseurs de téléchargement", - "@albumFolderArtistAlbumSinglesSubtitle": { - "description": "Folder structure example" + "libraryStorageAccessRequired": "Accès au stockage requis", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" }, - "trackReEnrichSelectAll": "Tout sélectionner", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" + "libraryStorageAccessMessage": "SpotiFLAC a besoin d'un accès au stockage pour analyser votre bibliothèque musicale. Veuillez lui accorder l'autorisation dans les paramètres.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" }, - "@extensionsUninstall": { - "description": "Uninstall extension button" + "libraryFolderNotExist": "Le dossier sélectionné n'existe pas", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" }, - "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when track artist is used for folder names" + "librarySourceDownloaded": "Téléchargé", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" }, - "@logIssueNetworkErrorLabel": { - "description": "Diagnostic badge label for generic network errors" + "librarySourceLocal": "Locale", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" }, - "albumFolderArtistYearAlbumSubtitle": "Albums/Nom de l'artiste/[2005] Nom de l'album/", - "@albumFolderArtistYearAlbumSubtitle": { - "description": "Folder structure example" + "libraryFilterAll": "Tout", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" }, - "itemCount": "{count} {count, plural, =1{élément} other{éléments}}", - "@itemCount": { - "description": "Generic item count label", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterDownloaded": "Téléchargé", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" }, - "discographyFetchingTracks": "Chargement des pistes...", - "@discographyFetchingTracks": { - "description": "Progress - fetching album tracks" + "libraryFilterLocal": "Locale", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" }, - "@libraryFolder": { - "description": "Folder selection setting" + "libraryFilterTitle": "Filtres", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" }, - "queueEmptyAlbums": "Aucun album téléchargé", - "@queueEmptyAlbums": { - "description": "Empty state title when no album downloads exist" + "libraryFilterReset": "Réinitialiser", + "@libraryFilterReset": { + "description": "Reset all filters button" }, - "@metadataProviderPriorityDescription": { - "description": "Metadata priority page description" + "libraryFilterApply": "Appliquer", + "@libraryFilterApply": { + "description": "Apply filters button" }, - "@extensionVerificationHelpTitleManual": { - "description": "Dialog title when automatic browser launch for verification fails" + "libraryFilterSource": "Source", + "@libraryFilterSource": { + "description": "Filter section - source type" }, - "extensionError": "Erreur", - "@extensionError": { - "description": "Extension detail - error message" + "libraryFilterQuality": "Qualité", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" }, - "@trackLyricsLoadFailed": { - "description": "Message when lyrics loading fails" + "libraryFilterQualityHiRes": "Haute résolution (24 bits)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" }, - "@downloadedAlbumDeleteCount": { - "description": "Delete button text with count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterQualityCD": "CD (16 bits)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" }, - "@extensionsNoHomeFeedExtensions": { - "description": "Extensions page - shown when no installed extension has home feed" + "libraryFilterQualityLossy": "Avec perte", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" }, - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterFormat": "Format", + "@libraryFilterFormat": { + "description": "Filter section - file format" }, - "backupContentsArtists": "{count, plural, =1{1 artiste préféré} other{{count} artistes préférés}}", - "@backupContentsArtists": { - "description": "Backup contents row for favorite artists count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadata": "Métadonnées", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" }, - "@trackRemoveFromDevice": { - "description": "Action - delete downloaded file" + "libraryFilterMetadataComplete": "Métadonnées complètes", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" }, - "lyricsProvidersEnabledSection": "Activé ({count})", - "@lyricsProvidersEnabledSection": { - "description": "Section header for enabled providers", + "libraryFilterMetadataMissingAny": "Métadonnées manquantes", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Année manquante", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Genre manquant", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Artiste d'album manquant", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, + "libraryFilterSort": "Trier", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "Le plus récent", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "Le plus ancien", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" + }, + "libraryFilterSortAlbumAsc": "Album (A-Z)", + "@libraryFilterSortAlbumAsc": { + "description": "Sort option - album ascending" + }, + "libraryFilterSortAlbumDesc": "Album (Z-A)", + "@libraryFilterSortAlbumDesc": { + "description": "Sort option - album descending" + }, + "libraryFilterSortGenreAsc": "Genre (A-Z)", + "@libraryFilterSortGenreAsc": { + "description": "Sort option - genre ascending" + }, + "libraryFilterSortGenreDesc": "Genre (Z-A)", + "@libraryFilterSortGenreDesc": { + "description": "Sort option - genre descending" + }, + "timeJustNow": "Il y a quelques instants", + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, + "timeMinutesAgo": "{count, plural, =1{il y a 1 minute} other{il y a {count} minutes}}", + "@timeMinutesAgo": { + "description": "Relative time - minutes ago", "placeholders": { "count": { "type": "int" } } }, - "@cueSplitTitle": { - "description": "Title for CUE split bottom sheet" - }, - "@downloadedAlbumSelectedCount": { - "description": "Selection count indicator", + "timeHoursAgo": "{count, plural, =1{il y a 1 heure} other{il y a {count} heures}}", + "@timeHoursAgo": { + "description": "Relative time - hours ago", "placeholders": { "count": { "type": "int" } } }, - "@trackOptionRemoveFromWishlist": { - "description": "Bottom sheet action label - remove track from wishlist" + "tutorialWelcomeTitle": "Bienvenue sur SpotiFLAC Mobile !", + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" }, - "notifDownloadingTrack": "Téléchargement de {trackName}", - "@notifDownloadingTrack": { - "description": "Notification title while downloading a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" }, - "@discographySkippedDownloaded": { - "description": "Snackbar - with skipped tracks count", - "placeholders": { - "added": { - "type": "int" - }, - "skipped": { - "type": "int" - } - } - }, - "@tutorialSettingsTip3": { - "description": "Tutorial settings tip 3" - }, - "@announcementUnableToOpenLink": { - "description": "Snackbar shown when an announcement CTA link cannot be opened" - }, - "trackReleaseDate": "Date de sortie", - "discographySelectedCount": "{count} sélectionnés", - "collectionArtistCount": "{count, plural, =1{1 artiste} other{{count} artistes}}", - "logIssueNetworkErrorLabel": "ERREUR DE RÉSEAU", - "updateStartingDownload": "Début du téléchargement...", - "@updateStartingDownload": { - "description": "Update status - initializing" - }, - "trackDiscNumber": "Numéro de disque", - "@trackDiscNumber": { - "description": "Metadata label - disc number" + "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" }, - "optionsUsingExtension": "Utilisation de l'extension : {extensionName}", - "@optionsUsingExtension": { - "description": "Shows active extension name", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" }, - "dialogDisableHistoryTitle": "Désactiver l'historique des téléchargements ?", "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, - "@collectionPlaylistEmptySubtitle": { - "description": "Playlist empty state subtitle" - }, - "@tutorialSearchHint": { - "description": "Placeholder shown in the tutorial search demo" - }, - "cleanupOrphanedDownloadsNone": "Aucune entrée orpheline n'a été trouvée", - "discographySkippedDownloaded": "{added} ajouté, {skipped} déjà téléchargé", - "@updateDontRemind": { - "description": "Update button - skip this version" - }, - "@snackbarLoadingCueSheet": { - "description": "Snackbar while loading a CUE sheet file" + "tutorialSearchTitle": "Trouver de la musique", + "@tutorialSearchTitle": { + "description": "Tutorial search page title" }, - "@dialogUninstallExtension": { - "description": "Dialog title - uninstall extension" + "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "@tutorialSearchDesc": { + "description": "Tutorial search page description" }, - "lyricsProvidersTitle": "Priorité au fournisseur de paroles", - "@dialogRemove": { - "description": "Dialog button - remove item" + "tutorialDownloadTitle": "Télécharger de la musique", + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" }, - "snackbarError": "Erreur : {error}", - "@snackbarError": { - "description": "Generic error snackbar with error detail", - "placeholders": { - "error": { - "type": "String" - } - } + "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" }, - "@sectionApp": { - "description": "Settings section header" + "tutorialLibraryTitle": "Votre bibliothèque", + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" }, - "@libraryPlayback": { - "description": "Section header for playback settings in library settings" + "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" }, - "@downloadPrimaryArtistOnlyOn": { - "description": "Status label when primary-artist-only folder naming is enabled" + "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" }, - "lyricsProvidersDiscardContent": "Vous avez des modifications non enregistrées qui seront perdues.", - "previewStop": "Arrêter l'aperçu", - "@previewStop": { - "description": "Tooltip for the button that stops the playing track preview snippet" + "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" }, - "trackConvertConfirmMessageLossless": "Convertir de {sourceFormat} vers {targetFormat} ? (Sans perte — aucune perte de qualité)\n\nLe fichier d'origine sera supprimé après la conversion.", - "discographyAlbumsOnly": "Albums uniquement", - "@discographyAlbumsOnly": { - "description": "Option - download only albums" + "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" }, - "@editMetadataFieldCopyright": { - "description": "Chip label for copyright field in auto-fill selector" + "tutorialExtensionsTitle": "Extensions", + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" }, - "extensionsFallbackSubtitle": "Choisissez les extensions de téléchargement installées qui peuvent servir de solution de secours", - "aboutSocial": "Réseaux sociaux", - "@aboutSocial": { - "description": "Section for social links" + "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" }, - "audioAnalysisNyquist": "Nyquist", - "trackCoverSelected": "Pochette choisie", - "@trackCoverSelected": { - "description": "Label for the newly selected cover preview" + "tutorialExtensionsTip1": "Consultez l'onglet « Dépôt » pour découvrir des extensions utiles", + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" }, - "downloadDeduplicationEnabled": "Les morceaux déjà téléchargés seront ignorés", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" + "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" }, - "homeEmptyTitle": "Aucun moteur de recherche pour le moment", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" + "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" }, - "@extensionHealthUnknown": { - "description": "Extension service health status - unknown" + "tutorialSettingsTitle": "Personnalisez votre expérience", + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" }, - "storeInstalled": "Installé", - "@storeInstalled": { - "description": "Already installed badge" + "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" }, - "trackReplayGainSuccess": "Ajout des balises ReplayGain", - "@trackReplayGainSuccess": { - "description": "Snackbar message after ReplayGain tags written for a single track" + "tutorialSettingsTip1": "Modifier l'emplacement de téléchargement et l'organisation des dossiers", + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" }, - "libraryShowDuplicateIndicatorSubtitle": "Afficher lors de la recherche de pistes existantes", - "@collectionPlaylistRenamed": { - "description": "Snackbar after renaming playlist" + "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" }, - "@trackConvertResamplerSoxr": { - "description": "Lossless conversion SoX resampler option" + "tutorialSettingsTip3": "Personnaliser le thème et l'apparence de l'application", + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" }, - "@dialogUnsavedChanges": { - "description": "Dialog message - unsaved changes" + "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "@tutorialReadyMessage": { + "description": "Tutorial completion message" }, - "dialogDownload": "Télécharger", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" + "libraryForceFullScan": "Lancer une analyse complète", + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" }, - "trackLyricsLoadFailed": "Impossible de charger les paroles", - "@backupContentsTitle": { - "description": "Header above the list summarizing what the backup contains" + "libraryForceFullScanSubtitle": "Réanalysez tous les fichiers en ignorant le cache", + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" }, - "@safMigrationTitle": { - "description": "Title of SAF migration dialog" + "cleanupOrphanedDownloads": "Nettoyage des téléchargements orphelins", + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" }, - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" + "cleanupOrphanedDownloadsSubtitle": "Supprimez les entrées de l'historique correspondant aux fichiers qui n'existent plus", + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" }, - "setupPermissionDeniedMessage": "Autorisation refusée. Veuillez accorder toutes les autorisations pour continuer.", - "@setupPermissionDeniedMessage": { - "description": "Error when permission denied" + "cleanupOrphanedDownloadsResult": "{count} entrées orphelines ont été supprimées de l'historique", + "@cleanupOrphanedDownloadsResult": { + "description": "Snackbar after orphan cleanup", + "placeholders": { + "count": { + "type": "int" + } + } }, - "settingsDownloadNetworkWifiOnly": "Wi-Fi uniquement", - "@settingsDownloadNetworkWifiOnly": { - "description": "Network option - only use WiFi" + "cleanupOrphanedDownloadsNone": "Aucune entrée orpheline n'a été trouvée", + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" }, - "@backupIncludeSecrets": { - "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" + "cacheTitle": "Stockage & Cache", + "@cacheTitle": { + "description": "Cache management page title" }, - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" + "cacheSummaryTitle": "Présentation du cache", + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" }, - "@extensionHealthServiceUnknown": { - "description": "Tooltip for unknown extension service health" + "cacheSummarySubtitle": "La suppression du cache n'entraînera pas la suppression des fichiers musicaux téléchargés.", + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" }, - "snackbarExtensionUpdated": "{extensionName} a été mis à jour.", - "@snackbarExtensionUpdated": { - "description": "Snackbar - extension updated successfully", + "cacheEstimatedTotal": "Utilisation estimée du cache : {size}", + "@cacheEstimatedTotal": { + "description": "Total cache size shown in summary", "placeholders": { - "extensionName": { + "size": { "type": "String" } } }, - "homeEmptySubtitle": "Installez une extension pour continuer.", - "@settingsTitle": { - "description": "Settings screen title" - }, - "@libraryFilterMetadataIncorrectIsrcFormat": { - "description": "Filter option - items with an invalid ISRC format" + "cacheSectionStorage": "Données mises en cache", + "@cacheSectionStorage": { + "description": "Section header for cache entries" }, - "@notifLibraryScanComplete": { - "description": "Notification title when library scan finishes" + "cacheSectionMaintenance": "Entretien", + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" }, - "@logIssueIspBlockingLabel": { - "description": "Diagnostic badge label when ISP blocking is detected" + "cacheAppDirectory": "Répertoire de cache de l'application", + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" }, - "tutorialDownloadTitle": "Télécharger de la musique", - "@tutorialDownloadTitle": { - "description": "Tutorial download page title" + "cacheAppDirectoryDesc": "Réponses HTTP, données WebView et autres données temporaires de l'application.", + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" }, - "unknownTitle": "Titre inconnu", - "@unknownTitle": { - "description": "Fallback track title when metadata is missing" - }, - "navLibrary": "Bibliothèque", - "@navLibrary": { - "description": "Bottom navigation - Library tab" - }, - "@snackbarAlreadyDownloaded": { - "description": "Snackbar - track already exists", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "editMetadataSelectAll": "Tout", - "@editMetadataSelectAll": { - "description": "Button to select all fields for auto-fill" - }, - "storeEmptyNoExtensions": "Aucune extension disponible", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" - }, - "optionsUpdateChannelWarning": "La version préliminaire peut contenir des bogues ou des fonctionnalités incomplètes", - "@optionsUpdateChannelWarning": { - "description": "Warning about preview channel" + "cacheTempDirectory": "Répertoire temporaire", + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" }, - "@collectionPlaylistNameHint": { - "description": "Hint text for playlist name input" + "cacheTempDirectoryDesc": "Fichiers temporaires liés aux téléchargements et à la conversion audio.", + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" }, - "notifLibraryScanComplete": "Analyse de la bibliothèque terminée", - "editMetadataFieldIsrc": "ISRC", - "@editMetadataFieldIsrc": { - "description": "Chip label for ISRC field in auto-fill selector" + "cacheCoverImage": "Cache des images de couverture", + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" }, - "@libraryFolderHint": { - "description": "Placeholder when no folder selected" + "cacheCoverImageDesc": "J'ai téléchargé les pochettes de l'album et des titres. Je les téléchargerai à nouveau lors de leur consultation.", + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" }, - "homeSearchHintDefault": "Collez une URL valide ou effectuez une recherche...", - "@homeSearchHintDefault": { - "description": "Default placeholder for the main search field on Home" + "cacheLibraryCover": "Cache de couverture de bibliothèque", + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" }, - "extensionsNoExtensionsSubtitle": "Installez les fichiers .spotiflac-ext pour ajouter de nouveaux fournisseurs", - "@extensionsNoExtensionsSubtitle": { - "description": "Empty state subtitle" + "cacheLibraryCoverDesc": "Pochettes extraites des fichiers musicaux locaux. Elles seront extraites à nouveau lors de la prochaine analyse.", + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" }, - "@extensionEnterValue": { - "description": "Hint for editing an extension setting value" + "libraryPlaybackNormalization": "Normalisation du volume", + "@libraryPlaybackNormalization": { + "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, - "backupRestoreConfirmTitle": "Restaurer cette sauvegarde ?", - "@backupRestoreConfirmTitle": { - "description": "Confirmation dialog title before restoring a backup" + "libraryPlaybackNormalizationSubtitle": "Équilibrer le volume entre les morceaux à l'aide des balises ReplayGain ou R128, lorsqu'elles sont présentes", + "@libraryPlaybackNormalizationSubtitle": { + "description": "Subtitle explaining playback volume normalization" }, - "@libraryScanSelectFolderFirst": { - "description": "Message when trying to scan without folder" + "cacheAudioAnalysis": "Cache d'analyse audio", + "@cacheAudioAnalysis": { + "description": "Cache item title for saved audio analysis results" }, - "@qualityHiResFlac": { - "description": "Quality option - high resolution FLAC" + "cacheAudioAnalysisDesc": "Spectrogrammes et résultats d'analyse enregistrés. Réanalyse prévue lors de la prochaine ouverture.", + "@cacheAudioAnalysisDesc": { + "description": "Description of what audio analysis cache contains" }, - "aboutSpecialThanks": "Remerciements particuliers", - "@aboutSpecialThanks": { - "description": "Section for special thanks" + "cacheExploreFeed": "Explorer le cache des flux", + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" }, - "storeInstall": "Installer", - "@storeInstall": { - "description": "Install extension button" + "cacheExploreFeedDesc": "Contenu de l'onglet « Explorer » (nouvelles sorties, tendances). Se mettra à jour lors de votre prochaine visite.", + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" }, - "@collectionWishlistEmptySubtitle": { - "description": "Wishlist empty state subtitle" + "cacheTrackLookup": "Cache de recherche de piste", + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" }, - "historyFilterAlbums": "Albums", - "extensionCustomUrlHandlingSubtitle": "Cette extension prend en charge les liens provenant de ces sites", - "@extensionCustomUrlHandlingSubtitle": { - "description": "Extension detail subtitle for custom URL handling" + "cacheTrackLookupDesc": "Recherche d'identifiant de titre sur Spotify/Deezer. La suppression des données peut ralentir les prochaines recherches.", + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" }, - "filenameShowAdvancedTagsDescription": "Activer les balises de formatage pour le remplissage des pistes et les formats de date", - "@aboutReportIssue": { - "description": "Link to report bugs" + "cacheCleanupUnusedDesc": "Supprimer les entrées orphelines de l'historique des téléchargements et de la bibliothèque pour les fichiers manquants.", + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" }, - "@folderOrganizationByPlaylist": { - "description": "Folder option - playlist folders" + "cacheNoData": "Aucune donnée mise en cache", + "@cacheNoData": { + "description": "Label when cache category has no data" }, - "@dateWeeksAgo": { - "description": "Relative date - weeks ago", + "cacheSizeWithFiles": "{size} dans {count} fichiers", + "@cacheSizeWithFiles": { + "description": "Cache size and file count", "placeholders": { + "size": { + "type": "String" + }, "count": { "type": "int" } } }, - "logEntriesFiltered": "Entrées ({count} résultats filtrés)", - "@logEntriesFiltered": { - "description": "Log count with filter active", + "cacheSizeOnly": "{size}", + "@cacheSizeOnly": { + "description": "Cache size only", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheEntries": "{count} entrées", + "@cacheEntries": { + "description": "Track cache entry count", "placeholders": { "count": { "type": "int" } } }, - "@lyricsModeDescription": { - "description": "Lyrics mode picker description" - }, - "@setupAppDocumentsFolderSubtitle": { - "description": "Subtitle for documents folder" - }, - "storeAddRepoButton": "Ajouter un dépôt", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "@collectionLovedEmptyTitle": { - "description": "Loved empty state title" - }, - "aboutReportIssue": "Signaler un problème", - "snackbarFailedToWriteStorage": "Échec de l'écriture sur le support de stockage", - "@snackbarFailedToWriteStorage": { - "description": "Snackbar when writing metadata back to file fails" - }, - "errorInvalidFolderSelected": "Dossier non valide sélectionné", - "allFilesAccessDisabledMessage": "L'accès à tous les fichiers est désactivé. L'application disposera d'un accès limité au stockage.", - "@allFilesAccessDisabledMessage": { - "description": "Snackbar message when user disables all files access" - }, - "downloadMusixmatchLanguageCode": "Code de langue", - "@downloadMusixmatchLanguageCode": { - "description": "Label for Musixmatch language input field" - }, - "dialogUnsavedChanges": "Vous avez des modifications non enregistrées. Voulez-vous les ignorer ?", - "setupChooseFromFiles": "Sélectionnez un fichier", - "@setupChooseFromFiles": { - "description": "iOS file picker option" - }, - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "downloadLossy320FormatDesc": "Choisissez le format de sortie pour les téléchargements avec perte à 320 kbps. Le flux d'origine sera converti au format que vous aurez sélectionné lorsque cela sera nécessaire.", - "@backupRestoreConfirmButton": { - "description": "Confirm button to proceed with restore" - }, - "@queueEmptyAlbumsSubtitle": { - "description": "Empty state subtitle for album downloads" - }, - "collectionRemovedFromWishlist": "« {trackName} » a été supprimé de la liste de souhaits", - "@collectionRemovedFromWishlist": { - "description": "Snackbar after removing track from wishlist", + "cacheClearSuccess": "Effacé : {target}", + "@cacheClearSuccess": { + "description": "Snackbar after clearing selected cache", "placeholders": { - "trackName": { + "target": { "type": "String" } } }, - "extensionsInstalledSuccess": "L'extension a été installée avec succès", - "progressReadingCsv": "Lecture du fichier CSV...", - "@progressReadingCsv": { - "description": "Progress indicator - parsing CSV file" + "cacheClearConfirmTitle": "Vider le cache ?", + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" }, - "artistReleases": "Sorties", - "@artistReleases": { - "description": "Section header for all artist releases" + "cacheClearConfirmMessage": "Cette opération effacera les données mises en cache pour {target}. Les fichiers musicaux téléchargés ne seront pas supprimés.", + "@cacheClearConfirmMessage": { + "description": "Dialog message before clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } }, - "extensionVerificationBrowserTitle": "Navigateur de vérification", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" + "cacheClearAllConfirmTitle": "Vider tout le cache ?", + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" }, - "optionsArtistTagModeJoinedSubtitle": "Indiquez une seule valeur ARTIST, par exemple « Artiste A, Artiste B », pour garantir une compatibilité maximale avec les lecteurs.", - "downloadLossy320": "Compression avec perte à 320 kbps", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" + "cacheClearAllConfirmMessage": "Cette opération effacera toutes les catégories mises en cache sur cette page. Les fichiers musicaux téléchargés ne seront pas supprimés.", + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" }, - "queueFlacAction": "File d'attente FLAC", - "@queueFlacAction": { - "description": "Action/button label for queueing FLAC redownloads for local tracks" + "cacheClearAll": "Vider tout le cache", + "@cacheClearAll": { + "description": "Button label to clear all caches" }, - "@setupDownloadLocationIosMessage": { - "description": "iOS-specific folder info" + "cacheCleanupUnused": "Nettoyer les données inutilisées", + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" }, - "trackConvertOriginal": "Original", - "sectionLyricsProviderOptions": "Options du fournisseur", - "nowPlayingTitle": "En cours de lecture", - "@nowPlayingTitle": { - "description": "Title for the now playing screen" + "cacheCleanupUnusedSubtitle": "Supprimer l'historique des téléchargements orphelins et les entrées manquantes dans la bibliothèque", + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" }, - "@extensionHealthChecksConfigured": { - "description": "Extension service health check count", + "cacheCleanupResult": "Nettoyage terminé : {downloadCount} téléchargements orphelins, {libraryCount} entrées de bibliothèque manquantes", + "@cacheCleanupResult": { + "description": "Snackbar after unused data cleanup", "placeholders": { - "count": { + "downloadCount": { + "type": "int" + }, + "libraryCount": { "type": "int" } } }, - "@cacheClearAll": { - "description": "Button label to clear all caches" - }, - "a11yDeselectTrack": "Désélectionner la piste", - "@a11yDeselectTrack": { - "description": "Accessibility label for deselecting a track" + "cacheRefreshStats": "Actualiser les statistiques", + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" }, - "@lyricsProvidersInfoText": { - "description": "Info tip on lyrics provider priority page" - }, - "queueEmptyHistory": "Aucun historique de téléchargement", - "dialogClear": "Effacer", - "@dialogClear": { - "description": "Dialog button - clear items" + "trackSaveCoverArt": "Enregistrer la pochette", + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" }, - "allFilesAccessDescription": "Activez cette option si vous rencontrez des erreurs d'écriture lors de l'enregistrement dans des dossiers personnalisés. À partir d'Android 13, l'accès à certains répertoires est restreint par défaut.", - "@allFilesAccessDescription": { - "description": "Description explaining when to enable all files access" + "trackSaveLyrics": "Enregistrer les paroles (.lrc)", + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" }, - "trackConvertConfirmTitle": "Confirmer la conversion", - "storeCategoryLyrics": "Paroles", - "@storeCategoryLyrics": { - "description": "Store extension category - lyrics" + "trackSaveLyricsProgress": "Enregistrement des paroles...", + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" }, - "@lyricsProvidersDescription": { - "description": "Description on the lyrics provider priority page" + "trackReEnrich": "Réenrichir", + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" }, - "tooltipLoveAll": "Tout aimer", - "downloadDirectory": "Répertoire de téléchargement", - "@downloadDirectory": { - "description": "Setting - download folder" + "trackReEnrichOnlineSubtitle": "Rechercher des métadonnées en ligne et les intégrer dans un fichier", + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" }, - "@tutorialExtensionsTip2": { - "description": "Tutorial extensions tip 2" + "trackReEnrichFieldCover": "Illustration de couverture", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" }, - "libraryFolder": "Dossier de bibliothèque", - "@metadataProviderPriorityTitle": { - "description": "Metadata priority page title" + "trackReEnrichFieldLyrics": "Paroles", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" }, - "@cleanupOrphanedDownloadsResult": { - "description": "Snackbar after orphan cleanup", - "placeholders": { - "count": { - "type": "int" - } - } + "trackReEnrichFieldBasicTags": "Album, Album Artiste", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "cacheExploreFeedDesc": "Contenu de l'onglet « Explorer » (nouvelles sorties, tendances). Se mettra à jour lors de votre prochaine visite.", - "@cacheExploreFeedDesc": { - "description": "Description of what explore feed cache contains" + "trackReEnrichFieldTrackInfo": "Numéro de piste & de disque", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" }, - "a11yOpenTrackByArtist": "Écouter le morceau {trackName} de {artistName}", - "@a11yOpenTrackByArtist": { - "description": "Accessibility label for opening a track item", - "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" - } - } + "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" }, - "announcementUnableToOpenLink": "Impossible d'ouvrir le lien. Veuillez réessayer.", - "libraryFilterSortAlbumDesc": "Album (Z-A)", - "@libraryFilterSortAlbumDesc": { - "description": "Sort option - album descending" + "trackReEnrichFieldExtra": "Genre, Label, Droits d'auteur", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" }, - "trackConvertBitrate": "Débit binaire", - "@trackConvertBitrate": { - "description": "Label for bitrate selection" + "trackReEnrichSelectAll": "Tout sélectionner", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" }, - "audioAnalysisFileSize": "Taille", - "extensionHealthServiceOnline": "Service en ligne", - "@extensionHealthServiceOnline": { - "description": "Tooltip for online extension service" + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" }, - "logEntries": "Entrées ({count})", - "@logEntries": { - "description": "Total log count", - "placeholders": { - "count": { - "type": "int" - } - } + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" }, - "trackConvertConfirmMessage": "Convertir du format {sourceFormat} au format {targetFormat} avec un débit binaire de {bitrate} ?\n\nLe fichier d'origine sera supprimé après la conversion.", - "@trackConvertConfirmMessage": { - "description": "Confirmation dialog message", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { - "type": "String" - } - } + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" }, - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" }, - "folderOrganizationByAlbum": "Par album", - "@folderOrganizationByAlbum": { - "description": "Folder option - album folders" + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" }, - "libraryPlayback": "Lecture", - "@storeFilterAll": { - "description": "Repo filter - all extensions" + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" }, - "aboutApp": "Application", - "@aboutApp": { - "description": "Section for app info" + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" }, - "optionsReplayGainSubtitleOff": "Désactivé : aucune balise de normalisation du volume", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" }, - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" }, - "settingsLyricsSubtitle": "Intégration, mode, fournisseurs, options linguistiques", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", + "placeholders": { + "changeCount": { + "type": "int" + }, + "trackCount": { + "type": "int" + } + } }, - "logIssueIspBlockingLabel": "BLOCAGE PAR LE FAI DÉTECTÉ", - "storeFilterIntegration": "Intégration", - "@storeFilterIntegration": { - "description": "Repo filter - integrations" + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" }, - "@lyricsProvidersAtLeastOne": { - "description": "Snackbar when user tries to disable the last enabled provider" + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" }, - "@appearanceHistoryViewGrid": { - "description": "Grid layout option" + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" }, - "trackDownloaded": "Téléchargé", - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile n'a pas pu ouvrir automatiquement le navigateur. Ouvrez ce lien dans votre navigateur ou copiez-le manuellement.", - "setupDownloadLocationIosMessage": "Sous iOS, les fichiers téléchargés sont enregistrés dans le dossier « Documents » de l'application. Vous pouvez y accéder via l'application Fichiers.", - "optionsArtistTagModeDescription": "Choisissez comment les noms de plusieurs artistes doivent apparaître dans les balises intégrées.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" + "trackEditMetadata": "Modifier les métadonnées", + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" }, - "@queueRetryAllFailed": { - "description": "Button to retry every failed download in the queue", + "trackCoverSaved": "La pochette a été enregistrée sous le nom {fileName}", + "@trackCoverSaved": { + "description": "Snackbar after cover art saved", "placeholders": { - "count": { - "type": "int" + "fileName": { + "type": "String" } } }, - "@trackConvertDitherTriangularHp": { - "description": "Lossless conversion high-pass triangular dither option" - }, - "@extensionVerificationCopyLink": { - "description": "Button to copy the extension verification URL" - }, - "searchSongs": "Titres", - "@searchSongs": { - "description": "Search result category - songs" + "trackCoverNoSource": "Aucune source d'illustration de couverture disponible", + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" }, - "@appearanceHistoryView": { - "description": "Layout style for history" + "trackLyricsSaved": "Paroles enregistrées dans {fileName}", + "@trackLyricsSaved": { + "description": "Snackbar after lyrics saved", + "placeholders": { + "fileName": { + "type": "String" + } + } }, - "sectionFileSettings": "Paramètres du fichier", - "@sectionFileSettings": { - "description": "Settings section header" + "trackReEnrichProgress": "Réenrichissement des métadonnées...", + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" }, - "@cancelDownloadTitle": { - "description": "Dialog title when confirming cancellation of an active download" + "trackReEnrichSearching": "Recherche de métadonnées en ligne...", + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" }, - "@cacheLibraryCover": { - "description": "Cache item title for local library cover art images" + "trackReEnrichSuccess": "Métadonnées réenrichies avec succès", + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" }, - "audioAnalysisSpectralCutoff": "Limite spectrale", - "dialogDelete": "Supprimer", - "@dialogDelete": { - "description": "Dialog button - delete item" + "trackReEnrichFfmpegFailed": "Échec de l'intégration des métadonnées FFmpeg", + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", - "@tutorialLibraryDesc": { - "description": "Tutorial library page description" + "queueFlacAction": "File d'attente FLAC", + "@queueFlacAction": { + "description": "Action/button label for queueing FLAC redownloads for local tracks" }, - "@queueDownloadSpeedStatus": { - "description": "Queue status while downloading with speed", + "queueFlacConfirmMessage": "Recherchez en ligne les correspondances pour les morceaux sélectionnés et ajoutez les téléchargements FLAC à la file d'attente.\n\nLes fichiers existants ne seront ni modifiés ni supprimés.\n\nSeules les correspondances hautement fiables sont automatiquement ajoutées à la file d'attente.\n\n{count} sélectionnés", + "@queueFlacConfirmMessage": { + "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { - "speed": { - "type": "String" + "count": { + "type": "int" } } }, - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" + "queueFlacNoReliableMatches": "Aucun résultat pertinent n'a été trouvé en ligne pour cette sélection", + "@queueFlacNoReliableMatches": { + "description": "Snackbar when no safe FLAC redownload matches were found" }, - "cacheCleanupResult": "Nettoyage terminé : {downloadCount} téléchargements orphelins, {libraryCount} entrées de bibliothèque manquantes", - "@cacheCleanupResult": { - "description": "Snackbar after unused data cleanup", + "queueFlacQueuedWithSkipped": "{addedCount} titres ajoutés à la file d'attente, {skippedCount} titres ignorés", + "@queueFlacQueuedWithSkipped": { + "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", "placeholders": { - "downloadCount": { + "addedCount": { "type": "int" }, - "libraryCount": { + "skippedCount": { "type": "int" } } }, - "trackConvertLosslessHint": "Conversion sans perte — aucune perte de qualité", - "@trackConvertLosslessHint": { - "description": "Hint shown when converting between lossless formats" - }, - "collectionRenamePlaylist": "Renommer la playlist", - "@collectionRenamePlaylist": { - "description": "Action to rename playlist" - }, - "@libraryFilterTitle": { - "description": "Filter bottom sheet title" - }, - "@storageModeAppFolder": { - "description": "Storage mode option - app-managed folder" - }, - "logTotalErrors": "Nombre total d'erreurs : {count}", - "@logTotalErrors": { - "description": "Total error count in log issue analysis", + "trackSaveFailed": "Échec : {error}", + "@trackSaveFailed": { + "description": "Snackbar when save operation fails", "placeholders": { - "count": { - "type": "int" + "error": { + "type": "String" } } }, - "@setupStorageRequired": { - "description": "Title when storage permission needed" + "trackConvertFormat": "Convertir le format", + "@trackConvertFormat": { + "description": "Menu item - convert audio format" }, - "@snackbarMetadataProviderSaved": { - "description": "Snackbar - metadata provider order saved" + "trackConvertTitle": "Convertir un fichier audio", + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" }, - "@selectionBatchConvertConfirmTitle": { - "description": "Confirmation dialog title for batch conversion" + "trackConvertTargetFormat": "Format cible", + "@trackConvertTargetFormat": { + "description": "Label for format selection" }, - "extensionsHomeFeedAutoSubtitle": "Sélectionnez automatiquement la meilleure option disponible", - "@extensionsHomeFeedAutoSubtitle": { - "description": "Extensions page - subtitle for auto home feed option" + "trackConvertBitrate": "Débit binaire", + "@trackConvertBitrate": { + "description": "Label for bitrate selection" }, - "setupLanguageDescription": "Sélectionnez la langue de votre choix pour l'application. Vous pourrez la modifier ultérieurement dans les Paramètres.", - "settingsBackupSubtitle": "Transférer votre bibliothèque, votre historique et vos paramètres vers un nouvel appareil", - "@settingsBackupSubtitle": { - "description": "Subtitle for backup and restore settings item" + "trackConvertKeepOriginal": "Conserver le fichier d'origine", + "@trackConvertKeepOriginal": { + "description": "Toggle to preserve the source file during conversion" }, - "recentTypeArtist": "Artiste", - "@recentTypeArtist": { - "description": "Recent access item type - artist" + "trackConvertKeepOriginalDescription": "Ajoutez le fichier converti en tant qu'entrée distincte dans la bibliothèque", + "@trackConvertKeepOriginalDescription": { + "description": "Description for preserving the source file during conversion" }, - "collectionPlaylistEmptySubtitle": "Appuyez longuement sur le bouton « + » sur n'importe quel morceau pour l'ajouter ici", - "artistCompilations": "Compilations", - "@artistCompilations": { - "description": "Section header for compilations" + "trackConvertConfirmTitle": "Confirmer la conversion", + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" }, - "snackbarFolderPickerFailed": "Impossible d'ouvrir le sélecteur de dossiers : {error}", - "@snackbarFolderPickerFailed": { - "description": "Snackbar shown when folder picker fails to open", + "trackConvertConfirmMessage": "Convertir du format {sourceFormat} au format {targetFormat} avec un débit binaire de {bitrate} ?\n\nLe fichier d'origine sera supprimé après la conversion.", + "@trackConvertConfirmMessage": { + "description": "Confirmation dialog message", "placeholders": { - "error": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { "type": "String" } } }, - "@optionsDetailedLoggingOn": { - "description": "Status when logging enabled" - }, - "settingsSaveDownloadHistory": "Enregistrer l'historique des téléchargements", - "@settingsSaveDownloadHistory": { - "description": "Settings switch title for storing completed downloads in history" - }, - "@storeCategoryIntegration": { - "description": "Store extension category - integration" - }, - "a11yOpenItemCount": "Ouvrir {title}, {count} {count, plural, =1{item} other{éléments}}", - "@a11yOpenItemCount": { - "description": "Accessibility label for opening a grouped item with count", + "trackConvertConfirmMessageLossless": "Convertir de {sourceFormat} vers {targetFormat} ? (Sans perte — aucune perte de qualité)\n\nLe fichier d'origine sera supprimé après la conversion.", + "@trackConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless-to-lossless conversion", "placeholders": { - "title": { + "sourceFormat": { "type": "String" }, - "count": { - "type": "int" + "targetFormat": { + "type": "String" } } }, - "trackFileInfo": "Informations sur le fichier", - "@trackFileInfo": { - "description": "Tab title - file information" - }, - "libraryFilterMetadataMissingAlbumArtist": "Artiste d'album manquant", - "audioAnalysisNoClipping": "Pas de coupure", - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", - "@tutorialSettingsDesc": { - "description": "Tutorial settings page description" - }, - "lyricsModeExternalSubtitle": "Fichier .lrc distinct pour les lecteurs tels que Samsung Music", - "@lyricsModeExternalSubtitle": { - "description": "Subtitle for external option" - }, - "trackLoadLyrics": "Charger les paroles", - "@trackLoadLyrics": { - "description": "Action - fetch lyrics" + "trackConvertConfirmKeepOriginal": "Convertir du format {sourceFormat} au format {targetFormat} ?\n\nLe fichier d'origine sera conservé et le fichier converti sera ajouté en tant qu'entrée distincte dans la bibliothèque.", + "@trackConvertConfirmKeepOriginal": { + "description": "Confirmation message when the source file will be preserved", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "extensionVerificationHelpTitleWaiting": "La vérification est toujours en attente", - "@extensionVerificationHelpTitleWaiting": { - "description": "Dialog title when verification is taking longer than expected" + "trackConvertLosslessHint": "Conversion sans perte — aucune perte de qualité", + "@trackConvertLosslessHint": { + "description": "Hint shown when converting between lossless formats" }, - "libraryFilterReset": "Réinitialiser", - "@libraryFilterReset": { - "description": "Reset all filters button" + "trackConvertConverting": "Conversion audio en cours...", + "@trackConvertConverting": { + "description": "Snackbar while converting" }, - "@downloadAlbumArtistMetadataFull": { - "description": "Status label when album-artist folder filtering uses full metadata" + "trackConvertSuccess": "Conversion vers {format} réussie", + "@trackConvertSuccess": { + "description": "Snackbar after successful conversion", + "placeholders": { + "format": { + "type": "String" + } + } }, - "storeTitle": "Répertoire des extensions", - "@storeTitle": { - "description": "Repo screen title" + "trackConvertFailed": "Échec de la conversion", + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" }, - "libraryCleared": "Bibliothèque vidée", - "@libraryCleared": { - "description": "Snackbar after clearing library" + "cueSplitTitle": "Fiche CUE fractionnée", + "@cueSplitTitle": { + "description": "Title for CUE split bottom sheet" }, - "queueDownloadCompleted": "Téléchargement terminé", - "@queueDownloadCompleted": { - "description": "Accessibility label for completed download state in queue" + "cueSplitAlbum": "Album : {album}", + "@cueSplitAlbum": { + "description": "Album name in CUE split sheet", + "placeholders": { + "album": { + "type": "String" + } + } }, - "libraryTitle": "Bibliothèque locale", - "@libraryTitle": { - "description": "Library settings page title" + "cueSplitArtist": "Artiste : {artist}", + "@cueSplitArtist": { + "description": "Artist name in CUE split sheet", + "placeholders": { + "artist": { + "type": "String" + } + } }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", - "@queueAlbumCount": { - "description": "Album count label with plural support", + "cueSplitTrackCount": "{count} titres", + "@cueSplitTrackCount": { + "description": "Number of tracks in CUE sheet", "placeholders": { "count": { "type": "int" } } }, - "libraryClearConfirmTitle": "Vider la bibliothèque", - "@backupExportSectionTitle": { - "description": "Section title for the export/backup card" - }, - "dialogClearAll": "Tout effacer", - "@dialogClearAll": { - "description": "Dialog title - clear all items" - }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", - "@tutorialExtensionsDesc": { - "description": "Tutorial extensions page description" - }, - "libraryExternalPlayer": "Lecteur externe", - "@libraryExternalPlayer": { - "description": "Setting option to use an external music player" - }, - "editMetadataFieldGenre": "Genre", - "@tutorialLibraryTitle": { - "description": "Tutorial library page title" - }, - "folderOrganizationByPlaylist": "Par playlist", - "queueTrackCount": "{count, plural, =1{1 titre} other{{count} titres}}", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" - }, - "editMetadataSelectNone": "Aucun", - "@historyFilterSingles": { - "description": "Filter chip - show singles only" - }, - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "trackSaveCoverArt": "Enregistrer la pochette", - "@trackSaveCoverArt": { - "description": "Menu action - save album cover art as file" + "cueSplitConfirmTitle": "Album CUE fractionné", + "@cueSplitConfirmTitle": { + "description": "CUE split confirmation dialog title" }, - "@downloadAlbumFolderStructure": { - "description": "Setting - album folder organization" + "cueSplitConfirmMessage": "Diviser « {album} » en {count} fichiers FLAC individuels ?\n\nLes fichiers seront enregistrés dans le même répertoire.", + "@cueSplitConfirmMessage": { + "description": "CUE split confirmation dialog message", + "placeholders": { + "album": { + "type": "String" + }, + "count": { + "type": "int" + } + } }, - "lyricsProvidersAtLeastOne": "Au moins un fournisseur doit rester activé", - "@notifDownloadCompleteCount": { - "description": "Notification title when download is complete, with count", + "cueSplitSplitting": "Fractionnement de la liste CUE... ({current}/{total})", + "@cueSplitSplitting": { + "description": "Snackbar while splitting CUE", "placeholders": { - "completed": { + "current": { "type": "int" }, "total": { @@ -3600,2503 +3503,3046 @@ } } }, - "setupUseDefault": "Utiliser les paramètres par défaut", - "@setupUseDefault": { - "description": "Button to use default folder" - }, - "logNoLogsYetSubtitle": "Les journaux s'afficheront ici au fur et à mesure que vous utiliserez l'application", - "@logNoLogsYetSubtitle": { - "description": "Empty state subtitle" - }, - "@dateToday": { - "description": "Relative date - today" - }, - "trackSaveLyricsProgress": "Enregistrement des paroles...", - "@trackSaveLyricsProgress": { - "description": "Snackbar while saving lyrics to file" - }, - "trackCoverSaved": "La pochette a été enregistrée sous le nom {fileName}", - "@trackCoverSaved": { - "description": "Snackbar after cover art saved", + "cueSplitSuccess": "Le fichier a été divisé en {count} pistes avec succès", + "@cueSplitSuccess": { + "description": "Snackbar after successful CUE split", "placeholders": { - "fileName": { - "type": "String" + "count": { + "type": "int" } } }, - "trackReEnrichFieldLyrics": "Paroles", - "@audioAnalysisRescan": { - "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" + "cueSplitFailed": "Échec de la division CUE", + "@cueSplitFailed": { + "description": "Snackbar when CUE split fails" }, - "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is on" + "cueSplitNoAudioFile": "Fichier audio introuvable pour cette liste CUE", + "@cueSplitNoAudioFile": { + "description": "Error when CUE audio file is missing" }, - "dialogDisableAndClear": "Désactiver et effacer", - "extensionHealthChecksConfigured": "{count} {count, plural, =1{vérification} other{vérifications}} configurées", - "cleanupOrphanedDownloadsSubtitle": "Supprimez les entrées de l'historique correspondant aux fichiers qui n'existent plus", - "@notifLibraryScanProgressWithTotal": { - "description": "Notification body for library scan progress when total is known", - "placeholders": { - "scanned": { - "type": "int" - }, - "total": { - "type": "int" - }, - "percentage": { - "type": "int" - } - } + "cueSplitButton": "Diviser en pistes", + "@cueSplitButton": { + "description": "Button text to start CUE splitting" }, - "@extensionDetailsTags": { - "description": "Section title for extension tags" + "actionCreate": "Créer", + "@actionCreate": { + "description": "Generic action button - create" }, - "@albumFolderAlbumOnlySubtitle": { - "description": "Folder structure example" + "collectionFoldersTitle": "Mes dossiers", + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" }, - "@audioAnalysisAnalyzing": { - "description": "Loading text while analyzing audio" + "collectionWishlist": "Liste de souhaits", + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" }, - "@settingsDonate": { - "description": "Settings menu item - donate page" + "collectionLoved": "Favoris", + "@collectionLoved": { + "description": "Custom folder for favorite tracks" }, - "@collectionPlaylistNameRequired": { - "description": "Validation error for empty playlist name" + "collectionFavoriteArtists": "Artistes Favoris", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" }, - "@backupImportSectionDescription": { - "description": "Description for the restore action" + "collectionPlaylist": "Playlist", + "@collectionPlaylist": { + "description": "Single playlist label" }, - "storeFilterLyrics": "Paroles", - "libraryAutoScan": "Analyse automatique", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" + "collectionAddToPlaylist": "Ajouter à la playlist", + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" }, - "safMigrationMessage1": "SpotiFLAC utilise désormais le framework d'accès au stockage Android (SAF) pour les téléchargements. Cela permet de résoudre les erreurs « autorisation refusée » sur Android 10 et versions ultérieures.", - "@safMigrationMessage1": { - "description": "First paragraph of SAF migration dialog" + "collectionCreatePlaylist": "Créer une playlist", + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" }, - "setupStorageRequired": "Autorisation de stockage requise", - "@notifLibraryScanErrors": { - "description": "Library scan complete suffix - error count", + "collectionNoPlaylistsYet": "Aucune playlist pour le moment", + "@collectionNoPlaylistsYet": { + "description": "Empty state title when user has no playlists" + }, + "collectionPlaylistTracks": "{count, plural, =1{1 titre} other{{count} titres}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", "placeholders": { "count": { "type": "int" } } }, - "appearanceHistoryViewGrid": "Grille", - "trackConvertConverting": "Conversion audio en cours...", - "@trackConvertConverting": { - "description": "Snackbar while converting" - }, - "@setupUseDefaultFolder": { - "description": "Dialog title for default folder" - }, - "optionsArtistTagModeSplitVorbisSubtitle": "Créez une balise « artiste » par artiste pour les fichiers FLAC et Opus ; les fichiers MP3 et M4A restent regroupés.", - "snackbarPlayingNext": "Prochainement", - "@snackbarPlayingNext": { - "description": "Snackbar when a track is inserted as the next queue item" - }, - "optionsDefaultSearchTabSubtitle": "Choisissez l'onglet qui s'ouvre en premier pour les nouveaux résultats de recherche.", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" - }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", - "@sectionService": { - "description": "Settings section header" - }, - "notifUpdateProgress": "{received} / {total} Mo • {percentage}%", - "@discographyDownloadSelected": { - "description": "Button - download selected albums" - }, - "cacheClearAllConfirmMessage": "Cette opération effacera toutes les catégories mises en cache sur cette page. Les fichiers musicaux téléchargés ne seront pas supprimés.", - "@cacheClearAllConfirmMessage": { - "description": "Dialog message before clearing all caches" - }, - "extensionsHomeFeedProvider": "Fournisseur de flux RSS", - "@extensionsHomeFeedProvider": { - "description": "Extensions page - label for home feed provider selector" - }, - "@cacheExploreFeed": { - "description": "Cache item title for explore home feed cache" - }, - "@audioAnalysisDynamicRange": { - "description": "Dynamic range metric label" - }, - "unknownAlbum": "Album inconnu", - "trackCoverCurrent": "Pochette actuelle", - "downloadSongLinkRegionDesc": "Région utilisée lors de la résolution des liens vers les morceaux via SongLink. Sélectionnez le pays dans lequel vos services de streaming sont disponibles.", - "downloadPrimaryArtistOnlyOff": "Primaire uniquement : Désactivé", - "dialogDone": "C'est fait", - "@dialogDone": { - "description": "Dialog button - action completed" + "collectionArtistCount": "{count, plural, =1{1 artiste} other{{count} artistes}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "storeRepoUrlLabel": "URL du dépôt", - "downloadSelectServiceToEnable": "Choisissez un fournisseur proposant des options de qualité pour activer cette fonctionnalité", - "@logIssueRateLimitedSuggestion": { - "description": "Diagnostic badge suggestion for rate limiting" + "collectionAddedToPlaylist": "Ajouté à « {playlistName} »", + "@collectionAddedToPlaylist": { + "description": "Snackbar after adding track to playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "libraryScanProgress": "{progress} % des {total} fichiers", - "@libraryScanProgress": { - "description": "Scan progress display", + "collectionAlreadyInPlaylist": "Déjà présent dans « {playlistName} »", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", "placeholders": { - "progress": { + "playlistName": { "type": "String" - }, - "total": { - "type": "int" } } }, - "collectionLovedEmptyTitle": "Le dossier « Favoris » est vide", - "tutorialExtensionsTitle": "Extensions", - "@tutorialExtensionsTitle": { - "description": "Tutorial extensions page title" + "collectionPlaylistNameHint": "Nom de la playlist", + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" }, - "searchSortDurationShort": "Durée (la plus courte)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" + "collectionPlaylistNameRequired": "Le nom de la playlist est requis", + "@collectionPlaylistNameRequired": { + "description": "Validation error for empty playlist name" }, - "trackCopyFilePath": "Copier le chemin d'accès au fichier", - "@trackCopyFilePath": { - "description": "Action - copy file path" + "collectionRenamePlaylist": "Renommer la playlist", + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" }, - "albumFolderArtistAlbumFlatSubtitle": "Artiste/Album/ et Artiste/titre.flac", - "@trackConvertResampler": { - "description": "Section label for lossless conversion resampler options" + "collectionDeletePlaylist": "Supprimer la playlist", + "@collectionDeletePlaylist": { + "description": "Action to delete playlist" }, - "editMetadataFieldTrackNum": "Piste n°", - "@editMetadataFieldTrackNum": { - "description": "Chip label for track number field in auto-fill selector" + "collectionPlaylistRenamed": "Playlist renommée", + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" }, - "snackbarFailedToUpdate": "Échec de la mise à jour de l'extension", - "@snackbarFailedToUpdate": { - "description": "Snackbar - extension update error" + "collectionWishlistEmptyTitle": "La liste de souhaits est vide", + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" }, - "notifAlreadyInLibrary": "Déjà dans la bibliothèque", - "@notifAlreadyInLibrary": { - "description": "Notification title when track is already in library" + "collectionWishlistEmptySubtitle": "Appuyez sur le signe « + » à côté des morceaux pour enregistrer ceux que vous souhaitez télécharger plus tard", + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" }, - "collectionPlaylistNameHint": "Nom de la playlist", - "extensionVerificationCopyLink": "Copier le lien", - "@replayGainBatchAnalyzing": { - "description": "Progress dialog title while batch scanning ReplayGain" + "collectionLovedEmptyTitle": "Le dossier « Favoris » est vide", + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" }, - "setupLanguageTitle": "Choisir la langue", - "extensionId": "Identifiant", - "@extensionId": { - "description": "Extension detail - unique ID" + "collectionLovedEmptySubtitle": "Appuyez sur les morceaux que vous aimez pour les ajouter à vos favoris", + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" }, - "regionCountryBR": "Brésil", - "@updateNewVersionReady": { - "description": "Update subtitle" + "collectionFavoriteArtistsEmptyTitle": "Pas encore d'artistes préférés", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" }, - "@queueDownloadedFileMissing": { - "description": "Accessibility label when a downloaded file is missing from disk" + "collectionFavoriteArtistsEmptySubtitle": "Appuyez sur le cœur sur la page d'un artiste pour le garder ici", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" }, - "@lyricsMode": { - "description": "Setting - how to save lyrics" + "collectionPlaylistEmptyTitle": "La playlist est vide", + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" }, - "@settingsAppearance": { - "description": "Settings section - visual customization" + "collectionPlaylistEmptySubtitle": "Appuyez longuement sur le bouton « + » sur n'importe quel morceau pour l'ajouter ici", + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" }, - "@setupStorageAccessMessageAndroid11": { - "description": "Android 11+ specific explanation" - }, - "@tutorialLibraryTip3": { - "description": "Tutorial library tip 3" + "collectionRemoveFromPlaylist": "Supprimer de la playlist", + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" }, - "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person lyrics is off" + "collectionRemoveFromFolder": "Supprimer du dossier", + "@collectionRemoveFromFolder": { + "description": "Tooltip for removing track from wishlist/loved folder" }, - "libraryStorageAccessMessage": "SpotiFLAC a besoin d'un accès au stockage pour analyser votre bibliothèque musicale. Veuillez lui accorder l'autorisation dans les paramètres.", - "@libraryStorageAccessMessage": { - "description": "Dialog message for storage permission" + "collectionAddedToLoved": "\"{trackName}\" ajouté aux Favoris", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@tutorialLibraryTip1": { - "description": "Tutorial library tip 1" + "collectionRemovedFromLoved": "\"{trackName}\" supprimé des Favoris", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "dialogRemoveExtensionMessage": "Êtes-vous sûr de vouloir supprimer cette extension ? Cette action ne peut pas être annulée.", - "@dialogRemoveExtensionMessage": { - "description": "Dialog message - uninstall confirmation" + "collectionAddedToWishlist": "« {trackName} » a été ajouté à la liste de souhaits", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "setupDownloadLocationTitle": "Emplacement de téléchargement", - "@setupDownloadLocationTitle": { - "description": "Download location dialog title" + "collectionRemovedFromWishlist": "« {trackName} » a été supprimé de la liste de souhaits", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "downloadNetworkCompatibilityModeEnabled": "Points de terminaison HTTP hérités autorisés ; la vérification TLS reste active", - "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is on" + "collectionAddedToFavoriteArtists": "« {artistName} » a été ajouté à vos artistes préférés", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, - "@audioAnalysisBitDepth": { - "description": "Bit depth metric label" + "collectionRemovedFromFavoriteArtists": "« {artistName} » a été supprimé de vos artistes favoris", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, "trackOptionAddToLoved": "Ajouter aux Favoris", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" }, - "cacheAppDirectory": "Répertoire de cache de l'application", - "@cacheAppDirectory": { - "description": "Cache item title for app cache directory" + "trackOptionRemoveFromLoved": "Supprimer des Favoris", + "@trackOptionRemoveFromLoved": { + "description": "Bottom sheet action label - remove track from loved folder" }, - "lyricsProviderMusixmatchDesc": "La plus grande base de données de paroles (multilingue)", - "@navStore": { - "description": "Bottom navigation - Extension repo tab" + "trackOptionAddToWishlist": "Ajouter à la liste de souhaits", + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" }, - "extensionPostProcessing": "Post-traitement", - "@searchTracks": { - "description": "Search filter label - tracks" + "trackOptionRemoveFromWishlist": "Supprimer de la liste de souhaits", + "@trackOptionRemoveFromWishlist": { + "description": "Bottom sheet action label - remove track from wishlist" }, - "logCopied": "Journaux copiés dans le presse-papiers", - "@logCopied": { - "description": "Snackbar - logs copied" + "artistOptionAddToFavorites": "Ajouter aux Artistes Favoris", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" }, - "@extensionHealthRequired": { - "description": "Label for a required extension service health check" + "artistOptionRemoveFromFavorites": "Supprimer des Artistes Favoris", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" }, - "@previewPlay": { - "description": "Tooltip for the button that plays a short track preview snippet" + "collectionPlaylistChangeCover": "Changer l'image de couverture", + "@collectionPlaylistChangeCover": { + "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "clickableLookingUpArtist": "Recherche d'artiste...", - "@clickableLookingUpArtist": { - "description": "Snackbar shown while clickable artist metadata is being resolved" + "collectionPlaylistRemoveCover": "Supprimer l'image de couverture", + "@collectionPlaylistRemoveCover": { + "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "@extensionVerificationBrowserSubtitleInApp": { - "description": "Subtitle when in-app browser is preferred for extension verification" + "selectionShareCount": "Partager {count} {count, plural, =1{titre} other{titres}}", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "setupUseDefaultFolder": "Utiliser le dossier par défaut ?", - "tutorialSearchHint": "Collez ou effectuez une recherche...", - "@logIssueTrackNotFoundLabel": { - "description": "Diagnostic badge label when a track is unavailable" + "selectionShareNoFiles": "Aucun fichier partageable n'a été trouvé", + "@selectionShareNoFiles": { + "description": "Snackbar when no selected files exist on disk" }, - "@storageModeAppFolderSubtitle": { - "description": "Subtitle for app folder storage mode" + "selectionConvertCount": "Convertir {count} {count, plural, =1{titre} other{titres}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadMusixmatchLanguage": "Langue Musixmatch", - "@downloadMusixmatchLanguage": { - "description": "Setting for Musixmatch lyrics translation language" + "selectionConvertNoConvertible": "Aucune piste convertible sélectionnée", + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" }, - "lyricsModeExternal": "Fichier .lrc externe", - "@setupSelectFolder": { - "description": "Button to select folder" + "selectionBatchConvertConfirmTitle": "Conversion par lots", + "@selectionBatchConvertConfirmTitle": { + "description": "Confirmation dialog title for batch conversion" }, - "logSearchHint": "Recherche dans les journaux...", - "@backupCreateFailed": { - "description": "Snackbar when backup creation fails" + "selectionBatchConvertConfirmMessage": "Convertir {count} {count, plural, =1{titre} other{titres}} au format {format} avec un débit binaire de {bitrate} ?\n\nLes fichiers d'origine seront supprimés après la conversion.", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "@settingsSaveDownloadHistorySubtitle": { - "description": "Settings switch subtitle for storing completed downloads in history" + "selectionBatchConvertConfirmMessageLossless": "Convertir {count} {count, plural, =1{titre} other{titres}} au format {format} ? (Sans perte — aucune perte de qualité)\n\nLes fichiers d'origine seront supprimés après la conversion.", + "@selectionBatchConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "@albumFolderArtistAlbumFlat": { - "description": "Album folder option with singles directly in artist folder" + "selectionBatchConvertConfirmKeepOriginal": "Convertir {count} {count, plural, =1{titre} other{titres}} au format {format} ?\n\nLes fichiers d'origine seront conservés et les fichiers convertis seront ajoutés sous forme d'entrées distinctes dans la bibliothèque.", + "@selectionBatchConvertConfirmKeepOriginal": { + "description": "Batch conversion confirmation when source files will be preserved", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "extensionHealthRequired": "requis", - "actionCancel": "Annuler", - "@actionCancel": { - "description": "Action button - cancel operation" + "selectionBatchConvertSuccess": "{success} pistes sur {total} ont été converties au format {format}", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "optionsEmbedMetadataSubtitleOff": "Désactivé (avancé) : ignorer l'intégration de toutes les métadonnées", - "@optionsEmbedMetadataSubtitleOff": { - "description": "Subtitle when metadata embedding is disabled" + "downloadedAlbumDownloadedCount": "{count} téléchargements", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadAllowLocalNetworkDisabled": "Les adresses locales/privées sont bloquées pour des raisons de sécurité", - "@downloadAllowLocalNetworkDisabled": { - "description": "Subtitle when allow local network access is off" + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Dossier nommé d'après la balise « Artiste de l'album »", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when album artist is used for folder names" }, - "@extensionsDownloadPrioritySubtitle": { - "description": "Subtitle for download priority" + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Dossier nommé d'après la balise « Artiste » de la piste", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when track artist is used for folder names" }, - "downloadSingleFilenameFormat": "Format de nom de fichier unique", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" + "lyricsProvidersTitle": "Priorité au fournisseur de paroles", + "@lyricsProvidersTitle": { + "description": "Settings item title for lyrics provider order" }, - "cacheSummarySubtitle": "La suppression du cache n'entraînera pas la suppression des fichiers musicaux téléchargés.", - "@cacheSummarySubtitle": { - "description": "Helper text for cache summary card" + "lyricsProvidersDescription": "Activer, désactiver et réorganiser les sources de paroles. Les sources sont parcourues de haut en bas jusqu'à ce que les paroles soient trouvées.", + "@lyricsProvidersDescription": { + "description": "Description on the lyrics provider priority page" }, - "libraryFilterMetadataIncorrectIsrcFormat": "Format ISRC incorrect", - "libraryFilterMetadataMissingTrackNumber": "Numéro de piste manquant", - "@libraryFilterMetadataMissingTrackNumber": { - "description": "Filter option - items missing track number" + "lyricsProvidersInfoText": "Les fournisseurs de paroles d'extension s'exécutent avant les fournisseurs de paroles intégrés. Au moins un fournisseur doit rester activé.", + "@lyricsProvidersInfoText": { + "description": "Info tip on lyrics provider priority page" }, - "backupIncludeSecretsDescription": "Les jetons et les clés API des extensions seront enregistrés dans le fichier de sauvegarde. Veillez à ne pas divulguer ce fichier. Si l'extension est désactivée, vous devrez les saisir à nouveau après la restauration.", - "@backupIncludeSecretsDescription": { - "description": "Explanation for the include-credentials toggle" + "lyricsProvidersEnabledSection": "Activé ({count})", + "@lyricsProvidersEnabledSection": { + "description": "Section header for enabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "audioAnalysisChannelStats": "Statistiques par chaîne", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" + "lyricsProvidersDisabledSection": "Désactivés ({count})", + "@lyricsProvidersDisabledSection": { + "description": "Section header for disabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@extensionServiceStatus": { - "description": "Extension detail section header for service status" + "lyricsProvidersAtLeastOne": "Au moins un fournisseur doit rester activé", + "@lyricsProvidersAtLeastOne": { + "description": "Snackbar when user tries to disable the last enabled provider" }, - "queueEmptySingles": "Pas de téléchargement individuel", - "@queueEmptySingles": { - "description": "Empty state title when no single track downloads exist" + "lyricsProvidersSaved": "Priorité du fournisseur de paroles enregistrée", + "@lyricsProvidersSaved": { + "description": "Snackbar after saving lyrics provider priority" }, - "@snackbarSelectedPlaylistsEmpty": { - "description": "Snackbar when selected playlists contain no tracks" + "lyricsProvidersDiscardContent": "Vous avez des modifications non enregistrées qui seront perdues.", + "@lyricsProvidersDiscardContent": { + "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "@errorRateLimited": { - "description": "Error title - too many requests" + "lyricsProviderLrclibDesc": "Base de données open source de paroles synchronisées", + "@lyricsProviderLrclibDesc": { + "description": "Description for LRCLIB provider" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", - "@setupDownloadInFlac": { - "description": "App tagline in setup" + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (idéal pour les titres asiatiques)", + "@lyricsProviderNeteaseDesc": { + "description": "Description for Netease provider" }, - "trackRemoveFromDevice": "Supprimer de l'appareil", - "@extensionsNoDownloadProvider": { - "description": "Empty state - no download providers" + "lyricsProviderMusixmatchDesc": "La plus grande base de données de paroles (multilingue)", + "@lyricsProviderMusixmatchDesc": { + "description": "Description for Musixmatch provider" }, - "@backupCreated": { - "description": "Snackbar after a backup file is created" + "lyricsProviderAppleMusicDesc": "Paroles synchronisées mot à mot (via un proxy)", + "@lyricsProviderAppleMusicDesc": { + "description": "Description for Apple Music provider" }, - "cacheSummaryTitle": "Présentation du cache", - "@cacheSummaryTitle": { - "description": "Heading for cache summary card" + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "@lyricsProviderQqMusicDesc": { + "description": "Description for QQ Music provider" }, - "selectionReplayGainCount": "ReplayGain ({count})", - "@selectionReplayGainCount": { - "description": "Batch selection action button label for ReplayGain", - "placeholders": { - "count": { - "type": "int" - } - } + "lyricsProviderLyricsPlusDesc": "Paroles de karaoké mot à mot (Apple/Musixmatch/Spotify/QQ, via un proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" }, - "@setupNotificationBackgroundDescription": { - "description": "Detailed notification explanation" + "lyricsProviderExtensionDesc": "Fournisseur d'extensions", + "@lyricsProviderExtensionDesc": { + "description": "Generic description for extension-based lyrics providers" }, "safMigrationTitle": "Mise à jour du stockage requise", - "snackbarMetadataSaved": "Les métadonnées ont été enregistrées avec succès", - "@snackbarMetadataSaved": { - "description": "Snackbar after successfully saving track metadata" + "@safMigrationTitle": { + "description": "Title of SAF migration dialog" }, - "@backupContentsSettings": { - "description": "Backup contents row label for settings" + "safMigrationMessage1": "SpotiFLAC utilise désormais le framework d'accès au stockage Android (SAF) pour les téléchargements. Cela permet de résoudre les erreurs « autorisation refusée » sur Android 10 et versions ultérieures.", + "@safMigrationMessage1": { + "description": "First paragraph of SAF migration dialog" }, - "logClearLogsTitle": "Effacer les journaux", - "extensionsCustomSearch": "Recherche personnalisée", - "@extensionsCustomSearch": { - "description": "Label for custom search provider" + "safMigrationMessage2": "Veuillez sélectionner à nouveau votre dossier de téléchargement pour passer au nouveau système de stockage.", + "@safMigrationMessage2": { + "description": "Second paragraph of SAF migration dialog" }, - "@downloadFrom": { - "description": "Label - download source" + "safMigrationSuccess": "Le dossier de téléchargement a été mis à jour en mode SAF", + "@safMigrationSuccess": { + "description": "Snackbar after successfully migrating to SAF" }, - "cacheSizeWithFiles": "{size} dans {count} fichiers", - "selectionShareNoFiles": "Aucun fichier partageable n'a été trouvé", - "@selectionShareNoFiles": { - "description": "Snackbar when no selected files exist on disk" + "settingsDonate": "Soutien au développement", + "@settingsDonate": { + "description": "Settings menu item - donate page" }, - "snackbarAddedTracksToQueue": "{count} titres ont été ajoutés à la file d'attente", - "downloadFilenameInsertTag": "Appuyez pour insérer une balise :", - "@downloadFilenameInsertTag": { - "description": "Label above filename tag chips" + "settingsDonateSubtitle": "Offrez un café au développeur", + "@settingsDonateSubtitle": { + "description": "Subtitle for donate menu item" }, - "collectionRemovedFromFavoriteArtists": "« {artistName} » a été supprimé de vos artistes favoris", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } + "settingsBackup": "Sauvegarde & Restauration", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" }, - "queueDownloadSpeedStatus": "Téléchargement - {speed} Mo/s", - "backupRestoreConfirmButton": "Restaurer", - "@libraryCleanupMissingFiles": { - "description": "Button to remove entries for missing files" + "settingsBackupSubtitle": "Transférer votre bibliothèque, votre historique et vos paramètres vers un nouvel appareil", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Sauvegarde & Restauration", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Créer une sauvegarde", + "@backupExportSectionTitle": { + "description": "Section title for the export/backup card" + }, + "backupExportSectionDescription": "Enregistrez vos paramètres, votre historique de téléchargement, les titres que vous avez aimés, votre liste de souhaits, vos artistes préférés et vos playlists dans un seul fichier que vous pourrez conserver ou transférer vers un autre téléphone.", + "@backupExportSectionDescription": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Créer un fichier de sauvegarde", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restaurer la sauvegarde", + "@backupImportSectionTitle": { + "description": "Section title for the import/restore card" + }, + "backupImportSectionDescription": "Sélectionnez un fichier de sauvegarde pour restaurer vos données. Cette opération remplacera les réglages actuels, l'historique et la bibliothèque de cet appareil.", + "@backupImportSectionDescription": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choisissez un fichier de sauvegarde", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreated": "Sauvegarde créée", + "@backupCreated": { + "description": "Snackbar after a backup file is created" }, "backupCreateFailed": "Échec de la création de la sauvegarde", - "notifLibraryScanFailed": "Échec de l'analyse de la bibliothèque", - "@notifLibraryScanFailed": { - "description": "Notification title when library scan fails" + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" }, - "audioAnalysisRescan": "Réanalyser", - "@trackTrackName": { - "description": "Metadata label - track title" + "backupRestoreConfirmTitle": "Restaurer cette sauvegarde ?", + "@backupRestoreConfirmTitle": { + "description": "Confirmation dialog title before restoring a backup" }, - "@setupPermissionRequired": { - "description": "Generic permission required title", + "backupRestoreConfirmMessage": "Cette opération remplacera vos paramètres actuels, votre historique de téléchargements, vos titres favoris, votre liste de souhaits et vos listes de lecture par le contenu de la sauvegarde. Cette opération est irréversible.", + "@backupRestoreConfirmMessage": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restaurer", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestored": "La sauvegarde a été restaurée avec succès", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Échec de la restauration de la sauvegarde", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "Ce fichier n'est pas une sauvegarde SpotiFLAC valide", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Redémarrez l'application pour vous assurer que toutes les modifications ont bien été prises en compte.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Contenu de la sauvegarde", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "backupContentsSettings": "Paramètres de l'application", + "@backupContentsSettings": { + "description": "Backup contents row label for settings" + }, + "backupContentsHistory": "{count} historique {count, plural, one {}=1{élément} other{éléments}}", + "@backupContentsHistory": { + "description": "Backup contents row for history count", "placeholders": { - "permissionType": { - "type": "String", - "description": "Type of permission (Storage/Notification)" + "count": { + "type": "int" } } }, - "@nowPlayingNoLyrics": { - "description": "Empty state when the playing file has no embedded lyrics" - }, - "libraryFilesUnit": "{count, plural, =1{fichier} other{fichiers}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", + "backupContentsLiked": "{count} favoris {count, plural, one {}=1{titre} other{titres}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", "placeholders": { "count": { "type": "int" } } }, - "@extensionMetadataProvider": { - "description": "Capability - provides metadata" + "backupContentsWishlist": "{count} liste de souhaits {count, plural, one {}=1{titre} other{titres}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@downloadFilterContributing": { - "description": "Setting to strip contributing artists from Album Artist folder name" + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "libraryScanSelectFolderFirst": "Sélectionnez d'abord un dossier", - "@sectionDownload": { - "description": "Settings section header" + "backupContentsArtists": "{count, plural, one {}=1{1 artiste préféré} other{{count} artistes préférés}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionHealthNotConfigured": "Non configuré", - "queueRetryAllFailed": "{count} tentatives ont échoué", - "folderOrganizationByPlaylistSubtitle": "Un dossier distinct pour chaque playlist", - "@folderOrganizationByPlaylistSubtitle": { - "description": "Subtitle for playlist folder option" - }, - "lyricsProviderExtensionDesc": "Fournisseur d'extensions", - "@libraryFilterQualityHiRes": { - "description": "Filter option - high resolution audio" - }, - "trackConvertTitle": "Convertir un fichier audio", - "@trackConvertTitle": { - "description": "Title of convert bottom sheet" - }, - "setupSkipForNow": "Ignorer pour le moment", - "sectionDownload": "Télécharger", - "downloadLossyOpus256Subtitle": "Opus en qualité optimale, environ 8 Mo par piste", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" - }, - "@trackConvertActionLabelLossless": { - "description": "Convert button label for lossless conversion with quality cap", + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "storeRequiresVersion": "Nécessite la version v{version}+", - "@storeRequiresVersion": { - "description": "Store compatibility badge for minimum app version", + "backupIncludeSecrets": "Inclure les informations d'identification de l'extension", + "@backupIncludeSecrets": { + "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" + }, + "backupIncludeSecretsDescription": "Les jetons et les clés API des extensions seront enregistrés dans le fichier de sauvegarde. Veillez à ne pas divulguer ce fichier. Si l'extension est désactivée, vous devrez les saisir à nouveau après la restauration.", + "@backupIncludeSecretsDescription": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} n'ont pas pu être réinstallées. Installez-les manuellement à partir du dépôt.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "int" } } }, - "metadataProviderPriorityDescription": "Faites glisser pour réorganiser les fournisseurs de métadonnées. L'application testera les fournisseurs dans l'ordre de haut en bas lors de la recherche de morceaux et de la récupération des métadonnées.", - "@notifUpdateFailed": { - "description": "Notification title when app update download fails" - }, - "extensionsInfoTip": "Les extensions permettent d'ajouter de nouvelles métadonnées et de nouveaux fournisseurs de téléchargement. N'installez que des extensions provenant de sources fiables.", - "@extensionsInfoTip": { - "description": "Security warning about extensions" - }, - "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person lyrics is on" - }, - "libraryFilterMetadataMissingYear": "Année manquante", - "extensionsDownloadPriority": "Priorité de téléchargement", - "@extensionsDownloadPriority": { - "description": "Setting - download provider order" - }, - "@downloadAllowLocalNetworkEnabled": { - "description": "Subtitle when allow local network access is on" - }, - "libraryScan": "Analyse de la bibliothèque", - "@libraryScan": { - "description": "Button to start library scan" - }, - "editMetadataFieldLabel": "Label", - "@editMetadataFieldLabel": { - "description": "Chip label for label field in auto-fill selector" - }, - "updateDownloadFailed": "Échec du téléchargement", - "@updateDownloadFailed": { - "description": "Update error title" - }, - "appearanceAmoledDarkSubtitle": "Fond noir pur", - "@appearanceAmoledDarkSubtitle": { - "description": "Subtitle for AMOLED dark" - }, - "setupIcloudNotSupported": "iCloud Drive n'est pas pris en charge. Veuillez utiliser le dossier « Documents » de l'application.", - "trackLyricsEmbeddedSource": "Intégré", - "@trackLyricsEmbeddedSource": { - "description": "Lyrics source label for embedded lyrics" + "tooltipLoveAll": "Tout aimer", + "@tooltipLoveAll": { + "description": "Tooltip for the Love All button on album/playlist screens" }, - "@trackAlbumArtist": { - "description": "Metadata label - album artist" + "tooltipAddToPlaylist": "Ajouter à la playlist", + "@tooltipAddToPlaylist": { + "description": "Tooltip for the Add to Playlist button" }, - "extensionsInstallPartialSuccess": "{installed} extensions sur {attempted}", - "@extensionsInstallPartialSuccess": { - "description": "Message when installing multiple extensions partially succeeds", + "snackbarRemovedTracksFromLoved": "{count} titres supprimés des Favoris", + "@snackbarRemovedTracksFromLoved": { + "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { - "installed": { - "type": "int", - "description": "Number of successfully installed extensions" - }, - "attempted": { - "type": "int", - "description": "Number of selected extensions" + "count": { + "type": "int" } } }, - "@extensionSettingsCount": { - "description": "Count of settings exposed by an extension quality option", + "snackbarAddedTracksToLoved": "{count} titres ajoutés aux Favoris", + "@snackbarAddedTracksToLoved": { + "description": "Snackbar after adding multiple tracks to Loved folder", "placeholders": { "count": { "type": "int" } } }, - "notifLibraryScanCancelled": "Annulation de la numérisation de la bibliothèque", - "@notifLibraryScanCancelled": { - "description": "Notification title when library scan is cancelled by the user" - }, - "collectionPlaylistNameRequired": "Le nom de la playlist est requis", - "libraryCleanupMissingFiles": "Nettoyage des fichiers manquants", - "storeCategoryUtility": "Utilitaire", - "@storeCategoryUtility": { - "description": "Store extension category - utility" - }, - "searchSortTitle": "Trier les résultats", - "@extensionVerificationBrowserExternal": { - "description": "Chip label for external browser verification mode" + "dialogDownloadAllTitle": "Tout télécharger", + "@dialogDownloadAllTitle": { + "description": "Dialog title for bulk download confirmation" }, - "audioAnalysisLufs": "LUFS", - "@setupAllowAccessToManageFiles": { - "description": "Instruction for file access permission" + "dialogDownloadAllMessage": "Télécharger {count} titres ?", + "@dialogDownloadAllMessage": { + "description": "Body of the Download All confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionsErrorLoading": "Erreur lors du chargement de l'extension", - "@actionPaste": { - "description": "Generic action - paste from clipboard" + "homeSkipAlreadyDownloaded": "Ignorer les morceaux déjà téléchargés", + "@homeSkipAlreadyDownloaded": { + "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "aboutFeatureRequestSubtitle": "Proposez de nouvelles fonctionnalités pour l'application", - "@aboutFeatureRequestSubtitle": { - "description": "Subtitle for feature request" + "homeGoToAlbum": "Aller à l'album", + "@homeGoToAlbum": { + "description": "Context menu item to navigate to the album page" }, - "@aboutTitle": { - "description": "About page title" + "homeAlbumInfoUnavailable": "Informations sur l'album non disponibles", + "@homeAlbumInfoUnavailable": { + "description": "Snackbar when album info cannot be loaded" }, - "@downloadNeteaseIncludeTranslation": { - "description": "Setting to include translated lyrics from Netease" + "snackbarLoadingCueSheet": "Chargement de la liste CUE...", + "@snackbarLoadingCueSheet": { + "description": "Snackbar while loading a CUE sheet file" }, - "@actionGo": { - "description": "Generic action button label" + "snackbarMetadataSaved": "Les métadonnées ont été enregistrées avec succès", + "@snackbarMetadataSaved": { + "description": "Snackbar after successfully saving track metadata" }, - "regionCountryFR": "France", - "trackConvertResamplerSoxr": "SoXr", - "extensionUpdated": "Mis à jour", - "@extensionUpdated": { - "description": "Extension detail - last update" + "snackbarFailedToEmbedLyrics": "Impossible d'intégrer les paroles", + "@snackbarFailedToEmbedLyrics": { + "description": "Snackbar when lyrics embedding fails" }, - "downloadLossyFormat": "Format avec perte", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" + "snackbarFailedToWriteStorage": "Échec de l'écriture sur le support de stockage", + "@snackbarFailedToWriteStorage": { + "description": "Snackbar when writing metadata back to file fails" }, - "snackbarAlreadyInLibrary": "« {trackName} » existe déjà dans votre bibliothèque", - "@snackbarAlreadyInLibrary": { - "description": "Snackbar - track already exists in local library", + "snackbarError": "Erreur : {error}", + "@snackbarError": { + "description": "Generic error snackbar with error detail", "placeholders": { - "trackName": { + "error": { "type": "String" } } }, - "libraryExternalPlayerSubtitle": "Recommandé pour l'écoute, la meilleure qualité, la lecture en continu, l'égaliseur et la prise en charge d'un plus grand nombre de formats", - "extensionCustomUrlHandlingShareHint": "Partagez des liens provenant de ces sites vers SpotiFLAC Mobile et cette extension s'en chargera.", - "libraryFilterQuality": "Qualité", - "@libraryFilterQuality": { - "description": "Filter section - audio quality" + "snackbarNoActionDefined": "Aucune action n'est associée à ce bouton", + "@snackbarNoActionDefined": { + "description": "Snackbar when an extension button has no action configured" }, - "editMetadataAutoFillDone": "{count} {count, plural, =1{champ} other{champs}} renseignés à partir des métadonnées en ligne", - "@editMetadataAutoFillDone": { - "description": "Snackbar confirming how many fields were auto-filled", - "placeholders": { - "count": { - "type": "int" - } - } + "noTracksFoundForAlbum": "Aucun morceau trouvé pour cet album", + "@noTracksFoundForAlbum": { + "description": "Empty state message when an album has no tracks" }, - "@discographyDownload": { - "description": "Button - download artist discography" + "downloadLocationSubtitle": "Choisissez l'emplacement où enregistrer vos morceaux téléchargés", + "@downloadLocationSubtitle": { + "description": "Subtitle shown in the download location picker sheet" }, - "aboutFeatureRequest": "Demande de fonctionnalité", - "downloadSingleFilenameFormatDescription": "Modèle de nom de fichier pour les singles et les EP. Utilise les mêmes balises que le format album.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" + "storageModeAppFolder": "Dossier « Applications » (recommandé)", + "@storageModeAppFolder": { + "description": "Storage mode option - app-managed folder" }, - "queueClearAllMessage": "Êtes-vous sûr de vouloir supprimer tous les fichiers téléchargés ?", - "dialogDisableHistoryMessage": "L'historique actuel sera effacé. Les fichiers téléchargés ne seront pas supprimés.", - "extensionLastChecked": "Dernière vérification à {time}", - "@extensionLastChecked": { - "description": "Timestamp for the latest extension service health check", - "placeholders": { - "time": { - "type": "String" - } - } + "storageModeAppFolderSubtitle": "Enregistrement par défaut dans le dossier « Musique/SpotiFLAC »", + "@storageModeAppFolderSubtitle": { + "description": "Subtitle for app folder storage mode" }, - "homeImportCsvTooltip": "Importer une playlist (CSV, M3U)", - "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "storageModeSaf": "Dossier personnalisé (SAF)", + "@storageModeSaf": { + "description": "Storage mode option - Storage Access Framework" }, - "trackConvertResamplerSwr": "SWR", - "@trackConvertResamplerSwr": { - "description": "Lossless conversion default FFmpeg swresample resampler option" + "storageModeSafSubtitle": "Choisissez n'importe quel dossier, y compris la carte SD", + "@storageModeSafSubtitle": { + "description": "Subtitle for SAF storage mode" }, - "@downloadFolderOrganization": { - "description": "Title of the folder organization picker bottom sheet" + "downloadFolderAccessLostTitle": "Accès au dossier de téléchargement perdu", + "@downloadFolderAccessLostTitle": { + "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" }, - "dialogClearHistoryTitle": "Effacer l'historique", - "@logClearSearch": { - "description": "Tooltip for clearing the log search field" - }, - "dialogImport": "Importer", - "@dialogImport": { - "description": "Dialog button - import data" + "downloadFolderAccessLostSubtitle": "Les téléchargements échoueront tant que vous n'aurez pas resélectionné le dossier", + "@downloadFolderAccessLostSubtitle": { + "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" }, - "@setupChangeFolderTooltip": { - "description": "Tooltip for editing the selected download folder" + "downloadFolderReselect": "Sélectionner à nouveau le dossier", + "@downloadFolderReselect": { + "description": "Button that reopens the folder picker to restore download folder access" }, - "notifLibraryScanErrors": "{count} erreurs", - "@downloadNetworkCompatibilityMode": { - "description": "Setting for legacy TLS/network handling" + "downloadErrorSafPermissionLost": "Autorisation SAF non valide ou révoquée. Veuillez reconfigurer l'emplacement de téléchargement dans les Paramètres.", + "@downloadErrorSafPermissionLost": { + "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" }, - "@metadataSaveFailedFfmpeg": { - "description": "Snackbar error when FFmpeg fails to write metadata" + "downloadErrorFolderAccessLost": "Accès au dossier de téléchargement perdu. Veuillez sélectionner à nouveau votre dossier de téléchargement dans les Paramètres.", + "@downloadErrorFolderAccessLost": { + "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, - "dialogUninstallExtension": "Supprimer l'extension ?", - "recentTypePlaylist": "Playlist", - "@recentTypePlaylist": { - "description": "Recent access item type - playlist" + "downloadFilenameDescription": "Utilisez {artist}, {title}, {album}, {track}, {year}, {date} et {disc} comme variables de remplacement.", + "@downloadFilenameDescription": { + "description": "Description shown in filename format editor" }, - "trackDeleteConfirmMessage": "Cela supprimera définitivement le fichier téléchargé et l'effacera de votre historique.", - "@logIssueNetworkErrorDescription": { - "description": "Diagnostic badge description for generic network errors" + "downloadFilenameInsertTag": "Appuyez pour insérer une balise :", + "@downloadFilenameInsertTag": { + "description": "Label above filename tag chips" }, - "appearanceThemeSystem": "Système", - "@appearanceThemeSystem": { - "description": "Follow system theme" + "downloadSeparateSinglesEnabled": "Les singles et les EP sont enregistrés dans un dossier séparé", + "@downloadSeparateSinglesEnabled": { + "description": "Subtitle when separate singles folder is on" }, - "albumFolderArtistAlbumSingles": "Artiste / Album + Singles", - "@aboutTranslators": { - "description": "Section for translators" + "downloadSeparateSinglesDisabled": "Les singles et les albums sont enregistrés dans le même dossier", + "@downloadSeparateSinglesDisabled": { + "description": "Subtitle when separate singles folder is off" }, - "shareSheetNotFound": "Introuvable", - "@shareSheetNotFound": { - "description": "Cross-service share sheet row subtitle when a service has no match" + "downloadArtistNameFilters": "Filtres par nom d'artiste", + "@downloadArtistNameFilters": { + "description": "Setting title for artist folder filter options" }, - "@tutorialDownloadInProgressSemantics": { - "description": "Accessibility label for active download state in tutorial demo" + "downloadCreatePlaylistSourceFolder": "Dossier source de la playlist", + "@downloadCreatePlaylistSourceFolder": { + "description": "Setting to create a subfolder per playlist source" }, - "editMetadataAutoFillNoneSelected": "Sélectionnez au moins un champ pour le remplir automatiquement", - "@editMetadataAutoFillNoneSelected": { - "description": "Snackbar when user taps Fetch without selecting any fields" + "downloadCreatePlaylistSourceFolderEnabled": "Un sous-dossier est créé pour chaque playlist", + "@downloadCreatePlaylistSourceFolderEnabled": { + "description": "Subtitle when playlist folder is enabled" }, - "@snackbarViewQueue": { - "description": "Snackbar action - view download queue" + "downloadCreatePlaylistSourceFolderDisabled": "Tous les morceaux sont enregistrés directement dans le dossier de téléchargement", + "@downloadCreatePlaylistSourceFolderDisabled": { + "description": "Subtitle when playlist folder is disabled" }, - "@optionsUpdateChannelPreview": { - "description": "Include beta/preview updates" + "downloadCreatePlaylistSourceFolderRedundant": "Géré par les paramètres d'organisation des dossiers", + "@downloadCreatePlaylistSourceFolderRedundant": { + "description": "Subtitle when folder organization is already set to playlist" }, - "editMetadataFieldComposer": "Compositeur", - "@editMetadataFieldComposer": { - "description": "Label for composer field in the edit metadata sheet" + "downloadSongLinkRegion": "Région SongLink", + "@downloadSongLinkRegion": { + "description": "Setting for SongLink region used during fallback resolution" }, - "aboutSachinsenalDesc": "Le créateur du projet HiFi original. Une base pour l'intégration de sources sans perte.", - "@aboutSachinsenalDesc": { - "description": "Credit description for sachinsenal0x64" + "downloadNetworkCompatibilityMode": "Mode de compatibilité réseau", + "@downloadNetworkCompatibilityMode": { + "description": "Setting for legacy TLS/network handling" }, - "backupTitle": "Sauvegarde & Restauration", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "@downloadNetworkCompatibilityModeEnabled": { + "description": "Subtitle when network compatibility mode is on" }, - "setupStorageAccessRequired": "Accès au stockage requis", - "@setupStorageAccessRequired": { - "description": "Title when storage access needed" + "downloadNetworkCompatibilityModeDisabled": "Utilisation des paramètres réseau par défaut", + "@downloadNetworkCompatibilityModeDisabled": { + "description": "Subtitle when network compatibility mode is off" }, - "trackMetadataDelete": "Supprimer", - "@trackMetadataDelete": { - "description": "Action button - delete track" + "downloadAllowLocalNetwork": "Autoriser l'accès au réseau local", + "@downloadAllowLocalNetwork": { + "description": "Setting title for allowing requests to private/local network targets" }, - "libraryFilterMetadataMissingDiscNumber": "Numéro de disque manquant", - "@libraryFilterMetadataMissingDiscNumber": { - "description": "Filter option - items missing disc number" + "downloadAllowLocalNetworkEnabled": "Les requêtes vers des adresses locales ou privées sont autorisées (pour un proxy local ou un DNS personnalisé)", + "@downloadAllowLocalNetworkEnabled": { + "description": "Subtitle when allow local network access is on" }, - "snackbarMetadataProviderSaved": "Priorité du fournisseur de métadonnées enregistrée", - "setupPermissionRequired": "Autorisation {permissionType} requise", - "@selectionConvertNoConvertible": { - "description": "Snackbar when no selected tracks support conversion" + "downloadAllowLocalNetworkDisabled": "Les adresses locales/privées sont bloquées pour des raisons de sécurité", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" }, - "extensionHealthDegraded": "Dégradé", - "regionCountryKR": "Corée du Sud", - "@regionCountryKR": { - "description": "Country name for SongLink region picker" + "downloadSelectServiceToEnable": "Choisissez un fournisseur proposant des options de qualité pour activer cette fonctionnalité", + "@downloadSelectServiceToEnable": { + "description": "Subtitle when quality picker is disabled due to extension service" }, - "trackLyricsNotInFile": "Aucune parole n'a été trouvée dans ce fichier", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" + "downloadEmbedLyricsDisabled": "Activez d'abord l'intégration des métadonnées", + "@downloadEmbedLyricsDisabled": { + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "@downloadedAlbumTapToSelect": { - "description": "Selection hint" + "downloadNeteaseIncludeTranslation": "Netease : inclure la traduction", + "@downloadNeteaseIncludeTranslation": { + "description": "Setting to include translated lyrics from Netease" }, - "downloadArtistNameFilters": "Filtres par nom d'artiste", - "@downloadArtistNameFilters": { - "description": "Setting title for artist folder filter options" + "downloadNeteaseIncludeTranslationEnabled": "Lignes de traduction en chinois incluses", + "@downloadNeteaseIncludeTranslationEnabled": { + "description": "Subtitle when Netease translation is on" }, - "@libraryFilterMetadataMissingArtist": { - "description": "Filter option - items missing artist" + "downloadNeteaseIncludeTranslationDisabled": "Paroles originales uniquement", + "@downloadNeteaseIncludeTranslationDisabled": { + "description": "Subtitle when Netease translation is off" }, - "recentShowAllDownloads": "Afficher tous les téléchargements", - "@appearanceThemeLight": { - "description": "Light theme" + "downloadNeteaseIncludeRomanization": "Netease : inclure la romanisation", + "@downloadNeteaseIncludeRomanization": { + "description": "Setting to include romanized lyrics from Netease" }, - "trackReEnrichFieldTrackInfo": "Numéro de piste & de disque", - "@appearanceThemeDark": { - "description": "Dark theme" + "downloadNeteaseIncludeRomanizationEnabled": "Lignes de romanisation incluses", + "@downloadNeteaseIncludeRomanizationEnabled": { + "description": "Subtitle when Netease romanization is on" }, - "extensionVerificationLinkCopied": "Lien de vérification copié", - "@extensionVerificationLinkCopied": { - "description": "Snackbar after copying the extension verification URL" + "downloadNeteaseIncludeRomanizationDisabled": "Pas de romanisation", + "@downloadNeteaseIncludeRomanizationDisabled": { + "description": "Subtitle when Netease romanization is off" }, - "@extensionsHomeFeedDescription": { - "description": "Extensions page - description for home feed provider picker" + "downloadAppleQqMultiPerson": "Apple / QQ : Paroles pour plusieurs personnes", + "@downloadAppleQqMultiPerson": { + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Métadonnées « Album » et « Artiste » : uniquement les données principales", - "@downloadAlbumArtistMetadataPrimaryOnly": { - "description": "Status label when album-artist folder filtering uses primary artist only" + "downloadAppleQqMultiPersonEnabled": "Étiquettes d'intervenants incluses pour les duos et les morceaux en groupe", + "@downloadAppleQqMultiPersonEnabled": { + "description": "Subtitle when multi-person lyrics is on" }, - "extensionOauthConnectHint": "Appuyez sur « Se connecter à Spotify » pour remplir ce champ.", - "setupNext": "Suivant", - "extensionVerificationBrowserSubtitleInApp": "Ouvrez d'abord les défis dans le navigateur intégré à l'application", - "libraryAutoScanDaily": "Tous les jours", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" + "downloadAppleQqMultiPersonDisabled": "Paroles standard sans indication du haut-parleur", + "@downloadAppleQqMultiPersonDisabled": { + "description": "Subtitle when multi-person lyrics is off" }, - "@audioAnalysisDescription": { - "description": "Description for audio analysis tap-to-analyze prompt" + "downloadAppleElrcWordSync": "Synchronisation des paroles Apple Music eLRC", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "nowPlayingUpNext": "À suivre", - "@nowPlayingUpNext": { - "description": "Title for the playback queue sheet" + "downloadAppleElrcWordSyncEnabled": "Conservation des horodatages bruts mot à mot", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "nowPlayingPreviousTrack": "Previous track", - "nowPlayingNextTrack": "Next track", - "logAutoScrollOff": "Défilement automatique désactivé", - "trackConvertFailed": "Échec de la conversion", - "@trackConvertFailed": { - "description": "Snackbar when conversion fails" + "downloadAppleElrcWordSyncDisabled": "Paroles d'Apple Music, ligne par ligne, en toute sécurité", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "extensionsUninstall": "Désinstaller", - "safMigrationSuccess": "Le dossier de téléchargement a été mis à jour en mode SAF", - "optionsClearHistorySubtitle": "Supprimez tous les morceaux téléchargés de l'historique", - "@optionsClearHistorySubtitle": { - "description": "Subtitle for clear history" + "downloadMusixmatchLanguage": "Langue Musixmatch", + "@downloadMusixmatchLanguage": { + "description": "Setting for Musixmatch lyrics translation language" }, - "trackPlayNext": "Suivant", - "extensionsNoHomeFeedExtensions": "Aucune extension avec le flux principal", - "optionsUpdateChannelStable": "Uniquement les versions stables", - "@optionsUpdateChannelStable": { - "description": "Only stable updates" + "downloadMusixmatchLanguageAuto": "Auto (langue d'origine)", + "@downloadMusixmatchLanguageAuto": { + "description": "Subtitle when no language is set" }, - "@discographyDownloadAllSubtitle": { - "description": "Subtitle showing total tracks and albums", - "placeholders": { - "count": { - "type": "int" - }, - "albumCount": { - "type": "int" - } - } + "downloadFilterContributing": "Filtrer les artistes participants", + "@downloadFilterContributing": { + "description": "Setting to strip contributing artists from Album Artist folder name" }, - "searchPlaylists": "Playlists", - "@searchPlaylists": { - "description": "Search result category - playlists" + "downloadFilterContributingEnabled": "Les artistes ayant contribué à l'album ont été supprimés du nom du dossier « Artiste de l'album »", + "@downloadFilterContributingEnabled": { + "description": "Subtitle when contributing artist filter is on" }, - "downloadNetworkCompatibilityMode": "Mode de compatibilité réseau", - "settingsAppearance": "Apparence", - "logIssueRateLimitedLabel": "NOMBRE LIMITÉ", - "@logIssueRateLimitedLabel": { - "description": "Diagnostic badge label when the service rate limits requests" + "downloadFilterContributingDisabled": "Chaîne « Artiste » de l'album complet utilisée", + "@downloadFilterContributingDisabled": { + "description": "Subtitle when contributing artist filter is off" }, - "logIssueSummary": "Résumé du problème", - "@logIssueSummary": { - "description": "Header for log issue analysis summary" + "downloadProvidersNoneEnabled": "Aucun fournisseur n'est activé", + "@downloadProvidersNoneEnabled": { + "description": "Shown when no lyrics providers are active" }, - "appName": "SpotiFLAC Mobile", - "storeRepoDialogCurrent": "Dépôt actuel :", - "@optionsExtensionStoreSubtitle": { - "description": "Subtitle for extension repo toggle" - }, - "@trackLyrics": { - "description": "Tab title - lyrics" + "downloadMusixmatchLanguageCode": "Code de langue", + "@downloadMusixmatchLanguageCode": { + "description": "Label for Musixmatch language input field" }, - "@backupImportButton": { - "description": "Button to pick a backup file to restore" + "downloadMusixmatchLanguageHint": "par exemple : en, de, ja", + "@downloadMusixmatchLanguageHint": { + "description": "Placeholder for Musixmatch language input" }, - "@setupFolderChoose": { - "description": "Button to choose folder" + "downloadMusixmatchLanguageDesc": "Saisissez un code de langue BCP-47 (par exemple : en, de, ja) pour demander les paroles traduites à Musixmatch.", + "@downloadMusixmatchLanguageDesc": { + "description": "Description in Musixmatch language picker" }, - "storageModeAppFolderSubtitle": "Enregistrement par défaut dans le dossier « Musique/SpotiFLAC »", - "@extensionsDisabled": { - "description": "Extension status - inactive" + "downloadMusixmatchAuto": "Auto", + "@downloadMusixmatchAuto": { + "description": "Button to clear Musixmatch language (use auto)" }, - "@regionCountryAU": { - "description": "Country name for SongLink region picker" + "downloadNetworkAnySubtitle": "Utilisez le Wi-Fi ou les données mobiles", + "@downloadNetworkAnySubtitle": { + "description": "Subtitle for any-network option in picker" }, - "@storeCategoryMetadata": { - "description": "Store extension category - metadata" + "downloadNetworkWifiOnlySubtitle": "Les téléchargements sont mis en pause lors de l'utilisation des données mobiles", + "@downloadNetworkWifiOnlySubtitle": { + "description": "Subtitle for WiFi-only option in picker" }, - "libraryFilterApply": "Appliquer", - "@libraryFilterApply": { - "description": "Apply filters button" + "downloadSongLinkRegionDesc": "Région utilisée lors de la résolution des liens vers les morceaux via SongLink. Sélectionnez le pays dans lequel vos services de streaming sont disponibles.", + "@downloadSongLinkRegionDesc": { + "description": "Description in SongLink region picker" }, - "@libraryFilterSortGenreAsc": { - "description": "Sort option - genre ascending" + "snackbarUnsupportedAudioFormat": "Format audio non pris en charge", + "@snackbarUnsupportedAudioFormat": { + "description": "Snackbar when the audio format is not supported for the requested operation" }, - "setupAllowAccessToManageFiles": "Veuillez cocher la case « Autoriser l'accès pour gérer tous les fichiers » sur l'écran suivant.", - "@dialogSave": { - "description": "Dialog button - save changes" + "cacheRefresh": "Actualiser", + "@cacheRefresh": { + "description": "Tooltip for refresh button on cache management page" }, - "trackLyrics": "Paroles", - "extensionSettingNotSet": "Non défini", - "@extensionSettingNotSet": { - "description": "Value shown when an extension setting has no value" + "dialogDownloadPlaylistsMessage": "Télécharger {trackCount} {trackCount, plural, =1{titre} other{titres}} depuis {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}} ?", + "@dialogDownloadPlaylistsMessage": { + "description": "Dialog message for bulk playlist download confirmation", + "placeholders": { + "trackCount": { + "type": "int" + }, + "playlistCount": { + "type": "int" + } + } }, - "@audioAnalysisClipping": { - "description": "Clipping metric label" + "bulkDownloadPlaylistsButton": "Télécharger {count} {count, plural, =1{playlist} other{playlists}}", + "@bulkDownloadPlaylistsButton": { + "description": "Button label for bulk downloading selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadNeteaseIncludeTranslation": "Netease : inclure la traduction", - "@albumFolderArtistAlbumSubtitle": { - "description": "Folder structure example" + "bulkDownloadSelectPlaylists": "Sélectionnez les playlists à télécharger", + "@bulkDownloadSelectPlaylists": { + "description": "Button label when no playlists are selected for download" }, - "@settingsDonateSubtitle": { - "description": "Subtitle for donate menu item" + "snackbarSelectedPlaylistsEmpty": "Les playlists sélectionnées ne contiennent aucun morceau", + "@snackbarSelectedPlaylistsEmpty": { + "description": "Snackbar when selected playlists contain no tracks" }, - "cueSplitSuccess": "Le fichier a été divisé en {count} pistes avec succès", - "@cueSplitSuccess": { - "description": "Snackbar after successful CUE split", + "playlistsCount": "{count, plural, one {}=1{1 playlist} other{{count} playlists}}", + "@playlistsCount": { + "description": "Playlist count display", "placeholders": { "count": { "type": "int" } } }, - "cueSplitArtist": "Artiste : {artist}", - "@cueSplitArtist": { - "description": "Artist name in CUE split sheet", + "editMetadataAutoFill": "Remplissage automatique en ligne", + "@editMetadataAutoFill": { + "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + }, + "editMetadataAutoFillDesc": "Choisissez une extension de métadonnées, sélectionnez les champs, puis vérifiez les données avant de l'appliquer", + "@editMetadataAutoFillDesc": { + "description": "Description for the auto-fill section" + }, + "editMetadataAutoFillSource": "Source des métadonnées", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" + }, + "editMetadataAutoFillSourceAutomatic": "Automatique (priorité au fournisseur)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" + }, + "editMetadataAutoFillFind": "Rechercher des métadonnées", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" + }, + "editMetadataAutoFillPreview": "Données provenant de {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", "placeholders": { - "artist": { + "source": { "type": "String" } } }, - "updateSeeReleaseNotes": "Pour plus de détails, consultez les notes de mise à jour.", - "@updateSeeReleaseNotes": { - "description": "Fallback changelog text when release notes cannot be parsed" + "editMetadataAutoFillCoverAvailable": "Illustration de couverture disponible", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" }, - "@trackReEnrichFfmpegFailed": { - "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + "editMetadataAutoFillApply": "Appliquer les données sélectionnées", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" }, - "collectionWishlist": "Liste de souhaits", - "@collectionWishlist": { - "description": "Custom folder for saved tracks to download later" + "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", - "@extensionsHomeFeedAuto": { - "description": "Label for auto-selected search provider" + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" }, - "providerPriorityDescription": "Faites glisser pour réorganiser les fournisseurs de téléchargement. L'application testera les fournisseurs dans l'ordre indiqué, de haut en bas, lors du téléchargement des morceaux.", - "@providerPriorityDescription": { - "description": "Provider priority page description" + "editMetadataAutoFillSearching": "Recherche en ligne...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" }, - "queueEmptySinglesSubtitle": "Les téléchargements de titres individuels apparaîtront ici", - "downloadLossyOpus128": "Opus 128 kbps", - "downloadUseAlbumArtistForFolders": "Utilisez l'artiste de l'album pour les dossiers", - "@downloadUseAlbumArtistForFolders": { - "description": "Setting - choose whether artist folders use Album Artist or Track Artist" + "editMetadataAutoFillNoResults": "Aucune métadonnée correspondante n'a été trouvée en ligne", + "@editMetadataAutoFillNoResults": { + "description": "Snackbar when online metadata search returns no results" }, - "@aboutLinks": { - "description": "Section for external links" + "editMetadataAutoFillDone": "{count} {count, plural, =1{champ} other{champs}} renseignés à partir des métadonnées en ligne", + "@editMetadataAutoFillDone": { + "description": "Snackbar confirming how many fields were auto-filled", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadedAlbumDeleteCount": "Supprimer {count} {count, plural, =1{piste} other{pistes}}", - "updateLater": "Plus tard", - "@logIssueIspBlockingSuggestion": { - "description": "Diagnostic badge suggestion for ISP blocking" + "editMetadataAutoFillNoneSelected": "Sélectionnez au moins un champ pour le remplir automatiquement", + "@editMetadataAutoFillNoneSelected": { + "description": "Snackbar when user taps Fetch without selecting any fields" }, - "actionResume": "Resumer", - "optionsDetailedLoggingOff": "Activer pour les rapports de bogues", - "@searchSortDefault": { - "description": "Sort option - default API order" + "editMetadataFieldTitle": "Titre", + "@editMetadataFieldTitle": { + "description": "Chip label for title field in auto-fill selector" }, - "@regionCountryCA": { - "description": "Country name for SongLink region picker" + "editMetadataFieldArtist": "Artiste", + "@editMetadataFieldArtist": { + "description": "Chip label for artist field in auto-fill selector" }, - "@sectionStorageAccess": { - "description": "Section header for storage access settings" + "editMetadataFieldAlbum": "Album", + "@editMetadataFieldAlbum": { + "description": "Chip label for album field in auto-fill selector" }, - "downloadFilterContributing": "Filtrer les artistes participants", - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Dossier nommé d'après la balise « Artiste » de la piste", - "storeSearch": "Recherche d'extensions...", - "@storeSearch": { - "description": "Repo search placeholder" + "editMetadataFieldAlbumArtist": "Artiste de l'album", + "@editMetadataFieldAlbumArtist": { + "description": "Chip label for album artist field in auto-fill selector" }, - "aboutTelegramChat": "Communauté Telegram", - "lyricsModeBoth": "Les deux", - "@lyricsModeBoth": { - "description": "Lyrics mode option - embed and external" + "editMetadataFieldDate": "Date", + "@editMetadataFieldDate": { + "description": "Chip label for date field in auto-fill selector" }, - "@permissionNotification": { - "description": "Notification permission type label" + "editMetadataFieldTrackNum": "Piste n°", + "@editMetadataFieldTrackNum": { + "description": "Chip label for track number field in auto-fill selector" }, - "libraryAutoScanSubtitle": "Analysez automatiquement votre bibliothèque à la recherche de nouveaux fichiers", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" + "editMetadataFieldDiscNum": "Disque n°", + "@editMetadataFieldDiscNum": { + "description": "Chip label for disc number field in auto-fill selector" }, - "libraryEnableLocalLibrary": "Activer la bibliothèque locale", - "trackConvertTargetFormat": "Format cible", - "@trackConvertTargetFormat": { - "description": "Label for format selection" + "editMetadataFieldGenre": "Genre", + "@editMetadataFieldGenre": { + "description": "Chip label for genre field in auto-fill selector" }, - "extensionSettings": "Paramètres", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" + "editMetadataFieldIsrc": "ISRC", + "@editMetadataFieldIsrc": { + "description": "Chip label for ISRC field in auto-fill selector" }, - "trackLyricsTimeout": "La requête a expiré. Veuillez réessayer plus tard.", - "settingsExtensions": "Extensions", - "@settingsBackup": { - "description": "Settings menu item - backup and restore page" + "editMetadataFieldLabel": "Label", + "@editMetadataFieldLabel": { + "description": "Chip label for label field in auto-fill selector" }, - "librarySourceDownloaded": "Téléchargé", - "@librarySourceDownloaded": { - "description": "Badge for tracks downloaded via SpotiFLAC" + "editMetadataFieldCopyright": "Droits d'auteur", + "@editMetadataFieldCopyright": { + "description": "Chip label for copyright field in auto-fill selector" }, - "appearanceDynamicColor": "Couleur dynamique", - "@appearanceDynamicColor": { - "description": "Material You dynamic colors" + "editMetadataFieldCover": "Illustration de couverture", + "@editMetadataFieldCover": { + "description": "Chip label for cover art field in auto-fill selector" }, - "backupImportButton": "Choisissez un fichier de sauvegarde", - "downloadAppleElrcWordSyncDisabled": "Paroles d'Apple Music, ligne par ligne, en toute sécurité", - "@optionsEmbedMetadata": { - "description": "Settings toggle title for writing metadata into downloaded files" + "editMetadataSelectAll": "Tout", + "@editMetadataSelectAll": { + "description": "Button to select all fields for auto-fill" }, - "appearanceTitle": "Apparence", - "downloadNeteaseIncludeRomanizationDisabled": "Pas de romanisation", - "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is off" + "editMetadataSelectEmpty": "Vide uniquement", + "@editMetadataSelectEmpty": { + "description": "Button to select only fields that are currently empty" }, - "@libraryScanCancelled": { - "description": "Library scan status when a scan was cancelled" + "queueDownloadingCount": "Téléchargement ({count})", + "@queueDownloadingCount": { + "description": "Header for active downloads section with count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "tracksCount": "{count, plural, =1{1 titre} other{{count} titres}}", - "@snackbarFailedToUpdateNamed": { - "description": "Snackbar when extension update fails in the repo tab", + "queueFilteringIndicator": "Filtrage...", + "@queueFilteringIndicator": { + "description": "Shown while filter results are being computed" + }, + "queueTrackCount": "{count, plural, =1{1 titre} other{{count} titres}}", + "@queueTrackCount": { + "description": "Track count label with plural support", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "@extensionQualityOptions": { - "description": "Capability - quality selection" + "queueAlbumCount": "{count, plural, one {}=1{1 album} other{{count} albums}}", + "@queueAlbumCount": { + "description": "Album count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "logClearSearch": "Effacer la recherche", - "trackSaveLyrics": "Enregistrer les paroles (.lrc)", - "@trackReEnrichSearching": { - "description": "Snackbar while searching metadata from internet for local items" + "queueEmptyAlbums": "Aucun album téléchargé", + "@queueEmptyAlbums": { + "description": "Empty state title when no album downloads exist" }, - "@editMetadataAutoFillNoResults": { - "description": "Snackbar when online metadata search returns no results" + "queueEmptyAlbumsSubtitle": "Téléchargez plusieurs titres d'un album pour les écouter ici", + "@queueEmptyAlbumsSubtitle": { + "description": "Empty state subtitle for album downloads" }, - "notifDownloadComplete": "Télécharger l'intégralité", - "snackbarAlreadyDownloaded": "« {trackName} » a déjà été téléchargé", - "folderOrganizationByAlbumSubtitle": "Un dossier distinct pour chaque album", - "storeRepoUrlHint": "https://github.com/user/repo", - "trackConvertDitherTriangularHp": "HP triangulaire", - "lyricsModeBothSubtitle": "Intégrer et enregistrer le fichier .lrc", - "trackReEnrichFieldExtra": "Genre, Label, Droits d'auteur", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" + "queueEmptySingles": "Pas de téléchargement individuel", + "@queueEmptySingles": { + "description": "Empty state title when no single track downloads exist" }, - "sectionLyrics": "Paroles", - "@sectionLyrics": { - "description": "Settings section header" + "queueEmptySinglesSubtitle": "Les téléchargements de titres individuels apparaîtront ici", + "@queueEmptySinglesSubtitle": { + "description": "Empty state subtitle for single track downloads" }, - "extensionStrategy": "Stratégie : {strategy}", - "@extensionStrategy": { - "description": "Track matching strategy name", + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", "placeholders": { - "strategy": { - "type": "String" + "count": { + "type": "int" } } }, - "@downloadNativeWorker": { - "description": "Setting title for Android native download worker" + "queueEmptyPlaylistsSubtitle": "Créez une playlist pour organiser vos morceaux", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" }, - "optionsArtistTagModeSplitVorbis": "Diviser les balises pour FLAC/Opus", - "extensionsHomeFeedUse": "Utiliser le fil d'actualité de {extensionName}", - "@cacheAppDirectoryDesc": { - "description": "Description of what app cache directory contains" + "libraryDefaultView": "Affichage par défaut", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" }, - "cancelDownloadTitle": "Annuler le téléchargement ?", - "updateWhatsNew": "Quoi de neuf ?", - "updateNewVersionReady": "Une nouvelle version est disponible", - "@extensionVerificationClose": { - "description": "Button to dismiss the extension verification help dialog" + "libraryDefaultViewLastUsed": "Dernière utilisation", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" }, - "a11ySelectTrack": "Sélectionner une piste", - "libraryClearSubtitle": "Supprimez tous les titres numérisés", - "@libraryClearSubtitle": { - "description": "Subtitle for clear button" + "queueEmptyHistory": "Aucun historique de téléchargement", + "@queueEmptyHistory": { + "description": "Empty state title when download history is empty" }, - "@settingsDownloadNetworkSubtitle": { - "description": "Subtitle explaining network preference" + "queueEmptyHistorySubtitle": "Les morceaux téléchargés apparaîtront ici", + "@queueEmptyHistorySubtitle": { + "description": "Empty state subtitle for download history" }, - "storeAnyVersion": "N'importe lequel", - "@storeAnyVersion": { - "description": "Store detail value when any app version is accepted" + "selectionAllPlaylistsSelected": "Toutes les playlists sélectionnées", + "@selectionAllPlaylistsSelected": { + "description": "Shown when all playlists are selected in selection mode" }, - "navStore": "Dépôt", - "backupExportSectionDescription": "Enregistrez vos paramètres, votre historique de téléchargement, les titres que vous avez aimés, votre liste de souhaits, vos artistes préférés et vos playlists dans un seul fichier que vous pourrez conserver ou transférer vers un autre téléphone.", - "libraryScanSettings": "Paramètres de numérisation", - "@libraryScanSettings": { - "description": "Section header for scan settings" + "selectionTapPlaylistsToSelect": "Appuyez sur les playlists pour les sélectionner", + "@selectionTapPlaylistsToSelect": { + "description": "Hint shown in playlist selection mode" }, - "trackDuration": "Durée", - "@trackDuration": { - "description": "Metadata label - track length" + "selectionSelectPlaylistsToDelete": "Sélectionnez les playlists à supprimer", + "@selectionSelectPlaylistsToDelete": { + "description": "Hint shown when no playlists are selected for deletion" }, - "extensionHealthOffline": "Hors ligne", - "@extensionHealthOffline": { - "description": "Extension service health status - offline" + "audioAnalysisTitle": "Analyse de la qualité audio", + "@audioAnalysisTitle": { + "description": "Title for audio analysis section" }, - "editMetadataFieldArtist": "Artiste", - "@editMetadataFieldArtist": { - "description": "Chip label for artist field in auto-fill selector" + "audioAnalysisDescription": "Vérifier la qualité sans perte à l'aide d'une analyse spectrale", + "@audioAnalysisDescription": { + "description": "Description for audio analysis tap-to-analyze prompt" }, - "libraryInLibrary": "Dans la bibliothèque", - "pressBackAgainToExit": "Appuyez de nouveau sur retour pour quitter", - "@pressBackAgainToExit": { - "description": "Exit confirmation message" + "audioAnalysisAnalyzing": "Analyse audio en cours...", + "@audioAnalysisAnalyzing": { + "description": "Loading text while analyzing audio" }, - "setupNotificationGranted": "Autorisation de notification accordée !", - "@setupNotificationGranted": { - "description": "Success message for notification permission" + "audioAnalysisSampleRate": "Fréquence d'échantillonnage", + "@audioAnalysisSampleRate": { + "description": "Sample rate metric label" }, - "settingsDonate": "Soutien au développement", - "snackbarFailedToUpdateNamed": "Échec de la mise à jour de {extensionName}", - "backupContentsTitle": "Contenu de la sauvegarde", - "updateDontRemind": "Ne plus me le rappeler", - "@dialogDiscard": { - "description": "Dialog button - discard changes" + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" }, - "editMetadataAutoFillSearching": "Recherche en ligne...", - "discographyDownloadSelected": "Télécharger la sélection", - "trackConvertResampler": "Rééchantillonneur", - "queueFilteringIndicator": "Filtrage...", - "@queueFilteringIndicator": { - "description": "Shown while filter results are being computed" + "audioAnalysisContainer": "Conteneur", + "@audioAnalysisContainer": { + "description": "Audio container metric label" }, - "@dialogDownloadAllTitle": { - "description": "Dialog title for bulk download confirmation" + "audioAnalysisDecodedFormat": "Format décodé", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" }, - "cueSplitConfirmMessage": "Diviser « {album} » en {count} fichiers FLAC individuels ?\n\nLes fichiers seront enregistrés dans le même répertoire.", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when folder organization is already set to playlist" + "audioAnalysisBitDepth": "Nombre de bits", + "@audioAnalysisBitDepth": { + "description": "Bit depth metric label" }, - "regionCountryCA": "Canada", - "cacheTempDirectory": "Répertoire temporaire", - "@cacheTempDirectory": { - "description": "Cache item title for temporary files directory" + "audioAnalysisChannels": "Chaînes", + "@audioAnalysisChannels": { + "description": "Channels metric label" }, - "libraryShowDuplicateIndicator": "Afficher l'indicateur de doublons", - "@logFilterBySeverity": { - "description": "Filter dialog title" + "audioAnalysisDuration": "Durée", + "@audioAnalysisDuration": { + "description": "Duration metric label" }, - "homeSearchHintProvider": "Rechercher avec {providerName}...", - "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is off" + "audioAnalysisNyquist": "Nyquist", + "@audioAnalysisNyquist": { + "description": "Nyquist frequency metric label" }, - "optionsCheckUpdates": "Vérifier les mises à jour", - "replayGainBatchAnalyzing": "Analyse de ReplayGain...", - "recentTypeAlbum": "Album", - "providerExtension": "Extension", - "@providerExtension": { - "description": "Label for extension-provided providers" + "audioAnalysisFileSize": "Taille", + "@audioAnalysisFileSize": { + "description": "File size metric label" }, - "trackCoverNoSource": "Aucune source d'illustration de couverture disponible", - "libraryFilterMetadata": "Métadonnées", - "albumFolderArtistYearAlbum": "Artiste / [Année] Album", - "@albumFolderArtistYearAlbum": { - "description": "Album folder option with year" + "audioAnalysisDynamicRange": "Plage dynamique", + "@audioAnalysisDynamicRange": { + "description": "Dynamic range metric label" }, - "audioAnalysisClipping": "Coupure", - "@a11yOpenAlbumByArtistTrackCount": { - "description": "Accessibility label for opening an album item with track count", - "placeholders": { - "albumName": { - "type": "String" - }, - "artistName": { - "type": "String" - }, - "trackCount": { - "type": "int" - } - } + "audioAnalysisPeak": "Pic", + "@audioAnalysisPeak": { + "description": "Peak amplitude metric label" }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} n'ont pas pu être réinstallées. Installez-les manuellement depuis le dépôt.", - "@backupExtensionsRestoreFailed": { - "description": "Snackbar/hint when some extensions failed to reinstall during restore", - "placeholders": { - "count": { - "type": "int" - } - } + "audioAnalysisRms": "RMS", + "@audioAnalysisRms": { + "description": "RMS level metric label" }, - "channelStable": "Stable", - "@channelStable": { - "description": "Update channel - stable releases" + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" }, - "tutorialSettingsTip3": "Personnaliser le thème et l'apparence de l'application", - "setupAppDocumentsFolderSubtitle": "Recommandé - accessible via l'application Fichiers", - "a11yPlayTrackByArtist": "Écouter {trackName} de {artistName}", - "@a11yPlayTrackByArtist": { - "description": "Accessibility label for playing a local library track", - "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" - } - } + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" }, - "dialogRemove": "Supprimer", - "extensionVerificationClose": "Fermer", - "bulkDownloadPlaylistsButton": "Télécharger {count} {count, plural, =1{playlist} other{playlists}}", - "@bulkDownloadPlaylistsButton": { - "description": "Button label for bulk downloading selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "audioAnalysisClipping": "Coupure", + "@audioAnalysisClipping": { + "description": "Clipping metric label" }, - "optionsAutoFallbackSubtitle": "Essayez d'autres services si le téléchargement échoue", - "@optionsAutoFallbackSubtitle": { - "description": "Subtitle for auto fallback" + "audioAnalysisNoClipping": "Pas de coupure", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" }, - "extensionPatternsCount": "{count} motif(s)", - "@libraryFilterLocal": { - "description": "Filter chip - show only local library items" + "audioAnalysisSpectralCutoff": "Limite spectrale", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" }, - "errorUrlNotRecognizedMessage": "Ce lien n'est pas pris en charge. Vérifiez que l'URL est correcte et qu'une extension compatible est installée.", - "@errorUrlNotRecognizedMessage": { - "description": "Error message - URL not recognized explanation" + "audioAnalysisCutoffNotDetected": "Non détecté", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" }, - "@extensionVerificationBrowserSubtitleExternal": { - "description": "Subtitle when external browser is preferred for extension verification" + "audioAnalysisChannelStats": "Statistiques par chaîne", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" }, - "optionsArtistTagMode": "Mode « Artiste »", - "libraryFilterMetadataComplete": "Métadonnées complètes", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" + "audioAnalysisSamples": "Échantillons", + "@audioAnalysisSamples": { + "description": "Total samples metric label" }, - "@extensionsVersion": { - "description": "Extension version display", + "audioAnalysisRescan": "Réanalyser", + "@audioAnalysisRescan": { + "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" + }, + "audioAnalysisRescanning": "Réanalyse du fichier audio...", + "@audioAnalysisRescanning": { + "description": "Loading text while audio is being re-analyzed after an explicit refresh" + }, + "extensionsHomeFeedProvider": "Fournisseur de flux RSS", + "@extensionsHomeFeedProvider": { + "description": "Extensions page - label for home feed provider selector" + }, + "extensionsHomeFeedDescription": "Choisissez l'extension qui affiche le fil d'actualité sur l'écran principal", + "@extensionsHomeFeedDescription": { + "description": "Extensions page - description for home feed provider picker" + }, + "extensionsHomeFeedAuto": "Auto", + "@extensionsHomeFeedAuto": { + "description": "Label for auto-selected search provider" + }, + "extensionsHomeFeedAutoSubtitle": "Sélectionnez automatiquement la meilleure option disponible", + "@extensionsHomeFeedAutoSubtitle": { + "description": "Extensions page - subtitle for auto home feed option" + }, + "extensionsHomeFeedOff": "Désactivé", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Ne pas afficher le fil d'actualité sur l'écran principal", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, + "extensionsHomeFeedUse": "Utiliser le fil d'actualité de {extensionName}", + "@extensionsHomeFeedUse": { + "description": "Extensions page - subtitle for a specific extension home feed option", "placeholders": { - "version": { + "extensionName": { "type": "String" } } }, - "@downloadNetworkAnySubtitle": { - "description": "Subtitle for any-network option in picker" + "extensionsNoHomeFeedExtensions": "Aucune extension avec le flux principal", + "@extensionsNoHomeFeedExtensions": { + "description": "Extensions page - shown when no installed extension has home feed" }, - "optionsReplayGainSubtitleOn": "Analyser le niveau sonore et intégrer des balises ReplayGain (EBU R128)", - "libraryScanning": "En cours d'analyse...", - "@libraryScanning": { - "description": "Status during scan" + "cancelDownloadTitle": "Annuler le téléchargement ?", + "@cancelDownloadTitle": { + "description": "Dialog title when confirming cancellation of an active download" }, - "cacheRefresh": "Actualiser", - "@actionShuffle": { - "description": "Tooltip for shuffle playback action" + "cancelDownloadContent": "Cela annulera le téléchargement en cours de « {trackName} ».", + "@cancelDownloadContent": { + "description": "Dialog body when confirming cancellation of an active download", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "optionsEmbedLyricsSubtitle": "Enregistrez les paroles synchronisées avec vos morceaux téléchargés", - "@optionsEmbedLyricsSubtitle": { - "description": "Subtitle for embed lyrics" + "cancelDownloadKeep": "Conserver", + "@cancelDownloadKeep": { + "description": "Dialog button - keep the active download (do not cancel)" }, - "queueEmptyAlbumsSubtitle": "Téléchargez plusieurs titres d'un album pour les écouter ici", - "extensionEnterValue": "Saisir une valeur", - "@settingsDownloadNetworkAny": { - "description": "Network option - use any connection" + "queueCancelledTitle": "Téléchargement annulé", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" }, - "collectionLoved": "Favoris", - "@collectionLoved": { - "description": "Custom folder for favorite tracks" + "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" }, - "storeAddRepoTitle": "Ajouter un dépôt d'extensions", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" + "metadataSaveFailedFfmpeg": "Échec de l'enregistrement des métadonnées via FFmpeg", + "@metadataSaveFailedFfmpeg": { + "description": "Snackbar error when FFmpeg fails to write metadata" }, - "collectionNoPlaylistsYet": "Aucune playlist pour le moment", - "@collectionNoPlaylistsYet": { - "description": "Empty state title when user has no playlists" + "metadataSaveFailedStorage": "Échec de la réécriture des métadonnées sur le support de stockage", + "@metadataSaveFailedStorage": { + "description": "Snackbar error when writing metadata file back to storage fails" }, - "libraryCleanupMissingFilesSubtitle": "Supprimez les entrées correspondant aux fichiers qui n'existent plus", - "@libraryCleanupMissingFilesSubtitle": { - "description": "Subtitle for cleanup button" + "snackbarFolderPickerFailed": "Impossible d'ouvrir le sélecteur de dossiers : {error}", + "@snackbarFolderPickerFailed": { + "description": "Snackbar shown when folder picker fails to open", + "placeholders": { + "error": { + "type": "String" + } + } }, - "folderOrganizationByArtist": "Par artiste", - "@folderOrganizationByArtist": { - "description": "Folder option - artist folders" + "notifDownloadingTrack": "Téléchargement de {trackName}", + "@notifDownloadingTrack": { + "description": "Notification title while downloading a track", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "aboutTranslators": "Traducteurs", - "notifAlreadyInLibraryCount": "Déjà dans la bibliothèque ({completed}/{total})", - "editMetadataFieldTitle": "Titre", - "@editMetadataFieldTitle": { - "description": "Chip label for title field in auto-fill selector" + "notifFinalizingTrack": "Finalisation de {trackName}", + "@notifFinalizingTrack": { + "description": "Notification title while finalizing (embedding metadata) a track", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "downloadFilenameDescription": "Utilisez {artist}, {title}, {album}, {track}, {year}, {date} et {disc} comme variables de remplacement.", - "@downloadFilenameDescription": { - "description": "Description shown in filename format editor" + "notifEmbeddingMetadata": "Intégration des métadonnées...", + "@notifEmbeddingMetadata": { + "description": "Notification body while embedding metadata into a downloaded track" }, - "@notifDownloadsFinishedBody": { - "description": "Notification body when queue finishes with failures", + "notifAlreadyInLibraryCount": "Déjà dans la bibliothèque ({completed}/{total})", + "@notifAlreadyInLibraryCount": { + "description": "Notification title when track is already in library, with count", "placeholders": { "completed": { "type": "int" }, - "failed": { + "total": { "type": "int" } } }, - "@libraryFolderNotExist": { - "description": "Error when folder doesn't exist" + "notifAlreadyInLibrary": "Déjà dans la bibliothèque", + "@notifAlreadyInLibrary": { + "description": "Notification title when track is already in library" }, - "@playlistsCount": { - "description": "Playlist count display", + "notifDownloadCompleteCount": "Téléchargement terminé ({completed}/{total})", + "@notifDownloadCompleteCount": { + "description": "Notification title when download is complete, with count", "placeholders": { - "count": { + "completed": { + "type": "int" + }, + "total": { "type": "int" } } }, - "@loadingSharedLink": { - "description": "Status when opening shared URL" - }, - "extensionServiceHealth": "Santé du service", - "@extensionServiceHealth": { - "description": "Extension capability label for service health checks" + "notifDownloadComplete": "Télécharger l'intégralité", + "@notifDownloadComplete": { + "description": "Notification title when a single download is complete" }, - "@collectionDeletePlaylistsMessage": { - "description": "Confirmation message for deleting selected playlists", + "notifDownloadsFinished": "Téléchargements terminés ({completed} terminé, {failed} en échec)", + "@notifDownloadsFinished": { + "description": "Notification title when queue finishes with some failures", "placeholders": { - "count": { + "completed": { + "type": "int" + }, + "failed": { "type": "int" } } }, - "setupStorageDescription": "SpotiFLAC a besoin d'une autorisation d'accès au stockage pour enregistrer vos fichiers musicaux téléchargés.", - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", - "selectionDeletePlaylistsCount": "Supprimer {count} {count, plural, =1{playlist} other{playlists}}", - "appearanceThemeLight": "Clair", - "queueEmptyHistorySubtitle": "Les morceaux téléchargés apparaîtront ici", - "@queueEmptyHistorySubtitle": { - "description": "Empty state subtitle for download history" + "notifVerificationRequiredTitle": "Vérification requise", + "@notifVerificationRequiredTitle": { + "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" }, - "backupRestoreFailed": "Échec de la restauration de la sauvegarde", - "@backupRestoreFailed": { - "description": "Snackbar when restore fails" + "notifVerificationRequiredBody": "Ouvrez l'application pour terminer la vérification et reprendre les téléchargements", + "@notifVerificationRequiredBody": { + "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, - "queueFlacQueuedWithSkipped": "{addedCount} titres ajoutés à la file d'attente, {skippedCount} titres ignorés", - "@queueFlacQueuedWithSkipped": { - "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "notifAllDownloadsComplete": "Tous les téléchargements sont terminés", + "@notifAllDownloadsComplete": { + "description": "Notification title when all downloads finish successfully" + }, + "notifTracksDownloadedSuccess": "{count, plural, =1{1 piste téléchargée avec succès} other{{count} pistes téléchargées avec succès}}", + "@notifTracksDownloadedSuccess": { + "description": "Notification body for queue complete - how many tracks were downloaded", "placeholders": { - "addedCount": { - "type": "int" - }, - "skippedCount": { + "count": { "type": "int" } } }, - "@trackReplayGain": { - "description": "Three-dot menu option to scan loudness and write ReplayGain tags" - }, - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", + "notifDownloadsFinishedBody": "{completed, plural, =1{1 titre téléchargé} other{{completed} titres téléchargés}}, {failed, plural, =1{1 échec} other{{failed} échecs}}", + "@notifDownloadsFinishedBody": { + "description": "Notification body when queue finishes with failures", "placeholders": { - "count": { + "completed": { + "type": "int" + }, + "failed": { "type": "int" } } }, - "setupFolderChoose": "Choisissez le dossier de téléchargement", - "dialogDownloadAllTitle": "Tout télécharger", - "providerPriorityInfo": "Si un morceau n'est pas disponible chez le premier fournisseur, l'application essaiera automatiquement le suivant.", - "@providerPriorityInfo": { - "description": "Info tip about fallback behavior" - }, - "@dialogDiscardChanges": { - "description": "Dialog title - unsaved changes warning" + "notifDownloadsCanceledTitle": "Téléchargements annulés", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" }, - "discographyNoAlbums": "Aucun album disponible", - "downloadAppleQqMultiPersonDisabled": "Paroles standard sans indication du haut-parleur", - "cacheNoData": "Aucune donnée mise en cache", - "@cacheNoData": { - "description": "Label when cache category has no data" + "notifDownloadsCanceledBody": "{count, plural, =1{1 téléchargement annulé par l'utilisateur} other{{count} téléchargements annulés par l'utilisateur}}", + "@notifDownloadsCanceledBody": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } }, - "tutorialStartDownloadSemantics": "Lancer le téléchargement", - "@tutorialStartDownloadSemantics": { - "description": "Accessibility label for idle download button in tutorial demo" + "notifScanningLibrary": "Numérisation de la bibliothèque locale", + "@notifScanningLibrary": { + "description": "Notification title while scanning local library" }, - "logIssueIspBlockingSuggestion": "Essayez d'utiliser un VPN ou de modifier vos paramètres DNS pour les remplacer par 1.1.1.1 ou 8.8.8.8", - "aboutTitle": "À propos", - "@cueSplitButton": { - "description": "Button text to start CUE splitting" + "notifLibraryScanProgressWithTotal": "{scanned}/{total} fichiers • {percentage} %", + "@notifLibraryScanProgressWithTotal": { + "description": "Notification body for library scan progress when total is known", + "placeholders": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "percentage": { + "type": "int" + } + } }, - "appearanceHistoryView": "Historique", - "audioAnalysisSampleRate": "Fréquence d'échantillonnage", - "@settingsCache": { - "description": "Settings menu item - cache management" + "notifLibraryScanProgressNoTotal": "{scanned} fichiers analysés • {percentage} %", + "@notifLibraryScanProgressNoTotal": { + "description": "Notification body for library scan progress when total is unknown", + "placeholders": { + "scanned": { + "type": "int" + }, + "percentage": { + "type": "int" + } + } }, - "lyricsProvidersInfoText": "Les fournisseurs de paroles d'extension s'exécutent avant les fournisseurs de paroles intégrés. Au moins un fournisseur doit rester activé.", - "cacheTrackLookup": "Cache de recherche de piste", - "extensionsHomeFeedOffSubtitle": "Ne pas afficher le fil d'actualité sur l'écran principal", - "@downloadUsePrimaryArtistOnly": { - "description": "Setting - strip featured artists from folder name" + "notifLibraryScanComplete": "Analyse de la bibliothèque terminée", + "@notifLibraryScanComplete": { + "description": "Notification title when library scan finishes" }, - "@regionCountryIN": { - "description": "Country name for SongLink region picker" + "notifLibraryScanCompleteBody": "{count} titres indexés", + "@notifLibraryScanCompleteBody": { + "description": "Notification body for library scan complete - number of indexed tracks", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@libraryFilterQualityLossy": { - "description": "Filter option - lossy compressed audio" + "notifLibraryScanExcluded": "{count} exclus", + "@notifLibraryScanExcluded": { + "description": "Library scan complete suffix - excluded track count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionRefreshStatus": "Actualiser l'état", - "notifAllDownloadsComplete": "Tous les téléchargements sont terminés", - "downloadNeteaseIncludeRomanizationEnabled": "Lignes de romanisation incluses", - "editMetadataFieldDateHint": "AAAA-MM-JJ ou AAAA", - "@editMetadataFieldDateHint": { - "description": "Hint text for the edit metadata date field" + "notifLibraryScanErrors": "{count} erreurs", + "@notifLibraryScanErrors": { + "description": "Library scan complete suffix - error count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "trackMetadataShare": "Partager", - "@trackMetadataShare": { - "description": "Action button - share track" + "notifLibraryScanFailed": "Échec de l'analyse de la bibliothèque", + "@notifLibraryScanFailed": { + "description": "Notification title when library scan fails" }, - "discographyDownloadAllSubtitle": "{count} titres issus de {albumCount} albums", - "settingsDonateSubtitle": "Offrez un café au développeur", - "libraryFilterDownloaded": "Téléchargé", - "downloadNetworkAnySubtitle": "Utilisez le Wi-Fi ou les données mobiles", - "@cueSplitNoAudioFile": { - "description": "Error when CUE audio file is missing" + "notifLibraryScanCancelled": "Annulation de la numérisation de la bibliothèque", + "@notifLibraryScanCancelled": { + "description": "Notification title when library scan is cancelled by the user" }, "notifLibraryScanStopped": "L'analyse a été interrompue avant d'être terminée.", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "snackbarFailedToInstallNamed": "Échec de l'installation de {extensionName}", - "trackCopyLyrics": "Copier les paroles", - "@trackCopyLyrics": { - "description": "Action - copy lyrics to clipboard" - }, - "regionCountryAU": "Australie", - "downloadAlbumFolderStructure": "Structure du dossier de l'album", - "downloadMusixmatchAuto": "Auto", - "actionDismiss": "Ignorer", - "storeFilterAll": "Tout", - "extensionsDisabled": "Désactivée", - "@logClearLogs": { - "description": "Clear button tooltip" - }, - "dialogDownloadAllMessage": "Télécharger {count} titres ?", - "@optionsEmbedLyrics": { - "description": "Embed lyrics in audio files" - }, - "tutorialLibraryTitle": "Votre bibliothèque", - "optionsCheckUpdatesSubtitle": "M'avertir lorsqu'une nouvelle version est disponible", - "@optionsCheckUpdatesSubtitle": { - "description": "Subtitle for update check" + "@notifLibraryScanStopped": { + "description": "Notification body when library scan is cancelled" }, - "collectionPlaylist": "Playlist", - "@collectionPlaylist": { - "description": "Single playlist label" + "notifDownloadingUpdate": "Télécharger SpotiFLAC v{version}", + "@notifDownloadingUpdate": { + "description": "Notification title while downloading an app update", + "placeholders": { + "version": { + "type": "String" + } + } }, - "dateMonthsAgo": "Il y a {count} mois", - "@dateMonthsAgo": { - "description": "Relative date - months ago", + "notifUpdateProgress": "{received} / {total} Mo • {percentage}%", + "@notifUpdateProgress": { + "description": "Notification body showing update download progress", "placeholders": { - "count": { + "received": { + "type": "String" + }, + "total": { + "type": "String" + }, + "percentage": { "type": "int" } } }, - "@extensionRemoveButton": { - "description": "Button to uninstall extension" - }, - "collectionPlaylistRenamed": "Playlist renommée", - "collectionCreatePlaylist": "Créer une playlist", - "homeGoToAlbum": "Aller à l'album", - "@homeGoToAlbum": { - "description": "Context menu item to navigate to the album page" - }, - "folderOrganizationByArtistSubtitle": "Un dossier distinct pour chaque artiste", - "@optionsClearHistory": { - "description": "Delete all download history" + "notifUpdateReady": "Prêt pour la mise à jour", + "@notifUpdateReady": { + "description": "Notification title when app update download is complete" }, - "@searchAlbums": { - "description": "Search result category - albums" + "notifUpdateReadyBody": "SpotiFLAC v{version} a été téléchargé. Appuyez pour l'installer.", + "@notifUpdateReadyBody": { + "description": "Notification body when app update is ready to install", + "placeholders": { + "version": { + "type": "String" + } + } }, - "@sectionDebug": { - "description": "Settings section header" + "notifUpdateFailed": "Échec de la mise à jour", + "@notifUpdateFailed": { + "description": "Notification title when app update download fails" }, - "extensionsVersion": "Version {version}", - "@navHome": { - "description": "Bottom navigation - Home tab" + "notifUpdateFailedBody": "Impossible de télécharger la mise à jour. Veuillez réessayer plus tard.", + "@notifUpdateFailedBody": { + "description": "Notification body when app update download fails" }, - "@editMetadataFieldDate": { - "description": "Chip label for date field in auto-fill selector" + "searchTracks": "Titres", + "@searchTracks": { + "description": "Search filter label - tracks" }, - "downloadUsePrimaryArtistOnly": "Artiste principal uniquement pour les dossiers", - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", - "@setupStorageGranted": { - "description": "Success message for storage permission" + "homeSearchHintDefault": "Collez une URL valide ou effectuez une recherche...", + "@homeSearchHintDefault": { + "description": "Default placeholder for the main search field on Home" }, - "tutorialWelcomeTitle": "Bienvenue sur SpotiFLAC Mobile !", - "a11ySelectAlbum": "Sélectionnez l'album {albumName}", - "@a11ySelectAlbum": { - "description": "Accessibility label for selecting an album", + "homeSearchHintProvider": "Rechercher avec {providerName}...", + "@homeSearchHintProvider": { + "description": "Placeholder for the main search field when a provider is selected", "placeholders": { - "albumName": { + "providerName": { "type": "String" } } }, - "aboutMobileSource": "Code source pour mobile", - "@aboutMobileSource": { - "description": "Link to mobile GitHub repo" + "homeImportCsvTooltip": "Importer une playlist (CSV, M3U)", + "@homeImportCsvTooltip": { + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, - "@extensionCustomUrlHandling": { - "description": "Extension detail section title for custom URL handling" + "homeChangeSearchProviderTooltip": "Changer de moteur de recherche", + "@homeChangeSearchProviderTooltip": { + "description": "Tooltip for the Home search provider picker" }, - "@downloadMusixmatchLanguageAuto": { - "description": "Subtitle when no language is set" + "actionPaste": "Coller", + "@actionPaste": { + "description": "Generic action - paste from clipboard" }, - "@cancelDownloadKeep": { - "description": "Dialog button - keep the active download (do not cancel)" + "tutorialSearchHint": "Collez ou effectuez une recherche...", + "@tutorialSearchHint": { + "description": "Placeholder shown in the tutorial search demo" }, - "libraryFilterSource": "Source", - "@libraryFilterSource": { - "description": "Filter section - source type" + "tutorialDownloadCompletedSemantics": "Téléchargement terminé", + "@tutorialDownloadCompletedSemantics": { + "description": "Accessibility label for completed download state in tutorial demo" + }, + "tutorialDownloadInProgressSemantics": "Téléchargement en cours", + "@tutorialDownloadInProgressSemantics": { + "description": "Accessibility label for active download state in tutorial demo" + }, + "tutorialStartDownloadSemantics": "Lancer le téléchargement", + "@tutorialStartDownloadSemantics": { + "description": "Accessibility label for idle download button in tutorial demo" + }, + "optionsEmbedMetadata": "Intégrer des métadonnées", + "@optionsEmbedMetadata": { + "description": "Settings toggle title for writing metadata into downloaded files" }, - "sectionStorageAccess": "Accès au stockage", - "logFilterBySeverity": "Filtrer les journaux par niveau de gravité", - "libraryFolderNotExist": "Le dossier sélectionné n'existe pas", "optionsEmbedMetadataSubtitleOn": "Ajouter des métadonnées, des pochettes et des paroles intégrées aux fichiers", - "albumFolderArtistAlbum": "Artiste / Album", - "@albumFolderArtistAlbum": { - "description": "Album folder option" + "@optionsEmbedMetadataSubtitleOn": { + "description": "Subtitle when metadata embedding is enabled" }, - "allFilesAccessDeniedMessage": "L'autorisation a été refusée. Veuillez activer manuellement l'option « Accès à tous les fichiers » dans les paramètres système.", - "@allFilesAccessDeniedMessage": { - "description": "Message when permission is permanently denied" + "optionsEmbedMetadataSubtitleOff": "Désactivé (avancé) : ignorer l'intégration de toutes les métadonnées", + "@optionsEmbedMetadataSubtitleOff": { + "description": "Subtitle when metadata embedding is disabled" }, - "editMetadataSelectEmpty": "Vide uniquement", - "settingsLocalLibrarySubtitle": "Analysez la musique et détectez les doublons", - "@settingsAutoExportFailed": { - "description": "Setting toggle for auto-export" + "trackCoverNoEmbeddedArt": "Aucune pochette d'album n'a été trouvée", + "@trackCoverNoEmbeddedArt": { + "description": "Message shown when a track file has no embedded cover art" }, - "cacheCleanupUnusedSubtitle": "Supprimer l'historique des téléchargements orphelins et les entrées manquantes dans la bibliothèque", - "@tutorialSettingsTitle": { - "description": "Tutorial settings page title" + "trackCoverReplace": "Remplacer la pochette", + "@trackCoverReplace": { + "description": "Button label for replacing selected cover art" }, - "libraryFilterMetadataMissingGenre": "Genre manquant", - "@appearanceSelectAccentColor": { - "description": "Accessibility label for picking an accent color", - "placeholders": { - "hex": { - "type": "String" - } - } + "trackCoverPick": "Choisir une pochette", + "@trackCoverPick": { + "description": "Button label for selecting cover art" }, - "setupFolderDescription": "Sélectionnez un dossier dans lequel votre musique téléchargée sera enregistrée.", - "extensionDetailsTags": "Balises", - "unknownArtist": "Artiste inconnu", - "trackFetchOnlineLyrics": "Télécharger depuis Internet", - "snackbarNoActionDefined": "Aucune action n'est associée à ce bouton", - "@snackbarNoActionDefined": { - "description": "Snackbar when an extension button has no action configured" + "trackCoverClearSelected": "Supprimer la pochette sélectionnée", + "@trackCoverClearSelected": { + "description": "Tooltip for clearing the newly selected cover art" }, - "downloadAllCount": "Tout télécharger ({count})", - "@downloadAllCount": { - "description": "Download all button with count", - "placeholders": { - "count": { - "type": "int" - } - } + "trackCoverCurrent": "Pochette actuelle", + "@trackCoverCurrent": { + "description": "Label for the currently embedded cover preview" }, - "downloadedAlbumDiscHeader": "Disque {discNumber}", - "@backupInvalidFile": { - "description": "Snackbar when the chosen file is not a valid backup" + "trackCoverSelected": "Pochette choisie", + "@trackCoverSelected": { + "description": "Label for the newly selected cover preview" }, - "@extensionHooksAvailable": { - "description": "Post-processing hooks count", - "placeholders": { - "count": { - "type": "int" - } - } + "trackCoverReplaceNotice": "La pochette sélectionnée remplacera la pochette actuellement intégrée lorsque vous appuierez sur « Enregistrer ».", + "@trackCoverReplaceNotice": { + "description": "Notice shown when a new cover has been selected but not saved yet" }, - "@logIssueTrackNotFoundSuggestion": { - "description": "Diagnostic badge suggestion when a track is unavailable" + "trackCoverResolution": "Résolution de la couverture", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" }, - "@snackbarFileNotFound": { - "description": "Snackbar - file doesn't exist" + "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" }, - "extensionHealthOnline": "En ligne", - "@extensionHealthOnline": { - "description": "Extension service health status - online" + "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" }, - "settingsSaveDownloadHistorySubtitle": "Conserver les téléchargements terminés dans l'historique et la bibliothèque", - "trackOptionRemoveFromWishlist": "Supprimer de la liste de souhaits", - "extensionsFallbackTitle": "Extensions de secours", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" + "actionStop": "Arrêter", + "@actionStop": { + "description": "Generic action - stop" }, - "metadataSaveFailedFfmpeg": "Échec de l'enregistrement des métadonnées via FFmpeg", - "@albumFolderAlbumOnly": { - "description": "Album folder option" + "queueFinalizingDownload": "Téléchargement en cours", + "@queueFinalizingDownload": { + "description": "Accessibility label for a queue item that is finalizing" }, - "@albumFolderYearAlbumSubtitle": { - "description": "Folder structure example" + "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" }, - "downloadedAlbumDeleteSelected": "Supprimer la sélection", - "selectionSelectPlaylistsToDelete": "Sélectionnez les playlists à supprimer", - "@selectionSelectPlaylistsToDelete": { - "description": "Hint shown when no playlists are selected for deletion" + "queueMoveUp": "Remonter", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" }, - "storeAddRepoDescription": "Saisissez l'URL d'un dépôt GitHub contenant un fichier registry.json pour parcourir et installer des extensions.", - "appearanceThemeDark": "Sombre", - "downloadedAlbumTapToSelect": "Appuyez sur les titres pour les sélectionner", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } + "queueMoveDown": "Descendre", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" }, - "@backupRestored": { - "description": "Snackbar after a successful restore" + "editMetadataMusicBrainzButton": "Récupérer depuis MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" }, - "nowPlayingLibraryEmpty": "Votre bibliothèque est vide", - "@nowPlayingLibraryEmpty": { - "description": "Snackbar when shuffle library is requested but library has no tracks" + "editMetadataMusicBrainzFilled": "Mise à jour à partir de MusicBrainz", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" }, - "editMetadataAutoFillNoResults": "Aucune métadonnée correspondante n'a été trouvée en ligne", - "updateDownloading": "Téléchargement en cours...", - "trackLyricsSource": "Source : {source}", - "logFilterLevel": "Niveau", - "logNoLogsYet": "Pas encore de journal", - "cacheSizeOnly": "{size}", - "@cacheSizeOnly": { - "description": "Cache size only", - "placeholders": { - "size": { - "type": "String" - } - } + "editMetadataMusicBrainzNothing": "Aucun résultat trouvé sur MusicBrainz", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" }, - "trackOpenInService": "Ouvrir dans {serviceName}", - "@trackOpenInService": { - "description": "Button label to open a track in a named music service", - "placeholders": { - "serviceName": { - "type": "String" - } - } + "editMetadataMusicBrainzNeedsIsrc": "Nécessite une balise ISRC", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" }, - "@cacheLibraryCoverDesc": { - "description": "Description of what library cover cache contains" + "nowPlayingRepeatOff": "Répétition désactivée", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" }, - "libraryClearConfirmMessage": "Cette opération supprimera toutes les pistes numérisées de votre bibliothèque. Vos fichiers musicaux ne seront pas supprimés.", - "@dialogImportPlaylistMessage": { - "description": "Dialog message - import playlist confirmation", + "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" } } }, - "extensionsHomeFeedAuto": "Auto", - "searchEmptyResultSubtitle": "Essayez un autre mot-clé", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" + "queueDownloadedFileMissing": "Fichier téléchargé manquant", + "@queueDownloadedFileMissing": { + "description": "Accessibility label when a downloaded file is missing from disk" }, - "dateToday": "Aujourd'hui", - "a11yOpenItem": "Ouvrir {itemType} {name}", - "@a11yOpenItem": { - "description": "Accessibility label for opening a generic item", - "placeholders": { - "itemType": { - "type": "String" - }, - "name": { - "type": "String" - } - } + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." }, - "audioAnalysisBitDepth": "Nombre de bits", - "editMetadataFieldTrackTotal": "Total des pistes", - "@editMetadataFieldTrackTotal": { - "description": "Label for total tracks field in the edit metadata sheet" + "queueDownloadCompleted": "Téléchargement terminé", + "@queueDownloadCompleted": { + "description": "Accessibility label for completed download state in queue" }, - "@editMetadataFieldDiscTotal": { - "description": "Label for total discs field in the edit metadata sheet" + "queueRateLimitTitle": "Débit limité", + "@queueRateLimitTitle": { + "description": "Title shown on a failed queue item when the download service rate limits requests" }, - "replayGainBatchConfirmMessage": "Analyser le niveau sonore et ajouter des balises ReplayGain à {count} piste(s) ?", - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Dossier nommé d'après la balise « Artiste de l'album »", - "@notifDownloadingUpdate": { - "description": "Notification title while downloading an app update", + "queueRateLimitMessage": "Ce titre est peut-être encore disponible. Patientez quelques minutes, réduisez le nombre de téléchargements simultanés, puis réessayez.", + "@queueRateLimitMessage": { + "description": "Explanation shown on a failed queue item when the download service rate limits requests" + }, + "appearanceSelectAccentColor": "Sélectionnez une couleur d'accentuation {hex}", + "@appearanceSelectAccentColor": { + "description": "Accessibility label for picking an accent color", "placeholders": { - "version": { + "hex": { "type": "String" } } }, - "@csvImportTracks": { - "description": "Label shown in quality picker for CSV import", - "placeholders": { - "count": { - "type": "int" - } - } + "logAutoScrollOn": "Défilement automatique activé", + "@logAutoScrollOn": { + "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "trackEditMetadata": "Modifier les métadonnées", - "discographyDownloadAll": "Tout télécharger", - "@discographyDownloadAll": { - "description": "Option - download entire discography" + "logAutoScrollOff": "Défilement automatique désactivé", + "@logAutoScrollOff": { + "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "@editMetadataFieldAlbum": { - "description": "Chip label for album field in auto-fill selector" + "logCopyLogs": "Copier les journaux", + "@logCopyLogs": { + "description": "Tooltip for copying logs" }, - "albumFolderArtistAlbumSubtitle": "Albums/Nom de l'artiste/Titre de l'album/", - "extensionHealthServiceUnknown": "État du service inconnu", - "navHome": "Accueil", - "queueDownloadStarting": "C'est parti...", - "@dialogRemoveExtension": { - "description": "Dialog title - uninstall extension" + "logClearSearch": "Effacer la recherche", + "@logClearSearch": { + "description": "Tooltip for clearing the log search field" }, - "notifLibraryScanProgressNoTotal": "{scanned} fichiers analysés • {percentage} %", - "@appearanceAmoledDark": { - "description": "Theme option - pure black" + "logIssueIspBlockingLabel": "BLOCAGE PAR LE FAI DÉTECTÉ", + "@logIssueIspBlockingLabel": { + "description": "Diagnostic badge label when ISP blocking is detected" }, - "qualityHiResFlac": "FLAC haute résolution", - "selectionSelected": "{count} sélectionnés", - "extensionDetailsInformation": "Information", - "@extensionDetailsInformation": { - "description": "Section title for extension metadata information" - }, - "discographyDownload": "Télécharger la discographie", - "editMetadataFieldCopyright": "Droits d'auteur", - "@setupOpenSettings": { - "description": "Button to open system settings" - }, - "libraryFilterSort": "Trier", - "cacheLibraryCoverDesc": "Pochettes extraites des fichiers musicaux locaux. Elles seront extraites à nouveau lors de la prochaine analyse.", - "dialogRemoveExtension": "Supprimer l'extension", - "backupExportSectionTitle": "Créer une sauvegarde", - "downloadEmbedLyricsDisabled": "Activez d'abord l'intégration des métadonnées", - "openInOtherServices": "Ouvrir dans d'autres services", - "actionSelectAll": "Tout sélectionner", - "settingsDownloadNetworkSubtitle": "Choisissez le réseau à utiliser pour les téléchargements. Si vous sélectionnez « Wi-Fi uniquement », les téléchargements seront interrompus lorsque vous utilisez les données mobiles.", - "downloadFolderOrganization": "Organisation du dossier", - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", - "@tutorialWelcomeTip2": { - "description": "Tutorial welcome tip 2" - }, - "selectionAllSelected": "Toutes les pistes sélectionnées", - "@selectionAllSelected": { - "description": "Status - all items selected" - }, - "settingsLogsSubtitle": "Consulter les journaux de l'application pour le débogage", - "albumFolderYearAlbumSubtitle": "Albums/[2005] Titre de l'album/", - "cancelDownloadKeep": "Conserver", - "optionsDetailedLoggingOn": "Des journaux détaillés sont enregistrés", - "safMigrationMessage2": "Veuillez sélectionner à nouveau votre dossier de téléchargement pour passer au nouveau système de stockage.", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" - }, - "regionCountryJP": "Japon", - "notifUpdateFailed": "Échec de la mise à jour", - "downloadCreatePlaylistSourceFolderRedundant": "Géré par les paramètres d'organisation des dossiers", - "@trackLyricsSaved": { - "description": "Snackbar after lyrics saved", - "placeholders": { - "fileName": { - "type": "String" - } - } + "logIssueIspBlockingDescription": "Il se peut que votre fournisseur d'accès Internet bloque l'accès aux services de téléchargement", + "@logIssueIspBlockingDescription": { + "description": "Diagnostic badge description for ISP blocking" }, - "downloadLocationSubtitle": "Choisissez l'emplacement où enregistrer vos morceaux téléchargés", - "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", - "lyricsProvidersDisabledSection": "Désactivés ({count})", - "@dateDaysAgo": { - "description": "Relative date - days ago", - "placeholders": { - "count": { - "type": "int" - } - } + "logIssueIspBlockingSuggestion": "Essayez d'utiliser un VPN ou de modifier vos paramètres DNS pour les remplacer par 1.1.1.1 ou 8.8.8.8", + "@logIssueIspBlockingSuggestion": { + "description": "Diagnostic badge suggestion for ISP blocking" }, - "librarySourceLocal": "Locale", - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", - "sectionService": "Service", - "lyricsProviderQqMusicDesc": "QQ Music (idéal pour écouter des titres chinois, via un proxy)", - "@lyricsProviderQqMusicDesc": { - "description": "Description for QQ Music provider" + "logIssueRateLimitedLabel": "NOMBRE LIMITÉ", + "@logIssueRateLimitedLabel": { + "description": "Diagnostic badge label when the service rate limits requests" }, - "cacheCleanupUnusedDesc": "Supprimer les entrées orphelines de l'historique des téléchargements et de la bibliothèque pour les fichiers manquants.", - "selectionTapPlaylistsToSelect": "Appuyez sur les playlists pour les sélectionner", - "notifUpdateFailedBody": "Impossible de télécharger la mise à jour. Veuillez réessayer plus tard.", - "downloadNeteaseIncludeTranslationDisabled": "Paroles originales uniquement", - "artistPopular": "Populaire", - "extensionRemoveButton": "Supprimer l'extension", - "allFilesAccessEnabledSubtitle": "Peut écrire dans n'importe quel dossier", - "@allFilesAccessEnabledSubtitle": { - "description": "Subtitle when all files access is enabled" + "logIssueRateLimitedDescription": "Trop de requêtes adressées au service", + "@logIssueRateLimitedDescription": { + "description": "Diagnostic badge description for rate limiting" }, - "extensionsSearchProvider": "Moteur de recherche", - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", - "selectionBatchConvertConfirmTitle": "Conversion par lots", - "extensionMetadataProvider": "Fournisseur de métadonnées", - "queueDownloadedFileMissing": "Fichier téléchargé manquant", - "logClearLogs": "Effacer les journaux", - "@downloadAppleQqMultiPerson": { - "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" + "logIssueRateLimitedSuggestion": "Attendez quelques minutes avant de réessayer", + "@logIssueRateLimitedSuggestion": { + "description": "Diagnostic badge suggestion for rate limiting" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", - "@tutorialWelcomeTip1": { - "description": "Tutorial welcome tip 1" + "logIssueNetworkErrorLabel": "ERREUR DE RÉSEAU", + "@logIssueNetworkErrorLabel": { + "description": "Diagnostic badge label for generic network errors" }, - "logIssueRateLimitedSuggestion": "Attendez quelques minutes avant de réessayer", - "downloadAllowLocalNetworkEnabled": "Les requêtes vers des adresses locales ou privées sont autorisées (pour un proxy local ou un DNS personnalisé)", - "@regionCountryUS": { - "description": "Country name for SongLink region picker" + "logIssueNetworkErrorDescription": "Problèmes de connexion détectés", + "@logIssueNetworkErrorDescription": { + "description": "Diagnostic badge description for generic network errors" }, - "trackArtist": "Artiste", - "extensionCustomUrlHandling": "Gestion des URL personnalisées", - "appearanceDynamicColorSubtitle": "Utilisez les couleurs de votre fond d'écran", - "@appearanceDynamicColorSubtitle": { - "description": "Subtitle for dynamic color" + "logIssueNetworkErrorSuggestion": "Vérifiez votre connexion Internet", + "@logIssueNetworkErrorSuggestion": { + "description": "Diagnostic badge suggestion for generic network errors" }, - "searchSortDefault": "Par défaut", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" + "logIssueTrackNotFoundLabel": "PISTE INTROUVABLE", + "@logIssueTrackNotFoundLabel": { + "description": "Diagnostic badge label when a track is unavailable" }, - "albumFolderStructureDescription": "Choisissez la structure des dossiers d'albums", - "@albumFolderStructureDescription": { - "description": "Album folder structure picker description" + "logIssueTrackNotFoundDescription": "Certains titres n'ont pas pu être trouvés sur les plateformes de téléchargement", + "@logIssueTrackNotFoundDescription": { + "description": "Diagnostic badge description when a track is unavailable" }, - "libraryBuiltInPreviewPlayerSubtitle": "Uniquement pour des écoutes rapides et locales dans SpotiFLAC Mobile ; non recommandé pour une écoute régulière", - "@libraryBuiltInPreviewPlayerSubtitle": { - "description": "Subtitle for built-in preview player option" + "logIssueTrackNotFoundSuggestion": "Il se peut que ce morceau ne soit pas disponible en qualité sans perte", + "@logIssueTrackNotFoundSuggestion": { + "description": "Diagnostic badge suggestion when a track is unavailable" }, - "storageModeAppFolder": "Dossier « Applications » (recommandé)", - "@actionPause": { - "description": "Action button - pause download" + "clickableLookingUpArtist": "Recherche d'artiste...", + "@clickableLookingUpArtist": { + "description": "Snackbar shown while clickable artist metadata is being resolved" }, - "actionPaste": "Coller", - "extensionSettingsCount": "{count} {count, plural, =1{paramètre} other{paramètres}}", - "downloadNativeWorker": "Tâche de téléchargement native", - "releaseTypeEp": "EP", - "@releaseTypeEp": { - "description": "Badge label for EP releases" + "clickableInformationUnavailable": "Informations sur {type} non disponibles", + "@clickableInformationUnavailable": { + "description": "Snackbar shown when clickable metadata cannot open a destination", + "placeholders": { + "type": { + "type": "String" + } + } }, - "snackbarExtensionInstalledEnable": "{extensionName} est installée. Activez-la dans Paramètres > Extensions", - "cacheRefreshStats": "Actualiser les statistiques", - "collectionPlaylistChangeCover": "Changer l'image de couverture", - "@collectionPlaylistChangeCover": { - "description": "Bottom sheet action to pick a custom cover image for a playlist" + "extensionDetailsTags": "Balises", + "@extensionDetailsTags": { + "description": "Section title for extension tags" }, - "optionsClearHistory": "Effacer l'historique des téléchargements", - "trackGenre": "Genre", - "snackbarSelectedPlaylistsEmpty": "Les playlists sélectionnées ne contiennent aucun morceau", - "collectionAddedTracksToPlaylist": "Ajout de {count} {count, plural, =1{titre} other{titres}} à {playlistName}", - "downloadNeteaseIncludeRomanization": "Netease : inclure la romanisation", - "libraryFilterMetadataMissingArtist": "Artiste manquant", - "extensionsNoCustomSearch": "Aucune extension avec recherche personnalisée", - "@extensionsTitle": { - "description": "Extensions page title" + "extensionDetailsInformation": "Information", + "@extensionDetailsInformation": { + "description": "Section title for extension metadata information" }, - "extensionDownloadProvider": "Fournisseur de téléchargement", - "@extensionDownloadProvider": { - "description": "Capability - provides downloads" + "extensionUtilityFunctions": "Fonctions utilitaires", + "@extensionUtilityFunctions": { + "description": "Capability label for utility-only extensions" }, - "lyricsMode": "Mode Paroles", - "aboutReportIssueSubtitle": "Signalez tout problème que vous rencontrez", - "@downloadSeparateSinglesFolder": { - "description": "Setting - separate folder for singles" + "actionDismiss": "Ignorer", + "@actionDismiss": { + "description": "Generic action - dismiss" }, - "appearanceAmoledDark": "Noir Amoled", - "logIssueNetworkErrorDescription": "Problèmes de connexion détectés", - "folderOrganizationByArtistAlbumSubtitle": "Dossiers imbriqués pour les artistes et les albums", - "@libraryForceFullScanSubtitle": { - "description": "Subtitle for force full scan button" + "setupChangeFolderTooltip": "Changer de dossier", + "@setupChangeFolderTooltip": { + "description": "Tooltip for editing the selected download folder" }, - "setupGrantPermission": "Accorder l'autorisation", - "lyricsProvidersDescription": "Activer, désactiver et réorganiser les sources de paroles. Les sources sont parcourues de haut en bas jusqu'à ce que les paroles soient trouvées.", - "dateDaysAgo": "Il y a {count} jours", - "extensionsHomeFeedDescription": "Choisissez l'extension qui affiche le fil d'actualité sur l'écran principal", - "downloadLossyMp3Subtitle": "Compatibilité optimale, environ 10 Mo par piste", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" + "a11yOpenTrackByArtist": "Écouter le morceau {trackName} de {artistName}", + "@a11yOpenTrackByArtist": { + "description": "Accessibility label for opening a track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "nowPlayingDetails": "Détails", - "collectionWishlistEmptyTitle": "La liste de souhaits est vide", - "downloadAppleQqMultiPersonEnabled": "Étiquettes d'intervenants incluses pour les duos et les morceaux en groupe", - "@snackbarExtensionUpdatedVersion": { - "description": "Snackbar after updating an extension from the repo tab", + "a11yOpenItem": "Ouvrir {itemType} {name}", + "@a11yOpenItem": { + "description": "Accessibility label for opening a generic item", "placeholders": { - "extensionName": { + "itemType": { "type": "String" }, - "version": { + "name": { "type": "String" } } }, - "extensionHealthServiceDegraded": "Service perturbé", - "selectionConvertNoConvertible": "Aucune piste convertible sélectionnée", - "setupStorageGranted": "Autorisation de stockage accordée !", - "downloadAllowLocalNetwork": "Autoriser l'accès au réseau local", - "nowPlayingNoLyrics": "Ce fichier ne contient pas de paroles", - "selectionDeleteTracksCount": "Supprimer {count} {count, plural, =1{titre} other{titres}}", - "@selectionDeleteTracksCount": { - "description": "Button label for deleting selected tracks", + "a11yOpenItemCount": "Ouvrir {title}, {count} {count, plural, =1{item} other{éléments}}", + "@a11yOpenItemCount": { + "description": "Accessibility label for opening a grouped item with count", "placeholders": { + "title": { + "type": "String" + }, "count": { "type": "int" } } }, - "@libraryForceFullScan": { - "description": "Button to force a complete rescan of library" - }, - "notifLibraryScanExcluded": "{count} exclus", - "@aboutPaxsenixSubtitle": { - "description": "Subtitle for Paxsenix special thanks entry on the about page" + "a11yOpenAlbumByArtistTrackCount": "Ouvrir l'album {albumName} de {artistName}, {trackCount} titres", + "@a11yOpenAlbumByArtistTrackCount": { + "description": "Accessibility label for opening an album item with track count", + "placeholders": { + "albumName": { + "type": "String" + }, + "artistName": { + "type": "String" + }, + "trackCount": { + "type": "int" + } + } }, - "setupChangeFolderTooltip": "Changer de dossier", - "logIssueIspBlockingDescription": "Il se peut que votre fournisseur d'accès Internet bloque l'accès aux services de téléchargement", - "@logIssueIspBlockingDescription": { - "description": "Diagnostic badge description for ISP blocking" + "a11yTrackByArtist": "{trackName} de {artistName}", + "@a11yTrackByArtist": { + "description": "Accessibility label for a queue or list track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "libraryClear": "Vider la bibliothèque", - "collectionRemoveFromPlaylist": "Supprimer de la playlist", - "@collectionRemoveFromPlaylist": { - "description": "Tooltip for removing track from playlist" + "a11ySelectAlbum": "Sélectionnez l'album {albumName}", + "@a11ySelectAlbum": { + "description": "Accessibility label for selecting an album", + "placeholders": { + "albumName": { + "type": "String" + } + } }, - "backupIncludeSecrets": "Inclure les informations d'identification de l'extension", - "notifDownloadsFinishedBody": "{completed, plural, =1{1 titre téléchargé} other{{completed} titres téléchargés}}, {failed, plural, =1{1 échec} other{{failed} échecs}}", - "storeCategoryMetadata": "Métadonnées", - "@trackLyricsEmbedded": { - "description": "Snackbar - lyrics saved to file" + "a11yOpenAlbum": "Ouvrir l'album {albumName}", + "@a11yOpenAlbum": { + "description": "Accessibility label for opening an album", + "placeholders": { + "albumName": { + "type": "String" + } + } }, - "editMetadataFieldDiscTotal": "Total des disques", - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "downloadCreatePlaylistSourceFolderDisabled": "Tous les morceaux sont enregistrés directement dans le dossier de téléchargement", + "settingsFiles": "Fichiers & Dossiers", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Emplacement de téléchargement, nom de fichier, structure des dossiers", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Métadonnées", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Pochettes, balises, ReplayGain, fournisseurs", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Paroles", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Intégration, mode, fournisseurs, options linguistiques", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "settingsApp": "Application", + "@settingsApp": { + "description": "Settings menu item - app settings" + }, + "settingsAppSubtitle": "Mises à jour, données, dépôt d'extension, débogage", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" + }, + "sectionMetadataProviders": "Fournisseurs", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" + }, + "sectionDuplicates": "Doublons", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" + }, + "sectionLyricsProviderOptions": "Options du fournisseur", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" + }, + "metadataProvidersTitle": "Priorité des fournisseurs de métadonnées", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" + }, + "metadataProvidersSubtitle": "Faites glisser pour définir l'ordre des sources de recherche et de métadonnées", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" + }, + "downloadDeduplication": "Éviter les téléchargements en double", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" + }, + "downloadDeduplicationEnabled": "Les morceaux déjà téléchargés seront ignorés", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" + }, + "downloadDeduplicationWithQualityVariants": "Les fichiers existants correspondant à la qualité sélectionnée seront ignorés", + "@downloadDeduplicationWithQualityVariants": { + "description": "Deduplication subtitle when separate quality versions are allowed" + }, + "downloadDeduplicationDisabled": "Tous les morceaux seront téléchargés, quel que soit l'historique", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadQualityVariants": "Autoriser différentes versions de qualité", + "@downloadQualityVariants": { + "description": "Setting to retain multiple quality versions of the same track" + }, + "downloadQualityVariantsDescription": "Conserver toutes les versions de qualité ; n'ajouter la note de qualité au nom de fichier que si ce nom est déjà utilisé", + "@downloadQualityVariantsDescription": { + "description": "Description for retaining multiple quality versions" + }, + "trackOptionDownloadQualityVariant": "Télécharger une autre version de qualité", + "@trackOptionDownloadQualityVariant": { + "description": "Track menu action to download another quality version" + }, + "downloadFallbackExtensions": "Extensions de secours", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choisissez les extensions pouvant servir de solution de secours", "@downloadFallbackExtensionsSubtitle": { "description": "Subtitle for fallback extensions item" }, - "libraryFilterLocal": "Locale", - "tutorialDownloadInProgressSemantics": "Téléchargement en cours", - "searchSortDurationLong": "Durée (la plus longue)", - "@appearanceLanguage": { - "description": "Language setting title" + "editMetadataFieldDateHint": "AAAA-MM-JJ ou AAAA", + "@editMetadataFieldDateHint": { + "description": "Hint text for the edit metadata date field" + }, + "editMetadataFieldTrackTotal": "Total des pistes", + "@editMetadataFieldTrackTotal": { + "description": "Label for total tracks field in the edit metadata sheet" + }, + "editMetadataFieldDiscTotal": "Total des disques", + "@editMetadataFieldDiscTotal": { + "description": "Label for total discs field in the edit metadata sheet" + }, + "editMetadataFieldComposer": "Compositeur", + "@editMetadataFieldComposer": { + "description": "Label for composer field in the edit metadata sheet" + }, + "editMetadataFieldComment": "Commentaire", + "@editMetadataFieldComment": { + "description": "Label for comment field in the edit metadata sheet" + }, + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" + }, + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" + }, + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" + }, + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" + }, + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" + }, + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" + }, + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, + "editMetadataAdvanced": "Avancé", + "@editMetadataAdvanced": { + "description": "Expandable section label for advanced metadata fields" + }, + "libraryFilterMetadataMissingTrackNumber": "Numéro de piste manquant", + "@libraryFilterMetadataMissingTrackNumber": { + "description": "Filter option - items missing track number" + }, + "libraryFilterMetadataMissingDiscNumber": "Numéro de disque manquant", + "@libraryFilterMetadataMissingDiscNumber": { + "description": "Filter option - items missing disc number" + }, + "libraryFilterMetadataMissingArtist": "Artiste manquant", + "@libraryFilterMetadataMissingArtist": { + "description": "Filter option - items missing artist" + }, + "libraryFilterMetadataIncorrectIsrcFormat": "Format ISRC incorrect", + "@libraryFilterMetadataIncorrectIsrcFormat": { + "description": "Filter option - items with an invalid ISRC format" + }, + "libraryFilterMetadataMissingIsrc": "ISRC manquant", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, + "libraryFilterMetadataMissingLabel": "Label manquant", + "@libraryFilterMetadataMissingLabel": { + "description": "Filter option - items missing record label" + }, + "collectionDeletePlaylistsMessage": "Supprimer {count} {count, plural, =1{playlist} other{playlists}}?", + "@collectionDeletePlaylistsMessage": { + "description": "Confirmation message for deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} supprimées", + "@collectionPlaylistsDeleted": { + "description": "Snackbar after deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "collectionAddedTracksToPlaylist": "Ajout de {count} {count, plural, =1{titre} other{titres}} à {playlistName}", + "@collectionAddedTracksToPlaylist": { + "description": "Snackbar after adding multiple tracks to a playlist", + "placeholders": { + "count": { + "type": "int" + }, + "playlistName": { + "type": "String" + } + } + }, + "collectionAddedTracksToPlaylistWithExisting": "Ajout de {count} {count, plural, =1{titre} other{titres}} à {playlistName} ({alreadyCount} titres déjà présents dans la playlist)", + "@collectionAddedTracksToPlaylistWithExisting": { + "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "placeholders": { + "count": { + "type": "int" + }, + "playlistName": { + "type": "String" + }, + "alreadyCount": { + "type": "int" + } + } + }, + "itemCount": "{count} {count, plural, =1{élément} other{éléments}}", + "@itemCount": { + "description": "Generic item count label", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "trackReEnrichSuccessWithFailures": "Les métadonnées ont été réenrichies avec succès ({successCount}/{total}) - Échec : {failedCount}", + "@trackReEnrichSuccessWithFailures": { + "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "placeholders": { + "successCount": { + "type": "int" + }, + "total": { + "type": "int" + }, + "failedCount": { + "type": "int" + } + } + }, + "selectionDeleteTracksCount": "Supprimer {count} {count, plural, =1{titre} other{titres}}", + "@selectionDeleteTracksCount": { + "description": "Button label for deleting selected tracks", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueDownloadSpeedStatus": "Téléchargement - {speed} Mo/s", + "@queueDownloadSpeedStatus": { + "description": "Queue status while downloading with speed", + "placeholders": { + "speed": { + "type": "String" + } + } + }, + "queueDownloadStarting": "C'est parti...", + "queueCheckingDownloadSession": "Vérification de la session de téléchargement...", + "queueResolvingDownloadMetadata": "Récupération des métadonnées du morceau...", + "queueResolvingDownloadStream": "Préparation du flux audio...", + "queueWaitingForVerification": "En attente de vérification...", + "queueResumingAfterVerification": "Reprise après vérification...", + "@queueDownloadStarting": { + "description": "Queue status before download progress is available" + }, + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." + }, + "a11ySelectTrack": "Sélectionner une piste", + "@a11ySelectTrack": { + "description": "Accessibility label for selecting a track" + }, + "a11yDeselectTrack": "Désélectionner la piste", + "@a11yDeselectTrack": { + "description": "Accessibility label for deselecting a track" + }, + "a11yPlayTrackByArtist": "Écouter {trackName} de {artistName}", + "@a11yPlayTrackByArtist": { + "description": "Accessibility label for playing a local library track", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } + }, + "storeExtensionsCount": "{count} {count, plural, one {}=1{extension} other{extensions}}", + "@storeExtensionsCount": { + "description": "Store extension result count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "storeRequiresVersion": "Nécessite la version v{version}+", + "@storeRequiresVersion": { + "description": "Store compatibility badge for minimum app version", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "actionGo": "Aller", + "@actionGo": { + "description": "Generic action button label" + }, + "logIssueSummary": "Résumé du problème", + "@logIssueSummary": { + "description": "Header for log issue analysis summary" + }, + "logTotalErrors": "Nombre total d'erreurs : {count}", + "@logTotalErrors": { + "description": "Total error count in log issue analysis", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "logAffectedDomains": "Concerne : {domains}", + "@logAffectedDomains": { + "description": "Affected domains in log issue analysis", + "placeholders": { + "domains": { + "type": "String" + } + } + }, + "libraryScanCancelled": "Analyse annulée", + "@libraryScanCancelled": { + "description": "Library scan status when a scan was cancelled" + }, + "libraryScanCancelledSubtitle": "Vous pouvez relancer l'analyse dès que vous êtes prêt.", + "@libraryScanCancelledSubtitle": { + "description": "Library scan status subtitle after cancellation" + }, + "libraryDownloadsHistoryExcluded": "{count} dans l'historique des téléchargements (exclu de la liste)", + "@libraryDownloadsHistoryExcluded": { + "description": "Library count note for downloaded history items excluded from the local list", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadNativeWorker": "Tâche de téléchargement native", + "@downloadNativeWorker": { + "description": "Setting title for Android native download worker" + }, + "downloadNativeWorkerSubtitle": "Service d'arrière-plan Android pour le téléchargement d'extensions", + "@downloadNativeWorkerSubtitle": { + "description": "Setting subtitle for Android native download worker" + }, + "extensionServiceStatus": "État du service", + "@extensionServiceStatus": { + "description": "Extension detail section header for service status" + }, + "extensionServiceHealth": "Santé du service", + "@extensionServiceHealth": { + "description": "Extension capability label for service health checks" + }, + "extensionHealthChecksConfigured": "{count} {count, plural, =1{vérification} other{vérifications}} configurées", + "@extensionHealthChecksConfigured": { + "description": "Extension service health check count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionOauthConnectHint": "Appuyez sur « Se connecter à Spotify » pour remplir ce champ.", + "@extensionOauthConnectHint": { + "description": "Hint for an OAuth login link field before connecting Spotify" + }, + "extensionLastChecked": "Dernière vérification à {time}", + "@extensionLastChecked": { + "description": "Timestamp for the latest extension service health check", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "extensionRefreshStatus": "Actualiser l'état", + "@extensionRefreshStatus": { + "description": "Tooltip for refreshing extension service health status" + }, + "extensionCustomUrlHandling": "Gestion des URL personnalisées", + "@extensionCustomUrlHandling": { + "description": "Extension detail section title for custom URL handling" + }, + "extensionCustomUrlHandlingSubtitle": "Cette extension prend en charge les liens provenant de ces sites", + "@extensionCustomUrlHandlingSubtitle": { + "description": "Extension detail subtitle for custom URL handling" + }, + "extensionCustomUrlHandlingShareHint": "Partagez des liens provenant de ces sites vers SpotiFLAC Mobile et cette extension s'en chargera.", + "@extensionCustomUrlHandlingShareHint": { + "description": "Extension detail hint explaining share-to-app URL handling" + }, + "extensionSettingsCount": "{count} {count, plural, =1{paramètre} other{paramètres}}", + "@extensionSettingsCount": { + "description": "Count of settings exposed by an extension quality option", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionHealthOnline": "En ligne", + "@extensionHealthOnline": { + "description": "Extension service health status - online" + }, + "extensionHealthDegraded": "Dégradé", + "@extensionHealthDegraded": { + "description": "Extension service health status - degraded" + }, + "extensionHealthOffline": "Hors ligne", + "@extensionHealthOffline": { + "description": "Extension service health status - offline" + }, + "extensionHealthNotConfigured": "Non configuré", + "@extensionHealthNotConfigured": { + "description": "Extension service health status - not configured" + }, + "extensionHealthUnknown": "Inconnu", + "@extensionHealthUnknown": { + "description": "Extension service health status - unknown" + }, + "extensionHealthRequired": "requis", + "@extensionHealthRequired": { + "description": "Label for a required extension service health check" + }, + "extensionSettingNotSet": "Non défini", + "@extensionSettingNotSet": { + "description": "Value shown when an extension setting has no value" + }, + "extensionActionFailed": "L'action a échoué", + "@extensionActionFailed": { + "description": "Fallback error when an extension action fails without details" + }, + "extensionEnterValue": "Saisir une valeur", + "@extensionEnterValue": { + "description": "Hint for editing an extension setting value" + }, + "extensionHealthServiceOnline": "Service en ligne", + "@extensionHealthServiceOnline": { + "description": "Tooltip for online extension service" + }, + "extensionHealthServiceDegraded": "Service perturbé", + "@extensionHealthServiceDegraded": { + "description": "Tooltip for degraded extension service" + }, + "extensionHealthServiceOffline": "Service hors ligne", + "@extensionHealthServiceOffline": { + "description": "Tooltip for offline extension service" + }, + "extensionHealthServiceUnknown": "État du service inconnu", + "@extensionHealthServiceUnknown": { + "description": "Tooltip for unknown extension service health" + }, + "audioAnalysisStereo": "Stéréo", + "@audioAnalysisStereo": { + "description": "Audio channel layout label - stereo" + }, + "audioAnalysisMono": "Mono", + "@audioAnalysisMono": { + "description": "Audio channel layout label - mono" + }, + "trackOpenInService": "Ouvrir dans {serviceName}", + "@trackOpenInService": { + "description": "Button label to open a track in a named music service", + "placeholders": { + "serviceName": { + "type": "String" + } + } + }, + "trackLyricsEmbeddedSource": "Intégré", + "@trackLyricsEmbeddedSource": { + "description": "Lyrics source label for embedded lyrics" + }, + "unknownAlbum": "Album inconnu", + "@unknownAlbum": { + "description": "Fallback album name when metadata is missing" + }, + "unknownArtist": "Artiste inconnu", + "@unknownArtist": { + "description": "Fallback artist name when metadata is missing" + }, + "permissionAudio": "Audio", + "@permissionAudio": { + "description": "Audio permission type label" + }, + "permissionStorage": "Stockage", + "@permissionStorage": { + "description": "Storage permission type label" + }, + "permissionNotification": "Notification", + "@permissionNotification": { + "description": "Notification permission type label" + }, + "errorInvalidFolderSelected": "Dossier non valide sélectionné", + "@errorInvalidFolderSelected": { + "description": "Error when the selected folder is invalid" + }, + "storeAnyVersion": "N'importe lequel", + "@storeAnyVersion": { + "description": "Store detail value when any app version is accepted" + }, + "storeCategoryMetadata": "Métadonnées", + "@storeCategoryMetadata": { + "description": "Store extension category - metadata" + }, + "storeCategoryDownload": "Télécharger", + "@storeCategoryDownload": { + "description": "Store extension category - download" + }, + "storeCategoryUtility": "Utilitaire", + "@storeCategoryUtility": { + "description": "Store extension category - utility" + }, + "storeCategoryLyrics": "Paroles", + "@storeCategoryLyrics": { + "description": "Store extension category - lyrics" + }, + "storeCategoryIntegration": "Intégration", + "@storeCategoryIntegration": { + "description": "Store extension category - integration" + }, + "artistReleases": "Sorties", + "@artistReleases": { + "description": "Section header for all artist releases" + }, + "editMetadataSelectNone": "Aucun", + "@editMetadataSelectNone": { + "description": "Button to clear selected fields for auto-fill" + }, + "queueRetryAllFailed": "{count} tentatives ont échoué", + "@queueRetryAllFailed": { + "description": "Button to retry every failed download in the queue", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "settingsSaveDownloadHistory": "Enregistrer l'historique des téléchargements", + "@settingsSaveDownloadHistory": { + "description": "Settings switch title for storing completed downloads in history" + }, + "settingsSaveDownloadHistorySubtitle": "Conserver les téléchargements terminés dans l'historique et la bibliothèque", + "@settingsSaveDownloadHistorySubtitle": { + "description": "Settings switch subtitle for storing completed downloads in history" + }, + "dialogDisableHistoryTitle": "Désactiver l'historique des téléchargements ?", + "@dialogDisableHistoryTitle": { + "description": "Confirmation dialog title shown before disabling download history" + }, + "dialogDisableHistoryMessage": "L'historique actuel sera effacé. Les fichiers téléchargés ne seront pas supprimés.", + "@dialogDisableHistoryMessage": { + "description": "Confirmation dialog message shown before disabling download history" + }, + "dialogDisableAndClear": "Désactiver et effacer", + "@dialogDisableAndClear": { + "description": "Confirmation action to disable download history and clear existing entries" + }, + "openInOtherServices": "Ouvrir dans d'autres services", + "@openInOtherServices": { + "description": "Title and tooltip for finding the current collection in other services" + }, + "shareSheetNoExtensions": "Aucun autre service compatible", + "@shareSheetNoExtensions": { + "description": "Empty state when no extensions can be searched for cross-service links" + }, + "shareSheetNotFound": "Introuvable", + "@shareSheetNotFound": { + "description": "Cross-service share sheet row subtitle when a service has no match" + }, + "shareSheetCopyLink": "Copier le lien", + "@shareSheetCopyLink": { + "description": "Tooltip for copying a cross-service link" + }, + "shareSheetLinkCopied": "Lien {service} copié", + "@shareSheetLinkCopied": { + "description": "Snackbar after copying a cross-service link", + "placeholders": { + "service": {} + } + }, + "libraryPlayback": "Lecture", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "Lecteur externe", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommandé pour l'écoute, la meilleure qualité, la lecture en continu, l'égaliseur et la prise en charge d'un plus grand nombre de formats", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Lecteur de prévisualisation intégré", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Uniquement pour des écoutes rapides et locales dans SpotiFLAC Mobile ; non recommandé pour une écoute régulière", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "Le lecteur intégré est un outil de prévisualisation permettant de vérifier rapidement les morceaux stockés localement. Utilisez un lecteur de musique externe pour les écouter.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "En cours de lecture", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Il n'y a rien à l'écran", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Réduire", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "À suivre", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, + "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, + "nowPlayingDetails": "Détails", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, + "nowPlayingOpenInExternalPlayer": "Ouvrir dans un lecteur externe", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Lecteur", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Paroles", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "Ce fichier ne contient pas de paroles", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Votre bibliothèque est vide", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Impossible de lire aléatoirement la bibliothèque : {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } }, - "libraryAbout": "À propos de la bibliothèque locale", - "@libraryAbout": { - "description": "Section header for about info" + "nowPlayingShuffleOn": "Lecture aléatoire activée", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" }, - "cueSplitNoAudioFile": "Fichier audio introuvable pour cette liste CUE", - "notifUpdateReadyBody": "SpotiFLAC v{version} a été téléchargé. Appuyez pour l'installer.", - "appearanceSelectAccentColor": "Sélectionnez une couleur d'accentuation {hex}", - "@homeAlbumInfoUnavailable": { - "description": "Snackbar when album info cannot be loaded" + "nowPlayingPlayInOrder": "Lire dans l'ordre", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" }, - "trackReplayGain": "Réanalyser ReplayGain", - "downloadSeparateSinglesFolder": "Dossier dédié aux titres individuels", - "trackAlbumArtist": "Artiste de l'album", - "qualityFlacLossless": "FLAC sans perte", - "@extensionVerificationHelpMessageWaiting": { - "description": "Dialog message when verification may need manual browser help" + "nowPlayingShuffleLibrary": "Lecture aléatoire de la bibliothèque", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" }, - "tutorialSettingsTitle": "Personnalisez votre expérience", - "extensionActionFailed": "L'action a échoué", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" + "nowPlayingQueueEmpty": "La file d'attente est vide", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" }, - "downloadAppleQqMultiPerson": "Apple / QQ : Paroles pour plusieurs personnes", - "downloadFallbackExtensionsSubtitle": "Choisissez les extensions pouvant servir de solution de secours", - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", - "trackCoverNoEmbeddedArt": "Aucune pochette d'album n'a été trouvée", - "@trackCoverNoEmbeddedArt": { - "description": "Message shown when a track file has no embedded cover art" + "nowPlayingNoMetadata": "Aucune métadonnée disponible", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" }, - "snackbarExtensionUpdatedVersion": "{extensionName} a été mis à jour vers la version {version}", - "setupStorageAccessMessageAndroid11": "Depuis Android 11, l'autorisation « Accès à tous les fichiers » est requise pour enregistrer des fichiers dans le dossier de téléchargement de votre choix.", - "notifDownloadsFinished": "Téléchargements terminés ({completed} terminé, {failed} en échec)", - "notifLibraryScanProgressWithTotal": "{scanned}/{total} fichiers • {percentage} %", - "optionsPrimaryProvider": "Fournisseur principal", - "@optionsPrimaryProvider": { - "description": "Main search provider setting" + "announcementUnableToOpenLink": "Impossible d'ouvrir le lien. Veuillez réessayer.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" }, - "logIssueTrackNotFoundSuggestion": "Il se peut que ce morceau ne soit pas disponible en qualité sans perte", - "collectionAddedToLoved": "\"{trackName}\" ajouté aux Favoris", - "albumFolderArtistAlbumFlat": "Artiste / Album (singles)", - "homeAlbumInfoUnavailable": "Informations sur l'album non disponibles", - "settingsLyrics": "Paroles", - "extensionVerificationBrowserExternal": "Externe", - "regionCountryIN": "Inde", - "extensionHealthUnknown": "Inconnu", - "backupContentsWishlist": "{count} liste de souhaits {count, plural, =1{titre} other{titres}}", - "settingsAutoExportFailed": "Échec de l'exportation automatique des téléchargements", - "logFilterSection": "Filtre", - "dialogDiscardChanges": "Ignorer les modifications ?", - "@qualityHiResFlacSubtitle": { - "description": "Technical spec for hi-res" + "trackConvertLosslessOutputWithCap": "Sortie sans perte avec une limite de {quality}", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } }, - "searchTracks": "Titres", - "searchAlbums": "Albums", - "trackConvertFormat": "Convertir le format", - "metadataProviderPriorityTitle": "Priorité des métadonnées", - "libraryFolderHint": "Appuyez pour sélectionner un dossier", - "downloadedAlbumDeleteMessage": "Souhaitez-vous supprimer {count} {count, plural, =1{piste} other{pistes}} de cet album ?\n\nCela supprimera également les fichiers de l'espace de stockage.", - "@downloadedAlbumDeleteMessage": { - "description": "Delete confirmation with count", + "trackConvertConfirmMessageLosslessCapped": "Convertir du format {sourceFormat} au format {targetFormat} ({quality}) ?\n\nLe fichier de sortie conservera un codec sans perte, mais la profondeur de bits et la fréquence d'échantillonnage seront limitées. Le fichier d'origine sera supprimé après la conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Convertir {count} {count, plural, =1{titre} other{titres}} en {format} ({quality}) ?\n\nLe fichier de sortie conservera un codec sans perte, mais la profondeur de bits et la fréquence d'échantillonnage seront limitées. Les fichiers d'origine seront supprimés après la conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", "placeholders": { "count": { "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" } } }, - "trackAlbum": "Album", - "updateAvailable": "Mise à jour disponible", - "optionsEmbedLyrics": "Intégrer les paroles", - "trackReEnrichProgress": "Réenrichissement des métadonnées...", - "@trackReEnrichProgress": { - "description": "Snackbar while re-enriching metadata" + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } }, - "audioAnalysisPeak": "Pic", - "@audioAnalysisPeak": { - "description": "Peak amplitude metric label" + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "optionsExtensionStoreSubtitle": "Afficher l'onglet « Dépôt » dans le menu de navigation", - "settingsTitle": "Paramètres", - "@settingsAbout": { - "description": "Settings section - app info" + "aboutPaxsenixSubtitle": "Proxy de paroles pour Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou et Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" }, - "cacheExploreFeed": "Explorer le cache des flux", - "@dialogDownloadPlaylistsMessage": { - "description": "Dialog message for bulk playlist download confirmation", + "snackbarPlayingNext": "Prochainement", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Ajouté à la file d'attente", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Supprimer {count} {count, plural, one {}=1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", "placeholders": { - "trackCount": { - "type": "int" - }, - "playlistCount": { + "count": { "type": "int" } } }, - "downloadedAlbumSelectedCount": "{count} sélectionnés", - "downloadAskQualitySubtitle": "Afficher le sélecteur de qualité pour chaque téléchargement", - "filenameShowAdvancedTags": "Afficher les balises avancées", - "@filenameShowAdvancedTags": { - "description": "Toggle label for showing advanced filename tags" + "actionShuffle": "Lecture aléatoire", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" }, - "@editMetadataFieldComment": { - "description": "Label for comment field in the edit metadata sheet" + "downloadPrimaryArtistOnlyOn": "Primaire uniquement : Activé", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Primaire uniquement : Désactivé", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Métadonnées « Album » et « Artiste » : uniquement les données principales", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" }, - "downloadFallbackExtensions": "Extensions de secours", "downloadAlbumArtistMetadataFull": "Métadonnées de l'artiste de l'album : complètes", - "cacheLibraryCover": "Cache de couverture de bibliothèque", - "actionShuffle": "Lecture aléatoire", - "backupCreated": "Sauvegarde créée", - "downloadLossyAacSubtitle": "Compatibilité optimale avec les appareils mobiles, format M4A", - "actionCreate": "Créer", - "snackbarAddedToQueueGeneric": "Ajouté à la file d'attente", - "downloadedAlbumDownloadedCount": "{count} téléchargements", - "snackbarLoadingCueSheet": "Chargement de la liste CUE...", - "@trackCoverClearSelected": { - "description": "Tooltip for clearing the newly selected cover art" + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" }, - "aboutOriginalCreator": "Créateur de la version originale de SpotiFLAC", - "a11yTrackByArtist": "{trackName} de {artistName}", - "audioAnalysisDynamicRange": "Plage dynamique", - "homeChangeSearchProviderTooltip": "Changer de moteur de recherche", - "loadingSharedLink": "Chargement du lien partagé...", - "lyricsModeEmbedSubtitle": "Paroles enregistrées dans les métadonnées FLAC", - "setupNotificationBackgroundDescription": "Recevez des notifications sur la progression et la fin du téléchargement. Cela vous permet de suivre les téléchargements lorsque l'application est en arrière-plan.", - "snackbarViewQueue": "Afficher la file d'attente", - "@audioAnalysisDuration": { - "description": "Duration metric label" + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Qualité d'origine", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Sans perte", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "trackConvertDithering": "Hésitation", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "Rééchantillonneur", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "Aucun", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "HP triangulaire", + "@trackConvertDitherTriangularHp": { + "description": "Lossless conversion high-pass triangular dither option" + }, + "trackConvertResamplerSwr": "SWR", + "@trackConvertResamplerSwr": { + "description": "Lossless conversion default FFmpeg swresample resampler option" + }, + "trackConvertResamplerSoxr": "SoXr", + "@trackConvertResamplerSoxr": { + "description": "Lossless conversion SoX resampler option" + }, + "updateSeeReleaseNotes": "Pour plus de détails, consultez les notes de mise à jour.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Titre inconnu", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Suivant", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" }, - "downloadSeparateSinglesDisabled": "Les singles et les albums sont enregistrés dans le même dossier", - "backupRestored": "La sauvegarde a été restaurée avec succès", - "trackConvertConfirmMessageLosslessCapped": "Convertir du format {sourceFormat} au format {targetFormat} ({quality}) ?\n\nLe fichier de sortie conservera un codec sans perte, mais la profondeur de bits et la fréquence d'échantillonnage seront limitées. Le fichier d'origine sera supprimé après la conversion.", - "@trackConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless conversion of a single file", + "trackAddToQueue": "Ajouter à la file d'attente", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} est installée. Activez-la dans Paramètres > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", "placeholders": { - "sourceFormat": { + "extensionName": { "type": "String" - }, - "targetFormat": { + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} a été mis à jour vers la version {version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { "type": "String" }, - "quality": { + "version": { "type": "String" } } }, - "discographySelectAlbumsSubtitle": "Choisissez des albums ou des titres spécifiques", - "@discographySelectAlbumsSubtitle": { - "description": "Subtitle for select albums option" - }, - "backupImportSectionDescription": "Sélectionnez un fichier de sauvegarde pour restaurer vos données. Cette opération remplacera les réglages actuels, l'historique et la bibliothèque de cet appareil.", - "errorUrlFetchFailed": "Impossible de charger le contenu de ce lien. Veuillez réessayer.", - "lyricsProviderLyricsPlusDesc": "Paroles de karaoké mot à mot (Apple/Musixmatch/Spotify/QQ, via un proxy)", - "dialogSave": "Sauvegarder", - "trackReEnrichSearching": "Recherche de métadonnées en ligne...", - "regionCountryUS": "États-Unis", - "audioAnalysisDescription": "Vérifier la qualité sans perte à l'aide d'une analyse spectrale", - "downloadFilenameFormat": "Nom du fichier", - "cueSplitTitle": "Fiche CUE fractionnée", - "settingsAppSubtitle": "Mises à jour, données, dépôt d'extension, débogage", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "@setupPermissionRequiredMessage": { - "description": "Generic permission required message", + "snackbarFailedToInstallNamed": "Échec de l'installation de {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", "placeholders": { - "permissionType": { + "extensionName": { "type": "String" } } }, - "errorMissingExtensionSource": "Impossible de charger {item} : source de l'extension manquante", - "albumFolderAlbumOnlySubtitle": "Albums/Nom de l'album/", - "logIssueTrackNotFoundLabel": "PISTE INTROUVABLE", - "extensionVerificationHelpTitleManual": "Lancer la vérification manuellement", - "dialogDiscard": "Ignorer", - "storageModeSaf": "Dossier personnalisé (SAF)", - "errorRateLimited": "Débit limité", - "downloadSelectQuality": "Sélectionner la qualité", - "dialogDownloadPlaylistsMessage": "Télécharger {trackCount} {trackCount, plural, =1{titre} other{titres}} depuis {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}} ?", - "collectionFoldersTitle": "Mes dossiers", - "progressFetchingMetadata": "Récupération des métadonnées... {current}/{total}", - "settingsDownloadNetworkAny": "Wi-Fi + données mobiles", - "audioAnalysisDuration": "Durée", - "audioAnalysisAnalyzing": "Analyse audio en cours...", - "extensionVerificationHelpMessageWaiting": "Si le navigateur ne s'est pas ouvert, ou si la vérification s'est terminée sans que vous ne soyez redirigé vers SpotiFLAC Mobile, ouvrez à nouveau ce lien ou copiez-le manuellement.", - "editMetadataFieldDiscNum": "Disque n°", - "@editMetadataFieldDiscNum": { - "description": "Chip label for disc number field in auto-fill selector" - }, - "@noTracksFoundForAlbum": { - "description": "Empty state message when an album has no tracks" - }, - "previewPlay": "Écouter un aperçu", - "setupPermissionRequiredMessage": "L'autorisation {permissionType} est requise pour profiter pleinement de l'application. Vous pourrez modifier ce paramètre ultérieurement dans les Paramètres.", - "aboutVersion": "Version", - "qualityHiResFlacSubtitle": "24 bits / jusqu'à 96 kHz", - "audioAnalysisSamples": "Échantillons", - "libraryFilterQualityHiRes": "Haute résolution (24 bits)", - "sectionMetadataProviders": "Fournisseurs", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "trackCopyright": "Droits d'auteur", - "libraryForceFullScanSubtitle": "Réanalysez tous les fichiers en ignorant le cache", - "trackCopiedToClipboard": "Copié dans le presse-papiers", - "optionsEmbedMetadata": "Intégrer des métadonnées", - "collectionAddedTracksToPlaylistWithExisting": "Ajout de {count} {count, plural, =1{titre} other{titres}} à {playlistName} ({alreadyCount} titres déjà présents dans la playlist)", - "@collectionAddedTracksToPlaylistWithExisting": { - "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "snackbarFailedToUpdateNamed": "Échec de la mise à jour de {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", "placeholders": { - "count": { - "type": "int" - }, - "playlistName": { + "extensionName": { "type": "String" - }, - "alreadyCount": { - "type": "int" } } }, - "storeCategoryIntegration": "Intégration", - "storeClearFilters": "Effacer les filtres", - "navSettings": "Paramètres", - "@homeRecent": { - "description": "Section header for recent searches" - }, - "sectionApp": "Application", - "@sectionLanguage": { - "description": "Settings section header for language" - }, - "downloadFilterContributingDisabled": "Chaîne « Artiste » de l'album complet utilisée", - "albumFolderArtistAlbumSinglesSubtitle": "Artiste/Album/ et Artiste/Singles/", - "collectionDeletePlaylistsMessage": "Supprimer {count} {count, plural, =1{playlist} other{playlists}}?", - "lyricsProvidersSaved": "Priorité du fournisseur de paroles enregistrée", - "@trackReplayGainFailed": { - "description": "Snackbar message when ReplayGain scan/write fails" - }, - "trackTrackName": "Nom de la piste", - "homeRecent": "Récent", - "recentEmpty": "Aucun élément récent pour le moment", - "cacheClearAll": "Vider tout le cache", - "trackReEnrichFieldReleaseInfo": "Date & ISRC", - "regionCountryMX": "Mexique", - "a11yOpenAlbumByArtistTrackCount": "Ouvrir l'album {albumName} de {artistName}, {trackCount} titres", - "editMetadataFieldAlbum": "Album", - "settingsAbout": "À propos", - "libraryFilterTitle": "Filtres", - "cleanupOrphanedDownloadsResult": "{count} entrées orphelines ont été supprimées de l'historique", - "extensionHooksAvailable": "{count} crochet(s) disponibles", - "backupContentsSettings": "Paramètres de l'application", - "trackLyricsEmbedded": "Les paroles ont été intégrées avec succès", - "optionsUpdateChannelPreview": "Accédez aux versions préliminaires", - "collectionAddedToFavoriteArtists": "« {artistName} » a été ajouté à vos artistes préférés", - "libraryForceFullScan": "Lancer une analyse complète", - "snackbarProviderPrioritySaved": "Priorité du fournisseur enregistrée", - "collectionFavoriteArtistsEmptySubtitle": "Appuyez sur le cœur sur la page d'un artiste pour le garder ici", - "libraryBuiltInPlayerInfo": "Le lecteur intégré est un outil de prévisualisation permettant de vérifier rapidement les morceaux stockés localement. Utilisez un lecteur de musique externe pour les écouter.", - "extensionServiceStatus": "État du service", - "dateWeeksAgo": "Il y a {count} semaines", - "historyFilterSingles": "Titres", - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", - "trackLyricsSaved": "Paroles enregistrées dans {fileName}", - "cacheClearAllConfirmTitle": "Vider tout le cache ?", - "noTracksFoundForAlbum": "Aucun morceau trouvé pour cet album", - "sectionLanguage": "Langue", - "@logIssueTrackNotFoundDescription": { - "description": "Diagnostic badge description when a track is unavailable" - }, - "setupSelectFolder": "Sélectionner un dossier", - "dateYesterday": "Hier", - "collectionAddToPlaylist": "Ajouter à la playlist", - "snackbarUnsupportedAudioFormat": "Format audio non pris en charge", - "libraryScanCancelled": "Analyse annulée", - "appearanceLanguage": "Langue de l'application", - "extensionsTitle": "Extensions", - "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 ?", - "permissionNotification": "Notification", - "notifUpdateReady": "Prêt pour la mise à jour", - "lyricsModeDescription": "Choisissez comment les paroles sont enregistrées avec vos téléchargements", - "downloadFrom": "Télécharger depuis", - "collectionWishlistEmptySubtitle": "Appuyez sur le signe « + » à côté des morceaux pour enregistrer ceux que vous souhaitez télécharger plus tard", - "cueSplitSplitting": "Fractionnement de la liste CUE... ({current}/{total})", - "trackOptionAddToWishlist": "Ajouter à la liste de souhaits", - "settingsBackup": "Sauvegarde & Restauration", - "aboutPaxsenixSubtitle": "Proxy de paroles pour Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou et Genius", - "notifDownloadCompleteCount": "Téléchargement terminé ({completed}/{total})", - "extensionsNoDownloadProvider": "Aucune extension avec le fournisseur de téléchargement", - "libraryFilterSortGenreAsc": "Genre (A-Z)", - "trackReplayGainFailed": "Impossible d'ajouter les balises ReplayGain", - "collectionPlaylistRemoveCover": "Supprimer l'image de couverture", - "storeEmptyNoResults": "Aucune extension trouvée", - "logIssueTrackNotFoundDescription": "Certains titres n'ont pas pu être trouvés sur les plateformes de téléchargement", - "editMetadataFieldComment": "Commentaire", - "settingsMetadata": "Métadonnées", - "settingsCache": "Stockage & Cache", - "providerPriorityFallbackExtensionsHint": "Seules les extensions activées disposant de la fonctionnalité « fournisseur de téléchargement » sont répertoriées ici.", - "libraryFilterAll": "Tout", - "notifDownloadingUpdate": "Télécharger SpotiFLAC v{version}", - "extensionsProviderPrioritySection": "Priorité accordée aux prestataires", - "storeChangeRepoTooltip": "Changer de dépôt", - "snackbarFailedToInstall": "Échec de l'installation de l'extension", - "libraryScanSubtitle": "Recherchez des fichiers audio", - "snackbarExtensionInstalled": "{extensionName} est installée.", - "setupOpenSettings": "Ouvrir les paramètres", - "extensionsInstalledSection": "Extensions installées", - "aboutLinks": "Liens", - "trackCoverClearSelected": "Supprimer la pochette sélectionnée", - "libraryAutoScanWeekly": "Hebdomadaire", - "downloadMusixmatchLanguageAuto": "Auto (langue d'origine)", - "optionsDefaultSearchTab": "Onglet de recherche par défaut", - "downloadPrimaryArtistOnlyOn": "Primaire uniquement : Activé", - "folderOrganizationDescription": "Classer les fichiers téléchargés dans des dossiers", - "@folderOrganizationDescription": { - "description": "Folder organization sheet description" + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" }, - "lyricsModeEmbed": "Intégrer dans un fichier", - "trackReEnrichFfmpegFailed": "Échec de l'intégration des métadonnées FFmpeg", - "@extensionsSearchProviderDescription": { - "description": "Search provider setting description" + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" }, - "libraryFilterQualityLossy": "Avec perte", - "actionPause": "Pause", - "csvImportTracks": "{count} pistes issues d'un fichier CSV", - "actionGo": "Aller", - "sectionDebug": "Débogage", - "editMetadataFieldDate": "Date", - "timeHoursAgo": "{count, plural, =1{il y a 1 heure} other{il y a {count} heures}}", - "sectionPerformance": "Performances", - "extensionsDownloadPrioritySubtitle": "Définissez l'ordre des services de téléchargement", - "cacheAppDirectoryDesc": "Réponses HTTP, données WebView et autres données temporaires de l'application.", - "sectionData": "Données", - "notifFinalizingTrack": "Finalisation de {trackName}", - "snackbarFileNotFound": "Fichier introuvable", - "extensionQualityOptions": "Options de qualité", - "extensionVerificationBrowserSubtitleExternal": "Ouvrez d'abord les défis dans le navigateur par défaut", - "backupInvalidFile": "Ce fichier n'est pas une sauvegarde SpotiFLAC valide", - "storeRepoDialogTitle": "Répertoire des extensions", - "extensionsSearchProviderDescription": "Choisissez le service que vous souhaitez utiliser pour rechercher des morceaux", - "albumFolderAlbumOnly": "Album uniquement", - "nowPlayingOpenInExternalPlayer": "Ouvrir dans un lecteur externe", - "cueSplitButton": "Diviser en pistes", - "updateRequiredTitle": "Mise à jour requise", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" + "trackCoverOnline": "Pochette en ligne", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" }, - "updateRequiredNotice": "Cette version a {count} versions de retard et n'est plus prise en charge. Effectuez la mise à jour pour continuer à utiliser l'application.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryUS": "États-Unis", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" }, - "appearanceHeroAnimations": "Animations des héros", - "@appearanceHeroAnimations": { - "description": "Toggle for shared-element (Hero) transitions" + "regionCountryGB": "Royaume-Uni", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" }, - "appearanceHeroAnimationsSubtitle": "Des fenêtres contextuelles apparaissent entre les écrans, par exemple lors de l'ouverture du lecteur", - "@appearanceHeroAnimationsSubtitle": { - "description": "Subtitle for the Hero animations toggle" + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloads": "Téléchargements simultanés", - "@settingsConcurrentDownloads": { - "description": "Setting title - how many tracks download at the same time" + "regionCountryDE": "Allemagne", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloadsSubtitle": "Le téléchargement simultané de plusieurs titres est plus rapide, mais certains fournisseurs peuvent limiter le débit des requêtes parallèles.", - "@settingsConcurrentDownloadsSubtitle": { - "description": "Subtitle explaining the concurrent downloads picker" + "regionCountryJP": "Japon", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsOne": "1 titre à la fois", - "@concurrentDownloadsOne": { - "description": "Concurrent downloads option - sequential" + "regionCountryKR": "Corée du Sud", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsCount": "Jusqu'à {count} titres à la fois", - "@concurrentDownloadsCount": { - "description": "Concurrent downloads option - parallel", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryIN": "Inde", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalization": "Normalisation du volume", - "@libraryPlaybackNormalization": { - "description": "Toggle title for ReplayGain playback normalization in the built-in player" + "regionCountryID": "Indonésie", + "@regionCountryID": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalizationSubtitle": "Équilibrer le volume entre les morceaux à l'aide des balises ReplayGain ou R128, lorsqu'elles sont présentes", - "@libraryPlaybackNormalizationSubtitle": { - "description": "Subtitle explaining playback volume normalization" + "regionCountryBR": "Brésil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysis": "Cache d'analyse audio", - "@cacheAudioAnalysis": { - "description": "Cache item title for saved audio analysis results" + "regionCountryMX": "Mexique", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysisDesc": "Spectrogrammes et résultats d'analyse enregistrés. Réanalyse prévue lors de la prochaine ouverture.", - "@cacheAudioAnalysisDesc": { - "description": "Description of what audio analysis cache contains" + "regionCountryAU": "Australie", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginal": "Conserver le fichier d'origine", - "@trackConvertKeepOriginal": { - "description": "Toggle to preserve the source file during conversion" + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginalDescription": "Ajoutez le fichier converti en tant qu'entrée distincte dans la bibliothèque", - "@trackConvertKeepOriginalDescription": { - "description": "Description for preserving the source file during conversion" + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" }, - "trackConvertConfirmKeepOriginal": "Convertir du format {sourceFormat} au format {targetFormat} ?\n\nLe fichier d'origine sera conservé et le fichier converti sera ajouté en tant qu'entrée distincte dans la bibliothèque.", - "@trackConvertConfirmKeepOriginal": { - "description": "Confirmation message when the source file will be preserved", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionVerificationBrowserTitle": "Navigateur de vérification", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" }, - "selectionBatchConvertConfirmKeepOriginal": "Convertir {count} {count, plural, =1{titre} other{titres}} au format {format} ?\n\nLes fichiers d'origine seront conservés et les fichiers convertis seront ajoutés sous forme d'entrées distinctes dans la bibliothèque.", - "@selectionBatchConvertConfirmKeepOriginal": { - "description": "Batch conversion confirmation when source files will be preserved", - "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "extensionVerificationBrowserSubtitleExternal": "Ouvrez d'abord les défis dans le navigateur par défaut", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" }, - "downloadFolderAccessLostTitle": "Accès au dossier de téléchargement perdu", - "@downloadFolderAccessLostTitle": { - "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserSubtitleInApp": "Ouvrez d'abord les défis dans le navigateur intégré à l'application", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" }, - "downloadFolderAccessLostSubtitle": "Les téléchargements échoueront tant que vous n'aurez pas resélectionné le dossier", - "@downloadFolderAccessLostSubtitle": { - "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserExternal": "Externe", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" }, - "downloadFolderReselect": "Sélectionner à nouveau le dossier", - "@downloadFolderReselect": { - "description": "Button that reopens the folder picker to restore download folder access" + "extensionVerificationBrowserInApp": "Dans l'application", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" }, - "downloadErrorSafPermissionLost": "Autorisation SAF non valide ou révoquée. Veuillez reconfigurer l'emplacement de téléchargement dans les Paramètres.", - "@downloadErrorSafPermissionLost": { - "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" + "extensionVerificationHelpTitleManual": "Lancer la vérification manuellement", + "@extensionVerificationHelpTitleManual": { + "description": "Dialog title when automatic browser launch for verification fails" }, - "downloadErrorFolderAccessLost": "Accès au dossier de téléchargement perdu. Veuillez sélectionner à nouveau votre dossier de téléchargement dans les Paramètres.", - "@downloadErrorFolderAccessLost": { - "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" + "extensionVerificationHelpTitleWaiting": "La vérification est toujours en attente", + "@extensionVerificationHelpTitleWaiting": { + "description": "Dialog title when verification is taking longer than expected" }, - "notifVerificationRequiredTitle": "Vérification requise", - "@notifVerificationRequiredTitle": { - "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" + "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile n'a pas pu ouvrir automatiquement le navigateur. Ouvrez ce lien dans votre navigateur ou copiez-le manuellement.", + "@extensionVerificationHelpMessageManual": { + "description": "Dialog message when automatic browser launch for verification fails" }, - "notifVerificationRequiredBody": "Ouvrez l'application pour terminer la vérification et reprendre les téléchargements", - "@notifVerificationRequiredBody": { - "description": "Notification body prompting the user to return to the app to solve a verification challenge" + "extensionVerificationHelpMessageWaiting": "Si le navigateur ne s'est pas ouvert, ou si la vérification s'est terminée sans que vous ne soyez redirigé vers SpotiFLAC Mobile, ouvrez à nouveau ce lien ou copiez-le manuellement.", + "@extensionVerificationHelpMessageWaiting": { + "description": "Dialog message when verification may need manual browser help" }, - "downloadDeduplicationWithQualityVariants": "Les fichiers existants correspondant à la qualité sélectionnée seront ignorés", - "@downloadDeduplicationWithQualityVariants": { - "description": "Deduplication subtitle when separate quality versions are allowed" + "extensionVerificationClose": "Fermer", + "@extensionVerificationClose": { + "description": "Button to dismiss the extension verification help dialog" }, - "downloadQualityVariants": "Autoriser différentes versions de qualité", - "@downloadQualityVariants": { - "description": "Setting to retain multiple quality versions of the same track" + "extensionVerificationCopyLink": "Copier le lien", + "@extensionVerificationCopyLink": { + "description": "Button to copy the extension verification URL" }, - "downloadQualityVariantsDescription": "Conserver toutes les versions de qualité ; n'ajouter la note de qualité au nom de fichier que si ce nom est déjà utilisé", - "@downloadQualityVariantsDescription": { - "description": "Description for retaining multiple quality versions" + "extensionVerificationLinkCopied": "Lien de vérification copié", + "@extensionVerificationLinkCopied": { + "description": "Snackbar after copying the extension verification URL" }, - "trackOptionDownloadQualityVariant": "Télécharger une autre version de qualité", - "@trackOptionDownloadQualityVariant": { - "description": "Track menu action to download another quality version" + "extensionVerificationOpenBrowser": "Ouvrir le navigateur", + "@extensionVerificationOpenBrowser": { + "description": "Button to open the extension verification URL in a browser" }, - "queueCheckingDownloadSession": "Vérification de la session de téléchargement...", - "queueResolvingDownloadMetadata": "Récupération des métadonnées du morceau...", - "queueResolvingDownloadStream": "Préparation du flux audio...", - "queueWaitingForVerification": "En attente de vérification...", - "queueResumingAfterVerification": "Reprise après vérification...", "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", - "collectionExportM3u": "Exporter au format M3U8", - "collectionExportM3uDone": "{exported} titres exportés sur {total}", - "collectionExportM3uNone": "Aucun fichier téléchargé à exporter", - "collectionExportM3uFailed": "L'exportation a échoué", - "trackOpenOn": "Ouvrir sur...", - "trackOpenOnNoLinks": "Aucun lien vers une plateforme n'a été trouvé pour ce titre.", - "libraryReviewDuplicates": "Vérifier les doublons", - "libraryReviewDuplicatesSubtitle": "Rechercher les titres enregistrés plusieurs fois", - "duplicatesTitle": "Doublons", - "duplicatesEmpty": "Aucun titre en double n'a été détecté.", - "duplicatesKeepBest": "Garder le meilleur", - "duplicatesKeepBestMessage": "Supprimer {count} copies de moindre qualité de « {trackName} » ?", - "duplicatesDeleteCopyMessage": "Souhaitez-vous supprimer cette copie de « {trackName} » ?", - "downloadAutoConvert": "Auto-convert after download", - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "downloadAutoConvertFormat": "Output format", - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "downloadAutoConvertBitrate": "Output quality", - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "appearanceForceBlur": "Utilisez toujours des effets de flou", - "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.", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "editMetadataAutoFillSource": "Source des métadonnées", - "editMetadataAutoFillSourceAutomatic": "Automatique (priorité au fournisseur)", - "editMetadataAutoFillFind": "Rechercher des métadonnées", - "editMetadataAutoFillPreview": "Données provenant de {source}", - "editMetadataAutoFillCoverAvailable": "Illustration de couverture disponible", - "editMetadataAutoFillApply": "Appliquer les données sélectionnées", - "editMetadataAutoFillDoneFromSource": "Rempli {count} {count, plural, one {}=1{champ} other{champs}} ont été renseignés à partir de {source}", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Créez une playlist pour organiser vos morceaux", - "libraryDefaultView": "Affichage par défaut", - "libraryDefaultViewLastUsed": "Dernière utilisation", - "audioAnalysisCutoffNotDetected": "Non détecté", - "queueCancelledTitle": "Téléchargement annulé", - "queueCancelledMessage": "Ce téléchargement a été annulé. Veuillez réessayer ou le supprimer de la file d'attente.", - "trackCoverResolution": "Résolution de la couverture", - "trackCoverResolutionHint": "Définit la longueur maximale de l'image lors de l'enregistrement. L'agrandissement n'apporte pas davantage de détails à l'image.", - "trackCoverResizeFailed": "L'image de couverture n'a pas pu être redimensionnée. Veuillez essayer une autre taille ou une autre image.", - "queueDownloadNext": "Télécharger le suivant", - "queueMoveUp": "Remonter", - "queueMoveDown": "Descendre", - "editMetadataMusicBrainzButton": "Récupérer depuis MusicBrainz", - "editMetadataMusicBrainzFilled": "Mise à jour à partir de MusicBrainz", - "editMetadataMusicBrainzNothing": "Aucun résultat trouvé sur MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Nécessite une balise ISRC", - "nowPlayingRepeatOff": "Répétition désactivée", - "nowPlayingRepeatAll": "Tout répéter", - "nowPlayingRepeatOne": "Répéter une fois", - "queueNetworkFailedOffline": "{count} téléchargements ont échoué en mode hors ligne", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "libraryFilterMetadataMissingIsrc": "ISRC manquant" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From 6d042775950f20c3304d3e6e59ae7d152879b51d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:37 +0700 Subject: [PATCH 07/59] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 57 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index e6a51c04b..cd3429a45 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -461,6 +461,18 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" + }, + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" + }, + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" + }, "aboutAppDescription": "البحث عن بيانات التعريف الموسيقي، وإدارة الملحقات، وتنظيم مكتبتك.", "@aboutAppDescription": { "description": "App description in header card" @@ -1885,7 +1897,7 @@ } } }, - "extensionsInstallPartialSuccess": "تم تثبيت {installed} من أصل {attempted} إضافات", + "extensionsInstallPartialSuccess": "تم تثبيت {count} من أصل {attempted} إضافات", "@extensionsInstallPartialSuccess": { "description": "Message when installing multiple extensions partially succeeds", "placeholders": { @@ -3889,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -6047,6 +6059,45 @@ "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, "nowPlayingOpenInExternalPlayer": "Open in external player", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" @@ -6494,4 +6545,4 @@ "@optionsEmbeddedCoverSizeOriginal": { "description": "Option that preserves the provider artwork at its original resolution" } -} +} \ No newline at end of file From bfe79f240effca226f55c985f4ca1197ea5e395b Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:39 +0700 Subject: [PATCH 08/59] New translations app_en.arb (German) [ci skip] --- lib/l10n/arb/app_de.arb | 9614 ++++++++++++++++++++------------------- 1 file changed, 5030 insertions(+), 4584 deletions(-) diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb index 0ca121e62..e7070a702 100644 --- a/lib/l10n/arb/app_de.arb +++ b/lib/l10n/arb/app_de.arb @@ -1,2673 +1,2662 @@ { "@@locale": "de", "@@last_modified": "2026-04-28", - "libraryEnableLocalLibrarySubtitle": "Scan und verfolge deine bestehende Musik", - "@libraryEnableLocalLibrarySubtitle": { - "description": "Subtitle for enable toggle" - }, - "@audioAnalysisCodec": { - "description": "Audio codec metric label" + "appName": "SpotiFLAC Mobile", + "@appName": { + "description": "App name - DO NOT TRANSLATE" }, - "extensionUtilityFunctions": "Hilfsfunktionen", - "@extensionUtilityFunctions": { - "description": "Capability label for utility-only extensions" + "navHome": "Startseite", + "@navHome": { + "description": "Bottom navigation - Home tab" }, - "logClearLogsMessage": "Bist du dir sicher, dass Sie alle Logs löschen möchtest?", - "@logClearLogsMessage": { - "description": "Clear logs confirmation message" + "navLibrary": "Bibliothek", + "@navLibrary": { + "description": "Bottom navigation - Library tab" }, - "@storeClearFilters": { - "description": "Button to clear all filters" + "navSettings": "Einstellungen", + "@navSettings": { + "description": "Bottom navigation - Settings tab" }, - "cacheCleanupUnused": "Unbenutzte Daten bereinigen", - "@cacheCleanupUnused": { - "description": "Action title for cleaning unused entries" + "navStore": "Repo", + "@navStore": { + "description": "Bottom navigation - Extension repo tab" }, - "trackConvertDitherNone": "Keine", - "@trackConvertDitherNone": { - "description": "Lossless conversion dither option with no dithering applied" + "homeTitle": "Startseite", + "@homeTitle": { + "description": "Home screen title" }, - "libraryTracksUnit": "{count, plural, =1{1 Titel} other{{count} Titel}}", - "@libraryTracksUnit": { - "description": "Unit label for tracks count (without the number itself)", - "placeholders": { - "count": { - "type": "int" - } - } + "homeSubtitle": "Unterstützte URL einfügen oder nach Namen suchen", + "@homeSubtitle": { + "description": "Subtitle shown below search box" }, - "folderOrganizationNone": "Keine Organisation", - "@folderOrganizationNone": { - "description": "Folder option - flat structure" + "homeEmptyTitle": "Noch keine Suchanbieter", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" }, - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" + "homeEmptySubtitle": "Installiere eine Erweiterung um fortzufahren.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" }, - "@trackConvertConfirmTitle": { - "description": "Confirmation dialog title" + "homeSupports": "Unterstützt: Titel, Album, Playlist, Künstler-URLs", + "@homeSupports": { + "description": "Info text about supported URL types" }, - "@extensionPatternsCount": { - "description": "URL patterns count", - "placeholders": { - "count": { - "type": "int" - } - } + "homeRecent": "Zuletzt", + "@homeRecent": { + "description": "Section header for recent searches" }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" + "historyFilterAll": "Alle", + "@historyFilterAll": { + "description": "Filter chip - show all items" }, - "libraryAutoScanOff": "Aus", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" + "historyFilterAlbums": "Alben", + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" }, - "shareSheetLinkCopied": "{service} link copied", - "@shareSheetLinkCopied": { - "description": "Snackbar after copying a cross-service link", - "placeholders": { - "service": {} - } + "historyFilterSingles": "Singles", + "@historyFilterSingles": { + "description": "Filter chip - show singles only" }, - "providerPriorityFallbackExtensionsDescription": "Wähle aus, welche installierten Download-Erweiterungen beim automatischen Fallback verwendet werden sollen.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" + "historySearchHint": "Suchverlauf...", + "@historySearchHint": { + "description": "Search bar placeholder in history" }, - "@replayGainBatchConfirmMessage": { - "description": "Message of the batch ReplayGain confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsTitle": "Einstellungen", + "@settingsTitle": { + "description": "Settings screen title" }, - "@extensionsHomeFeedUse": { - "description": "Extensions page - subtitle for a specific extension home feed option", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "settingsDownload": "Herunterladen", + "@settingsDownload": { + "description": "Settings section - download options" }, - "selectionShareCount": "Teile {count} {count, plural, =1{Titel} other{Titel}}", - "@selectionShareCount": { - "description": "Share button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsAppearance": "Erscheinungsbild", + "@settingsAppearance": { + "description": "Settings section - visual customization" }, - "@storeExtensionsCount": { - "description": "Store extension result count", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsExtensions": "Erweiterungen", + "@settingsExtensions": { + "description": "Settings section - extension management" }, - "@logSearchHint": { - "description": "Log search placeholder" + "settingsAbout": "Über", + "@settingsAbout": { + "description": "Settings section - app info" }, - "@audioAnalysisSamples": { - "description": "Total samples metric label" + "downloadTitle": "Herunterladen", + "@downloadTitle": { + "description": "Download settings page title" }, - "trackCoverReplace": "Cover ersetzen", - "@trackCoverReplace": { - "description": "Button label for replacing selected cover art" + "downloadAskQualitySubtitle": "Qualitätsauswahl für jeden Download anzeigen", + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" }, - "@discographyAddedToQueue": { - "description": "Snackbar - tracks added from discography", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameFormat": "Dateinamenformat", + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" }, - "downloadAppleElrcWordSyncEnabled": "Rohe Zeitstempel erhalten", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" + "downloadSingleFilenameFormat": "Einzelnes Dateinamenformat", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" }, - "@nowPlayingDetails": { - "description": "Menu item and section title for track metadata details" + "downloadSingleFilenameFormatDescription": "Dateinamenmuster für Singles und EPs. Verwendet die gleichen Tags wie das Albumformat.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" }, - "@trackGenre": { - "description": "Metadata label - music genre" + "downloadFolderOrganization": "Ordnerstruktur", + "@downloadFolderOrganization": { + "description": "Title of the folder organization picker bottom sheet" }, - "recentTypeSong": "Titel", - "@recentTypeSong": { - "description": "Recent access item type - song/track" + "appearanceTitle": "Erscheinungsbild", + "@appearanceTitle": { + "description": "Appearance settings page title" }, - "logShareLogs": "Logs teilen", - "@logShareLogs": { - "description": "Share button tooltip" + "appearanceThemeSystem": "System", + "@appearanceThemeSystem": { + "description": "Follow system theme" }, - "@storeFilterLyrics": { - "description": "Repo filter - lyrics providers" + "appearanceThemeLight": "Hell", + "@appearanceThemeLight": { + "description": "Light theme" }, - "extensionsInstallButton": "Erweiterung installieren", - "@extensionsInstallButton": { - "description": "Button to install extension from file" + "appearanceThemeDark": "Dunkel", + "@appearanceThemeDark": { + "description": "Dark theme" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", - "@replayGainBatchSuccess": { - "description": "Snackbar after batch ReplayGain completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "appearanceDynamicColor": "Dynamische Farben", + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" }, - "nowPlayingMinimize": "Minimize", - "@nowPlayingMinimize": { - "description": "Tooltip for minimizing the now playing screen" + "appearanceDynamicColorSubtitle": "Farben deines Hintergrundbilds verwenden", + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" }, - "logIssueNetworkErrorSuggestion": "Überprüfe deine Internetverbindung", - "@logIssueNetworkErrorSuggestion": { - "description": "Diagnostic badge suggestion for generic network errors" + "appearanceHistoryView": "Verlaufsansicht", + "@appearanceHistoryView": { + "description": "Layout style for history" }, - "extensionsNoExtensions": "Keine Erweiterungen installiert", - "@extensionsNoExtensions": { - "description": "Empty state - no extensions" + "appearanceHistoryViewList": "Liste", + "@appearanceHistoryViewList": { + "description": "List layout option" }, - "@cacheRefresh": { - "description": "Tooltip for refresh button on cache management page" + "appearanceHistoryViewGrid": "Raster", + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" }, - "@snackbarHistoryCleared": { - "description": "Snackbar - history deleted" + "optionsPrimaryProvider": "Primärer Anbieter", + "@optionsPrimaryProvider": { + "description": "Main search provider setting" }, - "cueSplitFailed": "CUE-Aufteilung fehlgeschlagen", - "@cueSplitFailed": { - "description": "Snackbar when CUE split fails" + "optionsPrimaryProviderSubtitle": "Dienst zur Suche nach Titel oder Albumnamen", + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" }, - "trackConvertLosslessSuffix": "Lossless", - "@trackConvertLosslessSuffix": { - "description": "Suffix used in converted lossless quality labels" - }, - "homeSubtitle": "Unterstützte URL einfügen oder nach Namen suchen", - "@homeSubtitle": { - "description": "Subtitle shown below search box" - }, - "selectionBatchConvertConfirmMessageLossless": "Konvertiere {count} {count, plural, =1{Titel} other{Titel}} in {format}? (kein Qualitätsverlust)\n\nOriginaldateien werden nach der Konvertierung gelöscht.", - "@selectionBatchConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless batch conversion", + "optionsUsingExtension": "Erweiterung verwenden: {extensionName}", + "@optionsUsingExtension": { + "description": "Shows active extension name", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "extensionName": { "type": "String" } } }, - "@extensionVerificationHelpMessageManual": { - "description": "Dialog message when automatic browser launch for verification fails" - }, - "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", - "@queueRateLimitMessage": { - "description": "Explanation shown on a failed queue item when the download service rate limits requests" - }, - "searchSortDateOldest": "Veröffentlichungsdatum (älteste)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "nowPlayingShuffleOn": "Shuffle on", - "@nowPlayingShuffleOn": { - "description": "Tooltip when shuffle mode is enabled" - }, - "sectionColor": "Farbe", - "@sectionColor": { - "description": "Settings section header" - }, - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "cacheCoverImage": "Cover-Cache", - "@cacheCoverImage": { - "description": "Cache item title for persistent cover images" + "optionsDefaultSearchTab": "Standard Such-Tab", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" }, - "@navSettings": { - "description": "Bottom navigation - Settings tab" + "optionsDefaultSearchTabSubtitle": "Wähle aus, welcher Tab zuerst für neue Suchergebnisse geöffnet wird.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" }, - "@trackCoverReplaceNotice": { - "description": "Notice shown when a new cover has been selected but not saved yet" + "optionsAutoFallback": "Automatischer Fallback", + "@optionsAutoFallback": { + "description": "Auto-retry with other services" }, - "cueSplitConfirmTitle": "CUE-Album aufteilen", - "@cueSplitConfirmTitle": { - "description": "CUE split confirmation dialog title" + "optionsAutoFallbackSubtitle": "Andere Dienste versuchen, wenn Download fehlschlägt", + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" }, - "@trackDeleteConfirmMessage": { - "description": "Delete confirmation message" + "optionsEmbedLyrics": "Liedtexte einbetten", + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" }, - "cacheClearSuccess": "Entfernt: {target}", - "@cacheClearSuccess": { - "description": "Snackbar after clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "optionsEmbedLyricsSubtitle": "Speichere synchronisierte Liedtexte zusammen mit heruntergeladenen Titeln", + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" }, - "editMetadataFieldCover": "Cover-Art", - "@editMetadataFieldCover": { - "description": "Chip label for cover art field in auto-fill selector" + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" }, - "snackbarSelectExtFile": "Bitte wähle eine .spotiflac-ext Datei", - "@snackbarSelectExtFile": { - "description": "Snackbar - wrong file type selected" + "optionsReplayGainSubtitleOn": "Scanne Lautstärke und füge ReplayGain-Tags ein (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" }, - "libraryFilterFormat": "Format", - "@libraryFilterFormat": { - "description": "Filter section - file format" + "optionsReplayGainSubtitleOff": "Deaktiviert: keine Lautstärke-Normalisierungs-Tags", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" }, - "@downloadLossyAac": { - "description": "Lossy format option - AAC in M4A container at 320kbps" + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "@setupNext": { - "description": "Next button text" + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "@releaseTypeSingle": { - "description": "Badge label for single releases" + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" }, - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", - "@trackConvertLosslessOutputWithCap": { - "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", "placeholders": { - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "bulkDownloadSelectPlaylists": "Playlist zum Herunterladen wählen", - "@bulkDownloadSelectPlaylists": { - "description": "Button label when no playlists are selected for download" - }, - "artistOptionAddToFavorites": "Zu Favoriten hinzufügen", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "@timeJustNow": { - "description": "Relative time - less than a minute ago" - }, - "downloadLossyOpus256": "Opus 256kbps", - "@downloadLossyOpus256": { - "description": "Lossy format option - Opus 256kbps" + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" }, - "discographySinglesOnlySubtitle": "{count} Titel von {albumCount} Singles", - "@discographySinglesOnlySubtitle": { - "description": "Subtitle showing singles tracks count", + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { "count": { "type": "int" - }, - "albumCount": { - "type": "int" } } }, - "optionsExtensionStore": "Erweiterungs-Repo", - "@optionsExtensionStore": { - "description": "Show/hide repo tab" + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" }, - "libraryDownloadsHistoryExcluded": "{count} aus dem Download-Verlauf (von der Liste ausgeschlossen)", - "@libraryDownloadsHistoryExcluded": { - "description": "Library count note for downloaded history items excluded from the local list", + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", "placeholders": { - "count": { + "success": { + "type": "int" + }, + "total": { "type": "int" } } }, - "@errorUrlFetchFailed": { - "description": "Error message - generic URL fetch failure" - }, - "@trackOptionAddToWishlist": { - "description": "Bottom sheet action label - add track to wishlist" + "optionsArtistTagMode": "Künstler Tag-Modus", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" }, - "discographySinglesOnly": "Nur Singles & EPs", - "@discographySinglesOnly": { - "description": "Option - download only singles" + "optionsArtistTagModeDescription": "Wähle aus, wie mehrere Künstler in eingebetteten Tags geschrieben sind.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" }, - "@downloadSongLinkRegionDesc": { - "description": "Description in SongLink region picker" + "optionsArtistTagModeJoined": "Einzelne beigefügte Werte", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" }, - "notifEmbeddingMetadata": "Bette Metadaten ein...", - "@notifEmbeddingMetadata": { - "description": "Notification body while embedding metadata into a downloaded track" + "optionsArtistTagModeJoinedSubtitle": "Einen Künstler wert wie \"Artist A, Artist B\" für maximale Spieler-Kompatibilität schreiben.", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" }, - "@settingsLocalLibrarySubtitle": { - "description": "Subtitle for local library settings" + "optionsArtistTagModeSplitVorbis": "Tags für FLAC/Opus aufteilen", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "@downloadLocationSubtitle": { - "description": "Subtitle shown in the download location picker sheet" + "optionsArtistTagModeSplitVorbisSubtitle": "Schreibe einen Künstler Tag pro Künstler für FLAC und Opus; MP3 und M4A bleiben beigetreten.", + "@optionsArtistTagModeSplitVorbisSubtitle": { + "description": "Subtitle for split Vorbis artist tag mode" }, - "trackConvertOriginalQuality": "Original quality", - "@trackConvertOriginalQuality": { - "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + "optionsExtensionStore": "Erweiterungs-Repo", + "@optionsExtensionStore": { + "description": "Show/hide repo tab" }, - "nowPlayingTabLyrics": "Lyrics", - "@nowPlayingTabLyrics": { - "description": "Tab label for the lyrics view" + "optionsExtensionStoreSubtitle": "Repo-Tab in der Navigation anzeigen", + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension repo toggle" }, - "selectionConvertCount": "Konvertiere {count} {count, plural, =1{Titel} other{Titel}}", - "@selectionConvertCount": { - "description": "Convert button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsCheckUpdates": "Nach Updates suchen", + "@optionsCheckUpdates": { + "description": "Auto update check toggle" }, - "@extensionsInstalledSection": { - "description": "Section header - installed extensions" + "optionsCheckUpdatesSubtitle": "Benachrichtigen, wenn neue Version verfügbar", + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" }, - "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is off" + "optionsUpdateChannel": "Update-Kanal", + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" }, - "nowPlayingShuffleLibrary": "Shuffle library", - "@nowPlayingShuffleLibrary": { - "description": "Button label to shuffle and play the entire local library" + "optionsUpdateChannelStable": "Nur stabile Versionen", + "@optionsUpdateChannelStable": { + "description": "Only stable updates" }, - "trackReEnrichFieldCover": "Cover-Art", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" + "optionsUpdateChannelPreview": "Vorschau-Versionen erhalten", + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", - "@tutorialExtensionsTip3": { - "description": "Tutorial extensions tip 3" + "optionsUpdateChannelWarning": "Vorschau kann Fehler oder unvollständige Funktionen enthalten", + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" }, - "@cacheCleanupUnusedDesc": { - "description": "Description of what cleanup unused data does" - }, - "a11yOpenAlbum": "Album öffnen {albumName}", - "@a11yOpenAlbum": { - "description": "Accessibility label for opening an album", - "placeholders": { - "albumName": { - "type": "String" - } - } + "optionsClearHistory": "Download-Verlauf löschen", + "@optionsClearHistory": { + "description": "Delete all download history" }, - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" + "optionsClearHistorySubtitle": "Alle heruntergeladenen Titel aus dem Verlauf entfernen", + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" }, - "nowPlayingQueueEmpty": "Queue is empty", - "@nowPlayingQueueEmpty": { - "description": "Empty state when the playback queue has no items" + "optionsDetailedLogging": "Detaillierte Protokollierung", + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" }, - "@settingsDownload": { - "description": "Settings section - download options" + "optionsDetailedLoggingOn": "Detaillierte Logs werden aufgezeichnet", + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 Titel erfolgreich heruntergeladen} other{{count} Titel erfolgreich heruntergeladen}}", - "@notifTracksDownloadedSuccess": { - "description": "Notification body for queue complete - how many tracks were downloaded", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsDetailedLoggingOff": "Für Fehlerberichte aktivieren", + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" }, - "storeCategoryDownload": "Herunterladen", - "@storeCategoryDownload": { - "description": "Store extension category - download" + "extensionsTitle": "Erweiterungen", + "@extensionsTitle": { + "description": "Extensions page title" }, - "aboutTelegramChannel": "Telegram Kanal", - "@aboutTelegramChannel": { - "description": "Link to Telegram channel" + "extensionsDisabled": "Deaktiviert", + "@extensionsDisabled": { + "description": "Extension status - inactive" }, - "@downloadedAlbumDiscHeader": { - "description": "Header for disc separator in multi-disc albums", + "extensionsVersion": "Version {version}", + "@extensionsVersion": { + "description": "Extension version display", "placeholders": { - "discNumber": { - "type": "int", - "example": "1" + "version": { + "type": "String" } } }, - "@recentEmpty": { - "description": "Empty state text for recent access list" + "extensionsUninstall": "Deinstallieren", + "@extensionsUninstall": { + "description": "Uninstall extension button" }, - "@backupRestoreConfirmMessage": { - "description": "Confirmation dialog message before restoring a backup" + "storeTitle": "Erweiterungs-Repo", + "@storeTitle": { + "description": "Repo screen title" }, - "@shareSheetCopyLink": { - "description": "Tooltip for copying a cross-service link" + "storeSearch": "Erweiterungen suchen...", + "@storeSearch": { + "description": "Repo search placeholder" }, - "regionCountryID": "Indonesia", - "@regionCountryID": { - "description": "Country name for SongLink region picker" + "storeInstall": "Installieren", + "@storeInstall": { + "description": "Install extension button" }, - "@libraryInLibrary": { - "description": "Badge shown on tracks that exist in local library" + "storeInstalled": "Installiert", + "@storeInstalled": { + "description": "Already installed badge" }, - "extensionPostProcessingHooks": "Post-Processing Hooks", - "@extensionPostProcessingHooks": { - "description": "Capability - post-processing" + "storeUpdate": "Aktualisieren", + "@storeUpdate": { + "description": "Update available button" }, - "@setupGrantPermission": { - "description": "Button to request permission" + "aboutTitle": "Über", + "@aboutTitle": { + "description": "About page title" }, - "storeFilterDownload": "Herunterladen", - "@storeFilterDownload": { - "description": "Repo filter - download providers" + "aboutContributors": "Mitwirkende", + "@aboutContributors": { + "description": "Section for contributors" }, - "@collectionAddToPlaylist": { - "description": "Action to add a track to user playlist" + "aboutMobileDeveloper": "Mobile-Version Entwickler", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" }, - "@discographyFailedToFetch": { - "description": "Error - some albums failed to load" + "aboutOriginalCreator": "Schöpfer des ursprünglichen SpotiFLAC", + "@aboutOriginalCreator": { + "description": "Role description for original creator" }, - "@updateWhatsNew": { - "description": "Changelog section title" + "aboutLogoArtist": "Der talentierte Künstler, der unser wunderschönes App-Logo entworfen hat!", + "@aboutLogoArtist": { + "description": "Role description for logo artist" }, - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" + "aboutTranslators": "Übersetzer", + "@aboutTranslators": { + "description": "Section for translators" }, - "dialogDeleteSelectedTitle": "Ausgewählte löschen", - "@dialogDeleteSelectedTitle": { - "description": "Dialog title - delete selected items" + "aboutSpecialThanks": "Besonderer Dank", + "@aboutSpecialThanks": { + "description": "Section for special thanks" }, - "trackCoverPick": "Cover auswählen", - "@trackCoverPick": { - "description": "Button label for selecting cover art" + "aboutLinks": "Links", + "@aboutLinks": { + "description": "Section for external links" }, - "@collectionCreatePlaylist": { - "description": "Action to create a new playlist" + "aboutMobileSource": "Mobiler Quellcode", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" }, - "selectionBatchConvertSuccess": "{success} von {total} Titeln in {format} konvertiert", - "@selectionBatchConvertSuccess": { - "description": "Snackbar after batch conversion completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "aboutPCSource": "PC Quellcode", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" }, - "qualityHiResFlacMax": "Hi-Res FLAC Max", - "@qualityHiResFlacMax": { - "description": "Quality option - maximum resolution FLAC" + "aboutKeepAndroidOpen": "Keep Android Open", + "@aboutKeepAndroidOpen": { + "description": "Link to Keep Android Open campaign website" }, - "audioAnalysisStereo": "Stereo", - "@audioAnalysisStereo": { - "description": "Audio channel layout label - stereo" + "aboutReportIssue": "Problem melden", + "@aboutReportIssue": { + "description": "Link to report bugs" }, - "backupExportButton": "Create backup file", - "@backupExportButton": { - "description": "Button to create and share a backup file" + "aboutReportIssueSubtitle": "Melde Probleme, die dir auffallen", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" }, - "settingsApp": "App", - "@settingsApp": { - "description": "Settings menu item - app settings" + "aboutFeatureRequest": "Feature vorschlagen", + "@aboutFeatureRequest": { + "description": "Link to suggest features" }, - "clickableInformationUnavailable": "{type} Informationen nicht verfügbar", - "@clickableInformationUnavailable": { - "description": "Snackbar shown when clickable metadata cannot open a destination", - "placeholders": { - "type": { - "type": "String" - } - } + "aboutFeatureRequestSubtitle": "Schlage neue Funktionen für die App vor", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" }, - "@logFilterLevel": { - "description": "Filter by log level" + "aboutTelegramChannel": "Telegram Kanal", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" }, - "sectionTheme": "Design", - "@sectionTheme": { - "description": "Settings section header" + "aboutTelegramChannelSubtitle": "Ankündigungen und Updates", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" }, - "@extensionActionFailed": { - "description": "Fallback error when an extension action fails without details" + "aboutTelegramChat": "Telegram Community", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" }, - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + "aboutTelegramChatSubtitle": "Mit anderen Nutzern chatten", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" }, - "@extensionsNoCustomSearch": { - "description": "Empty state - no search providers" + "aboutSocial": "Sozial", + "@aboutSocial": { + "description": "Section for social links" }, - "@collectionPlaylistRemoveCover": { - "description": "Bottom sheet action to remove custom cover image from a playlist" + "aboutApp": "App", + "@aboutApp": { + "description": "Section for app info" }, - "@tutorialWelcomeDesc": { - "description": "Tutorial welcome page description" + "aboutVersion": "Version", + "@aboutVersion": { + "description": "Version info label" }, - "@tutorialSearchDesc": { - "description": "Tutorial search page description" + "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" }, - "collectionAddedToWishlist": "\"{trackName}\" zur Wunschliste hinzugefügt", - "@collectionAddedToWishlist": { - "description": "Snackbar after adding track to wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } + "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" }, - "logAffectedDomains": "Betroffen: {domains}", - "@logAffectedDomains": { - "description": "Affected domains in log issue analysis", - "placeholders": { - "domains": { - "type": "String" - } - } + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" }, - "@folderOrganizationByArtistSubtitle": { - "description": "Subtitle for artist folder option" + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" }, - "errorNoTracksFound": "Keine Titel gefunden", - "@errorNoTracksFound": { - "description": "Error - search returned no results" + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" }, - "providerPriorityTitle": "Anbieterpriorität", - "@providerPriorityTitle": { - "description": "Provider priority page title" + "aboutAppDescription": "Musik-Metadaten durchsuchen, Erweiterungen verwalten und deine Bibliothek organisieren.", + "@aboutAppDescription": { + "description": "App description in header card" }, - "@notifUpdateReadyBody": { - "description": "Notification body when app update is ready to install", + "artistAlbums": "Alben", + "@artistAlbums": { + "description": "Section header for artist albums" + }, + "artistSingles": "Singles & EPs", + "@artistSingles": { + "description": "Section header for singles/EPs" + }, + "artistCompilations": "Zusammenstellungen", + "@artistCompilations": { + "description": "Section header for compilations" + }, + "artistPopular": "Beliebt", + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, + "artistMonthlyListeners": "{count} monatliche Hörer", + "@artistMonthlyListeners": { + "description": "Monthly listener count display", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "String", + "description": "Formatted listener count" } } }, - "@settingsExtensions": { - "description": "Settings section - extension management" + "trackMetadataService": "Anbieter", + "@trackMetadataService": { + "description": "Metadata field - download service used" }, - "trackDeleteConfirmTitle": "Vom Gerät entfernen?", - "@trackDeleteConfirmTitle": { - "description": "Delete confirmation title" + "trackMetadataPlay": "Abspielen", + "@trackMetadataPlay": { + "description": "Action button - play track" }, - "@settingsDownloadNetwork": { - "description": "Setting for network type preference" + "trackMetadataShare": "Teilen", + "@trackMetadataShare": { + "description": "Action button - share track" }, - "downloadProvidersNoneEnabled": "Keine Anbieter aktiviert", - "@downloadProvidersNoneEnabled": { - "description": "Shown when no lyrics providers are active" + "trackMetadataDelete": "Löschen", + "@trackMetadataDelete": { + "description": "Action button - delete track" }, - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" + "setupGrantPermission": "Berechtigung erlauben", + "@setupGrantPermission": { + "description": "Button to request permission" }, - "trackReEnrichFieldBasicTags": "Album, Album-Künstler", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + "setupSkip": "Vorerst überspringen", + "@setupSkip": { + "description": "Skip current step button" }, - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" + "setupStorageAccessRequired": "Speicherzugriff erforderlich", + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" }, - "@logClearLogsTitle": { - "description": "Clear logs dialog title" + "setupStorageAccessMessageAndroid11": "Android 11+ benötigt die Berechtigung „Auf alle Dateien“, um Dateien im ausgewählten Download-Ordner zu speichern.", + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" }, - "storageModeSafSubtitle": "Wähle einen beliebigen Ordner, inklusive SD-Karte", - "@storageModeSafSubtitle": { - "description": "Subtitle for SAF storage mode" + "setupOpenSettings": "Einstellungen öffnen", + "@setupOpenSettings": { + "description": "Button to open system settings" }, - "@notifUpdateProgress": { - "description": "Notification body showing update download progress", + "setupPermissionDeniedMessage": "Berechtigung verweigert. Bitte erteile alle Berechtigungen um fortzufahren.", + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, + "setupPermissionRequired": "{permissionType}-Berechtigung erforderlich", + "@setupPermissionRequired": { + "description": "Generic permission required title", "placeholders": { - "received": { - "type": "String" - }, - "total": { - "type": "String" - }, - "percentage": { - "type": "int" + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" } } }, - "downloadUsePrimaryArtistOnlyEnabled": "Vorgestellte Künstler aus dem Ordnernamen entfernt (z.B. Justin Bieber, Quavo → Justin Bieber)", - "@downloadUsePrimaryArtistOnlyEnabled": { - "description": "Subtitle when primary artist only is enabled" - }, - "notifScanningLibrary": "Scanne lokale Bibliothek", - "@notifScanningLibrary": { - "description": "Notification title while scanning local library" - }, - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "setupGetStarted": "Los geht‘s", - "@setupGetStarted": { - "description": "Final setup button" - }, - "libraryFilterQualityCD": "CD (16bit)", - "@libraryFilterQualityCD": { - "description": "Filter option - CD quality audio" - }, - "sectionLayout": "Layout", - "@sectionLayout": { - "description": "Settings section header" - }, - "@tooltipLoveAll": { - "description": "Tooltip for the Love All button on album/playlist screens" - }, - "queueFinalizingDownload": "Download wird abgeschlossen", - "@queueFinalizingDownload": { - "description": "Accessibility label for a queue item that is finalizing" - }, - "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", - "@trackConvertActionLabelLossy": { - "description": "Convert button label for lossy conversion", + "setupPermissionRequiredMessage": "{permissionType}-Berechtigung ist erforderlich für\ndie beste Benutzererfahrung. Du kannst dies später in den Einstellungen ändern.", + "@setupPermissionRequiredMessage": { + "description": "Generic permission required message", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { + "permissionType": { "type": "String" } } }, - "extensionsMetadataPriority": "Metadaten Priorität", - "@extensionsMetadataPriority": { - "description": "Setting - metadata provider order" + "setupUseDefaultFolder": "Als Standardordner verwenden?", + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" }, - "updateCurrent": "Aktuell", - "@updateCurrent": { - "description": "Label for current version" + "setupNoFolderSelected": "Kein Ordner ausgewählt. Soll der Standard-Musikordner verwendet werden?", + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" }, - "@aboutFeatureRequest": { - "description": "Link to suggest features" + "setupUseDefault": "Standard verwenden", + "@setupUseDefault": { + "description": "Button to use default folder" }, - "@safMigrationSuccess": { - "description": "Snackbar after successfully migrating to SAF" + "setupDownloadLocationTitle": "Speicherort", + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" }, - "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", - "@cleanupOrphanedDownloadsNone": { - "description": "Snackbar when no orphans found" + "setupDownloadLocationIosMessage": "Auf iOS werden Downloads im Dokumentenordner der App gespeichert. Du kannst sie über die Datei-App aufrufen.", + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (gut für asiatische Lieder)", - "@lyricsProviderNeteaseDesc": { - "description": "Description for Netease provider" + "setupAppDocumentsFolder": "App-Dokumentenordner", + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" }, - "libraryScanCancelledSubtitle": "Du kannst erneut Scannen, wenn er fertig ist.", - "@libraryScanCancelledSubtitle": { - "description": "Library scan status subtitle after cancellation" + "setupAppDocumentsFolderSubtitle": "Empfohlen - zugänglich über die Datei-App", + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" }, - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" + "setupChooseFromFiles": "Aus Dateien auswählen", + "@setupChooseFromFiles": { + "description": "iOS file picker option" }, - "@trackAlbum": { - "description": "Metadata label - album name" + "setupChooseFromFilesSubtitle": "Wähle iCloud oder einen anderen Speicherort", + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" }, - "dialogDeleteSelectedMessage": "Lösche {count} {count, plural, =1{Track} other{Tracks}} aus dem Verlauf?\n\nDies löscht auch die Dateien aus dem Speicher.", - "@dialogDeleteSelectedMessage": { - "description": "Dialog message - delete selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "setupIosEmptyFolderWarning": "iOS-Einschränkung: Leere Ordner können nicht ausgewählt werden. Wähle einen Ordner mit mindestens einer Datei.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" }, - "trackReEnrich": "Neu-anreichern", - "@trackReEnrich": { - "description": "Menu action - re-embed metadata into audio file" + "setupIcloudNotSupported": "iCloud Drive wird nicht unterstützt. Bitte verwende den \"Dokumente\" Ordner.", + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" }, - "@lyricsProvidersSaved": { - "description": "Snackbar after saving lyrics provider priority" + "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "@setupDownloadInFlac": { + "description": "App tagline in setup" }, - "@storageModeSaf": { - "description": "Storage mode option - Storage Access Framework" + "setupStorageGranted": "Speicherberechtigung erlaubt!", + "@setupStorageGranted": { + "description": "Success message for storage permission" }, - "libraryStorageAccessRequired": "Speicherzugriff erforderlich", - "@libraryStorageAccessRequired": { - "description": "Dialog title for storage permission" + "setupStorageRequired": "Speicherzugriff erforderlich", + "@setupStorageRequired": { + "description": "Title when storage permission needed" }, - "@cacheClearAllConfirmTitle": { - "description": "Dialog title before clearing all caches" + "setupStorageDescription": "SpotiFLAC benötigt Speicherrechte, um die heruntergeladenen Musikdateien zu speichern.", + "@setupStorageDescription": { + "description": "Explanation for storage permission" }, - "@unknownArtist": { - "description": "Fallback artist name when metadata is missing" + "setupNotificationGranted": "Benachrichtigungs-Berechtigung erteilt", + "@setupNotificationGranted": { + "description": "Success message for notification permission" }, - "downloadCreatePlaylistSourceFolderEnabled": "Für jede Playlist wird ein Unterordner erstellt", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist folder is enabled" + "setupNotificationEnable": "Benachrichtigungen aktivieren", + "@setupNotificationEnable": { + "description": "Button to enable notifications" }, - "dialogClearHistoryMessage": "Bist du sicher, dass du den gesamten Downloadverlauf löschen möchtest? Dies kann nicht rückgängig gemacht werden.", - "@dialogClearHistoryMessage": { - "description": "Dialog message - clear history confirmation" + "setupFolderChoose": "Speicherort auswählen", + "@setupFolderChoose": { + "description": "Button to choose folder" }, - "@sectionData": { - "description": "Settings section header" + "setupFolderDescription": "Wähle einen Ordner, in dem die heruntergeladene Musik gespeichert wird.", + "@setupFolderDescription": { + "description": "Explanation for folder selection" }, - "audioAnalysisRms": "RMS", - "@audioAnalysisRms": { - "description": "RMS level metric label" + "setupSelectFolder": "Ordner wählen", + "@setupSelectFolder": { + "description": "Button to select folder" }, - "downloadFilterContributingEnabled": "Mitwirkende Künstler vom Albumname des Künstlers entfernt", - "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is on" + "setupEnableNotifications": "Benachrichtigungen aktivieren", + "@setupEnableNotifications": { + "description": "Button to enable notifications" }, - "timeJustNow": "Gerade eben", - "@extensionCustomUrlHandlingShareHint": { - "description": "Extension detail hint explaining share-to-app URL handling" + "setupNotificationBackgroundDescription": "Erhalte Benachrichtigungen über den Fortschritt und die Fertigstellung deiner Downloads, selbst wenn die App im Hintergrund läuft.", + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" }, - "cleanupOrphanedDownloads": "Verwaiste Downloads bereinigen", - "@cleanupOrphanedDownloads": { - "description": "Button to remove history entries for deleted files" + "setupSkipForNow": "Vorerst überspringen", + "@setupSkipForNow": { + "description": "Skip button text" }, - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" + "setupNext": "Weiter", + "@setupNext": { + "description": "Next button text" }, - "@tutorialWelcomeTitle": { - "description": "Tutorial welcome page title" + "setupGetStarted": "Los geht‘s", + "@setupGetStarted": { + "description": "Final setup button" }, - "collectionFavoriteArtists": "Lieblingskünstler", - "audioAnalysisRescanning": "Audio wird analysiert...", - "@audioAnalysisRescanning": { - "description": "Loading text while audio is being re-analyzed after an explicit refresh" + "setupAllowAccessToManageFiles": "Bitte aktiviere \"Zugriff auf alle Dateien erlauben\" auf dem nächsten Bildschirm.", + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" }, - "logTitle": "Protokolle", - "@logTitle": { - "description": "Logs screen title" + "setupLanguageTitle": "Sprache auswählen", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" }, - "@regionCountryGB": { - "description": "Country name for SongLink region picker" + "setupLanguageDescription": "Wählen deine bevorzugte Sprache für die App. Dies kann später in den Einstellungen geändert werden.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" }, - "@progressFetchingMetadata": { - "description": "Progress indicator - loading track info", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "setupLanguageSystemDefault": "Systemstandard", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" }, - "aboutLogoArtist": "Der talentierte Künstler, der unser wunderschönes App-Logo entworfen hat!", - "@aboutLogoArtist": { - "description": "Role description for logo artist" + "dialogCancel": "Abbrechen", + "@dialogCancel": { + "description": "Dialog button - cancel action" }, - "channelPreview": "Vorschau", - "@channelPreview": { - "description": "Update channel - beta/preview releases" + "dialogSave": "Speichern", + "@dialogSave": { + "description": "Dialog button - save changes" }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{Playlist} other{Playlists}} gelöscht", - "@collectionPlaylistsDeleted": { - "description": "Snackbar after deleting selected playlists", + "dialogDelete": "Löschen", + "@dialogDelete": { + "description": "Dialog button - delete item" + }, + "dialogRetry": "Wiederholen", + "@dialogRetry": { + "description": "Dialog button - retry action" + }, + "dialogClear": "Leeren", + "@dialogClear": { + "description": "Dialog button - clear items" + }, + "dialogDone": "Fertig", + "@dialogDone": { + "description": "Dialog button - action completed" + }, + "dialogImport": "Importieren", + "@dialogImport": { + "description": "Dialog button - import data" + }, + "dialogDownload": "Herunterladen", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, + "previewPlay": "Vorschau abspielen", + "@previewPlay": { + "description": "Tooltip for the button that plays a short track preview snippet" + }, + "previewStop": "Vorschau stoppen", + "@previewStop": { + "description": "Tooltip for the button that stops the playing track preview snippet" + }, + "previewUnavailable": "Preview unavailable", + "@previewUnavailable": { + "description": "Snackbar shown when a track preview snippet cannot be played" + }, + "dialogDiscard": "Verwerfen", + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, + "dialogRemove": "Entfernen", + "@dialogRemove": { + "description": "Dialog button - remove item" + }, + "dialogUninstall": "Deinstallieren", + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, + "dialogDiscardChanges": "Änderungen verwerfen?", + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, + "dialogUnsavedChanges": "Du hast ungespeicherte Änderungen. Möchtest du sie verwerfen?", + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, + "dialogClearAll": "Alles löschen", + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, + "dialogRemoveExtension": "Erweiterung entfernen", + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogRemoveExtensionMessage": "Bist du sicher, dass du diese Erweiterung entfernen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.", + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, + "dialogUninstallExtension": "Erweiterung deinstallieren?", + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogUninstallExtensionMessage": "Bist du sicher, dass du {extensionName} entfernen möchtest?", + "@dialogUninstallExtensionMessage": { + "description": "Dialog message - uninstall specific extension", "placeholders": { - "count": { - "type": "int" + "extensionName": { + "type": "String" } } }, - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" + "dialogClearHistoryTitle": "Verlauf löschen", + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" }, - "homeTitle": "Startseite", - "@homeTitle": { - "description": "Home screen title" + "dialogClearHistoryMessage": "Bist du sicher, dass du den gesamten Downloadverlauf löschen möchtest? Dies kann nicht rückgängig gemacht werden.", + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" }, - "extensionMinAppVersion": "Min App-Version", - "@extensionMinAppVersion": { - "description": "Extension detail - minimum app version" + "dialogDeleteSelectedTitle": "Ausgewählte löschen", + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", - "@backupContentsLiked": { - "description": "Backup contents row for liked tracks count", + "dialogDeleteSelectedMessage": "Lösche {count} {count, plural, =1{Track} other{Tracks}} aus dem Verlauf?\n\nDies löscht auch die Dateien aus dem Speicher.", + "@dialogDeleteSelectedMessage": { + "description": "Dialog message - delete selected tracks", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" + "dialogImportPlaylistTitle": "Playlist importieren", + "@dialogImportPlaylistTitle": { + "description": "Dialog title - import CSV playlist" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 Download vom Nutzer abgebrochen} other{{count} Downloads vom Nutzer abgebrochen}}", - "@notifDownloadsCanceledBody": { - "description": "Notification body when downloads are canceled by the user", + "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", + "csvImportTracks": "{count} Titel aus CSV", + "@csvImportTracks": { + "description": "Label shown in quality picker for CSV import", "placeholders": { "count": { "type": "int" } } }, - "@dialogRetry": { - "description": "Dialog button - retry action" - }, - "@homeChangeSearchProviderTooltip": { - "description": "Tooltip for the Home search provider picker" - }, - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" + "collectionExportM3u": "Export as M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" }, - "@trackReEnrichSuccessWithFailures": { - "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "collectionExportM3uDone": "Exported {exported} of {total} tracks", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { - "successCount": { + "exported": { "type": "int" }, "total": { "type": "int" - }, - "failedCount": { - "type": "int" } } }, - "previewUnavailable": "Preview unavailable", - "@previewUnavailable": { - "description": "Snackbar shown when a track preview snippet cannot be played" - }, - "nowPlayingTabPlayer": "Player", - "@nowPlayingTabPlayer": { - "description": "Tab label for the player view" + "collectionExportM3uNone": "No downloaded files to export", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "@backupContentsPlaylists": { - "description": "Backup contents row for playlist count", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionExportM3uFailed": "Export failed", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "libraryLastScannedNever": "Nie", - "@libraryLastScannedNever": { - "description": "Shown when library has never been scanned" + "trackOpenOn": "Open on...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" }, - "trackTrackNumber": "Titelnummer", - "@trackTrackNumber": { - "description": "Metadata label - track number" + "trackOpenOnNoLinks": "No platform links found for this track.", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" }, - "trackReplayGainScanning": "Analyzing loudness...", - "@trackReplayGainScanning": { - "description": "Snackbar/progress message while scanning ReplayGain for a single track" + "libraryReviewDuplicates": "Review duplicates", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" }, - "downloadLossyMp3": "MP3 320kbps", - "@downloadLossyMp3": { - "description": "Lossy format option - MP3 320kbps" + "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" }, - "@albumFolderArtistAlbumSingles": { - "description": "Album folder option with singles inside artist" + "duplicatesTitle": "Duplicates", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" }, - "@extensionHealthNotConfigured": { - "description": "Extension service health status - not configured" + "duplicatesEmpty": "No duplicate tracks found.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" }, - "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is off" + "duplicatesKeepBest": "Keep best", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "downloadCreatePlaylistSourceFolder": "Playlist-Quellordner", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting to create a subfolder per playlist source" + "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", + "placeholders": { + "count": { + "type": "int" + }, + "trackName": { + "type": "String" + } + } }, - "@trackReleaseDate": { - "description": "Metadata label - release date" + "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "aboutContributors": "Mitwirkende", - "@aboutContributors": { - "description": "Section for contributors" + "@dialogImportPlaylistMessage": { + "description": "Dialog message - import playlist confirmation", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@audioAnalysisMono": { - "description": "Audio channel layout label - mono" + "snackbarAddedToQueue": "\"{trackName}\" hinzugefügt", + "@snackbarAddedToQueue": { + "description": "Snackbar - track added to download queue", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@audioAnalysisNyquist": { - "description": "Nyquist frequency metric label" + "snackbarAddedTracksToQueue": "{count} Titel hinzugefügt", + "@snackbarAddedTracksToQueue": { + "description": "Snackbar - multiple tracks added to queue", + "placeholders": { + "count": { + "type": "int" + } + } }, - "permissionStorage": "Speicher", - "@permissionStorage": { - "description": "Storage permission type label" + "snackbarAlreadyDownloaded": "\"{trackName}\" bereits heruntergeladen", + "@snackbarAlreadyDownloaded": { + "description": "Snackbar - track already exists", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "permissionAudio": "Audio", - "@permissionAudio": { - "description": "Audio permission type label" + "snackbarAlreadyInLibrary": "\"{trackName}\" existiert bereits in deiner Bibliothek", + "@snackbarAlreadyInLibrary": { + "description": "Snackbar - track already exists in local library", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@libraryScanSubtitle": { - "description": "Subtitle for scan button" + "snackbarHistoryCleared": "Verlauf gelöscht", + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" }, - "@snackbarUnsupportedAudioFormat": { - "description": "Snackbar when the audio format is not supported for the requested operation" + "snackbarDeletedTracks": "{count} {count, plural, =1{Titel} other{Titel}}", + "@snackbarDeletedTracks": { + "description": "Snackbar - tracks deleted", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@notifLibraryScanStopped": { - "description": "Notification body when library scan is cancelled" + "snackbarCannotOpenFile": "Datei kann nicht geöffnet werden: {error}", + "@snackbarCannotOpenFile": { + "description": "Snackbar - file open error", + "placeholders": { + "error": { + "type": "String" + } + } }, - "@downloadMusixmatchAuto": { - "description": "Button to clear Musixmatch language (use auto)" + "snackbarViewQueue": "Warteschlange anzeigen", + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, - "@trackLyricsTimeout": { - "description": "Message when lyrics request times out" + "snackbarUrlCopied": "{platform} URL in die Zwischenablage kopiert", + "@snackbarUrlCopied": { + "description": "Snackbar - URL copied", + "placeholders": { + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } + } }, - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" + "snackbarFileNotFound": "Datei nicht gefunden", + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" }, - "@regionCountryXK": { - "description": "Country name for SongLink region picker" + "snackbarSelectExtFile": "Bitte wähle eine .spotiflac-ext Datei", + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" }, - "aboutTelegramChatSubtitle": "Mit anderen Nutzern chatten", - "@aboutTelegramChatSubtitle": { - "description": "Subtitle for Telegram chat" + "snackbarProviderPrioritySaved": "Anbieterpriorität gespeichert", + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" }, - "selectionAllPlaylistsSelected": "Alle Playlists ausgewählt", - "@selectionAllPlaylistsSelected": { - "description": "Shown when all playlists are selected in selection mode" + "snackbarMetadataProviderSaved": "Priorität des Metadaten-Anbieters gespeichert", + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" }, - "cacheTrackLookupDesc": "Spotify/Deezer Track-ID-Lookups. Das Löschen kann die nächsten Suchergebnisse verlangsamen.", - "@cacheTrackLookupDesc": { - "description": "Description of what track lookup cache contains" + "snackbarExtensionInstalled": "{extensionName} installiert.", + "@snackbarExtensionInstalled": { + "description": "Snackbar - extension installed successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@unknownAlbum": { - "description": "Fallback album name when metadata is missing" + "snackbarExtensionUpdated": "{extensionName} aktualisiert.", + "@snackbarExtensionUpdated": { + "description": "Snackbar - extension updated successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@extensionsErrorLoading": { - "description": "Error message when extension fails to load" + "snackbarFailedToInstall": "Erweiterung konnte nicht installiert werden", + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" }, - "@cacheTitle": { - "description": "Cache management page title" + "snackbarFailedToUpdate": "Erweiterung konnte nicht aktualisiert werden", + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" }, - "@downloadFilenameFormat": { - "description": "Setting for output filename pattern" + "errorRateLimited": "Anfragelimit überschritten", + "@errorRateLimited": { + "description": "Error title - too many requests" + }, + "errorRateLimitedMessage": "Zu viele Anfragen. Bitte warte einen Moment, bevor du es erneut suchst.", + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" + }, + "errorNoTracksFound": "Keine Titel gefunden", + "@errorNoTracksFound": { + "description": "Error - search returned no results" + }, + "searchEmptyResultSubtitle": "Try another keyword", + "@searchEmptyResultSubtitle": { + "description": "Subtitle shown under the empty search result state on the home screen" }, "errorUrlNotRecognized": "Link wurde nicht erkannt", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when album artist is used for folder names" + "errorUrlNotRecognizedMessage": "Dieser Link ist inkompatibel. Prüfe die URL und stelle sicher, dass eine kompatible Erweiterung installiert ist.", + "@errorUrlNotRecognizedMessage": { + "description": "Error message - URL not recognized explanation" }, - "@qualityFlacLossless": { - "description": "Quality option - CD quality FLAC" + "errorUrlFetchFailed": "Laden fehlgeschlagen. Bitte erneut versuchen.", + "@errorUrlFetchFailed": { + "description": "Error message - generic URL fetch failure" }, - "downloadNeteaseIncludeTranslationEnabled": "Chinesische Übersetzungszeilen enthalten", - "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is on" + "errorMissingExtensionSource": "Kann {item} nicht laden wegen fehlender Erweiterungsquelle", + "@errorMissingExtensionSource": { + "description": "Error - extension source not available", + "placeholders": { + "item": { + "type": "String" + } + } }, - "collectionLovedEmptySubtitle": "Tippe auf das Herz, um deine Favoriten zu behalten", - "@collectionLovedEmptySubtitle": { - "description": "Loved empty state subtitle" + "actionPause": "Pause", + "@actionPause": { + "description": "Action button - pause download" }, - "@libraryBuiltInPlayerInfo": { - "description": "Info note explaining the built-in player is for previews only" + "actionResume": "Fortfahren", + "@actionResume": { + "description": "Action button - resume download" }, - "@notifLibraryScanProgressNoTotal": { - "description": "Notification body for library scan progress when total is unknown", + "actionCancel": "Abbrechen", + "@actionCancel": { + "description": "Action button - cancel operation" + }, + "actionSelectAll": "Alles Auswählen", + "@actionSelectAll": { + "description": "Action button - select all items" + }, + "actionDeselect": "Alle abwählen", + "@actionDeselect": { + "description": "Action button - deselect all" + }, + "selectionSelected": "{count} ausgewählt", + "@selectionSelected": { + "description": "Selection count indicator", "placeholders": { - "scanned": { - "type": "int" - }, - "percentage": { + "count": { "type": "int" } } }, - "@tutorialSearchTitle": { - "description": "Tutorial search page title" + "selectionAllSelected": "Alle Titel sind ausgewählt", + "@selectionAllSelected": { + "description": "Status - all items selected" }, - "trackReEnrichSuccessWithFailures": "Metadaten erfolgreich neu angereichert ({successCount}/{total}) - fehlgeschlagen: {failedCount}", - "@a11yTrackByArtist": { - "description": "Accessibility label for a queue or list track item", + "selectionSelectToDelete": "Titel zum Löschen wählen", + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "progressFetchingMetadata": "Lade Metadaten... {current}/{total}", + "@progressFetchingMetadata": { + "description": "Progress indicator - loading track info", "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "libraryFilterMetadataMissingLabel": "Label fehlt", - "@libraryFilterMetadataMissingLabel": { - "description": "Filter option - items missing record label" - }, - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "trackMetadata": "Metadaten", - "@trackMetadata": { - "description": "Tab title - track metadata" + "progressReadingCsv": "CSV wird gelesen...", + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" }, - "trackOptionRemoveFromLoved": "Aus Lieblingssongs entfernt", - "@trackOptionRemoveFromLoved": { - "description": "Bottom sheet action label - remove track from loved folder" + "searchSongs": "Titel", + "@searchSongs": { + "description": "Search result category - songs" }, - "@aboutTelegramChat": { - "description": "Link to Telegram chat group" + "searchArtists": "Künstler", + "@searchArtists": { + "description": "Search result category - artists" }, - "@trackCopiedToClipboard": { - "description": "Snackbar - content copied" + "searchAlbums": "Alben", + "@searchAlbums": { + "description": "Search result category - albums" }, - "aboutKeepAndroidOpen": "Keep Android Open", - "@aboutKeepAndroidOpen": { - "description": "Link to Keep Android Open campaign website" + "searchPlaylists": "Playlists", + "@searchPlaylists": { + "description": "Search result category - playlists" }, - "@lyricsProvidersDisabledSection": { - "description": "Section header for disabled providers", - "placeholders": { - "count": { - "type": "int" - } - } + "searchSortTitle": "Ergebnisse sortieren", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" }, - "@downloadAllowLocalNetwork": { - "description": "Setting title for allowing requests to private/local network targets" + "searchSortDefault": "Standard", + "@searchSortDefault": { + "description": "Sort option - default API order" }, - "@openInOtherServices": { - "description": "Title and tooltip for finding the current collection in other services" + "searchSortTitleAZ": "Titel (A-Z)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" }, - "@extensionVerificationBrowserInApp": { - "description": "Chip label for in-app browser verification mode" + "searchSortTitleZA": "Titel (Z-A)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" }, - "sectionSearchSource": "Suchquelle", - "@sectionSearchSource": { - "description": "Settings section header" + "searchSortArtistAZ": "Künstler (A-Z)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" }, - "allFilesAccess": "Zugriff auf alle Dateien", - "@allFilesAccess": { - "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + "searchSortArtistZA": "Künstler (Z-A)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" }, - "extensionsInstalledCount": "{count} Erweiterungen erfolgreich installiert", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } + "searchSortDurationShort": "Dauer (kürzeste)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" }, - "snackbarFailedToEmbedLyrics": "Fehler beim Einbinden der Lyrics", - "@snackbarFailedToEmbedLyrics": { - "description": "Snackbar when lyrics embedding fails" + "searchSortDurationLong": "Dauer (längste)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" }, - "@lyricsProviderMusixmatchDesc": { - "description": "Description for Musixmatch provider" + "searchSortDateOldest": "Veröffentlichungsdatum (älteste)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" }, - "queueRateLimitTitle": "Service rate limited", - "@queueRateLimitTitle": { - "description": "Title shown on a failed queue item when the download service rate limits requests" + "searchSortDateNewest": "Veröffentlichungsdatum (Neueste)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" }, - "@notifDownloadComplete": { - "description": "Notification title when a single download is complete" + "tooltipPlay": "Abspielen", + "@tooltipPlay": { + "description": "Tooltip - play button" }, - "@homeSupports": { - "description": "Info text about supported URL types" + "filenameFormat": "Dateinamenformat", + "@filenameFormat": { + "description": "Setting title - filename pattern" }, - "notifDownloadsCanceledTitle": "Downloads abgebrochen", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" + "filenameShowAdvancedTags": "Erweiterte Tags anzeigen", + "@filenameShowAdvancedTags": { + "description": "Toggle label for showing advanced filename tags" }, - "@lyricsModeEmbedSubtitle": { - "description": "Subtitle for embed option" + "filenameShowAdvancedTagsDescription": "Formatierte Tags für Track-Padding und Datumsmuster aktivieren", + "@filenameShowAdvancedTagsDescription": { + "description": "Description for advanced filename tag toggle" }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" + "folderOrganizationNone": "Keine Organisation", + "@folderOrganizationNone": { + "description": "Folder option - flat structure" }, - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" + "folderOrganizationByPlaylist": "Nach Playlist", + "@folderOrganizationByPlaylist": { + "description": "Folder option - playlist folders" }, - "@trackArtist": { - "description": "Metadata label - artist name" + "folderOrganizationByPlaylistSubtitle": "Ordner für jede Playlist trennen", + "@folderOrganizationByPlaylistSubtitle": { + "description": "Subtitle for playlist folder option" }, - "cacheCoverImageDesc": "Album- und Titelcover heruntergeladen. Werden erneut heruntergeladen.", - "@cacheCoverImageDesc": { - "description": "Description of what cover image cache contains" + "folderOrganizationByArtist": "Nach Künstler", + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" }, - "queueClearAll": "Alles löschen", - "@queueClearAll": { - "description": "Button - clear all queue items" + "folderOrganizationByAlbum": "Nach Album", + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" }, - "downloadUsePrimaryArtistOnlyDisabled": "Vollständiger Künstler für Ordnername", - "@downloadUsePrimaryArtistOnlyDisabled": { - "description": "Subtitle when primary artist only is disabled" + "folderOrganizationByArtistAlbum": "Künstler/Album", + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" }, - "backupImportSectionTitle": "Restore backup", - "@backupImportSectionTitle": { - "description": "Section title for the import/restore card" + "folderOrganizationDescription": "Heruntergeladene Dateien in Ordner organisieren", + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" }, - "@downloadMusixmatchLanguageHint": { - "description": "Placeholder for Musixmatch language input" + "folderOrganizationNoneSubtitle": "Alle Dateien im Download-Ordner", + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" }, - "collectionRemoveFromFolder": "Aus Ordner entfernen", - "@collectionRemoveFromFolder": { - "description": "Tooltip for removing track from wishlist/loved folder" + "folderOrganizationByArtistSubtitle": "Trenne Ordner nach Künstler", + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" }, - "storeFilterMetadata": "Metadaten", - "@storeFilterMetadata": { - "description": "Repo filter - metadata providers" + "folderOrganizationByAlbumSubtitle": "Trenne Ordner nach Album", + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" }, - "shareSheetCopyLink": "Copy Link", - "errorRateLimitedMessage": "Zu viele Anfragen. Bitte warte einen Moment, bevor du es erneut suchst.", - "@errorRateLimitedMessage": { - "description": "Error message - rate limit explanation" + "folderOrganizationByArtistAlbumSubtitle": "Verschachtelte Ordner für Künstler und Album", + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" }, - "libraryFilterSortGenreDesc": "Genre (Z-A)", - "@libraryFilterSortGenreDesc": { - "description": "Sort option - genre descending" + "updateAvailable": "Update verfügbar", + "@updateAvailable": { + "description": "Update dialog title" }, - "trackFileNotFound": "Datei nicht gefunden", - "@trackFileNotFound": { - "description": "Error - file doesn't exist" + "updateLater": "Später", + "@updateLater": { + "description": "Update button - dismiss" }, - "@queueEmptySinglesSubtitle": { - "description": "Empty state subtitle for single track downloads" + "updateStartingDownload": "Download wird gestartet...", + "@updateStartingDownload": { + "description": "Update status - initializing" }, - "@queueDownloadStarting": { - "description": "Queue status before download progress is available" + "updateDownloadFailed": "Download fehlgeschlagen", + "@updateDownloadFailed": { + "description": "Update error title" }, - "metadataProviderPriorityInfo": "Deezer hat keine Limits und wird als primäre empfohlen. Spotify kann nach vielen Anfragen begrenzen.", - "@metadataProviderPriorityInfo": { - "description": "Info tip about rate limits" + "updateFailedMessage": "Das Update konnte nicht heruntergeladen werden", + "@updateFailedMessage": { + "description": "Update error message" }, - "aboutPCSource": "PC Quellcode", - "@aboutPCSource": { - "description": "Link to PC GitHub repo" + "updateNewVersionReady": "Eine neue Version ist verfügbar", + "@updateNewVersionReady": { + "description": "Update subtitle" }, - "editMetadataAutoFill": "Aus online ausfüllen", - "@editMetadataAutoFill": { - "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + "updateRequiredTitle": "Update required", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "snackbarDeletedTracks": "{count} {count, plural, =1{Titel} other{Titel}}", - "@snackbarDeletedTracks": { - "description": "Snackbar - tracks deleted", + "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { "count": { "type": "int" } } }, - "@extensionHealthServiceDegraded": { - "description": "Tooltip for degraded extension service" + "updateCurrent": "Aktuell", + "@updateCurrent": { + "description": "Label for current version" }, - "lyricsProviderLrclibDesc": "Open-Source-Synchronisierte Lyrics-Datenbank", - "@lyricsProviderLrclibDesc": { - "description": "Description for LRCLIB provider" + "updateNew": "Neu", + "@updateNew": { + "description": "Label for new version" }, - "downloadMusixmatchLanguageDesc": "Gib einen BCP-47 Sprachcode ein (z.B. en, de, ja), um übersetzte Lyrics von Musixmatch anzufordern.", - "@downloadMusixmatchLanguageDesc": { - "description": "Description in Musixmatch language picker" + "updateDownloading": "Wird heruntergeladen...", + "@updateDownloading": { + "description": "Update status - downloading" }, - "@optionsEmbedMetadataSubtitleOn": { - "description": "Subtitle when metadata embedding is enabled" - }, - "@setupSkipForNow": { - "description": "Skip button text" - }, - "@a11ySelectTrack": { - "description": "Accessibility label for selecting a track" - }, - "@folderOrganizationByAlbumSubtitle": { - "description": "Subtitle for album folder option" - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@extensionVerificationBrowserTitle": { - "description": "Settings option title for extension verification browser preference" + "updateWhatsNew": "Was ist neu", + "@updateWhatsNew": { + "description": "Changelog section title" }, - "@backupContentsExtensions": { - "description": "Backup contents row for installed extensions count", - "placeholders": { - "count": { - "type": "int" - } - } + "updateDownloadInstall": "Herunterladen & Installieren", + "@updateDownloadInstall": { + "description": "Update button - download and install" }, - "snackbarUrlCopied": "{platform} URL in die Zwischenablage kopiert", - "@snackbarUrlCopied": { - "description": "Snackbar - URL copied", - "placeholders": { - "platform": { - "type": "String", - "description": "Platform name (Spotify/Deezer)" - } - } + "updateDontRemind": "Nicht erinnern", + "@updateDontRemind": { + "description": "Update button - skip this version" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", - "@aboutBinimumDesc": { - "description": "Credit description for binimum" + "providerPriorityTitle": "Anbieterpriorität", + "@providerPriorityTitle": { + "description": "Provider priority page title" }, - "discographyFetchingAlbum": "Lade {current} von {total}...", - "@discographyFetchingAlbum": { - "description": "Progress - fetching specific album", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "providerPriorityDescription": "Ziehen, um Download-Anbieter neu zu ordnen. Die App versucht Anbieter von oben nach unten, wenn Titel heruntergeladen werden.", + "@providerPriorityDescription": { + "description": "Provider priority page description" }, - "logAutoScrollOn": "Auto-Scrollen AN", - "@logAutoScrollOn": { - "description": "Tooltip when auto-scroll is enabled on the log screen" + "providerPriorityInfo": "Wenn kein Titel bei dem ersten Anbieter nicht verfügbar ist, wird die App automatisch den nächsten versuchen.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" }, - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" + "providerPriorityFallbackExtensionsDescription": "Wähle aus, welche installierten Download-Erweiterungen beim automatischen Fallback verwendet werden sollen.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" }, - "@regionCountryBR": { - "description": "Country name for SongLink region picker" + "providerPriorityFallbackExtensionsHint": "Hier werden nur aktivierte Erweiterungen mit Download-Provider-Funktion aufgelistet.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" }, - "@lyricsProvidersTitle": { - "description": "Settings item title for lyrics provider order" + "providerExtension": "Erweiterung", + "@providerExtension": { + "description": "Label for extension-provided providers" }, - "trackMetadataService": "Anbieter", - "@trackMetadataService": { - "description": "Metadata field - download service used" + "metadataProviderPriorityTitle": "Metadaten Priorität", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" }, - "discographyAddedToQueue": "{count} Titel zur Warteschlange hinzugefügt", - "cueSplitTrackCount": "{count} Titel", - "@cueSplitTrackCount": { - "description": "Number of tracks in CUE sheet", - "placeholders": { - "count": { - "type": "int" - } - } + "metadataProviderPriorityDescription": "Ziehe, um Metadatenanbieter neu zu ordnen. Die App versucht Anbieter von oben nach unten, wenn sie nach Tracks suchen und Metadaten abrufen.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" }, - "dialogImportPlaylistTitle": "Playlist importieren", - "@dialogImportPlaylistTitle": { - "description": "Dialog title - import CSV playlist" + "metadataProviderPriorityInfo": "Deezer hat keine Limits und wird als primäre empfohlen. Spotify kann nach vielen Anfragen begrenzen.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" }, - "@cleanupOrphanedDownloadsSubtitle": { - "description": "Subtitle for orphaned cleanup button" + "logTitle": "Protokolle", + "@logTitle": { + "description": "Logs screen title" }, - "settingsLocalLibrary": "Lokale Bibliothek", - "@settingsLocalLibrary": { - "description": "Settings menu item - local library" + "logCopied": "Logs in Zwischenablage kopiert", + "@logCopied": { + "description": "Snackbar - logs copied" }, - "@metadataSaveFailedStorage": { - "description": "Snackbar error when writing metadata file back to storage fails" + "logSearchHint": "Logs durchsuchen ...", + "@logSearchHint": { + "description": "Log search placeholder" }, - "logCopyLogs": "Logs kopieren", - "@logCopyLogs": { - "description": "Tooltip for copying logs" + "logFilterLevel": "Stufe", + "@logFilterLevel": { + "description": "Filter by log level" }, - "downloadNetworkWifiOnlySubtitle": "Downloads bei mobilen Daten pausieren", - "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for WiFi-only option in picker" + "logFilterSection": "Filter", + "@logFilterSection": { + "description": "Filter section title" }, - "@lyricsModeBothSubtitle": { - "description": "Subtitle for both option" + "logShareLogs": "Logs teilen", + "@logShareLogs": { + "description": "Share button tooltip" }, - "@collectionAlreadyInPlaylist": { - "description": "Snackbar when track already exists in playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "logClearLogs": "Logs löschen", + "@logClearLogs": { + "description": "Clear button tooltip" }, - "@collectionFoldersTitle": { - "description": "Library section title for custom folders" + "logClearLogsTitle": "Logs leeren", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" }, - "searchSortDateNewest": "Veröffentlichungsdatum (Neueste)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" + "logClearLogsMessage": "Bist du dir sicher, dass Sie alle Logs löschen möchtest?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" }, - "downloadDeduplicationDisabled": "Alle Titel werden unabhängig vom Verlauf heruntergeladen", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" + "logFilterBySeverity": "Logs nach Schweregrad filtern", + "@logFilterBySeverity": { + "description": "Filter dialog title" }, - "@recentTypeAlbum": { - "description": "Recent access item type - album" + "logNoLogsYet": "Noch keine Logs", + "@logNoLogsYet": { + "description": "Empty state title" }, - "nowPlayingPlayInOrder": "Play in order", - "@nowPlayingPlayInOrder": { - "description": "Tooltip when shuffle mode is disabled" + "logNoLogsYetSubtitle": "Logs werden hier angezeigt, während du die App benutzt", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" }, - "@cueSplitConfirmMessage": { - "description": "CUE split confirmation dialog message", + "logEntriesFiltered": "Einträge ({count} gefiltert)", + "@logEntriesFiltered": { + "description": "Log count with filter active", "placeholders": { - "album": { - "type": "String" - }, "count": { "type": "int" } } }, - "@audioAnalysisFileSize": { - "description": "File size metric label" - }, - "artistSingles": "Singles & EPs", - "@artistSingles": { - "description": "Section header for singles/EPs" - }, - "@snackbarProviderPrioritySaved": { - "description": "Snackbar - provider order saved" - }, - "@recentPlaylistInfo": { - "description": "Snackbar message when tapping playlist in recent access", + "logEntries": "{count} Einträge", + "@logEntries": { + "description": "Total log count", "placeholders": { - "name": { - "type": "String", - "description": "Playlist name" + "count": { + "type": "int" } } }, - "@lyricsProviderLyricsPlusDesc": { - "description": "Description for LyricsPlus provider" + "channelStable": "Stabil", + "@channelStable": { + "description": "Update channel - stable releases" }, - "@libraryFilterDownloaded": { - "description": "Filter chip - show only downloaded items" + "channelPreview": "Vorschau", + "@channelPreview": { + "description": "Update channel - beta/preview releases" }, - "recentPlaylistInfo": "Playlist: {name}", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" + "sectionSearchSource": "Suchquelle", + "@sectionSearchSource": { + "description": "Settings section header" }, - "@actionCreate": { - "description": "Generic action button - create" + "sectionDownload": "Herunterladen", + "@sectionDownload": { + "description": "Settings section header" }, - "@downloadSelectQuality": { - "description": "Dialog title - choose audio quality" + "sectionPerformance": "Performance", + "@sectionPerformance": { + "description": "Settings section header" }, - "cueSplitAlbum": "Album: {album}", - "@cueSplitAlbum": { - "description": "Album name in CUE split sheet", - "placeholders": { - "album": { - "type": "String" - } - } + "sectionApp": "App", + "@sectionApp": { + "description": "Settings section header" }, - "@trackCoverNoSource": { - "description": "Snackbar when no cover art URL or embedded cover" + "sectionData": "Daten", + "@sectionData": { + "description": "Settings section header" }, - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" + "sectionDebug": "Debug", + "@sectionDebug": { + "description": "Settings section header" }, - "@notifLibraryScanCompleteBody": { - "description": "Notification body for library scan complete - number of indexed tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "sectionService": "Anbieter", + "@sectionService": { + "description": "Settings section header" }, - "optionsDetailedLogging": "Detaillierte Protokollierung", - "@optionsDetailedLogging": { - "description": "Enable verbose logs for debugging" + "sectionAudioQuality": "Audioqualität", + "@sectionAudioQuality": { + "description": "Settings section header" }, - "@lyricsProvidersDiscardContent": { - "description": "Body text of the discard-changes dialog on lyrics provider page" + "sectionFileSettings": "Datei-Einstellungen", + "@sectionFileSettings": { + "description": "Settings section header" }, - "@dialogDisableHistoryTitle": { - "description": "Confirmation dialog title shown before disabling download history" + "sectionLyrics": "Lyrics", + "@sectionLyrics": { + "description": "Settings section header" }, - "downloadLossyOpus128Subtitle": "Kleinste Größe, ~4MB pro Track", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" + "lyricsMode": "Lyrics-Modus", + "@lyricsMode": { + "description": "Setting - how to save lyrics" }, - "@appName": { - "description": "App name - DO NOT TRANSLATE" + "lyricsModeDescription": "Wähle wie Songtexte mit deinen Downloads gespeichert werden", + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" }, - "libraryActions": "Aktionen", - "@libraryActions": { - "description": "Section header for library actions" + "lyricsModeEmbed": "In Datei einbetten", + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" }, - "setupNoFolderSelected": "Kein Ordner ausgewählt. Soll der Standard-Musikordner verwendet werden?", - "@setupNoFolderSelected": { - "description": "Prompt when no folder selected" + "lyricsModeEmbedSubtitle": "Lyrics in FLAC Metadaten gespeichert", + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", - "trackSaveFailed": "Fehler: {error}", - "@trackSaveFailed": { - "description": "Snackbar when save operation fails", - "placeholders": { - "error": { - "type": "String" - } - } + "lyricsModeExternal": "Externe .lrc Datei", + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" }, - "replayGainBatchConfirmTitle": "Add ReplayGain", - "@replayGainBatchConfirmTitle": { - "description": "Title of the batch ReplayGain confirmation dialog" + "lyricsModeExternalSubtitle": "Separate .lrc Datei für Player wie Samsung Music", + "@lyricsModeExternalSubtitle": { + "description": "Subtitle for external option" }, - "tutorialExtensionsTip1": "Im Repo Tab findest du nützliche Erweiterungen", - "@tutorialExtensionsTip1": { - "description": "Tutorial extensions tip 1" + "lyricsModeBoth": "Beides", + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" }, - "@trackAddToQueue": { - "description": "Menu action to add a track to the playback queue" + "lyricsModeBothSubtitle": "Lyrics einbetten und als .lrc speichern", + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" }, - "@cacheTrackLookup": { - "description": "Cache item title for track ID lookup cache" + "sectionColor": "Farbe", + "@sectionColor": { + "description": "Settings section header" }, - "@discographyNoAlbums": { - "description": "Error - no albums found for artist" + "sectionTheme": "Design", + "@sectionTheme": { + "description": "Settings section header" }, - "@updateLater": { - "description": "Update button - dismiss" + "sectionLayout": "Layout", + "@sectionLayout": { + "description": "Settings section header" }, - "@snackbarFailedToInstall": { - "description": "Snackbar - extension install error" + "sectionLanguage": "Sprache", + "@sectionLanguage": { + "description": "Settings section header for language" }, - "@albumFolderArtistAlbumFlatSubtitle": { - "description": "Folder structure example for flat singles" + "appearanceLanguage": "App Sprache", + "@appearanceLanguage": { + "description": "Language setting title" }, - "@errorMissingExtensionSource": { - "description": "Error - extension source not available", - "placeholders": { - "item": { - "type": "String" - } - } + "settingsAppearanceSubtitle": "Design, Farben, Anzeige", + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" }, - "libraryFilterSortAlbumAsc": "Album (A-Z)", - "@libraryFilterSortAlbumAsc": { - "description": "Sort option - album ascending" + "settingsDownloadSubtitle": "Anbieter, Qualität, Rückfall", + "@settingsDownloadSubtitle": { + "description": "Download settings description" }, - "@queueTrackCount": { - "description": "Track count label with plural support", + "settingsExtensionsSubtitle": "Download-Anbieter verwalten", + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" + }, + "settingsLogsSubtitle": "App-Logs zum Debuggen anzeigen", + "@settingsLogsSubtitle": { + "description": "Logs settings description" + }, + "loadingSharedLink": "Link wird geladen...", + "@loadingSharedLink": { + "description": "Status when opening shared URL" + }, + "pressBackAgainToExit": "Drücke wieder \"zurück\" um die App zu beenden", + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, + "downloadAllCount": "Alle {count} Titel herunterladen", + "@downloadAllCount": { + "description": "Download all button with count", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisMono": "Mono", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", + "tracksCount": "{count, plural, =1{1 Titel} other{{count} Titel}}", + "@tracksCount": { + "description": "Track count display", "placeholders": { - "source": { - "type": "String" + "count": { + "type": "int" } } }, - "@lyricsModeEmbed": { - "description": "Lyrics mode option - embed in audio file" + "trackCopyFilePath": "Dateipfad kopieren", + "@trackCopyFilePath": { + "description": "Action - copy file path" }, - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" + "trackRemoveFromDevice": "Vom Gerät entfernen", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" }, - "@cacheRefreshStats": { - "description": "Button label to refresh cache statistics" + "trackLoadLyrics": "Lade Lyrics", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" }, - "lyricsProviderAppleMusicDesc": "Wort-für-Wort-synchronisierte Lyrics (via Proxy)", - "@lyricsProviderAppleMusicDesc": { - "description": "Description for Apple Music provider" + "trackMetadata": "Metadaten", + "@trackMetadata": { + "description": "Tab title - track metadata" }, - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" + "trackFileInfo": "Datei-Info", + "@trackFileInfo": { + "description": "Tab title - file information" }, - "updateFailedMessage": "Das Update konnte nicht heruntergeladen werden", - "@updateFailedMessage": { - "description": "Update error message" + "trackLyrics": "Lyrics", + "@trackLyrics": { + "description": "Tab title - lyrics" }, - "cacheEstimatedTotal": "Geschätzte Cache-Größe: {size}", - "@cacheEstimatedTotal": { - "description": "Total cache size shown in summary", - "placeholders": { - "size": { - "type": "String" - } - } + "trackFileNotFound": "Datei nicht gefunden", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" }, - "@aboutVersion": { - "description": "Version info label" + "trackOpenInDeezer": "In Deezer öffnen", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" }, - "dialogRetry": "Wiederholen", - "@cueSplitSplitting": { - "description": "Snackbar while splitting CUE", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "trackOpenInSpotify": "In Spotify öffnen", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" }, - "@searchSortTitleZA": { - "description": "Sort option - title descending" + "trackTrackName": "Name des Titels", + "@trackTrackName": { + "description": "Metadata label - track title" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", - "@tutorialLibraryTip2": { - "description": "Tutorial library tip 2" + "trackArtist": "Künstler", + "@trackArtist": { + "description": "Metadata label - artist name" }, - "extensionHealthServiceOffline": "Dienst offline", - "@extensionHealthServiceOffline": { - "description": "Tooltip for offline extension service" + "trackAlbumArtist": "Album Künstler", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" }, - "actionDeselect": "Alle abwählen", - "@actionDeselect": { - "description": "Action button - deselect all" + "trackAlbum": "Album", + "@trackAlbum": { + "description": "Metadata label - album name" }, - "@trackConvertOriginal": { - "description": "Label for keeping original bit depth or sample rate during conversion" + "trackTrackNumber": "Titelnummer", + "@trackTrackNumber": { + "description": "Metadata label - track number" }, - "@libraryClearConfirmTitle": { - "description": "Dialog title for clear confirmation" + "trackDiscNumber": "CD-Nummer", + "@trackDiscNumber": { + "description": "Metadata label - disc number" }, - "@dialogDownloadAllMessage": { - "description": "Body of the Download All confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDuration": "Länge", + "@trackDuration": { + "description": "Metadata label - track length" }, - "homeSupports": "Unterstützt: Titel, Album, Playlist, Künstler-URLs", - "@downloadedAlbumDeleteSelected": { - "description": "Button - delete selected tracks" + "trackAudioQuality": "Audioqualität", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" }, - "@recentShowAllDownloads": { - "description": "Button label to unhide hidden downloads in recent access" + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" }, - "artistOptionRemoveFromFavorites": "Aus Favoriten entfernen", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" + "trackReleaseDate": "Erscheinungsdatum", + "@trackReleaseDate": { + "description": "Metadata label - release date" }, - "collectionPlaylistEmptyTitle": "Die Playlist ist leer", - "@collectionPlaylistEmptyTitle": { - "description": "Playlist empty state title" + "trackGenre": "Genre", + "@trackGenre": { + "description": "Metadata label - music genre" }, - "libraryFilterSortLatest": "Neuste", - "@libraryFilterSortLatest": { - "description": "Sort option - newest first" + "trackLabel": "Label", + "@trackLabel": { + "description": "Metadata label - record label" }, - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" + "trackCopyright": "Urheberrecht", + "@trackCopyright": { + "description": "Metadata label - copyright information" }, - "@selectionSelected": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDownloaded": "Heruntergeladen", + "@trackDownloaded": { + "description": "Metadata label - download date" }, - "@tracksCount": { - "description": "Track count display", + "trackCopyLyrics": "Lyrics kopieren", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsSource": "Quelle: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", "placeholders": { - "count": { - "type": "int" + "source": { + "type": "String" } } }, - "@optionsCheckUpdates": { - "description": "Auto update check toggle" - }, - "@qualityHiResFlacMaxSubtitle": { - "description": "Technical spec for hi-res max" - }, - "actionStop": "Stop", - "@actionStop": { - "description": "Generic action - stop" - }, - "@selectionSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "folderOrganizationNoneSubtitle": "Alle Dateien im Download-Ordner", - "@folderOrganizationNoneSubtitle": { - "description": "Subtitle for no organization option" - }, - "@updateDownloading": { - "description": "Update status - downloading" + "trackLyricsNotAvailable": "Lyrics sind für diesen Titel nicht verfügbar", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" }, - "artistAlbums": "Alben", - "@artistAlbums": { - "description": "Section header for artist albums" + "trackLyricsNotInFile": "Keine Lyrics in dieser Datei gefunden", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" }, - "trackConvertDitherTriangular": "TPDF", - "@trackConvertDitherTriangular": { - "description": "Lossless conversion triangular probability density function dither option" + "trackFetchOnlineLyrics": "Online abrufen", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", - "@nowPlayingShuffleLibraryFailed": { - "description": "Snackbar when shuffling the library fails", - "placeholders": { - "error": { - "type": "String" - } - } + "trackLyricsTimeout": "Anfrage Timeout. Versuche es später erneut.", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" }, - "@setupIcloudNotSupported": { - "description": "Error when user selects iCloud Drive on iOS" + "trackLyricsLoadFailed": "Fehler beim Laden der Lyrics", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" }, - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + "trackEmbedLyrics": "Lyrics einbetten", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" }, - "@extensionsProviderPrioritySection": { - "description": "Section header - provider priority" + "trackLyricsEmbedded": "Lyrics erfolgreich eingebettet", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" }, - "@libraryShowDuplicateIndicatorSubtitle": { - "description": "Subtitle for duplicate indicator toggle" + "trackInstrumental": "Instrumentalspur", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" }, - "sectionDuplicates": "Duplikate", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" + "trackCopiedToClipboard": "In Zwischenablage kopiert", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" }, - "@backupTitle": { - "description": "App bar title for the backup and restore page" + "trackDeleteConfirmTitle": "Vom Gerät entfernen?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" }, - "trackCoverReplaceNotice": "Das ausgewählte Cover ersetzt das aktuell eingebettete Cover, wenn auf speichern gedrückt wird.", - "cacheSectionMaintenance": "Wartung", - "@cacheSectionMaintenance": { - "description": "Section header for cleanup actions" + "trackDeleteConfirmMessage": "Dies wird die heruntergeladene Datei dauerhaft löschen und sie aus deinem Verlauf entfernen.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" }, - "@editMetadataFieldGenre": { - "description": "Chip label for genre field in auto-fill selector" + "dateToday": "Heute", + "@dateToday": { + "description": "Relative date - today" }, - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" + "dateYesterday": "Gestern", + "@dateYesterday": { + "description": "Relative date - yesterday" }, - "selectionBatchConvertConfirmMessage": "Konvertiere {count} {format} {count, plural, =1{Titel} other{Titel}} zu {bitrate}?\n\nOriginaldateien werden nach der Konvertierung gelöscht.", - "@selectionBatchConvertConfirmMessage": { - "description": "Confirmation dialog message for batch conversion", + "dateDaysAgo": "Vor {count} Tagen", + "@dateDaysAgo": { + "description": "Relative date - days ago", "placeholders": { "count": { "type": "int" - }, - "format": { - "type": "String" - }, - "bitrate": { - "type": "String" } } }, - "@selectionTapPlaylistsToSelect": { - "description": "Hint shown in playlist selection mode" - }, - "qualityHiResFlacMaxSubtitle": "24-Bit / bis 192kHz", - "snackbarRemovedTracksFromLoved": "{count} Titel von geliebt entfernt", - "@snackbarRemovedTracksFromLoved": { - "description": "Snackbar after removing multiple tracks from Loved folder", + "dateWeeksAgo": "Vor {count} Wochen", + "@dateWeeksAgo": { + "description": "Relative date - weeks ago", "placeholders": { "count": { "type": "int" } } }, - "folderOrganizationByArtistAlbum": "Künstler/Album", - "@folderOrganizationByArtistAlbum": { - "description": "Folder option - nested folders" - }, - "snackbarCannotOpenFile": "Datei kann nicht geöffnet werden: {error}", - "@snackbarCannotOpenFile": { - "description": "Snackbar - file open error", + "dateMonthsAgo": "Vor {count} Monaten", + "@dateMonthsAgo": { + "description": "Relative date - months ago", "placeholders": { - "error": { - "type": "String" + "count": { + "type": "int" } } }, - "@optionsDetailedLoggingOff": { - "description": "Status when logging disabled" - }, - "@setupStorageDescription": { - "description": "Explanation for storage permission" - }, - "audioAnalysisCodec": "Codec", - "@regionCountryFR": { - "description": "Country name for SongLink region picker" - }, - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" + "storeFilterAll": "Alle", + "@storeFilterAll": { + "description": "Repo filter - all extensions" }, - "@libraryClearConfirmMessage": { - "description": "Dialog message for clear confirmation" + "storeFilterMetadata": "Metadaten", + "@storeFilterMetadata": { + "description": "Repo filter - metadata providers" }, - "trackLyricsNotAvailable": "Lyrics sind für diesen Titel nicht verfügbar", - "@trackLyricsNotAvailable": { - "description": "Message when lyrics not found" + "storeFilterDownload": "Herunterladen", + "@storeFilterDownload": { + "description": "Repo filter - download providers" }, "storeFilterUtility": "Utility", "@storeFilterUtility": { "description": "Repo filter - utility extensions" }, - "collectionAddedToPlaylist": "Zu \"{playlistName} \" hinzugefügt", - "@collectionAddedToPlaylist": { - "description": "Snackbar after adding track to playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "storeFilterLyrics": "Lyrics", + "@storeFilterLyrics": { + "description": "Repo filter - lyrics providers" }, - "cacheClearConfirmTitle": "Cache leeren?", - "@cacheClearConfirmTitle": { - "description": "Dialog title before clearing one cache category" + "storeFilterIntegration": "Integration", + "@storeFilterIntegration": { + "description": "Repo filter - integrations" }, - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" + "storeClearFilters": "Filter entfernen", + "@storeClearFilters": { + "description": "Button to clear all filters" }, - "@aboutMobileDeveloper": { - "description": "Role description for mobile dev" + "storeAddRepoTitle": "Erweiterungs-Repository hinzufügen", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" }, - "albumFolderYearAlbum": "[Year] Album", - "@albumFolderYearAlbum": { - "description": "Album folder option with year" + "storeAddRepoDescription": "Gib eine GitHub Repository-URL ein, die eine Registry.json Datei enthält, um Erweiterungen zu durchsuchen und zu installieren.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" }, - "cacheTitle": "Speicher & Cache", - "@extensionPostProcessing": { - "description": "Capability - post-download processing" + "storeRepoUrlLabel": "Repository-URL", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" }, - "extensionsNoMetadataProvider": "Keine Erweiterungen mit Metadaten-Anbieter", - "@extensionsNoMetadataProvider": { - "description": "Empty state - no metadata providers" + "storeRepoUrlHint": "https://github.com/user/repo", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" }, - "searchSortTitleZA": "Titel (Z-A)", - "@queueClearAllMessage": { - "description": "Clear queue confirmation" + "storeAddRepoButton": "Repository hinzufügen", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" }, - "audioAnalysisTitle": "Audio-Qualitätsanalyse", - "@audioAnalysisTitle": { - "description": "Title for audio analysis section" - }, - "@aboutReportIssueSubtitle": { - "description": "Subtitle for report issue" + "storeChangeRepoTooltip": "Repository ändern", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" }, - "@audioAnalysisSampleRate": { - "description": "Sample rate metric label" + "storeRepoDialogTitle": "Erweiterungs-Repository", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" }, - "@discographySelectedCount": { - "description": "Selection count badge", - "placeholders": { - "count": { - "type": "int" - } - } + "storeRepoDialogCurrent": "Aktuelles Repository:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" }, - "qualityFlacLosslessSubtitle": "16-bit / 44,1kHz", - "@qualityFlacLosslessSubtitle": { - "description": "Technical spec for lossless" + "storeNewRepoUrlLabel": "Neue Repository-URL", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" }, - "libraryScanFinalizing": "Bibliothek wird aktualisiert...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" + "storeLoadError": "Fehler beim Laden der Repository", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" }, - "@trackEditMetadata": { - "description": "Menu action - edit embedded metadata" + "storeEmptyNoExtensions": "Keine Erweiterung verfügbar", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" }, - "@downloadNeteaseIncludeRomanization": { - "description": "Setting to include romanized lyrics from Netease" + "storeEmptyNoResults": "Keine Erweiterungen gefunden", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" }, - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" + "extensionId": "ID", + "@extensionId": { + "description": "Extension detail - unique ID" }, - "regionCountryDE": "Germany", - "@regionCountryDE": { - "description": "Country name for SongLink region picker" + "extensionError": "Fehler", + "@extensionError": { + "description": "Extension detail - error message" }, - "optionsAutoFallback": "Automatischer Fallback", - "@optionsAutoFallback": { - "description": "Auto-retry with other services" + "extensionCapabilities": "Eigenschaften", + "@extensionCapabilities": { + "description": "Section header - extension features" }, - "@trackMetadataPlay": { - "description": "Action button - play track" + "extensionMetadataProvider": "Metadaten-Anbieter", + "@extensionMetadataProvider": { + "description": "Capability - provides metadata" }, - "settingsFiles": "Dateien & Ordner", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" + "extensionDownloadProvider": "Download-Anbieter", + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" }, - "aboutMobileDeveloper": "Mobile-Version Entwickler", - "@trackDownloaded": { - "description": "Metadata label - download date" + "extensionLyricsProvider": "Lyrics-Anbieter", + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" }, - "homeSkipAlreadyDownloaded": "Bereits heruntergeladene Titel überspringen", - "@homeSkipAlreadyDownloaded": { - "description": "Checkbox label in import dialog to skip already-downloaded songs" + "extensionUrlHandler": "URL Handler", + "@extensionUrlHandler": { + "description": "Capability - handles URLs" }, - "dialogUninstall": "Deinstallieren", - "@dialogUninstall": { - "description": "Dialog button - uninstall extension" + "extensionQualityOptions": "Qualitätsoptionen", + "@extensionQualityOptions": { + "description": "Capability - quality selection" }, - "collectionDeletePlaylist": "Playlist löschen", - "@collectionDeletePlaylist": { - "description": "Action to delete playlist" + "extensionPostProcessingHooks": "Post-Processing Hooks", + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" }, - "trackCoverOnline": "Online cover", - "@trackCoverOnline": { - "description": "Label shown when metadata autofill downloaded cover art from the internet" + "extensionPermissions": "Berechtigungen", + "@extensionPermissions": { + "description": "Section header - required permissions" }, - "downloadTitle": "Herunterladen", - "@downloadTitle": { - "description": "Download settings page title" + "extensionSettings": "Einstellungen", + "@extensionSettings": { + "description": "Section header - extension settings" }, - "searchArtists": "Künstler", - "@searchArtists": { - "description": "Search result category - artists" + "extensionRemoveButton": "Erweiterung entfernen", + "@extensionRemoveButton": { + "description": "Button to uninstall extension" }, - "extensionUrlHandler": "URL Handler", - "@extensionUrlHandler": { - "description": "Capability - handles URLs" + "extensionUpdated": "Aktualisiert", + "@extensionUpdated": { + "description": "Extension detail - last update" }, - "@timeHoursAgo": { - "description": "Relative time - hours ago", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionMinAppVersion": "Min App-Version", + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" }, - "editMetadataAdvanced": "Erweitert", - "@editMetadataAdvanced": { - "description": "Expandable section label for advanced metadata fields" + "extensionCustomTrackMatching": "Benutzerdefiniertes Track-Matching", + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" }, - "@actionSelectAll": { - "description": "Action button - select all items" + "extensionPostProcessing": "Post-processing", + "@extensionPostProcessing": { + "description": "Capability - post-download processing" }, - "timeMinutesAgo": "{count, plural, =1{vor 1 Minute} other{vor {count} Minuten}}", - "@timeMinutesAgo": { - "description": "Relative time - minutes ago", + "extensionHooksAvailable": "{count} Hook(s) verfügbar", + "@extensionHooksAvailable": { + "description": "Post-processing hooks count", "placeholders": { "count": { "type": "int" } } }, - "regionCountryXK": "Kosovo", - "@downloadAskQualitySubtitle": { - "description": "Subtitle for ask quality toggle" - }, - "setupLanguageSystemDefault": "Systemstandard", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "@updateAvailable": { - "description": "Update dialog title" - }, - "cacheEntries": "{count} Einträge", - "@cacheEntries": { - "description": "Track cache entry count", + "extensionPatternsCount": "{count} Muster", + "@extensionPatternsCount": { + "description": "URL patterns count", "placeholders": { "count": { "type": "int" } } }, - "@notifLibraryScanExcluded": { - "description": "Library scan complete suffix - excluded track count", + "extensionStrategy": "Strategie: {strategy}", + "@extensionStrategy": { + "description": "Track matching strategy name", "placeholders": { - "count": { - "type": "int" + "strategy": { + "type": "String" } } }, - "extensionsMetadataPrioritySubtitle": "Reihenfolge der Such- und Metadaten quellen festlegen", - "@extensionsMetadataPrioritySubtitle": { - "description": "Subtitle for metadata priority" + "extensionsProviderPrioritySection": "Provider-Priorität", + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" }, - "downloadedAlbumSelectToDelete": "Titel zum Löschen wählen", - "@downloadedAlbumSelectToDelete": { - "description": "Placeholder when nothing selected" + "extensionsInstalledSection": "Installierte Erweiterungen", + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" }, - "@dialogClearHistoryTitle": { - "description": "Dialog title - clear download history" + "extensionsNoExtensions": "Keine Erweiterungen installiert", + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" }, - "tutorialSettingsTip1": "Download-Ordner und Ordner-Organisation ändern", - "@tutorialSettingsTip1": { - "description": "Tutorial settings tip 1" + "extensionsNoExtensionsSubtitle": "Installiere .spotiflac-ext Dateien um neue Anbieter hinzuzufügen", + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, + "extensionsInstallButton": "Erweiterung installieren", + "@extensionsInstallButton": { + "description": "Button to install extension from file" }, + "extensionsInfoTip": "Erweiterungen können neue Metadaten und Download-Anbieter hinzufügen. Installiere nur Erweiterungen von vertrauenswürdigen Quellen.", + "@extensionsInfoTip": { + "description": "Security warning about extensions" + }, + "extensionsInstalledSuccess": "Erweiterung erfolgreich installiert", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "allFilesAccessDisabledSubtitle": "Nur auf Medienordner begrenzt", - "@allFilesAccessDisabledSubtitle": { - "description": "Subtitle when all files access is disabled" - }, - "@appearanceHistoryViewList": { - "description": "List layout option" + "extensionsInstalledCount": "{count} Erweiterungen erfolgreich installiert", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } }, - "@notifAlreadyInLibraryCount": { - "description": "Notification title when track is already in library, with count", + "extensionsInstallPartialSuccess": "{installed} von {attempted} Erweiterungen installiert", + "@extensionsInstallPartialSuccess": { + "description": "Message when installing multiple extensions partially succeeds", "placeholders": { - "completed": { - "type": "int" + "installed": { + "type": "int", + "description": "Number of successfully installed extensions" }, - "total": { - "type": "int" + "attempted": { + "type": "int", + "description": "Number of selected extensions" } } }, - "@libraryFilterAll": { - "description": "Filter chip - show all library items" - }, - "settingsDownload": "Herunterladen", - "settingsFilesSubtitle": "Speicherort, Dateiname, Ordnerstruktur", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" + "extensionsDownloadPriority": "Download-Priorität", + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" }, - "@libraryFilterSort": { - "description": "Filter section - sort order" + "extensionsDownloadPrioritySubtitle": "Download-Service-Reihenfolge festlegen", + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" }, - "metadataProvidersSubtitle": "Zieh, um Such- und Metadatenquellenreihenfolge zu setzen", - "@extensionPermissions": { - "description": "Section header - required permissions" + "extensionsFallbackTitle": "Fallback-Erweiterungen", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "selectionSelectToDelete": "Titel zum Löschen wählen", - "@libraryExternalPlayerSubtitle": { - "description": "Subtitle for external player option" + "extensionsFallbackSubtitle": "Wähle welche installierten Download-Erweiterungen als Fallback verwendet werden sollen", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" }, - "extensionVerificationOpenBrowser": "Open browser", - "@extensionVerificationOpenBrowser": { - "description": "Button to open the extension verification URL in a browser" + "extensionsNoDownloadProvider": "Keine Erweiterungen mit Download-Provider", + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" }, - "@trackConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless-to-lossless conversion", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionsMetadataPriority": "Metadaten Priorität", + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" }, - "@snackbarAddedTracksToQueue": { - "description": "Snackbar - multiple tracks added to queue", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsMetadataPrioritySubtitle": "Reihenfolge der Such- und Metadaten quellen festlegen", + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" }, - "@backupContentsWishlist": { - "description": "Backup contents row for wishlist tracks count", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsNoMetadataProvider": "Keine Erweiterungen mit Metadaten-Anbieter", + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" }, - "@cacheCleanupUnusedSubtitle": { - "description": "Subtitle for cleanup unused data action" + "extensionsSearchProvider": "Such-Provider", + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" }, - "trackLabel": "Label", - "@trackLabel": { - "description": "Metadata label - record label" + "extensionsNoCustomSearch": "Keine Erweiterungen mit benutzerdefinierter Suche", + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" }, - "@collectionAddedToLoved": { - "description": "Snackbar after adding track to loved folder", - "placeholders": { - "trackName": { - "type": "String" - } - } + "extensionsSearchProviderDescription": "Wähle den Dienst für die Suche von Titel", + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" }, - "regionCountryGB": "United Kingdom", - "dialogCancel": "Abbrechen", - "@dialogCancel": { - "description": "Dialog button - cancel action" + "extensionsCustomSearch": "Benutzerdefinierte Suche", + "@extensionsCustomSearch": { + "description": "Label for custom search provider" }, - "@folderOrganizationByArtistAlbumSubtitle": { - "description": "Subtitle for nested folder option" + "extensionsErrorLoading": "Fehler beim Laden der Erweiterung", + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" }, - "@notifAllDownloadsComplete": { - "description": "Notification title when all downloads finish successfully" + "qualityFlacLossless": "FLAC Verlustfrei", + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" }, - "setupEnableNotifications": "Benachrichtigungen aktivieren", - "@setupEnableNotifications": { - "description": "Button to enable notifications" + "qualityFlacLosslessSubtitle": "16-bit / 44,1kHz", + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" }, - "@notifFinalizingTrack": { - "description": "Notification title while finalizing (embedding metadata) a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "qualityHiResFlac": "Hi-Res FLAC", + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" }, - "@downloadLossy320FormatDesc": { - "description": "Description in the lossy format picker" + "qualityHiResFlacSubtitle": "24-Bit / bis 96kHz", + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" }, - "filenameFormat": "Dateinamenformat", - "@filenameFormat": { - "description": "Setting title - filename pattern" + "qualityHiResFlacMax": "Hi-Res FLAC Max", + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" }, - "historySearchHint": "Suchverlauf...", - "@historySearchHint": { - "description": "Search bar placeholder in history" + "qualityHiResFlacMaxSubtitle": "24-Bit / bis 192kHz", + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" }, - "@tutorialReadyMessage": { - "description": "Tutorial completion message" + "downloadLossy320": "Verlustbehaftet 320kbps", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" }, - "cacheTempDirectoryDesc": "Temporäre Dateien von Downloads und Audio-Konvertierung.", - "@cacheTempDirectoryDesc": { - "description": "Description of what temporary directory contains" + "downloadLossyFormat": "Verlustbehaftetes Format", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" }, - "@trackSaveLyrics": { - "description": "Menu action - save lyrics as .lrc file" + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" }, - "@notifDownloadsFinished": { - "description": "Notification title when queue finishes with some failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" }, - "@historyFilterAlbums": { - "description": "Filter chip - show albums only" + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" }, - "trackEmbedLyrics": "Lyrics einbetten", - "@trackEmbedLyrics": { - "description": "Action - embed lyrics into audio file" + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" }, - "@downloadPrimaryArtistOnlyOff": { - "description": "Status label when primary-artist-only folder naming is disabled" + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" }, - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" }, - "snackbarHistoryCleared": "Verlauf gelöscht", - "downloadNetworkCompatibilityModeDisabled": "Standard-Netzwerkeinstellungen verwenden", - "@artistPopular": { - "description": "Section header for popular/top tracks" + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" }, - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" }, - "extensionLyricsProvider": "Lyrics-Anbieter", - "@extensionLyricsProvider": { - "description": "Capability - provides lyrics" + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" }, - "historyFilterAll": "Alle", - "@historyFilterAll": { - "description": "Filter chip - show all items" + "downloadLossy320Format": "Verlustbehaftetes 320kbps-Format", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" }, - "tutorialSearchTitle": "Suche Musik", - "@lyricsModeExternal": { - "description": "Lyrics mode option - separate LRC file" + "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "@downloadLossy320FormatDesc": { + "description": "Description in the lossy format picker" }, - "@actionDismiss": { - "description": "Generic action - dismiss" + "downloadLossyMp3": "MP3 320kbps", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" }, - "trackOpenInSpotify": "In Spotify öffnen", - "@trackOpenInSpotify": { - "description": "Action - open track in Spotify app" + "downloadLossyMp3Subtitle": "Beste Kompatibilität, ~10MB pro Titel", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" }, - "@libraryClear": { - "description": "Button to clear all library entries" + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "discographyFailedToFetch": "Fehler beim Abrufen einiger Alben", - "@filenameShowAdvancedTagsDescription": { - "description": "Description for advanced filename tag toggle" + "downloadLossyAacSubtitle": "Beste mobile Kompatibilität, M4A Container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" }, - "@storeUpdate": { - "description": "Update available button" + "downloadLossyOpus256": "Opus 256kbps", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" }, - "collectionPlaylistTracks": "{count, plural, =1{1 Titel} other{{count} Titel}}", - "@collectionPlaylistTracks": { - "description": "Track count label for custom playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadLossyOpus256Subtitle": "Beste Qualität, ~8MB pro Titel", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" }, - "optionsPrimaryProviderSubtitle": "Dienst zur Suche nach Titel oder Albumnamen", - "@optionsPrimaryProviderSubtitle": { - "description": "Subtitle for primary provider" + "downloadLossyOpus128": "Opus 128kbps", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" }, - "@downloadEmbedLyricsDisabled": { - "description": "Subtitle when lyrics embedding is blocked by metadata toggle" + "downloadLossyOpus128Subtitle": "Kleinste Größe, ~4MB pro Track", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" }, - "@librarySourceLocal": { - "description": "Badge for tracks from local library scan" + "downloadAskBeforeDownload": "Qualität vor Download fragen", + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" }, - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" + "downloadDirectory": "Download-Ordner", + "@downloadDirectory": { + "description": "Setting - download folder" }, - "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is off" + "downloadSeparateSinglesFolder": "Singles Ordner trennen", + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" }, - "queueDownloadingCount": "{count} werden heruntergeladen", - "@queueDownloadingCount": { - "description": "Header for active downloads section with count", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAlbumFolderStructure": "Album-Ordnerstruktur", + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" }, - "extensionVerificationBrowserInApp": "In-app", - "trackAudioQuality": "Audioqualität", - "@trackAudioQuality": { - "description": "Metadata label - audio quality" - }, - "libraryRemovedMissingFiles": "Entfernte {count} fehlende Dateien aus der Bibliothek", - "@libraryRemovedMissingFiles": { - "description": "Snackbar after cleanup", - "placeholders": { - "count": { - "type": "int" - } - } + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" }, - "collectionFavoriteArtistsEmptyTitle": "Noch keine Lieblingskünstler", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" + "downloadUseAlbumArtistForFolders": "Album-Künstler für Ordner verwenden", + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "@errorInvalidFolderSelected": { - "description": "Error when the selected folder is invalid" + "downloadUsePrimaryArtistOnly": "Primärer Künstler nur für Ordner", + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" }, - "@searchSortArtistZA": { - "description": "Sort option - artist descending" + "downloadUsePrimaryArtistOnlyEnabled": "Vorgestellte Künstler aus dem Ordnernamen entfernt (z.B. Justin Bieber, Quavo → Justin Bieber)", + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" }, - "snackbarAddedTracksToLoved": "{count} titel zu geliebt hinzugefügt", - "@snackbarAddedTracksToLoved": { - "description": "Snackbar after adding multiple tracks to Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadUsePrimaryArtistOnlyDisabled": "Vollständiger Künstler für Ordnername", + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" }, - "cancelDownloadContent": "Dadurch wird der aktive Download für \"{trackName}\" abgebrochen.", - "@cancelDownloadContent": { - "description": "Dialog body when confirming cancellation of an active download", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadSelectQuality": "Qualität wählen", + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" }, - "settingsCacheSubtitle": "Größe anzeigen und Daten im Cache leeren", - "@settingsCacheSubtitle": { - "description": "Subtitle for cache management menu" + "downloadFrom": "Herunterladen von", + "@downloadFrom": { + "description": "Label - download source" }, - "notifLibraryScanCompleteBody": "{count} titel indiziert", - "@cacheSizeWithFiles": { - "description": "Cache size and file count", - "placeholders": { - "size": { - "type": "String" - }, - "count": { - "type": "int" - } - } + "appearanceAmoledDark": "AMOLED Schwarz", + "@appearanceAmoledDark": { + "description": "Theme option - pure black" }, - "@downloadAskBeforeDownload": { - "description": "Setting - show quality picker" + "appearanceAmoledDarkSubtitle": "AMOLED Hintergrund", + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" }, - "@extensionHealthDegraded": { - "description": "Extension service health status - degraded" + "appearanceHeroAnimations": "Hero animations", + "@appearanceHeroAnimations": { + "description": "Toggle for shared-element (Hero) transitions" }, - "@sectionPerformance": { - "description": "Settings section header" + "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", + "@appearanceHeroAnimationsSubtitle": { + "description": "Subtitle for the Hero animations toggle" }, - "@trackCoverCurrent": { - "description": "Label for the currently embedded cover preview" + "appearanceForceBlur": "Always use blur effects", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" }, - "discographySelectAlbums": "Alben auswählen...", - "@discographySelectAlbums": { - "description": "Option - manually select albums to download" + "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" }, - "aboutAppDescription": "Musik-Metadaten durchsuchen, Erweiterungen verwalten und deine Bibliothek organisieren.", - "@aboutAppDescription": { - "description": "App description in header card" + "queueClearAll": "Alles löschen", + "@queueClearAll": { + "description": "Button - clear all queue items" }, - "extensionCustomTrackMatching": "Benutzerdefiniertes Track-Matching", - "@extensionCustomTrackMatching": { - "description": "Capability - custom track matching algorithm" + "queueClearAllMessage": "Bist du dir sicher, dass du alle Downloads löschen möchten?", + "@queueClearAllMessage": { + "description": "Clear queue confirmation" }, - "@editMetadataSelectNone": { - "description": "Button to clear selected fields for auto-fill" + "settingsAutoExportFailed": "Auto-Export fehlgeschlagener Downloads", + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" }, - "@trackPlayNext": { - "description": "Menu action to play a track as the next queue item" + "settingsAutoExportFailedSubtitle": "Fehlgeschlagene Downloads automatisch in eine TXT-Datei speichern", + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" }, - "extensionCapabilities": "Eigenschaften", - "@extensionCapabilities": { - "description": "Section header - extension features" + "settingsDownloadNetwork": "Download Netzwerk", + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" }, - "@downloadSelectServiceToEnable": { - "description": "Subtitle when quality picker is disabled due to extension service" + "settingsDownloadNetworkAny": "WLAN + Mobile Daten", + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" }, - "logIssueRateLimitedDescription": "Zu viele Anfragen an den Dienst", - "@logIssueRateLimitedDescription": { - "description": "Diagnostic badge description for rate limiting" + "settingsDownloadNetworkWifiOnly": "Nur WLAN", + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" }, - "@actionResume": { - "description": "Action button - resume download" + "settingsDownloadNetworkSubtitle": "Wähle aus, welches Netzwerk für Downloads verwendet werden soll. Wenn nur WLAN aktiviert wird, werden Downloads auf mobilen Daten angehalten.", + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" }, - "@updateDownloadInstall": { - "description": "Update button - download and install" + "settingsConcurrentDownloads": "Concurrent downloads", + "@settingsConcurrentDownloads": { + "description": "Setting title - how many tracks download at the same time" }, - "downloadLossy320Format": "Verlustbehaftetes 320kbps-Format", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" + "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", + "@settingsConcurrentDownloadsSubtitle": { + "description": "Subtitle explaining the concurrent downloads picker" }, - "settingsMetadataSubtitle": "Cover Art, Tags, ReplayGain, Anbieter", - "@trackCopyright": { - "description": "Metadata label - copyright information" + "concurrentDownloadsOne": "1 track at a time", + "@concurrentDownloadsOne": { + "description": "Concurrent downloads option - sequential" }, - "@snackbarExtensionInstalled": { - "description": "Snackbar - extension installed successfully", + "concurrentDownloadsCount": "Up to {count} tracks at once", + "@concurrentDownloadsCount": { + "description": "Concurrent downloads option - parallel", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "@regionCountryJP": { - "description": "Country name for SongLink region picker" + "albumFolderArtistAlbum": "Künstler/Album", + "@albumFolderArtistAlbum": { + "description": "Album folder option" }, - "trackReEnrichOnlineSubtitle": "Metadaten online suchen und in Datei einbinden", - "@trackReEnrichOnlineSubtitle": { - "description": "Subtitle for re-enrich metadata action for local items" + "albumFolderArtistAlbumSubtitle": "Alben/Künster Name/Album Name/", + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" }, - "nowPlayingNothingPlaying": "Nothing is playing", - "@nowPlayingNothingPlaying": { - "description": "Empty state when no track is currently playing" + "albumFolderArtistYearAlbum": "Künstler / [Year] Album", + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", - "@tutorialDownloadDesc": { - "description": "Tutorial download page description" + "albumFolderArtistYearAlbumSubtitle": "Alben/Künster Name/[2005] Album Name/", + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" }, - "@appearanceTitle": { - "description": "Appearance settings page title" + "albumFolderAlbumOnly": "Nur Alben", + "@albumFolderAlbumOnly": { + "description": "Album folder option" }, - "@backupExportSectionDescription": { - "description": "Description of what a backup contains" + "albumFolderAlbumOnlySubtitle": "Alben/Album Name/", + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" }, - "@downloadLossyOpus128": { - "description": "Lossy format option - Opus 128kbps" + "albumFolderYearAlbum": "[Year] Album", + "@albumFolderYearAlbum": { + "description": "Album folder option with year" }, - "@logFilterSection": { - "description": "Filter section title" + "albumFolderYearAlbumSubtitle": "Alben/[2005] Album Name/", + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" }, - "trackReEnrichSuccess": "Metadaten erfolgreich neu angereichert", - "@trackReEnrichSuccess": { - "description": "Snackbar after successful re-enrichment" + "albumFolderArtistAlbumSingles": "Künstler / Album + Singles", + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", - "@backupContentsHistory": { - "description": "Backup contents row for history count", + "albumFolderArtistAlbumSinglesSubtitle": "Künstler/Album/ und Künstler/Singles/", + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistAlbumFlat": "Künstler / Album (Singles flach)", + "@albumFolderArtistAlbumFlat": { + "description": "Album folder option with singles directly in artist folder" + }, + "albumFolderArtistAlbumFlatSubtitle": "Künstler/Album/ Und Künstler/Lied.flac", + "@albumFolderArtistAlbumFlatSubtitle": { + "description": "Folder structure example for flat singles" + }, + "downloadedAlbumDeleteSelected": "Ausgewählte löschen", + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" + }, + "downloadedAlbumDeleteMessage": "{count} {count, plural, =1{Titel} other{Titel}} aus diesem Album löschen?\n\nDadurch werden auch die Dateien aus dem Speicher gelöscht.", + "@downloadedAlbumDeleteMessage": { + "description": "Delete confirmation with count", "placeholders": { "count": { "type": "int" } } }, - "snackbarAddedToQueue": "\"{trackName}\" hinzugefügt", - "@snackbarAddedToQueue": { - "description": "Snackbar - track added to download queue", + "downloadedAlbumSelectedCount": "{count} ausgewählt", + "@downloadedAlbumSelectedCount": { + "description": "Selection count indicator", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "libraryAutoScanOnOpen": "Bei jeder App Öffnung", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "audioAnalysisChannels": "Kanäle", - "@audioAnalysisChannels": { - "description": "Channels metric label" + "downloadedAlbumTapToSelect": "Tippe auf Titel zum Auswählen", + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" }, - "appearanceHistoryViewList": "Liste", - "updateDownloadInstall": "Herunterladen & Installieren", - "@libraryShowDuplicateIndicator": { - "description": "Toggle for duplicate indicator in search" - }, - "extensionsHomeFeedOff": "Aus", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "searchSortTitleAZ": "Titel (A-Z)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "collectionRemovedFromLoved": "\"{trackName}\" aus Lieblingssongs entfernt", - "@collectionRemovedFromLoved": { - "description": "Snackbar after removing track from loved folder", + "downloadedAlbumDeleteCount": "Lösche {count} {count, plural, =1{Titel} other{Titel}}", + "@downloadedAlbumDeleteCount": { + "description": "Delete button text with count", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "sectionAudioQuality": "Audioqualität", - "@sectionAudioQuality": { - "description": "Settings section header" + "downloadedAlbumSelectToDelete": "Titel zum Löschen wählen", + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" }, - "trackConvertSuccess": "Konvertiert in {format} erfolgreich", - "@trackConvertSuccess": { - "description": "Snackbar after successful conversion", + "downloadedAlbumDiscHeader": "Disc {discNumber}", + "@downloadedAlbumDiscHeader": { + "description": "Header for disc separator in multi-disc albums", "placeholders": { - "format": { - "type": "String" + "discNumber": { + "type": "int", + "example": "1" } } }, - "dialogUninstallExtensionMessage": "Bist du sicher, dass du {extensionName} entfernen möchtest?", - "@dialogUninstallExtensionMessage": { - "description": "Dialog message - uninstall specific extension", + "recentTypeArtist": "Künstler", + "@recentTypeArtist": { + "description": "Recent access item type - artist" + }, + "recentTypeAlbum": "Album", + "@recentTypeAlbum": { + "description": "Recent access item type - album" + }, + "recentTypeSong": "Titel", + "@recentTypeSong": { + "description": "Recent access item type - song/track" + }, + "recentTypePlaylist": "Playlist", + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" + }, + "recentEmpty": "Noch keine aktuellen Einträge", + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, + "recentShowAllDownloads": "Alle Downloads anzeigen", + "@recentShowAllDownloads": { + "description": "Button label to unhide hidden downloads in recent access" + }, + "recentPlaylistInfo": "Playlist: {name}", + "@recentPlaylistInfo": { + "description": "Snackbar message when tapping playlist in recent access", "placeholders": { - "extensionName": { - "type": "String" + "name": { + "type": "String", + "description": "Playlist name" } } }, - "downloadNativeWorkerSubtitle": "Android-Hintergrunddienst für Downloads von Erweiterungen", - "@downloadNativeWorkerSubtitle": { - "description": "Setting subtitle for Android native download worker" + "discographyDownload": "Diskographie herunterladen", + "@discographyDownload": { + "description": "Button - download artist discography" }, - "storeUpdate": "Aktualisieren", - "libraryFilterMetadataMissingAny": "Metadaten fehlen", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" + "discographyDownloadAll": "Alle Herunterladen", + "@discographyDownloadAll": { + "description": "Option - download entire discography" }, - "@selectionBatchConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless batch conversion", + "discographyDownloadAllSubtitle": "{count} Titel von {albumCount} Releases", + "@discographyDownloadAllSubtitle": { + "description": "Subtitle showing total tracks and albums", "placeholders": { "count": { "type": "int" }, - "format": { - "type": "String" - }, - "quality": { - "type": "String" + "albumCount": { + "type": "int" } } }, - "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", - "@editMetadataAutoFillDesc": { - "description": "Description for the auto-fill section" - }, - "@lyricsProviderExtensionDesc": { - "description": "Generic description for extension-based lyrics providers" - }, - "downloadSongLinkRegion": "SongLink-Region", - "@downloadSongLinkRegion": { - "description": "Setting for SongLink region used during fallback resolution" - }, - "shareSheetNoExtensions": "No other compatible services", - "@shareSheetNoExtensions": { - "description": "Empty state when no extensions can be searched for cross-service links" + "discographyAlbumsOnly": "Nur Alben", + "@discographyAlbumsOnly": { + "description": "Option - download only albums" }, - "queueFlacConfirmMessage": "Suche Online-Matches für ausgewählte Titel und Playlists für FLAC-Downloads.\n\nVorhandene Dateien werden weder geändert noch gelöscht.\n\nNur eindeutige Treffer werden automatisch zur Warteschlange hinzugefügt.\n\n{count} ausgewählt", - "@queueFlacConfirmMessage": { - "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", + "discographyAlbumsOnlySubtitle": "{count} Titel aus {albumCount} Alben", + "@discographyAlbumsOnlySubtitle": { + "description": "Subtitle showing album tracks count", "placeholders": { "count": { "type": "int" + }, + "albumCount": { + "type": "int" } } }, - "tooltipAddToPlaylist": "Zur Wiedergabeliste hinzufügen", - "@tooltipAddToPlaylist": { - "description": "Tooltip for the Add to Playlist button" + "discographySinglesOnly": "Nur Singles & EPs", + "@discographySinglesOnly": { + "description": "Option - download only singles" }, - "@snackbarAddedToQueueGeneric": { - "description": "Snackbar when a track is added to the playback queue without naming it" + "discographySinglesOnlySubtitle": "{count} Titel von {albumCount} Singles", + "@discographySinglesOnlySubtitle": { + "description": "Subtitle showing singles tracks count", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } }, - "@tutorialSettingsTip2": { - "description": "Tutorial settings tip 2" + "discographySelectAlbums": "Alben auswählen...", + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" }, - "extensionPermissions": "Berechtigungen", - "releaseTypeSingle": "Single", - "aboutTelegramChannelSubtitle": "Ankündigungen und Updates", - "@aboutTelegramChannelSubtitle": { - "description": "Subtitle for Telegram channel" + "discographySelectAlbumsSubtitle": "Wähle bestimmte Alben oder Singles", + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" }, - "@dialogDisableAndClear": { - "description": "Confirmation action to disable download history and clear existing entries" + "discographyFetchingTracks": "Lade Titel...", + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" }, - "@homeSearchHintProvider": { - "description": "Placeholder for the main search field when a provider is selected", + "discographyFetchingAlbum": "Lade {current} von {total}...", + "@discographyFetchingAlbum": { + "description": "Progress - fetching specific album", "placeholders": { - "providerName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "metadataProvidersTitle": "Priorität des Metadaten-Anbieters", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "trackAddToQueue": "Add to queue", - "audioAnalysisDecodedFormat": "Dekodiertes Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" + "discographySelectedCount": "{count} ausgewählt", + "@discographySelectedCount": { + "description": "Selection count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@editMetadataSelectEmpty": { - "description": "Button to select only fields that are currently empty" + "discographyDownloadSelected": "Auswahl herunterladen", + "@discographyDownloadSelected": { + "description": "Button - download selected albums" }, - "collectionAlreadyInPlaylist": "Bereits in \"{playlistName}\"", - "discographyAlbumsOnlySubtitle": "{count} Titel aus {albumCount} Alben", - "@discographyAlbumsOnlySubtitle": { - "description": "Subtitle showing album tracks count", + "discographyAddedToQueue": "{count} Titel zur Warteschlange hinzugefügt", + "@discographyAddedToQueue": { + "description": "Snackbar - tracks added from discography", "placeholders": { "count": { "type": "int" + } + } + }, + "discographySkippedDownloaded": "{added} hinzugefügt, {skipped} bereits heruntergeladen", + "@discographySkippedDownloaded": { + "description": "Snackbar - with skipped tracks count", + "placeholders": { + "added": { + "type": "int" }, - "albumCount": { + "skipped": { "type": "int" } } }, - "setupNotificationEnable": "Benachrichtigungen aktivieren", - "@setupNotificationEnable": { - "description": "Button to enable notifications" - }, - "settingsAppearanceSubtitle": "Design, Farben, Anzeige", - "@settingsAppearanceSubtitle": { - "description": "Appearance settings description" + "discographyNoAlbums": "Es sind keine Alben verfügbar", + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" }, - "@notifUpdateFailedBody": { - "description": "Notification body when app update download fails" + "discographyFailedToFetch": "Fehler beim Abrufen einiger Alben", + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" }, - "@aboutOriginalCreator": { - "description": "Role description for original creator" + "sectionStorageAccess": "Speicherzugriff", + "@sectionStorageAccess": { + "description": "Section header for storage access settings" }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", - "@libraryBuiltInPreviewPlayer": { - "description": "Setting option to use the built-in preview player" + "allFilesAccess": "Zugriff auf alle Dateien", + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "tooltipPlay": "Abspielen", - "@tooltipPlay": { - "description": "Tooltip - play button" + "allFilesAccessEnabledSubtitle": "Darf in jeden Ordner schreiben", + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" }, - "@safMigrationMessage2": { - "description": "Second paragraph of SAF migration dialog" + "allFilesAccessDisabledSubtitle": "Nur auf Medienordner begrenzt", + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" }, - "@extensionsSearchProvider": { - "description": "Setting - search provider selection" + "allFilesAccessDescription": "Option bei Schreibfehlern bitte aktivieren (erforderlich ab Android 13).", + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" }, - "libraryAboutDescription": "Durchsucht deine bestehende Musiksammlung, um Duplikate beim Herunterladen zu erkennen. Unterstützt die Formate FLAC, M4A, MP3, Opus und OGG. Metadaten werden, sofern verfügbar, aus den Dateitags gelesen.", - "@libraryAboutDescription": { - "description": "Description of local library feature" - }, - "downloadAskBeforeDownload": "Qualität vor Download fragen", - "nowPlayingNoMetadata": "No metadata available", - "@nowPlayingNoMetadata": { - "description": "Empty state when track metadata cannot be loaded" - }, - "trackInstrumental": "Instrumentalspur", - "@trackInstrumental": { - "description": "Message when track is instrumental (no lyrics)" + "allFilesAccessDeniedMessage": "Zugriff verweigert. Bitte aktiviere \"Zugriff auf alle Dateien\" manuell in den Systemeinstellungen.", + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" }, - "@collectionWishlistEmptyTitle": { - "description": "Wishlist empty state title" + "allFilesAccessDisabledMessage": "Zugriff auf alle Dateien ist deaktiviert. Die App verwendet nur begrenzten Zugriff auf den Speicher.", + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", - "downloadDeduplication": "Doppelte Downloads überspringen", - "libraryFilterSortOldest": "Älteste", - "@libraryFilterSortOldest": { - "description": "Sort option - oldest first" + "settingsLocalLibrary": "Lokale Bibliothek", + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" }, - "setupSkip": "Vorerst überspringen", - "@setupSkip": { - "description": "Skip current step button" + "settingsLocalLibrarySubtitle": "Musik scannen & Duplikate erkennen", + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" }, - "@setupFolderDescription": { - "description": "Explanation for folder selection" + "settingsCache": "Speicher & Cache", + "@settingsCache": { + "description": "Settings menu item - cache management" }, - "@settingsLogsSubtitle": { - "description": "Logs settings description" + "settingsCacheSubtitle": "Größe anzeigen und Daten im Cache leeren", + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" }, - "storeNewRepoUrlLabel": "Neue Repository-URL", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" + "libraryTitle": "Lokale Bibliothek", + "@libraryTitle": { + "description": "Library settings page title" }, - "cacheClearConfirmMessage": "Dies löscht zwischengespeicherte Daten in {target}. Die Musikdateien werden nicht gelöscht.", - "@cacheClearConfirmMessage": { - "description": "Dialog message before clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "libraryScanSettings": "Scan Einstellungen", + "@libraryScanSettings": { + "description": "Section header for scan settings" }, - "trackMetadataPlay": "Abspielen", + "libraryEnableLocalLibrary": "Lokale Bibliothek aktivieren", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, - "optionsUpdateChannel": "Update-Kanal", - "@optionsUpdateChannel": { - "description": "Stable vs preview releases" + "libraryEnableLocalLibrarySubtitle": "Scan und verfolge deine bestehende Musik", + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" }, - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist folder is disabled" + "libraryFolder": "Bibliotheksordner", + "@libraryFolder": { + "description": "Folder selection setting" }, - "@extensionRefreshStatus": { - "description": "Tooltip for refreshing extension service health status" + "libraryFolderHint": "Tippe um Ordner auszuwählen", + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", - "@backupRestoreRestartHint": { - "description": "Hint shown after restoring that an app restart is recommended" + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" }, - "@snackbarExtensionInstalledEnable": { - "description": "Snackbar after installing an extension from the repo tab", + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", "placeholders": { - "extensionName": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { "type": "String" } } }, - "settingsAutoExportFailedSubtitle": "Fehlgeschlagene Downloads automatisch in eine TXT-Datei speichern", - "@settingsAutoExportFailedSubtitle": { - "description": "Subtitle for auto-export setting" - }, - "searchSortArtistAZ": "Künstler (A-Z)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" }, - "editMetadataFieldAlbumArtist": "Album Künstler", - "@editMetadataFieldAlbumArtist": { - "description": "Chip label for album artist field in auto-fill selector" + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" }, - "@queueEmptyHistory": { - "description": "Empty state title when download history is empty" + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" }, - "@dialogDisableHistoryMessage": { - "description": "Confirmation dialog message shown before disabling download history" + "libraryShowDuplicateIndicator": "Duplikat Indikator anzeigen", + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" }, - "queueFlacNoReliableMatches": "Keine zuverlässigen Online-Übereinstimmungen für die Auswahl gefunden", - "@queueFlacNoReliableMatches": { - "description": "Snackbar when no safe FLAC redownload matches were found" + "libraryShowDuplicateIndicatorSubtitle": "Bei der Suche nach vorhandenen Titeln anzeigen", + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" }, - "trackOpenInDeezer": "In Deezer öffnen", - "@trackOpenInDeezer": { - "description": "Action - open track in Deezer app" + "libraryAutoScan": "Auto-Scan", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" }, - "setupChooseFromFilesSubtitle": "Wähle iCloud oder einen anderen Speicherort", - "@setupChooseFromFilesSubtitle": { - "description": "Subtitle for file picker" + "libraryAutoScanSubtitle": "Scanne die Bibliothek automatisch nach neuen Dateien", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" }, - "artistMonthlyListeners": "{count} monatliche Hörer", - "@artistMonthlyListeners": { - "description": "Monthly listener count display", - "placeholders": { - "count": { - "type": "String", - "description": "Formatted listener count" - } - } + "libraryAutoScanOff": "Aus", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" }, - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" + "libraryAutoScanOnOpen": "Bei jeder App Öffnung", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" }, - "cacheSectionStorage": "Zwischengespeicherte Daten", - "@cacheSectionStorage": { - "description": "Section header for cache entries" + "libraryAutoScanDaily": "Täglich", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" }, + "libraryAutoScanWeekly": "Wöchentlich", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "tutorialDownloadCompletedSemantics": "Download abgeschlossen", - "@tutorialDownloadCompletedSemantics": { - "description": "Accessibility label for completed download state in tutorial demo" + "libraryActions": "Aktionen", + "@libraryActions": { + "description": "Section header for library actions" }, - "@logNoLogsYet": { - "description": "Empty state title" + "libraryScan": "Bibliothek scannen", + "@libraryScan": { + "description": "Button to start library scan" }, - "@selectionDeletePlaylistsCount": { - "description": "Button label for deleting multiple selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryScanSubtitle": "Suche nach Audiodateien", + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" }, - "downloadSeparateSinglesEnabled": "Singles und EPs werden in einem separaten Ordner gespeichert", - "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is on" + "libraryScanSelectFolderFirst": "Wähle zuerst einen Ordner", + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" }, - "setupAppDocumentsFolder": "App-Dokumentenordner", - "@setupAppDocumentsFolder": { - "description": "iOS documents folder option" + "libraryCleanupMissingFiles": "Fehlende Dateien bereinigen", + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" }, - "storeLoadError": "Fehler beim Laden der Repository", - "settingsDownloadNetwork": "Download Netzwerk", - "metadataSaveFailedStorage": "Metadaten konnten nicht zurück in den Speicher geschrieben werden", - "@logAutoScrollOff": { - "description": "Tooltip when auto-scroll is disabled on the log screen" + "libraryCleanupMissingFilesSubtitle": "Verlaufseinträge für Dateien löschen, die nicht mehr existieren", + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" }, - "@trackConvertFormat": { - "description": "Menu item - convert audio format" + "libraryClear": "Bibliothek löschen", + "@libraryClear": { + "description": "Button to clear all library entries" }, - "optionsArtistTagModeJoined": "Einzelne beigefügte Werte", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" + "libraryClearSubtitle": "Alle gescannten Titel entfernen", + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" }, - "@dateYesterday": { - "description": "Relative date - yesterday" + "libraryClearConfirmTitle": "Bibliothek löschen", + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" }, - "@settingsExtensionsSubtitle": { - "description": "Extensions settings description" + "libraryClearConfirmMessage": "Dadurch werden alle gescannten Titel aus deiner Bibliothek entfernt. Deine eigentlichen Musikdateien werden nicht gelöscht.", + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" }, - "searchSortArtistZA": "Künstler (Z-A)", - "@extensionSettings": { - "description": "Section header - extension settings" + "libraryAbout": "Über die lokale Bibliothek", + "@libraryAbout": { + "description": "Section header for about info" }, - "@extensionOauthConnectHint": { - "description": "Hint for an OAuth login link field before connecting Spotify" + "libraryAboutDescription": "Durchsucht deine bestehende Musiksammlung, um Duplikate beim Herunterladen zu erkennen. Unterstützt die Formate FLAC, M4A, MP3, Opus und OGG. Metadaten werden, sofern verfügbar, aus den Dateitags gelesen.", + "@libraryAboutDescription": { + "description": "Description of local library feature" }, - "@notifUpdateReady": { - "description": "Notification title when app update download is complete" + "libraryTracksUnit": "{count, plural, =1{1 Titel} other{{count} Titel}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@regionCountryMX": { - "description": "Country name for SongLink region picker" - }, - "@nowPlayingOpenInExternalPlayer": { - "description": "Menu item to open the current track in an external player" - }, - "trackConvertDithering": "Dithering", - "@trackConvertDithering": { - "description": "Section label for lossless conversion dithering options" - }, - "settingsDownloadSubtitle": "Anbieter, Qualität, Rückfall", - "@settingsDownloadSubtitle": { - "description": "Download settings description" + "libraryFilesUnit": "{count, plural, =1{1 Datei} other{{count} Datein}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } }, "libraryLastScanned": "Zuletzt gescannt: {time}", "@libraryLastScanned": { @@ -2678,620 +2667,723 @@ } } }, - "setupIosEmptyFolderWarning": "iOS-Einschränkung: Leere Ordner können nicht ausgewählt werden. Wähle einen Ordner mit mindestens einer Datei.", - "@setupIosEmptyFolderWarning": { - "description": "iOS folder selection warning" + "libraryLastScannedNever": "Nie", + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" }, - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" + "libraryScanning": "Scannen...", + "@libraryScanning": { + "description": "Status during scan" }, - "@snackbarFailedToInstallNamed": { - "description": "Snackbar when extension install fails in the repo tab", + "libraryScanFinalizing": "Bibliothek wird aktualisiert...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, + "libraryScanProgress": "{progress}% von {total} Dateien", + "@libraryScanProgress": { + "description": "Scan progress display", "placeholders": { - "extensionName": { + "progress": { "type": "String" + }, + "total": { + "type": "int" } } }, - "@collectionAddedTracksToPlaylist": { - "description": "Snackbar after adding multiple tracks to a playlist", + "libraryInLibrary": "In Bibliothek", + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, + "libraryRemovedMissingFiles": "Entfernte {count} fehlende Dateien aus der Bibliothek", + "@libraryRemovedMissingFiles": { + "description": "Snackbar after cleanup", "placeholders": { "count": { "type": "int" - }, - "playlistName": { - "type": "String" } } }, - "updateNew": "Neu", - "@updateNew": { - "description": "Label for new version" + "libraryCleared": "Bibliothek geleert", + "@libraryCleared": { + "description": "Snackbar after clearing library" }, - "settingsExtensionsSubtitle": "Download-Anbieter verwalten", - "@albumFolderArtistAlbumSinglesSubtitle": { - "description": "Folder structure example" + "libraryStorageAccessRequired": "Speicherzugriff erforderlich", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" }, - "trackReEnrichSelectAll": "Alles Auswählen", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" + "libraryStorageAccessMessage": "SpotiFLAC benötigt Speicherzugriff, um deine Musikbibliothek zu scannen. Bitte erteile die Berechtigung in den Einstellungen.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" }, - "@extensionsUninstall": { - "description": "Uninstall extension button" + "libraryFolderNotExist": "Der ausgewählte Ordner existiert nicht", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" }, - "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when track artist is used for folder names" + "librarySourceDownloaded": "Heruntergeladen", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" }, - "@logIssueNetworkErrorLabel": { - "description": "Diagnostic badge label for generic network errors" + "librarySourceLocal": "Lokal", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" }, - "albumFolderArtistYearAlbumSubtitle": "Alben/Künster Name/[2005] Album Name/", - "@albumFolderArtistYearAlbumSubtitle": { - "description": "Folder structure example" + "libraryFilterAll": "Alle", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" }, - "itemCount": "{count} {count, plural, =1{Sache} other{Sachen}}", - "@itemCount": { - "description": "Generic item count label", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterDownloaded": "Heruntergeladen", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" }, - "discographyFetchingTracks": "Lade Titel...", - "@discographyFetchingTracks": { - "description": "Progress - fetching album tracks" + "libraryFilterLocal": "Lokal", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" }, - "@libraryFolder": { - "description": "Folder selection setting" + "libraryFilterTitle": "Filter", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" }, - "queueEmptyAlbums": "Keine Album-Downloads", - "@queueEmptyAlbums": { - "description": "Empty state title when no album downloads exist" + "libraryFilterReset": "Zurücksetzen", + "@libraryFilterReset": { + "description": "Reset all filters button" }, - "@metadataProviderPriorityDescription": { - "description": "Metadata priority page description" + "libraryFilterApply": "Anwenden", + "@libraryFilterApply": { + "description": "Apply filters button" }, - "@extensionVerificationHelpTitleManual": { - "description": "Dialog title when automatic browser launch for verification fails" + "libraryFilterSource": "Quelle", + "@libraryFilterSource": { + "description": "Filter section - source type" }, - "extensionError": "Fehler", - "@extensionError": { - "description": "Extension detail - error message" + "libraryFilterQuality": "Qualität", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" }, - "@trackLyricsLoadFailed": { - "description": "Message when lyrics loading fails" + "libraryFilterQualityHiRes": "Hi-Res (24bit)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" }, - "@downloadedAlbumDeleteCount": { - "description": "Delete button text with count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterQualityCD": "CD (16bit)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" }, - "@extensionsNoHomeFeedExtensions": { - "description": "Extensions page - shown when no installed extension has home feed" + "libraryFilterQualityLossy": "Verlustbehaftet", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" }, - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterFormat": "Format", + "@libraryFilterFormat": { + "description": "Filter section - file format" }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", - "@backupContentsArtists": { - "description": "Backup contents row for favorite artists count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadata": "Metadaten", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" }, - "@trackRemoveFromDevice": { - "description": "Action - delete downloaded file" + "libraryFilterMetadataComplete": "Komplette Metadaten", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" }, - "lyricsProvidersEnabledSection": "({count}) aktiviert", - "@lyricsProvidersEnabledSection": { - "description": "Section header for enabled providers", + "libraryFilterMetadataMissingAny": "Metadaten fehlen", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Jahr fehlt", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Genre fehlt", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Fehlender Album-Künstler", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, + "libraryFilterSort": "Sortieren", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "Neuste", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "Älteste", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" + }, + "libraryFilterSortAlbumAsc": "Album (A-Z)", + "@libraryFilterSortAlbumAsc": { + "description": "Sort option - album ascending" + }, + "libraryFilterSortAlbumDesc": "Album (Z-A)", + "@libraryFilterSortAlbumDesc": { + "description": "Sort option - album descending" + }, + "libraryFilterSortGenreAsc": "Genre (A-Z)", + "@libraryFilterSortGenreAsc": { + "description": "Sort option - genre ascending" + }, + "libraryFilterSortGenreDesc": "Genre (Z-A)", + "@libraryFilterSortGenreDesc": { + "description": "Sort option - genre descending" + }, + "timeJustNow": "Gerade eben", + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, + "timeMinutesAgo": "{count, plural, =1{vor 1 Minute} other{vor {count} Minuten}}", + "@timeMinutesAgo": { + "description": "Relative time - minutes ago", "placeholders": { "count": { "type": "int" } } }, - "@cueSplitTitle": { - "description": "Title for CUE split bottom sheet" - }, - "@downloadedAlbumSelectedCount": { - "description": "Selection count indicator", + "timeHoursAgo": "{count, plural, =1{vor 1 Stunde} other{vor {count} Stunden}}", + "@timeHoursAgo": { + "description": "Relative time - hours ago", "placeholders": { "count": { "type": "int" } } }, - "@trackOptionRemoveFromWishlist": { - "description": "Bottom sheet action label - remove track from wishlist" + "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" }, - "notifDownloadingTrack": "{trackName} wird heruntergeladen", - "@notifDownloadingTrack": { - "description": "Notification title while downloading a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" }, - "@discographySkippedDownloaded": { - "description": "Snackbar - with skipped tracks count", - "placeholders": { - "added": { - "type": "int" - }, - "skipped": { - "type": "int" - } - } - }, - "@tutorialSettingsTip3": { - "description": "Tutorial settings tip 3" - }, - "@announcementUnableToOpenLink": { - "description": "Snackbar shown when an announcement CTA link cannot be opened" - }, - "trackReleaseDate": "Erscheinungsdatum", - "discographySelectedCount": "{count} ausgewählt", - "collectionArtistCount": "{count, plural, =1{1 Künstler} other{{count} Künstler}}", - "logIssueNetworkErrorLabel": "NETZWERKFEHLER", - "updateStartingDownload": "Download wird gestartet...", - "@updateStartingDownload": { - "description": "Update status - initializing" - }, - "trackDiscNumber": "CD-Nummer", - "@trackDiscNumber": { - "description": "Metadata label - disc number" + "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" }, - "optionsUsingExtension": "Erweiterung verwenden: {extensionName}", - "@optionsUsingExtension": { - "description": "Shows active extension name", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" }, - "dialogDisableHistoryTitle": "Turn off download history?", "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, - "@collectionPlaylistEmptySubtitle": { - "description": "Playlist empty state subtitle" - }, - "@tutorialSearchHint": { - "description": "Placeholder shown in the tutorial search demo" - }, - "cleanupOrphanedDownloadsNone": "Keine verwaisten Einträge gefunden", - "discographySkippedDownloaded": "{added} hinzugefügt, {skipped} bereits heruntergeladen", - "@updateDontRemind": { - "description": "Update button - skip this version" - }, - "@snackbarLoadingCueSheet": { - "description": "Snackbar while loading a CUE sheet file" + "tutorialSearchTitle": "Suche Musik", + "@tutorialSearchTitle": { + "description": "Tutorial search page title" }, - "@dialogUninstallExtension": { - "description": "Dialog title - uninstall extension" + "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "@tutorialSearchDesc": { + "description": "Tutorial search page description" }, - "lyricsProvidersTitle": "Priorität des Lyrics-Anbieters", - "@dialogRemove": { - "description": "Dialog button - remove item" + "tutorialDownloadTitle": "Musik wird heruntergeladen", + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" }, - "snackbarError": "Fehler: {error}", - "@snackbarError": { - "description": "Generic error snackbar with error detail", - "placeholders": { - "error": { - "type": "String" - } - } + "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" }, - "@sectionApp": { - "description": "Settings section header" + "tutorialLibraryTitle": "Deine Bibliothek", + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" }, - "@libraryPlayback": { - "description": "Section header for playback settings in library settings" + "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" }, - "@downloadPrimaryArtistOnlyOn": { - "description": "Status label when primary-artist-only folder naming is enabled" + "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" }, - "lyricsProvidersDiscardContent": "Ungespeicherte Änderungen die verloren gehen.", - "previewStop": "Vorschau stoppen", - "@previewStop": { - "description": "Tooltip for the button that stops the playing track preview snippet" + "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" }, - "trackConvertConfirmMessageLossless": "Konvertieren von {sourceFormat} in {targetFormat}? (kein Qualitätsverlust)\n\nDie Originaldatei wird nach der Konvertierung gelöscht.", - "discographyAlbumsOnly": "Nur Alben", - "@discographyAlbumsOnly": { - "description": "Option - download only albums" + "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" }, - "@editMetadataFieldCopyright": { - "description": "Chip label for copyright field in auto-fill selector" + "tutorialExtensionsTitle": "Erweiterungen", + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" }, - "extensionsFallbackSubtitle": "Wähle welche installierten Download-Erweiterungen als Fallback verwendet werden sollen", - "aboutSocial": "Sozial", - "@aboutSocial": { - "description": "Section for social links" + "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" }, - "audioAnalysisNyquist": "Nyquist", - "trackCoverSelected": "Ausgewähltes Cover", - "@trackCoverSelected": { - "description": "Label for the newly selected cover preview" + "tutorialExtensionsTip1": "Im Repo Tab findest du nützliche Erweiterungen", + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" }, - "downloadDeduplicationEnabled": "Bereits heruntergeladene Titel werden übersprungen", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" + "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" }, - "homeEmptyTitle": "Noch keine Suchanbieter", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" + "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" }, - "@extensionHealthUnknown": { - "description": "Extension service health status - unknown" + "tutorialSettingsTitle": "Passe deine Benutzererfahrung an", + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" }, - "storeInstalled": "Installiert", - "@storeInstalled": { - "description": "Already installed badge" + "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" }, - "trackReplayGainSuccess": "ReplayGain tags added", - "@trackReplayGainSuccess": { - "description": "Snackbar message after ReplayGain tags written for a single track" + "tutorialSettingsTip1": "Download-Ordner und Ordner-Organisation ändern", + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" }, - "libraryShowDuplicateIndicatorSubtitle": "Bei der Suche nach vorhandenen Titeln anzeigen", - "@collectionPlaylistRenamed": { - "description": "Snackbar after renaming playlist" + "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" }, - "@trackConvertResamplerSoxr": { - "description": "Lossless conversion SoX resampler option" + "tutorialSettingsTip3": "App-Design und Aussehen anpassen", + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" }, - "@dialogUnsavedChanges": { - "description": "Dialog message - unsaved changes" + "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "@tutorialReadyMessage": { + "description": "Tutorial completion message" }, - "dialogDownload": "Herunterladen", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" + "libraryForceFullScan": "Vollen Neu-Scan erzwingen", + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" }, - "trackLyricsLoadFailed": "Fehler beim Laden der Lyrics", - "@backupContentsTitle": { - "description": "Header above the list summarizing what the backup contains" + "libraryForceFullScanSubtitle": "Alle Dateien erneut scannen und Cache ignorieren", + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" }, - "@safMigrationTitle": { - "description": "Title of SAF migration dialog" + "cleanupOrphanedDownloads": "Verwaiste Downloads bereinigen", + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" }, - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" + "cleanupOrphanedDownloadsSubtitle": "Verlaufseinträge für Dateien löschen, die nicht mehr existieren", + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" }, - "setupPermissionDeniedMessage": "Berechtigung verweigert. Bitte erteile alle Berechtigungen um fortzufahren.", - "@setupPermissionDeniedMessage": { - "description": "Error when permission denied" + "cleanupOrphanedDownloadsResult": "Entfernte {count} verwaiste Einträge aus dem Verlauf", + "@cleanupOrphanedDownloadsResult": { + "description": "Snackbar after orphan cleanup", + "placeholders": { + "count": { + "type": "int" + } + } }, - "settingsDownloadNetworkWifiOnly": "Nur WLAN", - "@settingsDownloadNetworkWifiOnly": { - "description": "Network option - only use WiFi" + "cleanupOrphanedDownloadsNone": "Keine verwaisten Einträge gefunden", + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" }, - "@backupIncludeSecrets": { - "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" + "cacheTitle": "Speicher & Cache", + "@cacheTitle": { + "description": "Cache management page title" }, - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" + "cacheSummaryTitle": "Cache-Übersicht", + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" }, - "@extensionHealthServiceUnknown": { - "description": "Tooltip for unknown extension service health" + "cacheSummarySubtitle": "Das Leeren des Caches entfernt nicht heruntergeladene Musikdateien.", + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" }, - "snackbarExtensionUpdated": "{extensionName} aktualisiert.", - "@snackbarExtensionUpdated": { - "description": "Snackbar - extension updated successfully", + "cacheEstimatedTotal": "Geschätzte Cache-Größe: {size}", + "@cacheEstimatedTotal": { + "description": "Total cache size shown in summary", "placeholders": { - "extensionName": { + "size": { "type": "String" } } }, - "homeEmptySubtitle": "Installiere eine Erweiterung um fortzufahren.", - "@settingsTitle": { - "description": "Settings screen title" + "cacheSectionStorage": "Zwischengespeicherte Daten", + "@cacheSectionStorage": { + "description": "Section header for cache entries" }, - "@libraryFilterMetadataIncorrectIsrcFormat": { - "description": "Filter option - items with an invalid ISRC format" + "cacheSectionMaintenance": "Wartung", + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" }, - "@notifLibraryScanComplete": { - "description": "Notification title when library scan finishes" + "cacheAppDirectory": "App-Cache Ordner", + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" }, - "@logIssueIspBlockingLabel": { - "description": "Diagnostic badge label when ISP blocking is detected" + "cacheAppDirectoryDesc": "HTTP-Antworten, WebView Daten und andere temporäre App-Daten.", + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" }, - "tutorialDownloadTitle": "Musik wird heruntergeladen", - "@tutorialDownloadTitle": { - "description": "Tutorial download page title" - }, - "unknownTitle": "Unknown title", - "@unknownTitle": { - "description": "Fallback track title when metadata is missing" - }, - "navLibrary": "Bibliothek", - "@navLibrary": { - "description": "Bottom navigation - Library tab" - }, - "@snackbarAlreadyDownloaded": { - "description": "Snackbar - track already exists", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "editMetadataSelectAll": "Alle", - "@editMetadataSelectAll": { - "description": "Button to select all fields for auto-fill" - }, - "storeEmptyNoExtensions": "Keine Erweiterung verfügbar", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" - }, - "optionsUpdateChannelWarning": "Vorschau kann Fehler oder unvollständige Funktionen enthalten", - "@optionsUpdateChannelWarning": { - "description": "Warning about preview channel" + "cacheTempDirectory": "Temporärer Ordner", + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" }, - "@collectionPlaylistNameHint": { - "description": "Hint text for playlist name input" + "cacheTempDirectoryDesc": "Temporäre Dateien von Downloads und Audio-Konvertierung.", + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" }, - "notifLibraryScanComplete": "Bibliotheksscan abgeschlossen", - "editMetadataFieldIsrc": "ISRC", - "@editMetadataFieldIsrc": { - "description": "Chip label for ISRC field in auto-fill selector" + "cacheCoverImage": "Cover-Cache", + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" }, - "@libraryFolderHint": { - "description": "Placeholder when no folder selected" + "cacheCoverImageDesc": "Album- und Titelcover heruntergeladen. Werden erneut heruntergeladen.", + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" }, - "homeSearchHintDefault": "Unterstützte URL einfügen oder suchen...", - "@homeSearchHintDefault": { - "description": "Default placeholder for the main search field on Home" + "cacheLibraryCover": "Bibliotheks-Cover-Cache", + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" }, - "extensionsNoExtensionsSubtitle": "Installiere .spotiflac-ext Dateien um neue Anbieter hinzuzufügen", - "@extensionsNoExtensionsSubtitle": { - "description": "Empty state subtitle" + "cacheLibraryCoverDesc": "Cover aus lokalen Musikdateien extrahiert. Wird beim nächsten Scannen neu extrahiert.", + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" }, - "@extensionEnterValue": { - "description": "Hint for editing an extension setting value" + "libraryPlaybackNormalization": "Volume normalization", + "@libraryPlaybackNormalization": { + "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, - "backupRestoreConfirmTitle": "Restore this backup?", - "@backupRestoreConfirmTitle": { - "description": "Confirmation dialog title before restoring a backup" + "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", + "@libraryPlaybackNormalizationSubtitle": { + "description": "Subtitle explaining playback volume normalization" }, - "@libraryScanSelectFolderFirst": { - "description": "Message when trying to scan without folder" + "cacheAudioAnalysis": "Audio analysis cache", + "@cacheAudioAnalysis": { + "description": "Cache item title for saved audio analysis results" }, - "@qualityHiResFlac": { - "description": "Quality option - high resolution FLAC" + "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", + "@cacheAudioAnalysisDesc": { + "description": "Description of what audio analysis cache contains" }, - "aboutSpecialThanks": "Besonderer Dank", - "@aboutSpecialThanks": { - "description": "Section for special thanks" + "cacheExploreFeed": "Feed-Cache entdecken", + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" }, - "storeInstall": "Installieren", - "@storeInstall": { - "description": "Install extension button" + "cacheExploreFeedDesc": "Startseiten-Inhalt (neue Releases, Trends). Wird bei einem Neustart aktualisiert.", + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" }, - "@collectionWishlistEmptySubtitle": { - "description": "Wishlist empty state subtitle" + "cacheTrackLookup": "Titel Such-Cache", + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" }, - "historyFilterAlbums": "Alben", - "extensionCustomUrlHandlingSubtitle": "Diese Erweiterung kann Links von diesen Seiten benutzen", - "@extensionCustomUrlHandlingSubtitle": { - "description": "Extension detail subtitle for custom URL handling" + "cacheTrackLookupDesc": "Spotify/Deezer Track-ID-Lookups. Das Löschen kann die nächsten Suchergebnisse verlangsamen.", + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" }, - "filenameShowAdvancedTagsDescription": "Formatierte Tags für Track-Padding und Datumsmuster aktivieren", - "@aboutReportIssue": { - "description": "Link to report bugs" + "cacheCleanupUnusedDesc": "Verwaisten Downloadverlauf und Bibliothekseinträge für fehlende Dateien entfernen.", + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" }, - "@folderOrganizationByPlaylist": { - "description": "Folder option - playlist folders" + "cacheNoData": "Keine gecachten Daten", + "@cacheNoData": { + "description": "Label when cache category has no data" }, - "@dateWeeksAgo": { - "description": "Relative date - weeks ago", + "cacheSizeWithFiles": "{size} in {count} Dateien", + "@cacheSizeWithFiles": { + "description": "Cache size and file count", "placeholders": { + "size": { + "type": "String" + }, "count": { "type": "int" } } }, - "logEntriesFiltered": "Einträge ({count} gefiltert)", - "@logEntriesFiltered": { - "description": "Log count with filter active", + "cacheSizeOnly": "{size}", + "@cacheSizeOnly": { + "description": "Cache size only", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheEntries": "{count} Einträge", + "@cacheEntries": { + "description": "Track cache entry count", "placeholders": { "count": { "type": "int" } } }, - "@lyricsModeDescription": { - "description": "Lyrics mode picker description" - }, - "@setupAppDocumentsFolderSubtitle": { - "description": "Subtitle for documents folder" - }, - "storeAddRepoButton": "Repository hinzufügen", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "@collectionLovedEmptyTitle": { - "description": "Loved empty state title" - }, - "aboutReportIssue": "Problem melden", - "snackbarFailedToWriteStorage": "Fehler beim Zurückschreiben in den Speicher", - "@snackbarFailedToWriteStorage": { - "description": "Snackbar when writing metadata back to file fails" - }, - "errorInvalidFolderSelected": "Ungültiger Ordner ausgewählt", - "allFilesAccessDisabledMessage": "Zugriff auf alle Dateien ist deaktiviert. Die App verwendet nur begrenzten Zugriff auf den Speicher.", - "@allFilesAccessDisabledMessage": { - "description": "Snackbar message when user disables all files access" - }, - "downloadMusixmatchLanguageCode": "Sprach-Code", - "@downloadMusixmatchLanguageCode": { - "description": "Label for Musixmatch language input field" - }, - "dialogUnsavedChanges": "Du hast ungespeicherte Änderungen. Möchtest du sie verwerfen?", - "setupChooseFromFiles": "Aus Dateien auswählen", - "@setupChooseFromFiles": { - "description": "iOS file picker option" - }, - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", - "@backupRestoreConfirmButton": { - "description": "Confirm button to proceed with restore" - }, - "@queueEmptyAlbumsSubtitle": { - "description": "Empty state subtitle for album downloads" - }, - "collectionRemovedFromWishlist": "\"{trackName}\" aus der Wunschliste entfernt", - "@collectionRemovedFromWishlist": { - "description": "Snackbar after removing track from wishlist", + "cacheClearSuccess": "Entfernt: {target}", + "@cacheClearSuccess": { + "description": "Snackbar after clearing selected cache", "placeholders": { - "trackName": { + "target": { "type": "String" } } }, - "extensionsInstalledSuccess": "Erweiterung erfolgreich installiert", - "progressReadingCsv": "CSV wird gelesen...", - "@progressReadingCsv": { - "description": "Progress indicator - parsing CSV file" + "cacheClearConfirmTitle": "Cache leeren?", + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" }, - "artistReleases": "Releases", - "@artistReleases": { - "description": "Section header for all artist releases" + "cacheClearConfirmMessage": "Dies löscht zwischengespeicherte Daten in {target}. Die Musikdateien werden nicht gelöscht.", + "@cacheClearConfirmMessage": { + "description": "Dialog message before clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } }, - "extensionVerificationBrowserTitle": "Verification browser", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" + "cacheClearAllConfirmTitle": "Gesamten Cache leeren?", + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" }, - "optionsArtistTagModeJoinedSubtitle": "Einen Künstler wert wie \"Artist A, Artist B\" für maximale Spieler-Kompatibilität schreiben.", - "downloadLossy320": "Verlustbehaftet 320kbps", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" + "cacheClearAllConfirmMessage": "Dadurch werden alle Cache-Kategorien auf dieser Seite gelöscht. Heruntergeladene Musikdateien werden nicht gelöscht.", + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" }, - "queueFlacAction": "Warteschlange FLAC", - "@queueFlacAction": { - "description": "Action/button label for queueing FLAC redownloads for local tracks" + "cacheClearAll": "Gesamten Cache leeren", + "@cacheClearAll": { + "description": "Button label to clear all caches" }, - "@setupDownloadLocationIosMessage": { - "description": "iOS-specific folder info" + "cacheCleanupUnused": "Unbenutzte Daten bereinigen", + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" }, - "trackConvertOriginal": "Original", - "sectionLyricsProviderOptions": "Anbieter-Optionen", - "nowPlayingTitle": "Jetzt läuft", - "@nowPlayingTitle": { - "description": "Title for the now playing screen" + "cacheCleanupUnusedSubtitle": "Verwaisten Downloadverlauf und fehlende Bibliothekseinträge löschen", + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" }, - "@extensionHealthChecksConfigured": { - "description": "Extension service health check count", + "cacheCleanupResult": "Bereinigung: {downloadCount} verwaiste Downloads, {libraryCount} fehlende Bibliothekseinträge", + "@cacheCleanupResult": { + "description": "Snackbar after unused data cleanup", "placeholders": { - "count": { + "downloadCount": { + "type": "int" + }, + "libraryCount": { "type": "int" } } }, - "@cacheClearAll": { - "description": "Button label to clear all caches" - }, - "a11yDeselectTrack": "Titel abwählen", - "@a11yDeselectTrack": { - "description": "Accessibility label for deselecting a track" + "cacheRefreshStats": "Statistik aktualisieren", + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" }, - "@lyricsProvidersInfoText": { - "description": "Info tip on lyrics provider priority page" + "trackSaveCoverArt": "Cover speichern", + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" }, - "queueEmptyHistory": "Kein Download-Verlauf", - "dialogClear": "Leeren", - "@dialogClear": { - "description": "Dialog button - clear items" + "trackSaveLyrics": "Lyrics als .lrc speichern", + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" }, - "allFilesAccessDescription": "Option bei Schreibfehlern bitte aktivieren (erforderlich ab Android 13).", - "@allFilesAccessDescription": { - "description": "Description explaining when to enable all files access" + "trackSaveLyricsProgress": "Speichere Lyrics...", + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" }, - "trackConvertConfirmTitle": "Konvertierung bestätigen", - "storeCategoryLyrics": "Lyrics", - "@storeCategoryLyrics": { - "description": "Store extension category - lyrics" + "trackReEnrich": "Neu-anreichern", + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" }, - "@lyricsProvidersDescription": { - "description": "Description on the lyrics provider priority page" + "trackReEnrichOnlineSubtitle": "Metadaten online suchen und in Datei einbinden", + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" }, - "tooltipLoveAll": "Alle lieben", - "downloadDirectory": "Download-Ordner", - "@downloadDirectory": { - "description": "Setting - download folder" + "trackReEnrichFieldCover": "Cover-Art", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" }, - "@tutorialExtensionsTip2": { - "description": "Tutorial extensions tip 2" + "trackReEnrichFieldLyrics": "Lyrics", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" }, - "libraryFolder": "Bibliotheksordner", - "@metadataProviderPriorityTitle": { - "description": "Metadata priority page title" + "trackReEnrichFieldBasicTags": "Album, Album-Künstler", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "@cleanupOrphanedDownloadsResult": { - "description": "Snackbar after orphan cleanup", + "trackReEnrichFieldTrackInfo": "Track & Disc Nummer", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Datum & ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Alles Auswählen", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" + }, + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" + }, + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" + }, + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" + }, + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" + }, + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", "placeholders": { - "count": { + "changeCount": { + "type": "int" + }, + "trackCount": { "type": "int" } } }, - "cacheExploreFeedDesc": "Startseiten-Inhalt (neue Releases, Trends). Wird bei einem Neustart aktualisiert.", - "@cacheExploreFeedDesc": { - "description": "Description of what explore feed cache contains" + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" }, - "a11yOpenTrackByArtist": "Öffne Track {trackName} von {artistName}", - "@a11yOpenTrackByArtist": { - "description": "Accessibility label for opening a track item", + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, + "trackEditMetadata": "Metadaten bearbeiten", + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" + }, + "trackCoverSaved": "Cover in {fileName} gespeichert", + "@trackCoverSaved": { + "description": "Snackbar after cover art saved", "placeholders": { - "trackName": { + "fileName": { "type": "String" - }, - "artistName": { + } + } + }, + "trackCoverNoSource": "Keine Cover Quelle vorhanden", + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" + }, + "trackLyricsSaved": "Lyrics in {fileName} gespeichert", + "@trackLyricsSaved": { + "description": "Snackbar after lyrics saved", + "placeholders": { + "fileName": { "type": "String" } } }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", - "libraryFilterSortAlbumDesc": "Album (Z-A)", - "@libraryFilterSortAlbumDesc": { - "description": "Sort option - album descending" + "trackReEnrichProgress": "Metadaten neu anreichern...", + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" }, - "trackConvertBitrate": "Bitrate", - "@trackConvertBitrate": { - "description": "Label for bitrate selection" + "trackReEnrichSearching": "Suche Metadaten online...", + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" }, - "audioAnalysisFileSize": "Größe", - "extensionHealthServiceOnline": "Dienste online", - "@extensionHealthServiceOnline": { - "description": "Tooltip for online extension service" + "trackReEnrichSuccess": "Metadaten erfolgreich neu angereichert", + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" }, - "logEntries": "{count} Einträge", - "@logEntries": { - "description": "Total log count", + "trackReEnrichFfmpegFailed": "FFmpeg Metadaten-Einbettung fehlgeschlagen", + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + }, + "queueFlacAction": "Warteschlange FLAC", + "@queueFlacAction": { + "description": "Action/button label for queueing FLAC redownloads for local tracks" + }, + "queueFlacConfirmMessage": "Suche Online-Matches für ausgewählte Titel und Playlists für FLAC-Downloads.\n\nVorhandene Dateien werden weder geändert noch gelöscht.\n\nNur eindeutige Treffer werden automatisch zur Warteschlange hinzugefügt.\n\n{count} ausgewählt", + "@queueFlacConfirmMessage": { + "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { "count": { "type": "int" } } }, + "queueFlacNoReliableMatches": "Keine zuverlässigen Online-Übereinstimmungen für die Auswahl gefunden", + "@queueFlacNoReliableMatches": { + "description": "Snackbar when no safe FLAC redownload matches were found" + }, + "queueFlacQueuedWithSkipped": "{addedCount} Titel zur Warteschlange hinzugefügt, {skippedCount} übersprungen", + "@queueFlacQueuedWithSkipped": { + "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "placeholders": { + "addedCount": { + "type": "int" + }, + "skippedCount": { + "type": "int" + } + } + }, + "trackSaveFailed": "Fehler: {error}", + "@trackSaveFailed": { + "description": "Snackbar when save operation fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "trackConvertFormat": "Format konvertieren", + "@trackConvertFormat": { + "description": "Menu item - convert audio format" + }, + "trackConvertTitle": "Audio konvertieren", + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" + }, + "trackConvertTargetFormat": "Zielformat", + "@trackConvertTargetFormat": { + "description": "Label for format selection" + }, + "trackConvertBitrate": "Bitrate", + "@trackConvertBitrate": { + "description": "Label for bitrate selection" + }, + "trackConvertKeepOriginal": "Keep original file", + "@trackConvertKeepOriginal": { + "description": "Toggle to preserve the source file during conversion" + }, + "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", + "@trackConvertKeepOriginalDescription": { + "description": "Description for preserving the source file during conversion" + }, + "trackConvertConfirmTitle": "Konvertierung bestätigen", + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" + }, "trackConvertConfirmMessage": "Konvertieren von {sourceFormat} in {targetFormat} bei {bitrate}?\n\nDie Originaldatei wird nach der Konvertierung gelöscht.", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", @@ -3307,1570 +3399,1522 @@ } } }, - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" + "trackConvertConfirmMessageLossless": "Konvertieren von {sourceFormat} in {targetFormat}? (kein Qualitätsverlust)\n\nDie Originaldatei wird nach der Konvertierung gelöscht.", + "@trackConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless-to-lossless conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "folderOrganizationByAlbum": "Nach Album", - "@folderOrganizationByAlbum": { - "description": "Folder option - album folders" + "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", + "@trackConvertConfirmKeepOriginal": { + "description": "Confirmation message when the source file will be preserved", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "libraryPlayback": "Playback", - "@storeFilterAll": { - "description": "Repo filter - all extensions" + "trackConvertLosslessHint": "Verlustfreie Konvertierung kein Qualitätsverlust", + "@trackConvertLosslessHint": { + "description": "Hint shown when converting between lossless formats" }, - "aboutApp": "App", - "@aboutApp": { - "description": "Section for app info" + "trackConvertConverting": "Konvertiere Audio...", + "@trackConvertConverting": { + "description": "Snackbar while converting" }, - "optionsReplayGainSubtitleOff": "Deaktiviert: keine Lautstärke-Normalisierungs-Tags", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" - }, - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" - }, - "settingsLyricsSubtitle": "Einbetten, Modus, Anbieter, Sprachoptionen", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" + "trackConvertSuccess": "Konvertiert in {format} erfolgreich", + "@trackConvertSuccess": { + "description": "Snackbar after successful conversion", + "placeholders": { + "format": { + "type": "String" + } + } }, - "logIssueIspBlockingLabel": "ISP BLOCKIERUNG ERKANNT", - "storeFilterIntegration": "Integration", - "@storeFilterIntegration": { - "description": "Repo filter - integrations" + "trackConvertFailed": "Konvertierung fehlgeschlagen", + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" }, - "@lyricsProvidersAtLeastOne": { - "description": "Snackbar when user tries to disable the last enabled provider" + "cueSplitTitle": "CUE-Sheet aufteilen", + "@cueSplitTitle": { + "description": "Title for CUE split bottom sheet" }, - "@appearanceHistoryViewGrid": { - "description": "Grid layout option" + "cueSplitAlbum": "Album: {album}", + "@cueSplitAlbum": { + "description": "Album name in CUE split sheet", + "placeholders": { + "album": { + "type": "String" + } + } }, - "trackDownloaded": "Heruntergeladen", - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", - "setupDownloadLocationIosMessage": "Auf iOS werden Downloads im Dokumentenordner der App gespeichert. Du kannst sie über die Datei-App aufrufen.", - "optionsArtistTagModeDescription": "Wähle aus, wie mehrere Künstler in eingebetteten Tags geschrieben sind.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" + "cueSplitArtist": "Künstler: {artist}", + "@cueSplitArtist": { + "description": "Artist name in CUE split sheet", + "placeholders": { + "artist": { + "type": "String" + } + } }, - "@queueRetryAllFailed": { - "description": "Button to retry every failed download in the queue", + "cueSplitTrackCount": "{count} Titel", + "@cueSplitTrackCount": { + "description": "Number of tracks in CUE sheet", "placeholders": { "count": { "type": "int" } } }, - "@trackConvertDitherTriangularHp": { - "description": "Lossless conversion high-pass triangular dither option" - }, - "@extensionVerificationCopyLink": { - "description": "Button to copy the extension verification URL" - }, - "searchSongs": "Titel", - "@searchSongs": { - "description": "Search result category - songs" - }, - "@appearanceHistoryView": { - "description": "Layout style for history" - }, - "sectionFileSettings": "Datei-Einstellungen", - "@sectionFileSettings": { - "description": "Settings section header" - }, - "@cancelDownloadTitle": { - "description": "Dialog title when confirming cancellation of an active download" - }, - "@cacheLibraryCover": { - "description": "Cache item title for local library cover art images" - }, - "audioAnalysisSpectralCutoff": "Spektralschnitt", - "dialogDelete": "Löschen", - "@dialogDelete": { - "description": "Dialog button - delete item" - }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", - "@tutorialLibraryDesc": { - "description": "Tutorial library page description" + "cueSplitConfirmTitle": "CUE-Album aufteilen", + "@cueSplitConfirmTitle": { + "description": "CUE split confirmation dialog title" }, - "@queueDownloadSpeedStatus": { - "description": "Queue status while downloading with speed", + "cueSplitConfirmMessage": "Soll „{album}“ in {count} einzelne FLAC-Dateien aufgeteilt werden?\n\nDie Dateien werden im selben Ordner gespeichert.", + "@cueSplitConfirmMessage": { + "description": "CUE split confirmation dialog message", "placeholders": { - "speed": { + "album": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "cacheCleanupResult": "Bereinigung: {downloadCount} verwaiste Downloads, {libraryCount} fehlende Bibliothekseinträge", - "@cacheCleanupResult": { - "description": "Snackbar after unused data cleanup", + "cueSplitSplitting": "CUE-Sheet wird geteilt... ({current}/{total})", + "@cueSplitSplitting": { + "description": "Snackbar while splitting CUE", "placeholders": { - "downloadCount": { + "current": { "type": "int" }, - "libraryCount": { + "total": { "type": "int" } } }, - "trackConvertLosslessHint": "Verlustfreie Konvertierung kein Qualitätsverlust", - "@trackConvertLosslessHint": { - "description": "Hint shown when converting between lossless formats" - }, - "collectionRenamePlaylist": "Playlist umbenennen", - "@collectionRenamePlaylist": { - "description": "Action to rename playlist" - }, - "@libraryFilterTitle": { - "description": "Filter bottom sheet title" - }, - "@storageModeAppFolder": { - "description": "Storage mode option - app-managed folder" - }, - "logTotalErrors": "Gesamte Fehler: {count}", - "@logTotalErrors": { - "description": "Total error count in log issue analysis", + "cueSplitSuccess": "{count} Titel erfolgreich aufgeteilt", + "@cueSplitSuccess": { + "description": "Snackbar after successful CUE split", "placeholders": { "count": { "type": "int" } } }, - "@setupStorageRequired": { - "description": "Title when storage permission needed" + "cueSplitFailed": "CUE-Aufteilung fehlgeschlagen", + "@cueSplitFailed": { + "description": "Snackbar when CUE split fails" }, - "@snackbarMetadataProviderSaved": { - "description": "Snackbar - metadata provider order saved" + "cueSplitNoAudioFile": "Audiodatei für dieses CUE-Sheet nicht gefunden", + "@cueSplitNoAudioFile": { + "description": "Error when CUE audio file is missing" }, - "@selectionBatchConvertConfirmTitle": { - "description": "Confirmation dialog title for batch conversion" + "cueSplitButton": "In Titel aufteilen", + "@cueSplitButton": { + "description": "Button text to start CUE splitting" }, - "extensionsHomeFeedAutoSubtitle": "Automatisch die besten verfügbaren auswählen", - "@extensionsHomeFeedAutoSubtitle": { - "description": "Extensions page - subtitle for auto home feed option" + "actionCreate": "Erstellen", + "@actionCreate": { + "description": "Generic action button - create" }, - "setupLanguageDescription": "Wählen deine bevorzugte Sprache für die App. Dies kann später in den Einstellungen geändert werden.", - "settingsBackupSubtitle": "Move your library, history and settings to a new device", - "@settingsBackupSubtitle": { - "description": "Subtitle for backup and restore settings item" + "collectionFoldersTitle": "Meine Ordner", + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" }, - "recentTypeArtist": "Künstler", - "@recentTypeArtist": { - "description": "Recent access item type - artist" + "collectionWishlist": "Wunschliste", + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" }, - "collectionPlaylistEmptySubtitle": "Drücke lange + auf einem beliebigen Titel, um ihn hier hinzuzufügen", - "artistCompilations": "Zusammenstellungen", - "@artistCompilations": { - "description": "Section header for compilations" + "collectionLoved": "Lieblingssongs", + "@collectionLoved": { + "description": "Custom folder for favorite tracks" }, - "snackbarFolderPickerFailed": "Fehler beim Öffnen des Ordners: {error}", - "@snackbarFolderPickerFailed": { - "description": "Snackbar shown when folder picker fails to open", - "placeholders": { - "error": { - "type": "String" - } - } + "collectionFavoriteArtists": "Lieblingskünstler", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" }, - "@optionsDetailedLoggingOn": { - "description": "Status when logging enabled" + "collectionPlaylist": "Playlist", + "@collectionPlaylist": { + "description": "Single playlist label" }, - "settingsSaveDownloadHistory": "Save download history", - "@settingsSaveDownloadHistory": { - "description": "Settings switch title for storing completed downloads in history" + "collectionAddToPlaylist": "Zur Playlist hinzufügen", + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" }, - "@storeCategoryIntegration": { - "description": "Store extension category - integration" + "collectionCreatePlaylist": "Playlist erstellen", + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" }, - "a11yOpenItemCount": "Öffne {title}, {count} {count, plural, =1{Item} other{Items}}", - "@a11yOpenItemCount": { - "description": "Accessibility label for opening a grouped item with count", + "collectionNoPlaylistsYet": "Noch keine Playlists", + "@collectionNoPlaylistsYet": { + "description": "Empty state title when user has no playlists" + }, + "collectionPlaylistTracks": "{count, plural, =1{1 Titel} other{{count} Titel}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", "placeholders": { - "title": { - "type": "String" - }, "count": { "type": "int" } } }, - "trackFileInfo": "Datei-Info", - "@trackFileInfo": { - "description": "Tab title - file information" + "collectionArtistCount": "{count, plural, =1{1 Künstler} other{{count} Künstler}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "libraryFilterMetadataMissingAlbumArtist": "Fehlender Album-Künstler", - "audioAnalysisNoClipping": "Kein Clipping", - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", - "@tutorialSettingsDesc": { - "description": "Tutorial settings page description" + "collectionAddedToPlaylist": "Zu \"{playlistName} \" hinzugefügt", + "@collectionAddedToPlaylist": { + "description": "Snackbar after adding track to playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "lyricsModeExternalSubtitle": "Separate .lrc Datei für Player wie Samsung Music", - "@lyricsModeExternalSubtitle": { - "description": "Subtitle for external option" + "collectionAlreadyInPlaylist": "Bereits in \"{playlistName}\"", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "trackLoadLyrics": "Lade Lyrics", - "@trackLoadLyrics": { - "description": "Action - fetch lyrics" + "collectionPlaylistNameHint": "Playlist-Name", + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", - "@extensionVerificationHelpTitleWaiting": { - "description": "Dialog title when verification is taking longer than expected" - }, - "libraryFilterReset": "Zurücksetzen", - "@libraryFilterReset": { - "description": "Reset all filters button" - }, - "@downloadAlbumArtistMetadataFull": { - "description": "Status label when album-artist folder filtering uses full metadata" - }, - "storeTitle": "Erweiterungs-Repo", - "@storeTitle": { - "description": "Repo screen title" - }, - "libraryCleared": "Bibliothek geleert", - "@libraryCleared": { - "description": "Snackbar after clearing library" + "collectionPlaylistNameRequired": "Playlist-Name ist erforderlich", + "@collectionPlaylistNameRequired": { + "description": "Validation error for empty playlist name" }, - "queueDownloadCompleted": "Download abgeschlossen", - "@queueDownloadCompleted": { - "description": "Accessibility label for completed download state in queue" + "collectionRenamePlaylist": "Playlist umbenennen", + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" }, - "libraryTitle": "Lokale Bibliothek", - "@libraryTitle": { - "description": "Library settings page title" + "collectionDeletePlaylist": "Playlist löschen", + "@collectionDeletePlaylist": { + "description": "Action to delete playlist" }, - "queueAlbumCount": "{count, plural, =1{1 Album} other{{count} Alben}}", - "@queueAlbumCount": { - "description": "Album count label with plural support", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionPlaylistRenamed": "Playlist umbenannt", + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" }, - "libraryClearConfirmTitle": "Bibliothek löschen", - "@backupExportSectionTitle": { - "description": "Section title for the export/backup card" + "collectionWishlistEmptyTitle": "Wunschliste ist leer", + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" }, - "dialogClearAll": "Alles löschen", - "@dialogClearAll": { - "description": "Dialog title - clear all items" + "collectionWishlistEmptySubtitle": "Tippe auf das + bei den Titeln, um sie zum späteren Herunterladen zu speichern", + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", - "@tutorialExtensionsDesc": { - "description": "Tutorial extensions page description" + "collectionLovedEmptyTitle": "Lieblingssongs sind leer", + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" }, - "libraryExternalPlayer": "External player", - "@libraryExternalPlayer": { - "description": "Setting option to use an external music player" + "collectionLovedEmptySubtitle": "Tippe auf das Herz, um deine Favoriten zu behalten", + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" }, - "editMetadataFieldGenre": "Genre", - "@tutorialLibraryTitle": { - "description": "Tutorial library page title" + "collectionFavoriteArtistsEmptyTitle": "Noch keine Lieblingskünstler", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" }, - "folderOrganizationByPlaylist": "Nach Playlist", - "queueTrackCount": "{count, plural, =1{1 Titel} other{{count} Titel}}", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" + "collectionFavoriteArtistsEmptySubtitle": "Tippe auf das Herz auf einer Künstlerseite, um sie hier zu sehen", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" }, - "editMetadataSelectNone": "Keine", - "@historyFilterSingles": { - "description": "Filter chip - show singles only" + "collectionPlaylistEmptyTitle": "Die Playlist ist leer", + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" }, - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" + "collectionPlaylistEmptySubtitle": "Drücke lange + auf einem beliebigen Titel, um ihn hier hinzuzufügen", + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" }, - "trackSaveCoverArt": "Cover speichern", - "@trackSaveCoverArt": { - "description": "Menu action - save album cover art as file" + "collectionRemoveFromPlaylist": "Von Playlist entfernen", + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" }, - "@downloadAlbumFolderStructure": { - "description": "Setting - album folder organization" + "collectionRemoveFromFolder": "Aus Ordner entfernen", + "@collectionRemoveFromFolder": { + "description": "Tooltip for removing track from wishlist/loved folder" }, - "lyricsProvidersAtLeastOne": "Mindestens ein Anbieter muss aktiviert bleiben", - "@notifDownloadCompleteCount": { - "description": "Notification title when download is complete, with count", + "collectionAddedToLoved": "\"{trackName}\" zu Lieblingssongs hinzugefügt", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", "placeholders": { - "completed": { - "type": "int" - }, - "total": { - "type": "int" + "trackName": { + "type": "String" } } }, - "setupUseDefault": "Standard verwenden", - "@setupUseDefault": { - "description": "Button to use default folder" - }, - "logNoLogsYetSubtitle": "Logs werden hier angezeigt, während du die App benutzt", - "@logNoLogsYetSubtitle": { - "description": "Empty state subtitle" - }, - "@dateToday": { - "description": "Relative date - today" - }, - "trackSaveLyricsProgress": "Speichere Lyrics...", - "@trackSaveLyricsProgress": { - "description": "Snackbar while saving lyrics to file" + "collectionRemovedFromLoved": "\"{trackName}\" aus Lieblingssongs entfernt", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "trackCoverSaved": "Cover in {fileName} gespeichert", - "@trackCoverSaved": { - "description": "Snackbar after cover art saved", + "collectionAddedToWishlist": "\"{trackName}\" zur Wunschliste hinzugefügt", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", "placeholders": { - "fileName": { + "trackName": { "type": "String" } } }, - "trackReEnrichFieldLyrics": "Lyrics", - "@audioAnalysisRescan": { - "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" + "collectionRemovedFromWishlist": "\"{trackName}\" aus der Wunschliste entfernt", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is on" + "collectionAddedToFavoriteArtists": "\"{artistName}\" zu Lieblingskünstlern hinzugefügt", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, - "dialogDisableAndClear": "Turn off and clear", - "extensionHealthChecksConfigured": "{count} {count, plural, =1{Prüfung} other{Prüfungen}} konfiguriert", - "cleanupOrphanedDownloadsSubtitle": "Verlaufseinträge für Dateien löschen, die nicht mehr existieren", - "@notifLibraryScanProgressWithTotal": { - "description": "Notification body for library scan progress when total is known", + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" entfernt aus Lieblingskünstlern", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", "placeholders": { - "scanned": { - "type": "int" - }, - "total": { - "type": "int" - }, - "percentage": { - "type": "int" + "artistName": { + "type": "String" } } }, - "@extensionDetailsTags": { - "description": "Section title for extension tags" + "trackOptionAddToLoved": "Zu Lieblingssongs hinzufügen", + "@trackOptionAddToLoved": { + "description": "Bottom sheet action label - add track to loved folder" }, - "@albumFolderAlbumOnlySubtitle": { - "description": "Folder structure example" + "trackOptionRemoveFromLoved": "Aus Lieblingssongs entfernt", + "@trackOptionRemoveFromLoved": { + "description": "Bottom sheet action label - remove track from loved folder" }, - "@audioAnalysisAnalyzing": { - "description": "Loading text while analyzing audio" + "trackOptionAddToWishlist": "Zur Wunschliste hinzufügen", + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" }, - "@settingsDonate": { - "description": "Settings menu item - donate page" + "trackOptionRemoveFromWishlist": "Von der Wunschliste entfernen", + "@trackOptionRemoveFromWishlist": { + "description": "Bottom sheet action label - remove track from wishlist" }, - "@collectionPlaylistNameRequired": { - "description": "Validation error for empty playlist name" + "artistOptionAddToFavorites": "Zu Favoriten hinzufügen", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" }, - "@backupImportSectionDescription": { - "description": "Description for the restore action" + "artistOptionRemoveFromFavorites": "Aus Favoriten entfernen", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" }, - "storeFilterLyrics": "Lyrics", - "libraryAutoScan": "Auto-Scan", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" + "collectionPlaylistChangeCover": "Coverbild ändern", + "@collectionPlaylistChangeCover": { + "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "safMigrationMessage1": "SpotiFLAC verwendet jetzt Android Storage Access Framework (SAF) beim Herunterladen. Dies behebt Fehler bei Android 10+.", - "@safMigrationMessage1": { - "description": "First paragraph of SAF migration dialog" + "collectionPlaylistRemoveCover": "Cover entfernen", + "@collectionPlaylistRemoveCover": { + "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "setupStorageRequired": "Speicherzugriff erforderlich", - "@notifLibraryScanErrors": { - "description": "Library scan complete suffix - error count", + "selectionShareCount": "Teile {count} {count, plural, =1{Titel} other{Titel}}", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", "placeholders": { "count": { "type": "int" } } }, - "appearanceHistoryViewGrid": "Raster", - "trackConvertConverting": "Konvertiere Audio...", - "@trackConvertConverting": { - "description": "Snackbar while converting" - }, - "@setupUseDefaultFolder": { - "description": "Dialog title for default folder" + "selectionShareNoFiles": "Keine teilbare Dateien gefunden", + "@selectionShareNoFiles": { + "description": "Snackbar when no selected files exist on disk" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Schreibe einen Künstler Tag pro Künstler für FLAC und Opus; MP3 und M4A bleiben beigetreten.", - "snackbarPlayingNext": "Als nächstes", - "@snackbarPlayingNext": { - "description": "Snackbar when a track is inserted as the next queue item" + "selectionConvertCount": "Konvertiere {count} {count, plural, =1{Titel} other{Titel}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "optionsDefaultSearchTabSubtitle": "Wähle aus, welcher Tab zuerst für neue Suchergebnisse geöffnet wird.", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" - }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", - "@sectionService": { - "description": "Settings section header" - }, - "notifUpdateProgress": "{received} / {total} MB • {percentage}%", - "@discographyDownloadSelected": { - "description": "Button - download selected albums" - }, - "cacheClearAllConfirmMessage": "Dadurch werden alle Cache-Kategorien auf dieser Seite gelöscht. Heruntergeladene Musikdateien werden nicht gelöscht.", - "@cacheClearAllConfirmMessage": { - "description": "Dialog message before clearing all caches" - }, - "extensionsHomeFeedProvider": "Home Feed Anbieter", - "@extensionsHomeFeedProvider": { - "description": "Extensions page - label for home feed provider selector" - }, - "@cacheExploreFeed": { - "description": "Cache item title for explore home feed cache" + "selectionConvertNoConvertible": "Keine konvertierbare Titel ausgewählt", + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" }, - "@audioAnalysisDynamicRange": { - "description": "Dynamic range metric label" + "selectionBatchConvertConfirmTitle": "Batch-Konvertierung", + "@selectionBatchConvertConfirmTitle": { + "description": "Confirmation dialog title for batch conversion" }, - "unknownAlbum": "Unbekanntes Album", - "trackCoverCurrent": "Aktuelles Cover", - "downloadSongLinkRegionDesc": "Region, die beim Auflösen von Titellinks über SongLink verwendet wird. Wähle das Land, in dem der Streaming-Dienste verfügbar sind.", - "downloadPrimaryArtistOnlyOff": "Primary only: Off", - "dialogDone": "Fertig", - "@dialogDone": { - "description": "Dialog button - action completed" + "selectionBatchConvertConfirmMessage": "Konvertiere {count} {format} {count, plural, =1{Titel} other{Titel}} zu {bitrate}?\n\nOriginaldateien werden nach der Konvertierung gelöscht.", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "storeRepoUrlLabel": "Repository-URL", - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", - "@logIssueRateLimitedSuggestion": { - "description": "Diagnostic badge suggestion for rate limiting" + "selectionBatchConvertConfirmMessageLossless": "Konvertiere {count} {count, plural, =1{Titel} other{Titel}} in {format}? (kein Qualitätsverlust)\n\nOriginaldateien werden nach der Konvertierung gelöscht.", + "@selectionBatchConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "libraryScanProgress": "{progress}% von {total} Dateien", - "@libraryScanProgress": { - "description": "Scan progress display", + "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": { + "description": "Batch conversion confirmation when source files will be preserved", "placeholders": { - "progress": { + "count": { + "type": "int" + }, + "format": { "type": "String" + } + } + }, + "selectionBatchConvertSuccess": "{success} von {total} Titeln in {format} konvertiert", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": { + "type": "int" }, "total": { "type": "int" + }, + "format": { + "type": "String" } } }, - "collectionLovedEmptyTitle": "Lieblingssongs sind leer", - "tutorialExtensionsTitle": "Erweiterungen", - "@tutorialExtensionsTitle": { - "description": "Tutorial extensions page title" + "downloadedAlbumDownloadedCount": "{count} heruntergeladen", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "searchSortDurationShort": "Dauer (kürzeste)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Ordner benannt nach dem Tag des Albumkünstlers", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when album artist is used for folder names" }, - "trackCopyFilePath": "Dateipfad kopieren", - "@trackCopyFilePath": { - "description": "Action - copy file path" + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Ordner benannt nach dem Tag des Künstlers", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when track artist is used for folder names" }, - "albumFolderArtistAlbumFlatSubtitle": "Künstler/Album/ Und Künstler/Lied.flac", - "@trackConvertResampler": { - "description": "Section label for lossless conversion resampler options" + "lyricsProvidersTitle": "Priorität des Lyrics-Anbieters", + "@lyricsProvidersTitle": { + "description": "Settings item title for lyrics provider order" }, - "editMetadataFieldTrackNum": "Titel #", - "@editMetadataFieldTrackNum": { - "description": "Chip label for track number field in auto-fill selector" + "lyricsProvidersDescription": "Lyrics aktivieren, deaktivieren und neu ordnen. Anbieter werden von oben nach unten ausprobiert, bis Lyrics gefunden werden.", + "@lyricsProvidersDescription": { + "description": "Description on the lyrics provider priority page" }, - "snackbarFailedToUpdate": "Erweiterung konnte nicht aktualisiert werden", - "@snackbarFailedToUpdate": { - "description": "Snackbar - extension update error" + "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", + "@lyricsProvidersInfoText": { + "description": "Info tip on lyrics provider priority page" }, - "notifAlreadyInLibrary": "Bereits in der Bibliothek", - "@notifAlreadyInLibrary": { - "description": "Notification title when track is already in library" + "lyricsProvidersEnabledSection": "({count}) aktiviert", + "@lyricsProvidersEnabledSection": { + "description": "Section header for enabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionPlaylistNameHint": "Playlist-Name", - "extensionVerificationCopyLink": "Copy link", - "@replayGainBatchAnalyzing": { - "description": "Progress dialog title while batch scanning ReplayGain" + "lyricsProvidersDisabledSection": "({count}) deaktiviert", + "@lyricsProvidersDisabledSection": { + "description": "Section header for disabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "setupLanguageTitle": "Sprache auswählen", - "extensionId": "ID", - "@extensionId": { - "description": "Extension detail - unique ID" + "lyricsProvidersAtLeastOne": "Mindestens ein Anbieter muss aktiviert bleiben", + "@lyricsProvidersAtLeastOne": { + "description": "Snackbar when user tries to disable the last enabled provider" }, - "regionCountryBR": "Brazil", - "@updateNewVersionReady": { - "description": "Update subtitle" + "lyricsProvidersSaved": "Priorität des Lyrics-Anbieters gespeichert", + "@lyricsProvidersSaved": { + "description": "Snackbar after saving lyrics provider priority" }, - "@queueDownloadedFileMissing": { - "description": "Accessibility label when a downloaded file is missing from disk" + "lyricsProvidersDiscardContent": "Ungespeicherte Änderungen die verloren gehen.", + "@lyricsProvidersDiscardContent": { + "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "@lyricsMode": { - "description": "Setting - how to save lyrics" + "lyricsProviderLrclibDesc": "Open-Source-Synchronisierte Lyrics-Datenbank", + "@lyricsProviderLrclibDesc": { + "description": "Description for LRCLIB provider" }, - "@settingsAppearance": { - "description": "Settings section - visual customization" + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (gut für asiatische Lieder)", + "@lyricsProviderNeteaseDesc": { + "description": "Description for Netease provider" }, - "@setupStorageAccessMessageAndroid11": { - "description": "Android 11+ specific explanation" + "lyricsProviderMusixmatchDesc": "Größte Lyrics-Datenbank (mehrsprachig)", + "@lyricsProviderMusixmatchDesc": { + "description": "Description for Musixmatch provider" }, - "@tutorialLibraryTip3": { - "description": "Tutorial library tip 3" + "lyricsProviderAppleMusicDesc": "Wort-für-Wort-synchronisierte Lyrics (via Proxy)", + "@lyricsProviderAppleMusicDesc": { + "description": "Description for Apple Music provider" }, - "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person lyrics is off" + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "@lyricsProviderQqMusicDesc": { + "description": "Description for QQ Music provider" }, - "libraryStorageAccessMessage": "SpotiFLAC benötigt Speicherzugriff, um deine Musikbibliothek zu scannen. Bitte erteile die Berechtigung in den Einstellungen.", - "@libraryStorageAccessMessage": { - "description": "Dialog message for storage permission" + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" }, - "@tutorialLibraryTip1": { - "description": "Tutorial library tip 1" + "lyricsProviderExtensionDesc": "Erweiterungsanbieter", + "@lyricsProviderExtensionDesc": { + "description": "Generic description for extension-based lyrics providers" }, - "dialogRemoveExtensionMessage": "Bist du sicher, dass du diese Erweiterung entfernen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.", - "@dialogRemoveExtensionMessage": { - "description": "Dialog message - uninstall confirmation" + "safMigrationTitle": "Speicheraktualisierung erforderlich", + "@safMigrationTitle": { + "description": "Title of SAF migration dialog" }, - "setupDownloadLocationTitle": "Speicherort", - "@setupDownloadLocationTitle": { - "description": "Download location dialog title" + "safMigrationMessage1": "SpotiFLAC verwendet jetzt Android Storage Access Framework (SAF) beim Herunterladen. Dies behebt Fehler bei Android 10+.", + "@safMigrationMessage1": { + "description": "First paragraph of SAF migration dialog" }, - "downloadNetworkCompatibilityModeEnabled": "Legacy-HTTP-Endpunkte erlaubt; TLS-Prüfung bleibt aktiviert", - "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is on" + "safMigrationMessage2": "Bitte wähle dein Download-Ordner erneut aus, um zum neuen System zu wechseln.", + "@safMigrationMessage2": { + "description": "Second paragraph of SAF migration dialog" }, - "@audioAnalysisBitDepth": { - "description": "Bit depth metric label" + "safMigrationSuccess": "Download-Ordner auf SAF-Modus aktualisiert", + "@safMigrationSuccess": { + "description": "Snackbar after successfully migrating to SAF" }, - "trackOptionAddToLoved": "Zu Lieblingssongs hinzufügen", - "@trackOptionAddToLoved": { - "description": "Bottom sheet action label - add track to loved folder" + "settingsDonate": "Unterstütze die Entwicklung", + "@settingsDonate": { + "description": "Settings menu item - donate page" }, - "cacheAppDirectory": "App-Cache Ordner", - "@cacheAppDirectory": { - "description": "Cache item title for app cache directory" + "settingsDonateSubtitle": "Kaufe dem Entwickler einen Kaffee", + "@settingsDonateSubtitle": { + "description": "Subtitle for donate menu item" }, - "lyricsProviderMusixmatchDesc": "Größte Lyrics-Datenbank (mehrsprachig)", - "@navStore": { - "description": "Bottom navigation - Extension repo tab" + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" }, - "extensionPostProcessing": "Post-processing", - "@searchTracks": { - "description": "Search filter label - tracks" + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" }, - "logCopied": "Logs in Zwischenablage kopiert", - "@logCopied": { - "description": "Snackbar - logs copied" - }, - "@extensionHealthRequired": { - "description": "Label for a required extension service health check" + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" }, - "@previewPlay": { - "description": "Tooltip for the button that plays a short track preview snippet" + "backupExportSectionTitle": "Create backup", + "@backupExportSectionTitle": { + "description": "Section title for the export/backup card" }, - "clickableLookingUpArtist": "Künstler wird gesucht...", - "@clickableLookingUpArtist": { - "description": "Snackbar shown while clickable artist metadata is being resolved" + "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", + "@backupExportSectionDescription": { + "description": "Description of what a backup contains" }, - "@extensionVerificationBrowserSubtitleInApp": { - "description": "Subtitle when in-app browser is preferred for extension verification" + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" }, - "setupUseDefaultFolder": "Als Standardordner verwenden?", - "tutorialSearchHint": "Einfügen oder suchen...", - "@logIssueTrackNotFoundLabel": { - "description": "Diagnostic badge label when a track is unavailable" + "backupImportSectionTitle": "Restore backup", + "@backupImportSectionTitle": { + "description": "Section title for the import/restore card" }, - "@storageModeAppFolderSubtitle": { - "description": "Subtitle for app folder storage mode" + "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", + "@backupImportSectionDescription": { + "description": "Description for the restore action" }, - "downloadMusixmatchLanguage": "Musixmatch Sprache", - "@downloadMusixmatchLanguage": { - "description": "Setting for Musixmatch lyrics translation language" + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" }, - "lyricsModeExternal": "Externe .lrc Datei", - "@setupSelectFolder": { - "description": "Button to select folder" + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" }, - "logSearchHint": "Logs durchsuchen ...", + "backupCreateFailed": "Failed to create backup", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "@settingsSaveDownloadHistorySubtitle": { - "description": "Settings switch subtitle for storing completed downloads in history" - }, - "@albumFolderArtistAlbumFlat": { - "description": "Album folder option with singles directly in artist folder" - }, - "extensionHealthRequired": "benötigt", - "actionCancel": "Abbrechen", - "@actionCancel": { - "description": "Action button - cancel operation" - }, - "optionsEmbedMetadataSubtitleOff": "Deaktiviert (erweitert): Metadateneinbettung überspringen", - "@optionsEmbedMetadataSubtitleOff": { - "description": "Subtitle when metadata embedding is disabled" - }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", - "@downloadAllowLocalNetworkDisabled": { - "description": "Subtitle when allow local network access is off" - }, - "@extensionsDownloadPrioritySubtitle": { - "description": "Subtitle for download priority" - }, - "downloadSingleFilenameFormat": "Einzelnes Dateinamenformat", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "cacheSummarySubtitle": "Das Leeren des Caches entfernt nicht heruntergeladene Musikdateien.", - "@cacheSummarySubtitle": { - "description": "Helper text for cache summary card" - }, - "libraryFilterMetadataIncorrectIsrcFormat": "Falsches ISRC-Format", - "libraryFilterMetadataMissingTrackNumber": "Fehlende Tracknummer", - "@libraryFilterMetadataMissingTrackNumber": { - "description": "Filter option - items missing track number" - }, - "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", - "@backupIncludeSecretsDescription": { - "description": "Explanation for the include-credentials toggle" - }, - "audioAnalysisChannelStats": "Pro Kanal Statistik", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" + "backupRestoreConfirmTitle": "Restore this backup?", + "@backupRestoreConfirmTitle": { + "description": "Confirmation dialog title before restoring a backup" }, - "@extensionServiceStatus": { - "description": "Extension detail section header for service status" + "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", + "@backupRestoreConfirmMessage": { + "description": "Confirmation dialog message before restoring a backup" }, - "queueEmptySingles": "Kein Single Download", - "@queueEmptySingles": { - "description": "Empty state title when no single track downloads exist" + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" }, - "@snackbarSelectedPlaylistsEmpty": { - "description": "Snackbar when selected playlists contain no tracks" + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" }, - "@errorRateLimited": { - "description": "Error title - too many requests" + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", - "@setupDownloadInFlac": { - "description": "App tagline in setup" + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" }, - "trackRemoveFromDevice": "Vom Gerät entfernen", - "@extensionsNoDownloadProvider": { - "description": "Empty state - no download providers" + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" }, - "@backupCreated": { - "description": "Snackbar after a backup file is created" + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" }, - "cacheSummaryTitle": "Cache-Übersicht", - "@cacheSummaryTitle": { - "description": "Heading for cache summary card" + "backupContentsSettings": "Appeinstellungen", + "@backupContentsSettings": { + "description": "Backup contents row label for settings" }, - "selectionReplayGainCount": "ReplayGain ({count})", - "@selectionReplayGainCount": { - "description": "Batch selection action button label for ReplayGain", + "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "@backupContentsHistory": { + "description": "Backup contents row for history count", "placeholders": { "count": { "type": "int" } } }, - "@setupNotificationBackgroundDescription": { - "description": "Detailed notification explanation" - }, - "safMigrationTitle": "Speicheraktualisierung erforderlich", - "snackbarMetadataSaved": "Metadaten erfolgreich gespeichert", - "@snackbarMetadataSaved": { - "description": "Snackbar after successfully saving track metadata" - }, - "@backupContentsSettings": { - "description": "Backup contents row label for settings" - }, - "logClearLogsTitle": "Logs leeren", - "extensionsCustomSearch": "Benutzerdefinierte Suche", - "@extensionsCustomSearch": { - "description": "Label for custom search provider" - }, - "@downloadFrom": { - "description": "Label - download source" + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheSizeWithFiles": "{size} in {count} Dateien", - "selectionShareNoFiles": "Keine teilbare Dateien gefunden", - "@selectionShareNoFiles": { - "description": "Snackbar when no selected files exist on disk" + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "snackbarAddedTracksToQueue": "{count} Titel hinzugefügt", - "downloadFilenameInsertTag": "Tippe, um Tag einzufügen:", - "@downloadFilenameInsertTag": { - "description": "Label above filename tag chips" + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" entfernt aus Lieblingskünstlern", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", "placeholders": { - "artistName": { - "type": "String" + "count": { + "type": "int" } } }, - "queueDownloadSpeedStatus": "Herunterladen - {speed} MB/s", - "backupRestoreConfirmButton": "Restore", - "@libraryCleanupMissingFiles": { - "description": "Button to remove entries for missing files" + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "backupCreateFailed": "Failed to create backup", - "notifLibraryScanFailed": "Bibliotheksscan fehlgeschlagen", - "@notifLibraryScanFailed": { - "description": "Notification title when library scan fails" + "backupIncludeSecrets": "Include extension credentials", + "@backupIncludeSecrets": { + "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, - "audioAnalysisRescan": "Neu analysieren", - "@trackTrackName": { - "description": "Metadata label - track title" + "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", + "@backupIncludeSecretsDescription": { + "description": "Explanation for the include-credentials toggle" }, - "@setupPermissionRequired": { - "description": "Generic permission required title", + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { - "permissionType": { - "type": "String", - "description": "Type of permission (Storage/Notification)" + "count": { + "type": "int" } } }, - "@nowPlayingNoLyrics": { - "description": "Empty state when the playing file has no embedded lyrics" + "tooltipLoveAll": "Alle lieben", + "@tooltipLoveAll": { + "description": "Tooltip for the Love All button on album/playlist screens" }, - "libraryFilesUnit": "{count, plural, =1{1 Datei} other{{count} Datein}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", + "tooltipAddToPlaylist": "Zur Wiedergabeliste hinzufügen", + "@tooltipAddToPlaylist": { + "description": "Tooltip for the Add to Playlist button" + }, + "snackbarRemovedTracksFromLoved": "{count} Titel von geliebt entfernt", + "@snackbarRemovedTracksFromLoved": { + "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { "count": { "type": "int" } } }, - "@extensionMetadataProvider": { - "description": "Capability - provides metadata" - }, - "@downloadFilterContributing": { - "description": "Setting to strip contributing artists from Album Artist folder name" + "snackbarAddedTracksToLoved": "{count} titel zu geliebt hinzugefügt", + "@snackbarAddedTracksToLoved": { + "description": "Snackbar after adding multiple tracks to Loved folder", + "placeholders": { + "count": { + "type": "int" + } + } }, - "libraryScanSelectFolderFirst": "Wähle zuerst einen Ordner", - "@sectionDownload": { - "description": "Settings section header" + "dialogDownloadAllTitle": "Alle Herunterladen", + "@dialogDownloadAllTitle": { + "description": "Dialog title for bulk download confirmation" }, - "extensionHealthNotConfigured": "Nicht konfiguriert", - "queueRetryAllFailed": "Retry {count} failed", - "folderOrganizationByPlaylistSubtitle": "Ordner für jede Playlist trennen", - "@folderOrganizationByPlaylistSubtitle": { - "description": "Subtitle for playlist folder option" + "dialogDownloadAllMessage": "{count} titel herunterladen?", + "@dialogDownloadAllMessage": { + "description": "Body of the Download All confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } }, - "lyricsProviderExtensionDesc": "Erweiterungsanbieter", - "@libraryFilterQualityHiRes": { - "description": "Filter option - high resolution audio" + "homeSkipAlreadyDownloaded": "Bereits heruntergeladene Titel überspringen", + "@homeSkipAlreadyDownloaded": { + "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "trackConvertTitle": "Audio konvertieren", - "@trackConvertTitle": { - "description": "Title of convert bottom sheet" + "homeGoToAlbum": "Zum Album gehen", + "@homeGoToAlbum": { + "description": "Context menu item to navigate to the album page" }, - "setupSkipForNow": "Vorerst überspringen", - "sectionDownload": "Herunterladen", - "downloadLossyOpus256Subtitle": "Beste Qualität, ~8MB pro Titel", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" + "homeAlbumInfoUnavailable": "Albuminfo nicht verfügbar", + "@homeAlbumInfoUnavailable": { + "description": "Snackbar when album info cannot be loaded" }, - "@trackConvertActionLabelLossless": { - "description": "Convert button label for lossless conversion with quality cap", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" - } - } + "snackbarLoadingCueSheet": "CAE-Sheet wird geladen...", + "@snackbarLoadingCueSheet": { + "description": "Snackbar while loading a CUE sheet file" }, - "storeRequiresVersion": "Benötigt v{version}+", - "@storeRequiresVersion": { - "description": "Store compatibility badge for minimum app version", + "snackbarMetadataSaved": "Metadaten erfolgreich gespeichert", + "@snackbarMetadataSaved": { + "description": "Snackbar after successfully saving track metadata" + }, + "snackbarFailedToEmbedLyrics": "Fehler beim Einbinden der Lyrics", + "@snackbarFailedToEmbedLyrics": { + "description": "Snackbar when lyrics embedding fails" + }, + "snackbarFailedToWriteStorage": "Fehler beim Zurückschreiben in den Speicher", + "@snackbarFailedToWriteStorage": { + "description": "Snackbar when writing metadata back to file fails" + }, + "snackbarError": "Fehler: {error}", + "@snackbarError": { + "description": "Generic error snackbar with error detail", "placeholders": { - "version": { + "error": { "type": "String" } } }, - "metadataProviderPriorityDescription": "Ziehe, um Metadatenanbieter neu zu ordnen. Die App versucht Anbieter von oben nach unten, wenn sie nach Tracks suchen und Metadaten abrufen.", - "@notifUpdateFailed": { - "description": "Notification title when app update download fails" + "snackbarNoActionDefined": "Keine Aktion für Taste definiert", + "@snackbarNoActionDefined": { + "description": "Snackbar when an extension button has no action configured" }, - "extensionsInfoTip": "Erweiterungen können neue Metadaten und Download-Anbieter hinzufügen. Installiere nur Erweiterungen von vertrauenswürdigen Quellen.", - "@extensionsInfoTip": { - "description": "Security warning about extensions" + "noTracksFoundForAlbum": "Keine Titel in diesem Album gefunden", + "@noTracksFoundForAlbum": { + "description": "Empty state message when an album has no tracks" }, - "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person lyrics is on" + "downloadLocationSubtitle": "Wählen Sie den Speicherort für Ihre heruntergeladenen Titel", + "@downloadLocationSubtitle": { + "description": "Subtitle shown in the download location picker sheet" }, - "libraryFilterMetadataMissingYear": "Jahr fehlt", - "extensionsDownloadPriority": "Download-Priorität", - "@extensionsDownloadPriority": { - "description": "Setting - download provider order" + "storageModeAppFolder": "App-Ordner (empfohlen)", + "@storageModeAppFolder": { + "description": "Storage mode option - app-managed folder" }, - "@downloadAllowLocalNetworkEnabled": { - "description": "Subtitle when allow local network access is on" + "storageModeAppFolderSubtitle": "Standardmäßig in Music/SpotiFLAC speichern", + "@storageModeAppFolderSubtitle": { + "description": "Subtitle for app folder storage mode" }, - "libraryScan": "Bibliothek scannen", - "@libraryScan": { - "description": "Button to start library scan" + "storageModeSaf": "Benutzerdefinierter Ordner (SAF)", + "@storageModeSaf": { + "description": "Storage mode option - Storage Access Framework" }, - "editMetadataFieldLabel": "Label", - "@editMetadataFieldLabel": { - "description": "Chip label for label field in auto-fill selector" + "storageModeSafSubtitle": "Wähle einen beliebigen Ordner, inklusive SD-Karte", + "@storageModeSafSubtitle": { + "description": "Subtitle for SAF storage mode" }, - "updateDownloadFailed": "Download fehlgeschlagen", - "@updateDownloadFailed": { - "description": "Update error title" + "downloadFolderAccessLostTitle": "Download folder access lost", + "@downloadFolderAccessLostTitle": { + "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" }, - "appearanceAmoledDarkSubtitle": "AMOLED Hintergrund", - "@appearanceAmoledDarkSubtitle": { - "description": "Subtitle for AMOLED dark" + "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", + "@downloadFolderAccessLostSubtitle": { + "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" }, - "setupIcloudNotSupported": "iCloud Drive wird nicht unterstützt. Bitte verwende den \"Dokumente\" Ordner.", - "trackLyricsEmbeddedSource": "Eingebettet", - "@trackLyricsEmbeddedSource": { - "description": "Lyrics source label for embedded lyrics" + "downloadFolderReselect": "Re-select folder", + "@downloadFolderReselect": { + "description": "Button that reopens the folder picker to restore download folder access" }, - "@trackAlbumArtist": { - "description": "Metadata label - album artist" + "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", + "@downloadErrorSafPermissionLost": { + "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" }, - "extensionsInstallPartialSuccess": "{installed} von {attempted} Erweiterungen installiert", - "@extensionsInstallPartialSuccess": { - "description": "Message when installing multiple extensions partially succeeds", - "placeholders": { - "installed": { - "type": "int", - "description": "Number of successfully installed extensions" - }, - "attempted": { - "type": "int", - "description": "Number of selected extensions" - } - } + "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", + "@downloadErrorFolderAccessLost": { + "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, - "@extensionSettingsCount": { - "description": "Count of settings exposed by an extension quality option", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameDescription": "Verwende {artist}, {title}, {album}, {track}, {year}, {date}, {disc} als Platzhalter.", + "@downloadFilenameDescription": { + "description": "Description shown in filename format editor" }, - "notifLibraryScanCancelled": "Bibliotheksscan abgebrochen", - "@notifLibraryScanCancelled": { - "description": "Notification title when library scan is cancelled by the user" + "downloadFilenameInsertTag": "Tippe, um Tag einzufügen:", + "@downloadFilenameInsertTag": { + "description": "Label above filename tag chips" }, - "collectionPlaylistNameRequired": "Playlist-Name ist erforderlich", - "libraryCleanupMissingFiles": "Fehlende Dateien bereinigen", - "storeCategoryUtility": "Utility", - "@storeCategoryUtility": { - "description": "Store extension category - utility" + "downloadSeparateSinglesEnabled": "Singles und EPs werden in einem separaten Ordner gespeichert", + "@downloadSeparateSinglesEnabled": { + "description": "Subtitle when separate singles folder is on" }, - "searchSortTitle": "Ergebnisse sortieren", - "@extensionVerificationBrowserExternal": { - "description": "Chip label for external browser verification mode" + "downloadSeparateSinglesDisabled": "Singles und Alben im selben Ordner gespeichert", + "@downloadSeparateSinglesDisabled": { + "description": "Subtitle when separate singles folder is off" }, - "audioAnalysisLufs": "LUFS", - "@setupAllowAccessToManageFiles": { - "description": "Instruction for file access permission" + "downloadArtistNameFilters": "Künstlernamen-Filter", + "@downloadArtistNameFilters": { + "description": "Setting title for artist folder filter options" }, - "extensionsErrorLoading": "Fehler beim Laden der Erweiterung", - "@actionPaste": { - "description": "Generic action - paste from clipboard" + "downloadCreatePlaylistSourceFolder": "Playlist-Quellordner", + "@downloadCreatePlaylistSourceFolder": { + "description": "Setting to create a subfolder per playlist source" }, - "aboutFeatureRequestSubtitle": "Schlage neue Funktionen für die App vor", - "@aboutFeatureRequestSubtitle": { - "description": "Subtitle for feature request" + "downloadCreatePlaylistSourceFolderEnabled": "Für jede Playlist wird ein Unterordner erstellt", + "@downloadCreatePlaylistSourceFolderEnabled": { + "description": "Subtitle when playlist folder is enabled" }, - "@aboutTitle": { - "description": "About page title" + "downloadCreatePlaylistSourceFolderDisabled": "Alle Titel direkt im Download-Ordner gespeichert", + "@downloadCreatePlaylistSourceFolderDisabled": { + "description": "Subtitle when playlist folder is disabled" }, - "@downloadNeteaseIncludeTranslation": { - "description": "Setting to include translated lyrics from Netease" + "downloadCreatePlaylistSourceFolderRedundant": "Wird durch die Ordnerorganisationseinstellung verarbeitet", + "@downloadCreatePlaylistSourceFolderRedundant": { + "description": "Subtitle when folder organization is already set to playlist" }, - "@actionGo": { - "description": "Generic action button label" + "downloadSongLinkRegion": "SongLink-Region", + "@downloadSongLinkRegion": { + "description": "Setting for SongLink region used during fallback resolution" }, - "regionCountryFR": "France", - "trackConvertResamplerSoxr": "SoXr", - "extensionUpdated": "Aktualisiert", - "@extensionUpdated": { - "description": "Extension detail - last update" + "downloadNetworkCompatibilityMode": "Netzwerkkompatibilitätsmodus", + "@downloadNetworkCompatibilityMode": { + "description": "Setting for legacy TLS/network handling" }, - "downloadLossyFormat": "Verlustbehaftetes Format", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "@downloadNetworkCompatibilityModeEnabled": { + "description": "Subtitle when network compatibility mode is on" }, - "snackbarAlreadyInLibrary": "\"{trackName}\" existiert bereits in deiner Bibliothek", - "@snackbarAlreadyInLibrary": { - "description": "Snackbar - track already exists in local library", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadNetworkCompatibilityModeDisabled": "Standard-Netzwerkeinstellungen verwenden", + "@downloadNetworkCompatibilityModeDisabled": { + "description": "Subtitle when network compatibility mode is off" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", - "extensionCustomUrlHandlingShareHint": "Teile Links von diesen Seiten mit SpotiFLAC Mobile und diese Erweiterung wird sie verarbeiten.", - "libraryFilterQuality": "Qualität", - "@libraryFilterQuality": { - "description": "Filter section - audio quality" + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@downloadAllowLocalNetwork": { + "description": "Setting title for allowing requests to private/local network targets" }, - "editMetadataAutoFillDone": "{count} {count, plural, =1{Feld} other{Felder}} aus Online-Metadaten gefüllt", - "@editMetadataAutoFillDone": { - "description": "Snackbar confirming how many fields were auto-filled", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", + "@downloadAllowLocalNetworkEnabled": { + "description": "Subtitle when allow local network access is on" }, - "@discographyDownload": { - "description": "Button - download artist discography" + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" }, - "aboutFeatureRequest": "Feature vorschlagen", - "downloadSingleFilenameFormatDescription": "Dateinamenmuster für Singles und EPs. Verwendet die gleichen Tags wie das Albumformat.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" + "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "@downloadSelectServiceToEnable": { + "description": "Subtitle when quality picker is disabled due to extension service" }, - "queueClearAllMessage": "Bist du dir sicher, dass du alle Downloads löschen möchten?", - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", - "extensionLastChecked": "Zuletzt geprüft {time}", - "@extensionLastChecked": { - "description": "Timestamp for the latest extension service health check", - "placeholders": { - "time": { - "type": "String" - } - } + "downloadEmbedLyricsDisabled": "Metadaten-Einbettung zuerst aktivieren", + "@downloadEmbedLyricsDisabled": { + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "homeImportCsvTooltip": "Import playlist (CSV, M3U)", - "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "downloadNeteaseIncludeTranslation": "Netease: Übersetzung einschließen", + "@downloadNeteaseIncludeTranslation": { + "description": "Setting to include translated lyrics from Netease" }, - "trackConvertResamplerSwr": "SWR", - "@trackConvertResamplerSwr": { - "description": "Lossless conversion default FFmpeg swresample resampler option" + "downloadNeteaseIncludeTranslationEnabled": "Chinesische Übersetzungszeilen enthalten", + "@downloadNeteaseIncludeTranslationEnabled": { + "description": "Subtitle when Netease translation is on" }, - "@downloadFolderOrganization": { - "description": "Title of the folder organization picker bottom sheet" + "downloadNeteaseIncludeTranslationDisabled": "Original Lyrics verwenden", + "@downloadNeteaseIncludeTranslationDisabled": { + "description": "Subtitle when Netease translation is off" }, - "dialogClearHistoryTitle": "Verlauf löschen", - "@logClearSearch": { - "description": "Tooltip for clearing the log search field" + "downloadNeteaseIncludeRomanization": "Netease: Romanisierung einschließen", + "@downloadNeteaseIncludeRomanization": { + "description": "Setting to include romanized lyrics from Netease" }, - "dialogImport": "Importieren", - "@dialogImport": { - "description": "Dialog button - import data" + "downloadNeteaseIncludeRomanizationEnabled": "Romanisierungszeilen enthalten", + "@downloadNeteaseIncludeRomanizationEnabled": { + "description": "Subtitle when Netease romanization is on" }, - "@setupChangeFolderTooltip": { - "description": "Tooltip for editing the selected download folder" + "downloadNeteaseIncludeRomanizationDisabled": "Keine Romanisierung", + "@downloadNeteaseIncludeRomanizationDisabled": { + "description": "Subtitle when Netease romanization is off" }, - "notifLibraryScanErrors": "{count} Fehler", - "@downloadNetworkCompatibilityMode": { - "description": "Setting for legacy TLS/network handling" + "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Personen-Lyrics", + "@downloadAppleQqMultiPerson": { + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, - "@metadataSaveFailedFfmpeg": { - "description": "Snackbar error when FFmpeg fails to write metadata" + "downloadAppleQqMultiPersonEnabled": "Sängerlabel für Duette und Gruppentitel enthalten", + "@downloadAppleQqMultiPersonEnabled": { + "description": "Subtitle when multi-person lyrics is on" }, - "dialogUninstallExtension": "Erweiterung deinstallieren?", - "recentTypePlaylist": "Playlist", - "@recentTypePlaylist": { - "description": "Recent access item type - playlist" + "downloadAppleQqMultiPersonDisabled": "Standardlyrics ohne Lautsprecher-Labels", + "@downloadAppleQqMultiPersonDisabled": { + "description": "Subtitle when multi-person lyrics is off" }, - "trackDeleteConfirmMessage": "Dies wird die heruntergeladene Datei dauerhaft löschen und sie aus deinem Verlauf entfernen.", - "@logIssueNetworkErrorDescription": { - "description": "Diagnostic badge description for generic network errors" + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "appearanceThemeSystem": "System", - "@appearanceThemeSystem": { - "description": "Follow system theme" + "downloadAppleElrcWordSyncEnabled": "Rohe Zeitstempel erhalten", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "albumFolderArtistAlbumSingles": "Künstler / Album + Singles", - "@aboutTranslators": { - "description": "Section for translators" + "downloadAppleElrcWordSyncDisabled": "Sichere Line-by-line Apple Music Texte", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "shareSheetNotFound": "Not found", - "@shareSheetNotFound": { - "description": "Cross-service share sheet row subtitle when a service has no match" + "downloadMusixmatchLanguage": "Musixmatch Sprache", + "@downloadMusixmatchLanguage": { + "description": "Setting for Musixmatch lyrics translation language" }, - "@tutorialDownloadInProgressSemantics": { - "description": "Accessibility label for active download state in tutorial demo" + "downloadMusixmatchLanguageAuto": "Auto (Originalsprache)", + "@downloadMusixmatchLanguageAuto": { + "description": "Subtitle when no language is set" }, - "editMetadataAutoFillNoneSelected": "Wähle mindestens ein Feld zum automatischen Ausfüllen aus", - "@editMetadataAutoFillNoneSelected": { - "description": "Snackbar when user taps Fetch without selecting any fields" + "downloadFilterContributing": "Mitwirkende Künstler filtern", + "@downloadFilterContributing": { + "description": "Setting to strip contributing artists from Album Artist folder name" }, - "@snackbarViewQueue": { - "description": "Snackbar action - view download queue" + "downloadFilterContributingEnabled": "Mitwirkende Künstler vom Albumname des Künstlers entfernt", + "@downloadFilterContributingEnabled": { + "description": "Subtitle when contributing artist filter is on" }, - "@optionsUpdateChannelPreview": { - "description": "Include beta/preview updates" + "downloadFilterContributingDisabled": "Volle Album Künstler String verwendet", + "@downloadFilterContributingDisabled": { + "description": "Subtitle when contributing artist filter is off" }, - "editMetadataFieldComposer": "Komponist", - "@editMetadataFieldComposer": { - "description": "Label for composer field in the edit metadata sheet" + "downloadProvidersNoneEnabled": "Keine Anbieter aktiviert", + "@downloadProvidersNoneEnabled": { + "description": "Shown when no lyrics providers are active" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", - "@aboutSachinsenalDesc": { - "description": "Credit description for sachinsenal0x64" + "downloadMusixmatchLanguageCode": "Sprach-Code", + "@downloadMusixmatchLanguageCode": { + "description": "Label for Musixmatch language input field" }, - "backupTitle": "Backup & Restore", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" + "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "@downloadMusixmatchLanguageHint": { + "description": "Placeholder for Musixmatch language input" }, - "setupStorageAccessRequired": "Speicherzugriff erforderlich", - "@setupStorageAccessRequired": { - "description": "Title when storage access needed" + "downloadMusixmatchLanguageDesc": "Gib einen BCP-47 Sprachcode ein (z.B. en, de, ja), um übersetzte Lyrics von Musixmatch anzufordern.", + "@downloadMusixmatchLanguageDesc": { + "description": "Description in Musixmatch language picker" }, - "trackMetadataDelete": "Löschen", - "@trackMetadataDelete": { - "description": "Action button - delete track" + "downloadMusixmatchAuto": "Auto", + "@downloadMusixmatchAuto": { + "description": "Button to clear Musixmatch language (use auto)" }, - "libraryFilterMetadataMissingDiscNumber": "Fehlende Disc-Nummer", - "@libraryFilterMetadataMissingDiscNumber": { - "description": "Filter option - items missing disc number" + "downloadNetworkAnySubtitle": "WLAN oder mobile Daten verwenden", + "@downloadNetworkAnySubtitle": { + "description": "Subtitle for any-network option in picker" }, - "snackbarMetadataProviderSaved": "Priorität des Metadaten-Anbieters gespeichert", - "setupPermissionRequired": "{permissionType}-Berechtigung erforderlich", - "@selectionConvertNoConvertible": { - "description": "Snackbar when no selected tracks support conversion" + "downloadNetworkWifiOnlySubtitle": "Downloads bei mobilen Daten pausieren", + "@downloadNetworkWifiOnlySubtitle": { + "description": "Subtitle for WiFi-only option in picker" }, - "extensionHealthDegraded": "Eingeschränkt", - "regionCountryKR": "Südkorea", - "@regionCountryKR": { - "description": "Country name for SongLink region picker" + "downloadSongLinkRegionDesc": "Region, die beim Auflösen von Titellinks über SongLink verwendet wird. Wähle das Land, in dem der Streaming-Dienste verfügbar sind.", + "@downloadSongLinkRegionDesc": { + "description": "Description in SongLink region picker" }, - "trackLyricsNotInFile": "Keine Lyrics in dieser Datei gefunden", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" + "snackbarUnsupportedAudioFormat": "Nicht unterstütztes Audioformat", + "@snackbarUnsupportedAudioFormat": { + "description": "Snackbar when the audio format is not supported for the requested operation" }, - "@downloadedAlbumTapToSelect": { - "description": "Selection hint" + "cacheRefresh": "Aktualisieren", + "@cacheRefresh": { + "description": "Tooltip for refresh button on cache management page" }, - "downloadArtistNameFilters": "Künstlernamen-Filter", - "@downloadArtistNameFilters": { - "description": "Setting title for artist folder filter options" + "dialogDownloadPlaylistsMessage": "Lade {trackCount} {trackCount, plural, =1{Titel} other{Titel}} von {playlistCount} {playlistCount, plural, =1{Playlist} other{Playlists}}?", + "@dialogDownloadPlaylistsMessage": { + "description": "Dialog message for bulk playlist download confirmation", + "placeholders": { + "trackCount": { + "type": "int" + }, + "playlistCount": { + "type": "int" + } + } }, - "@libraryFilterMetadataMissingArtist": { - "description": "Filter option - items missing artist" + "bulkDownloadPlaylistsButton": "Lade {count} {count, plural, =1{Playlist} other{Playlists}} herunter", + "@bulkDownloadPlaylistsButton": { + "description": "Button label for bulk downloading selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "recentShowAllDownloads": "Alle Downloads anzeigen", - "@appearanceThemeLight": { - "description": "Light theme" + "bulkDownloadSelectPlaylists": "Playlist zum Herunterladen wählen", + "@bulkDownloadSelectPlaylists": { + "description": "Button label when no playlists are selected for download" }, - "trackReEnrichFieldTrackInfo": "Track & Disc Nummer", - "@appearanceThemeDark": { - "description": "Dark theme" + "snackbarSelectedPlaylistsEmpty": "Ausgewählte Playlisten haben keine Titel", + "@snackbarSelectedPlaylistsEmpty": { + "description": "Snackbar when selected playlists contain no tracks" }, - "extensionVerificationLinkCopied": "Verification link copied", - "@extensionVerificationLinkCopied": { - "description": "Snackbar after copying the extension verification URL" + "playlistsCount": "{count, plural, =1{1 Playlist} other{{count} Playlists}}", + "@playlistsCount": { + "description": "Playlist count display", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@extensionsHomeFeedDescription": { - "description": "Extensions page - description for home feed provider picker" + "editMetadataAutoFill": "Aus online ausfüllen", + "@editMetadataAutoFill": { + "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", - "@downloadAlbumArtistMetadataPrimaryOnly": { - "description": "Status label when album-artist folder filtering uses primary artist only" + "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", + "@editMetadataAutoFillDesc": { + "description": "Description for the auto-fill section" }, - "extensionOauthConnectHint": "Tippe auf \"Mit Spotify verbinden\" um dieses Feld auszufüllen.", - "setupNext": "Weiter", - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", - "libraryAutoScanDaily": "Täglich", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" + "editMetadataAutoFillSource": "Metadata source", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" }, - "@audioAnalysisDescription": { - "description": "Description for audio analysis tap-to-analyze prompt" + "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" }, - "nowPlayingUpNext": "Up next", - "@nowPlayingUpNext": { - "description": "Title for the playback queue sheet" + "editMetadataAutoFillFind": "Find metadata", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" }, - "nowPlayingPreviousTrack": "Previous track", - "nowPlayingNextTrack": "Next track", - "logAutoScrollOff": "Auto-Scrollen AUS", - "trackConvertFailed": "Konvertierung fehlgeschlagen", - "@trackConvertFailed": { - "description": "Snackbar when conversion fails" + "editMetadataAutoFillPreview": "Data from {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } }, - "extensionsUninstall": "Deinstallieren", - "safMigrationSuccess": "Download-Ordner auf SAF-Modus aktualisiert", - "optionsClearHistorySubtitle": "Alle heruntergeladenen Titel aus dem Verlauf entfernen", - "@optionsClearHistorySubtitle": { - "description": "Subtitle for clear history" + "editMetadataAutoFillCoverAvailable": "Cover artwork available", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" }, - "trackPlayNext": "Play next", - "extensionsNoHomeFeedExtensions": "Keine Erweiterungen mit Home-Feed", - "optionsUpdateChannelStable": "Nur stabile Versionen", - "@optionsUpdateChannelStable": { - "description": "Only stable updates" + "editMetadataAutoFillApply": "Apply selected data", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" }, - "@discographyDownloadAllSubtitle": { - "description": "Subtitle showing total tracks and albums", + "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" }, - "albumCount": { - "type": "int" + "source": { + "type": "String" } } }, - "searchPlaylists": "Playlists", - "@searchPlaylists": { - "description": "Search result category - playlists" + "editMetadataAutoFillFetch": "Abrufen & Ausfüllen", + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" }, - "downloadNetworkCompatibilityMode": "Netzwerkkompatibilitätsmodus", - "settingsAppearance": "Erscheinungsbild", - "logIssueRateLimitedLabel": "LIMIT ERKANNT", - "@logIssueRateLimitedLabel": { - "description": "Diagnostic badge label when the service rate limits requests" + "editMetadataAutoFillSearching": "Online suchen...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" }, - "logIssueSummary": "Problemübersicht", - "@logIssueSummary": { - "description": "Header for log issue analysis summary" + "editMetadataAutoFillNoResults": "Keine passenden Metadaten online gefunden", + "@editMetadataAutoFillNoResults": { + "description": "Snackbar when online metadata search returns no results" }, - "appName": "SpotiFLAC Mobile", - "storeRepoDialogCurrent": "Aktuelles Repository:", - "@optionsExtensionStoreSubtitle": { - "description": "Subtitle for extension repo toggle" + "editMetadataAutoFillDone": "{count} {count, plural, =1{Feld} other{Felder}} aus Online-Metadaten gefüllt", + "@editMetadataAutoFillDone": { + "description": "Snackbar confirming how many fields were auto-filled", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@trackLyrics": { - "description": "Tab title - lyrics" + "editMetadataAutoFillNoneSelected": "Wähle mindestens ein Feld zum automatischen Ausfüllen aus", + "@editMetadataAutoFillNoneSelected": { + "description": "Snackbar when user taps Fetch without selecting any fields" }, - "@backupImportButton": { - "description": "Button to pick a backup file to restore" + "editMetadataFieldTitle": "Titel", + "@editMetadataFieldTitle": { + "description": "Chip label for title field in auto-fill selector" }, - "@setupFolderChoose": { - "description": "Button to choose folder" + "editMetadataFieldArtist": "Künstler", + "@editMetadataFieldArtist": { + "description": "Chip label for artist field in auto-fill selector" }, - "storageModeAppFolderSubtitle": "Standardmäßig in Music/SpotiFLAC speichern", - "@extensionsDisabled": { - "description": "Extension status - inactive" + "editMetadataFieldAlbum": "Album", + "@editMetadataFieldAlbum": { + "description": "Chip label for album field in auto-fill selector" }, - "@regionCountryAU": { - "description": "Country name for SongLink region picker" + "editMetadataFieldAlbumArtist": "Album Künstler", + "@editMetadataFieldAlbumArtist": { + "description": "Chip label for album artist field in auto-fill selector" }, - "@storeCategoryMetadata": { - "description": "Store extension category - metadata" + "editMetadataFieldDate": "Datum", + "@editMetadataFieldDate": { + "description": "Chip label for date field in auto-fill selector" }, - "libraryFilterApply": "Anwenden", - "@libraryFilterApply": { - "description": "Apply filters button" + "editMetadataFieldTrackNum": "Titel #", + "@editMetadataFieldTrackNum": { + "description": "Chip label for track number field in auto-fill selector" }, - "@libraryFilterSortGenreAsc": { - "description": "Sort option - genre ascending" + "editMetadataFieldDiscNum": "Disk #", + "@editMetadataFieldDiscNum": { + "description": "Chip label for disc number field in auto-fill selector" }, - "setupAllowAccessToManageFiles": "Bitte aktiviere \"Zugriff auf alle Dateien erlauben\" auf dem nächsten Bildschirm.", - "@dialogSave": { - "description": "Dialog button - save changes" + "editMetadataFieldGenre": "Genre", + "@editMetadataFieldGenre": { + "description": "Chip label for genre field in auto-fill selector" }, - "trackLyrics": "Lyrics", - "extensionSettingNotSet": "Nicht eingestellt", - "@extensionSettingNotSet": { - "description": "Value shown when an extension setting has no value" + "editMetadataFieldIsrc": "ISRC", + "@editMetadataFieldIsrc": { + "description": "Chip label for ISRC field in auto-fill selector" }, - "@audioAnalysisClipping": { - "description": "Clipping metric label" + "editMetadataFieldLabel": "Label", + "@editMetadataFieldLabel": { + "description": "Chip label for label field in auto-fill selector" }, - "downloadNeteaseIncludeTranslation": "Netease: Übersetzung einschließen", - "@albumFolderArtistAlbumSubtitle": { - "description": "Folder structure example" + "editMetadataFieldCopyright": "Urheberrecht", + "@editMetadataFieldCopyright": { + "description": "Chip label for copyright field in auto-fill selector" }, - "@settingsDonateSubtitle": { - "description": "Subtitle for donate menu item" + "editMetadataFieldCover": "Cover-Art", + "@editMetadataFieldCover": { + "description": "Chip label for cover art field in auto-fill selector" }, - "cueSplitSuccess": "{count} Titel erfolgreich aufgeteilt", - "@cueSplitSuccess": { - "description": "Snackbar after successful CUE split", + "editMetadataSelectAll": "Alle", + "@editMetadataSelectAll": { + "description": "Button to select all fields for auto-fill" + }, + "editMetadataSelectEmpty": "Nur leer", + "@editMetadataSelectEmpty": { + "description": "Button to select only fields that are currently empty" + }, + "queueDownloadingCount": "{count} werden heruntergeladen", + "@queueDownloadingCount": { + "description": "Header for active downloads section with count", "placeholders": { "count": { "type": "int" } } }, - "cueSplitArtist": "Künstler: {artist}", - "@cueSplitArtist": { - "description": "Artist name in CUE split sheet", + "queueFilteringIndicator": "Filtere...", + "@queueFilteringIndicator": { + "description": "Shown while filter results are being computed" + }, + "queueTrackCount": "{count, plural, =1{1 Titel} other{{count} Titel}}", + "@queueTrackCount": { + "description": "Track count label with plural support", "placeholders": { - "artist": { - "type": "String" + "count": { + "type": "int" } } }, - "updateSeeReleaseNotes": "See release notes for details.", - "@updateSeeReleaseNotes": { - "description": "Fallback changelog text when release notes cannot be parsed" - }, - "@trackReEnrichFfmpegFailed": { - "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + "queueAlbumCount": "{count, plural, =1{1 Album} other{{count} Alben}}", + "@queueAlbumCount": { + "description": "Album count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionWishlist": "Wunschliste", - "@collectionWishlist": { - "description": "Custom folder for saved tracks to download later" + "queueEmptyAlbums": "Keine Album-Downloads", + "@queueEmptyAlbums": { + "description": "Empty state title when no album downloads exist" }, - "editMetadataAutoFillFetch": "Abrufen & Ausfüllen", - "@extensionsHomeFeedAuto": { - "description": "Label for auto-selected search provider" + "queueEmptyAlbumsSubtitle": "Lade mehrere Titel eines Albums herunter, um sie hier zu sehen", + "@queueEmptyAlbumsSubtitle": { + "description": "Empty state subtitle for album downloads" }, - "providerPriorityDescription": "Ziehen, um Download-Anbieter neu zu ordnen. Die App versucht Anbieter von oben nach unten, wenn Titel heruntergeladen werden.", - "@providerPriorityDescription": { - "description": "Provider priority page description" + "queueEmptySingles": "Kein Single Download", + "@queueEmptySingles": { + "description": "Empty state title when no single track downloads exist" }, "queueEmptySinglesSubtitle": "Einzelne Titel-Downloads werden hier angezeigt", - "downloadLossyOpus128": "Opus 128kbps", - "downloadUseAlbumArtistForFolders": "Album-Künstler für Ordner verwenden", - "@downloadUseAlbumArtistForFolders": { - "description": "Setting - choose whether artist folders use Album Artist or Track Artist" + "@queueEmptySinglesSubtitle": { + "description": "Empty state subtitle for single track downloads" }, - "@aboutLinks": { - "description": "Section for external links" + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadedAlbumDeleteCount": "Lösche {count} {count, plural, =1{Titel} other{Titel}}", - "updateLater": "Später", - "@logIssueIspBlockingSuggestion": { - "description": "Diagnostic badge suggestion for ISP blocking" + "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" }, - "actionResume": "Fortfahren", - "optionsDetailedLoggingOff": "Für Fehlerberichte aktivieren", - "@searchSortDefault": { - "description": "Sort option - default API order" + "libraryDefaultView": "Default view", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" }, - "@regionCountryCA": { - "description": "Country name for SongLink region picker" + "libraryDefaultViewLastUsed": "Last used", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" }, - "@sectionStorageAccess": { - "description": "Section header for storage access settings" + "queueEmptyHistory": "Kein Download-Verlauf", + "@queueEmptyHistory": { + "description": "Empty state title when download history is empty" }, - "downloadFilterContributing": "Mitwirkende Künstler filtern", - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Ordner benannt nach dem Tag des Künstlers", - "storeSearch": "Erweiterungen suchen...", - "@storeSearch": { - "description": "Repo search placeholder" + "queueEmptyHistorySubtitle": "Heruntergeladene Titel werden hier angezeigt", + "@queueEmptyHistorySubtitle": { + "description": "Empty state subtitle for download history" }, - "aboutTelegramChat": "Telegram Community", - "lyricsModeBoth": "Beides", - "@lyricsModeBoth": { - "description": "Lyrics mode option - embed and external" + "selectionAllPlaylistsSelected": "Alle Playlists ausgewählt", + "@selectionAllPlaylistsSelected": { + "description": "Shown when all playlists are selected in selection mode" }, - "@permissionNotification": { - "description": "Notification permission type label" - }, - "libraryAutoScanSubtitle": "Scanne die Bibliothek automatisch nach neuen Dateien", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" + "selectionTapPlaylistsToSelect": "Zum Auswählen auf Playlists tippen", + "@selectionTapPlaylistsToSelect": { + "description": "Hint shown in playlist selection mode" }, - "libraryEnableLocalLibrary": "Lokale Bibliothek aktivieren", - "trackConvertTargetFormat": "Zielformat", - "@trackConvertTargetFormat": { - "description": "Label for format selection" + "selectionSelectPlaylistsToDelete": "Playlist zum Löschen wählen", + "@selectionSelectPlaylistsToDelete": { + "description": "Hint shown when no playlists are selected for deletion" }, - "extensionSettings": "Einstellungen", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" + "audioAnalysisTitle": "Audio-Qualitätsanalyse", + "@audioAnalysisTitle": { + "description": "Title for audio analysis section" }, - "trackLyricsTimeout": "Anfrage Timeout. Versuche es später erneut.", - "settingsExtensions": "Erweiterungen", - "@settingsBackup": { - "description": "Settings menu item - backup and restore page" + "audioAnalysisDescription": "Verlustfreie Qualität mit Spektrumanalyse überprüfen", + "@audioAnalysisDescription": { + "description": "Description for audio analysis tap-to-analyze prompt" }, - "librarySourceDownloaded": "Heruntergeladen", - "@librarySourceDownloaded": { - "description": "Badge for tracks downloaded via SpotiFLAC" + "audioAnalysisAnalyzing": "Audio wird analysiert...", + "@audioAnalysisAnalyzing": { + "description": "Loading text while analyzing audio" }, - "appearanceDynamicColor": "Dynamische Farben", - "@appearanceDynamicColor": { - "description": "Material You dynamic colors" + "audioAnalysisSampleRate": "Abtastrate", + "@audioAnalysisSampleRate": { + "description": "Sample rate metric label" }, - "backupImportButton": "Choose backup file", - "downloadAppleElrcWordSyncDisabled": "Sichere Line-by-line Apple Music Texte", - "@optionsEmbedMetadata": { - "description": "Settings toggle title for writing metadata into downloaded files" + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" }, - "appearanceTitle": "Erscheinungsbild", - "downloadNeteaseIncludeRomanizationDisabled": "Keine Romanisierung", - "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is off" + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" }, - "@libraryScanCancelled": { - "description": "Library scan status when a scan was cancelled" + "audioAnalysisDecodedFormat": "Dekodiertes Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" }, - "tracksCount": "{count, plural, =1{1 Titel} other{{count} Titel}}", - "@snackbarFailedToUpdateNamed": { - "description": "Snackbar when extension update fails in the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "audioAnalysisBitDepth": "Bit-Tiefe", + "@audioAnalysisBitDepth": { + "description": "Bit depth metric label" }, - "@extensionQualityOptions": { - "description": "Capability - quality selection" + "audioAnalysisChannels": "Kanäle", + "@audioAnalysisChannels": { + "description": "Channels metric label" }, - "logClearSearch": "Suche löschen", - "trackSaveLyrics": "Lyrics als .lrc speichern", - "@trackReEnrichSearching": { - "description": "Snackbar while searching metadata from internet for local items" + "audioAnalysisDuration": "Länge", + "@audioAnalysisDuration": { + "description": "Duration metric label" }, - "@editMetadataAutoFillNoResults": { - "description": "Snackbar when online metadata search returns no results" + "audioAnalysisNyquist": "Nyquist", + "@audioAnalysisNyquist": { + "description": "Nyquist frequency metric label" }, - "notifDownloadComplete": "Download abgeschlossen", - "snackbarAlreadyDownloaded": "\"{trackName}\" bereits heruntergeladen", - "folderOrganizationByAlbumSubtitle": "Trenne Ordner nach Album", - "storeRepoUrlHint": "https://github.com/user/repo", - "trackConvertDitherTriangularHp": "Triangular HP", - "lyricsModeBothSubtitle": "Lyrics einbetten und als .lrc speichern", - "trackReEnrichFieldExtra": "Genre, Label, Copyright", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" + "audioAnalysisFileSize": "Größe", + "@audioAnalysisFileSize": { + "description": "File size metric label" }, - "sectionLyrics": "Lyrics", - "@sectionLyrics": { - "description": "Settings section header" + "audioAnalysisDynamicRange": "Dynamischer Bereich", + "@audioAnalysisDynamicRange": { + "description": "Dynamic range metric label" }, - "extensionStrategy": "Strategie: {strategy}", - "@extensionStrategy": { - "description": "Track matching strategy name", - "placeholders": { - "strategy": { - "type": "String" - } - } + "audioAnalysisPeak": "Maximum", + "@audioAnalysisPeak": { + "description": "Peak amplitude metric label" }, - "@downloadNativeWorker": { - "description": "Setting title for Android native download worker" + "audioAnalysisRms": "RMS", + "@audioAnalysisRms": { + "description": "RMS level metric label" }, - "optionsArtistTagModeSplitVorbis": "Tags für FLAC/Opus aufteilen", - "extensionsHomeFeedUse": "{extensionName} Home Feed verwenden", - "@cacheAppDirectoryDesc": { - "description": "Description of what app cache directory contains" + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" }, - "cancelDownloadTitle": "Download abbrechen?", - "updateWhatsNew": "Was ist neu", - "updateNewVersionReady": "Eine neue Version ist verfügbar", - "@extensionVerificationClose": { - "description": "Button to dismiss the extension verification help dialog" + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" }, - "a11ySelectTrack": "Titel auswählen", - "libraryClearSubtitle": "Alle gescannten Titel entfernen", - "@libraryClearSubtitle": { - "description": "Subtitle for clear button" + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" }, - "@settingsDownloadNetworkSubtitle": { - "description": "Subtitle explaining network preference" + "audioAnalysisNoClipping": "Kein Clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" }, - "storeAnyVersion": "Alle", - "@storeAnyVersion": { - "description": "Store detail value when any app version is accepted" + "audioAnalysisSpectralCutoff": "Spektralschnitt", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" }, - "navStore": "Repo", - "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", - "libraryScanSettings": "Scan Einstellungen", - "@libraryScanSettings": { - "description": "Section header for scan settings" + "audioAnalysisCutoffNotDetected": "Not detected", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" }, - "trackDuration": "Länge", - "@trackDuration": { - "description": "Metadata label - track length" + "audioAnalysisChannelStats": "Pro Kanal Statistik", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" }, - "extensionHealthOffline": "Offline", - "@extensionHealthOffline": { - "description": "Extension service health status - offline" + "audioAnalysisSamples": "Proben", + "@audioAnalysisSamples": { + "description": "Total samples metric label" }, - "editMetadataFieldArtist": "Künstler", - "@editMetadataFieldArtist": { - "description": "Chip label for artist field in auto-fill selector" + "audioAnalysisRescan": "Neu analysieren", + "@audioAnalysisRescan": { + "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" }, - "libraryInLibrary": "In Bibliothek", - "pressBackAgainToExit": "Drücke wieder \"zurück\" um die App zu beenden", - "@pressBackAgainToExit": { - "description": "Exit confirmation message" + "audioAnalysisRescanning": "Audio wird analysiert...", + "@audioAnalysisRescanning": { + "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "setupNotificationGranted": "Benachrichtigungs-Berechtigung erteilt", - "@setupNotificationGranted": { - "description": "Success message for notification permission" + "extensionsHomeFeedProvider": "Home Feed Anbieter", + "@extensionsHomeFeedProvider": { + "description": "Extensions page - label for home feed provider selector" }, - "settingsDonate": "Unterstütze die Entwicklung", - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", - "backupContentsTitle": "Backup contents", - "updateDontRemind": "Nicht erinnern", - "@dialogDiscard": { - "description": "Dialog button - discard changes" + "extensionsHomeFeedDescription": "Wählen Sie die Erweiterung aus, die den Start-Feed auf dem Hauptbildschirm anzeigt", + "@extensionsHomeFeedDescription": { + "description": "Extensions page - description for home feed provider picker" }, - "editMetadataAutoFillSearching": "Online suchen...", - "discographyDownloadSelected": "Auswahl herunterladen", - "trackConvertResampler": "Resampler", - "queueFilteringIndicator": "Filtere...", - "@queueFilteringIndicator": { - "description": "Shown while filter results are being computed" + "extensionsHomeFeedAuto": "Auto", + "@extensionsHomeFeedAuto": { + "description": "Label for auto-selected search provider" }, - "@dialogDownloadAllTitle": { - "description": "Dialog title for bulk download confirmation" + "extensionsHomeFeedAutoSubtitle": "Automatisch die besten verfügbaren auswählen", + "@extensionsHomeFeedAutoSubtitle": { + "description": "Extensions page - subtitle for auto home feed option" }, - "cueSplitConfirmMessage": "Soll „{album}“ in {count} einzelne FLAC-Dateien aufgeteilt werden?\n\nDie Dateien werden im selben Ordner gespeichert.", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when folder organization is already set to playlist" + "extensionsHomeFeedOff": "Aus", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" }, - "regionCountryCA": "Canada", - "cacheTempDirectory": "Temporärer Ordner", - "@cacheTempDirectory": { - "description": "Cache item title for temporary files directory" + "extensionsHomeFeedOffSubtitle": "Start-Feed nicht auf dem Hauptbildschirm anzeigen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" }, - "libraryShowDuplicateIndicator": "Duplikat Indikator anzeigen", - "@logFilterBySeverity": { - "description": "Filter dialog title" + "extensionsHomeFeedUse": "{extensionName} Home Feed verwenden", + "@extensionsHomeFeedUse": { + "description": "Extensions page - subtitle for a specific extension home feed option", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "homeSearchHintProvider": "Mit {providerName} suchen...", - "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is off" + "extensionsNoHomeFeedExtensions": "Keine Erweiterungen mit Home-Feed", + "@extensionsNoHomeFeedExtensions": { + "description": "Extensions page - shown when no installed extension has home feed" }, - "optionsCheckUpdates": "Nach Updates suchen", - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", - "recentTypeAlbum": "Album", - "providerExtension": "Erweiterung", - "@providerExtension": { - "description": "Label for extension-provided providers" + "cancelDownloadTitle": "Download abbrechen?", + "@cancelDownloadTitle": { + "description": "Dialog title when confirming cancellation of an active download" }, - "trackCoverNoSource": "Keine Cover Quelle vorhanden", - "libraryFilterMetadata": "Metadaten", - "albumFolderArtistYearAlbum": "Künstler / [Year] Album", - "@albumFolderArtistYearAlbum": { - "description": "Album folder option with year" - }, - "audioAnalysisClipping": "Clipping", - "@a11yOpenAlbumByArtistTrackCount": { - "description": "Accessibility label for opening an album item with track count", + "cancelDownloadContent": "Dadurch wird der aktive Download für \"{trackName}\" abgebrochen.", + "@cancelDownloadContent": { + "description": "Dialog body when confirming cancellation of an active download", "placeholders": { - "albumName": { - "type": "String" - }, - "artistName": { + "trackName": { "type": "String" - }, - "trackCount": { - "type": "int" } } }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", - "@backupExtensionsRestoreFailed": { - "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "cancelDownloadKeep": "Behalten", + "@cancelDownloadKeep": { + "description": "Dialog button - keep the active download (do not cancel)" + }, + "queueCancelledTitle": "Download cancelled", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, + "metadataSaveFailedFfmpeg": "Fehler beim Speichern der Metadaten über FFmpeg", + "@metadataSaveFailedFfmpeg": { + "description": "Snackbar error when FFmpeg fails to write metadata" + }, + "metadataSaveFailedStorage": "Metadaten konnten nicht zurück in den Speicher geschrieben werden", + "@metadataSaveFailedStorage": { + "description": "Snackbar error when writing metadata file back to storage fails" + }, + "snackbarFolderPickerFailed": "Fehler beim Öffnen des Ordners: {error}", + "@snackbarFolderPickerFailed": { + "description": "Snackbar shown when folder picker fails to open", "placeholders": { - "count": { - "type": "int" + "error": { + "type": "String" } } }, - "channelStable": "Stabil", - "@channelStable": { - "description": "Update channel - stable releases" - }, - "tutorialSettingsTip3": "App-Design und Aussehen anpassen", - "setupAppDocumentsFolderSubtitle": "Empfohlen - zugänglich über die Datei-App", - "a11yPlayTrackByArtist": "Spiele {trackName} von {artistName}", - "@a11yPlayTrackByArtist": { - "description": "Accessibility label for playing a local library track", + "notifDownloadingTrack": "{trackName} wird heruntergeladen", + "@notifDownloadingTrack": { + "description": "Notification title while downloading a track", "placeholders": { "trackName": { "type": "String" - }, - "artistName": { - "type": "String" } } }, - "dialogRemove": "Entfernen", - "extensionVerificationClose": "Schließen", - "bulkDownloadPlaylistsButton": "Lade {count} {count, plural, =1{Playlist} other{Playlists}} herunter", - "@bulkDownloadPlaylistsButton": { - "description": "Button label for bulk downloading selected playlists", + "notifFinalizingTrack": "{trackName} wird fertiggestellt", + "@notifFinalizingTrack": { + "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" } } }, - "optionsAutoFallbackSubtitle": "Andere Dienste versuchen, wenn Download fehlschlägt", - "@optionsAutoFallbackSubtitle": { - "description": "Subtitle for auto fallback" - }, - "extensionPatternsCount": "{count} Muster", - "@libraryFilterLocal": { - "description": "Filter chip - show only local library items" - }, - "errorUrlNotRecognizedMessage": "Dieser Link ist inkompatibel. Prüfe die URL und stelle sicher, dass eine kompatible Erweiterung installiert ist.", - "@errorUrlNotRecognizedMessage": { - "description": "Error message - URL not recognized explanation" - }, - "@extensionVerificationBrowserSubtitleExternal": { - "description": "Subtitle when external browser is preferred for extension verification" - }, - "optionsArtistTagMode": "Künstler Tag-Modus", - "libraryFilterMetadataComplete": "Komplette Metadaten", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" + "notifEmbeddingMetadata": "Bette Metadaten ein...", + "@notifEmbeddingMetadata": { + "description": "Notification body while embedding metadata into a downloaded track" }, - "@extensionsVersion": { - "description": "Extension version display", + "notifAlreadyInLibraryCount": "Bereits in der Bibliothek ({completed}/{total})", + "@notifAlreadyInLibraryCount": { + "description": "Notification title when track is already in library, with count", "placeholders": { - "version": { - "type": "String" + "completed": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "@downloadNetworkAnySubtitle": { - "description": "Subtitle for any-network option in picker" - }, - "optionsReplayGainSubtitleOn": "Scanne Lautstärke und füge ReplayGain-Tags ein (EBU R128)", - "libraryScanning": "Scannen...", - "@libraryScanning": { - "description": "Status during scan" - }, - "cacheRefresh": "Aktualisieren", - "@actionShuffle": { - "description": "Tooltip for shuffle playback action" - }, - "optionsEmbedLyricsSubtitle": "Speichere synchronisierte Liedtexte zusammen mit heruntergeladenen Titeln", - "@optionsEmbedLyricsSubtitle": { - "description": "Subtitle for embed lyrics" - }, - "queueEmptyAlbumsSubtitle": "Lade mehrere Titel eines Albums herunter, um sie hier zu sehen", - "extensionEnterValue": "Wert eingeben", - "@settingsDownloadNetworkAny": { - "description": "Network option - use any connection" + "notifAlreadyInLibrary": "Bereits in der Bibliothek", + "@notifAlreadyInLibrary": { + "description": "Notification title when track is already in library" }, - "collectionLoved": "Lieblingssongs", - "@collectionLoved": { - "description": "Custom folder for favorite tracks" + "notifDownloadCompleteCount": "Download abgeschlossen ({completed}/{total})", + "@notifDownloadCompleteCount": { + "description": "Notification title when download is complete, with count", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } }, - "storeAddRepoTitle": "Erweiterungs-Repository hinzufügen", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" + "notifDownloadComplete": "Download abgeschlossen", + "@notifDownloadComplete": { + "description": "Notification title when a single download is complete" }, - "collectionNoPlaylistsYet": "Noch keine Playlists", - "@collectionNoPlaylistsYet": { - "description": "Empty state title when user has no playlists" + "notifDownloadsFinished": "Downloads abgeschlossen ({completed} fertig, {failed} fehlgeschlagen)", + "@notifDownloadsFinished": { + "description": "Notification title when queue finishes with some failures", + "placeholders": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } }, - "libraryCleanupMissingFilesSubtitle": "Verlaufseinträge für Dateien löschen, die nicht mehr existieren", - "@libraryCleanupMissingFilesSubtitle": { - "description": "Subtitle for cleanup button" + "notifVerificationRequiredTitle": "Verification required", + "@notifVerificationRequiredTitle": { + "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" }, - "folderOrganizationByArtist": "Nach Künstler", - "@folderOrganizationByArtist": { - "description": "Folder option - artist folders" + "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", + "@notifVerificationRequiredBody": { + "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, - "aboutTranslators": "Übersetzer", - "notifAlreadyInLibraryCount": "Bereits in der Bibliothek ({completed}/{total})", - "editMetadataFieldTitle": "Titel", - "@editMetadataFieldTitle": { - "description": "Chip label for title field in auto-fill selector" + "notifAllDownloadsComplete": "Alle Downloads abgeschlossen", + "@notifAllDownloadsComplete": { + "description": "Notification title when all downloads finish successfully" }, - "downloadFilenameDescription": "Verwende {artist}, {title}, {album}, {track}, {year}, {date}, {disc} als Platzhalter.", - "@downloadFilenameDescription": { - "description": "Description shown in filename format editor" + "notifTracksDownloadedSuccess": "{count, plural, =1{1 Titel erfolgreich heruntergeladen} other{{count} Titel erfolgreich heruntergeladen}}", + "@notifTracksDownloadedSuccess": { + "description": "Notification body for queue complete - how many tracks were downloaded", + "placeholders": { + "count": { + "type": "int" + } + } }, + "notifDownloadsFinishedBody": "{completed, plural, =1{1 Titel heruntergeladen} other{{completed} Titel heruntergeladen}}, {failed, plural, =1{1 fehlgeschlagen} other{{failed} fehlgeschlagen}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -4882,371 +4926,430 @@ } } }, - "@libraryFolderNotExist": { - "description": "Error when folder doesn't exist" + "notifDownloadsCanceledTitle": "Downloads abgebrochen", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" }, - "@playlistsCount": { - "description": "Playlist count display", + "notifDownloadsCanceledBody": "{count, plural, =1{1 Download vom Nutzer abgebrochen} other{{count} Downloads vom Nutzer abgebrochen}}", + "@notifDownloadsCanceledBody": { + "description": "Notification body when downloads are canceled by the user", "placeholders": { "count": { "type": "int" } } }, - "@loadingSharedLink": { - "description": "Status when opening shared URL" - }, - "extensionServiceHealth": "Service-Gesundheit", - "@extensionServiceHealth": { - "description": "Extension capability label for service health checks" + "notifScanningLibrary": "Scanne lokale Bibliothek", + "@notifScanningLibrary": { + "description": "Notification title while scanning local library" }, - "@collectionDeletePlaylistsMessage": { - "description": "Confirmation message for deleting selected playlists", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} Dateien • {percentage}%", + "@notifLibraryScanProgressWithTotal": { + "description": "Notification body for library scan progress when total is known", "placeholders": { - "count": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "percentage": { "type": "int" } } }, - "setupStorageDescription": "SpotiFLAC benötigt Speicherrechte, um die heruntergeladenen Musikdateien zu speichern.", - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", - "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", - "appearanceThemeLight": "Hell", - "queueEmptyHistorySubtitle": "Heruntergeladene Titel werden hier angezeigt", - "@queueEmptyHistorySubtitle": { - "description": "Empty state subtitle for download history" - }, - "backupRestoreFailed": "Failed to restore backup", - "@backupRestoreFailed": { - "description": "Snackbar when restore fails" - }, - "queueFlacQueuedWithSkipped": "{addedCount} Titel zur Warteschlange hinzugefügt, {skippedCount} übersprungen", - "@queueFlacQueuedWithSkipped": { - "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "notifLibraryScanProgressNoTotal": "{scanned} gescannte Dateien • {percentage}%", + "@notifLibraryScanProgressNoTotal": { + "description": "Notification body for library scan progress when total is unknown", "placeholders": { - "addedCount": { + "scanned": { "type": "int" }, - "skippedCount": { + "percentage": { "type": "int" } } }, - "@trackReplayGain": { - "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + "notifLibraryScanComplete": "Bibliotheksscan abgeschlossen", + "@notifLibraryScanComplete": { + "description": "Notification title when library scan finishes" }, - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", - "placeholders": { + "notifLibraryScanCompleteBody": "{count} titel indiziert", + "@notifLibraryScanCompleteBody": { + "description": "Notification body for library scan complete - number of indexed tracks", + "placeholders": { "count": { "type": "int" } } }, - "setupFolderChoose": "Speicherort auswählen", - "dialogDownloadAllTitle": "Alle Herunterladen", - "providerPriorityInfo": "Wenn kein Titel bei dem ersten Anbieter nicht verfügbar ist, wird die App automatisch den nächsten versuchen.", - "@providerPriorityInfo": { - "description": "Info tip about fallback behavior" - }, - "@dialogDiscardChanges": { - "description": "Dialog title - unsaved changes warning" - }, - "discographyNoAlbums": "Es sind keine Alben verfügbar", - "downloadAppleQqMultiPersonDisabled": "Standardlyrics ohne Lautsprecher-Labels", - "cacheNoData": "Keine gecachten Daten", - "@cacheNoData": { - "description": "Label when cache category has no data" - }, - "tutorialStartDownloadSemantics": "Download starten", - "@tutorialStartDownloadSemantics": { - "description": "Accessibility label for idle download button in tutorial demo" - }, - "logIssueIspBlockingSuggestion": "Versuche es einem VPN oder ändere DNS auf 1.1.1.1 oder 8.8.8.8", - "aboutTitle": "Über", - "@cueSplitButton": { - "description": "Button text to start CUE splitting" - }, - "appearanceHistoryView": "Verlaufsansicht", - "audioAnalysisSampleRate": "Abtastrate", - "@settingsCache": { - "description": "Settings menu item - cache management" - }, - "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", - "cacheTrackLookup": "Titel Such-Cache", - "extensionsHomeFeedOffSubtitle": "Start-Feed nicht auf dem Hauptbildschirm anzeigen", - "@downloadUsePrimaryArtistOnly": { - "description": "Setting - strip featured artists from folder name" - }, - "@regionCountryIN": { - "description": "Country name for SongLink region picker" - }, - "@libraryFilterQualityLossy": { - "description": "Filter option - lossy compressed audio" + "notifLibraryScanExcluded": "{count} ausgeschlossen", + "@notifLibraryScanExcluded": { + "description": "Library scan complete suffix - excluded track count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionRefreshStatus": "Status aktualisieren", - "notifAllDownloadsComplete": "Alle Downloads abgeschlossen", - "downloadNeteaseIncludeRomanizationEnabled": "Romanisierungszeilen enthalten", - "editMetadataFieldDateHint": "JJJJ-MM-TT oder JJJJJ", - "@editMetadataFieldDateHint": { - "description": "Hint text for the edit metadata date field" + "notifLibraryScanErrors": "{count} Fehler", + "@notifLibraryScanErrors": { + "description": "Library scan complete suffix - error count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "trackMetadataShare": "Teilen", - "@trackMetadataShare": { - "description": "Action button - share track" + "notifLibraryScanFailed": "Bibliotheksscan fehlgeschlagen", + "@notifLibraryScanFailed": { + "description": "Notification title when library scan fails" }, - "discographyDownloadAllSubtitle": "{count} Titel von {albumCount} Releases", - "settingsDonateSubtitle": "Kaufe dem Entwickler einen Kaffee", - "libraryFilterDownloaded": "Heruntergeladen", - "downloadNetworkAnySubtitle": "WLAN oder mobile Daten verwenden", - "@cueSplitNoAudioFile": { - "description": "Error when CUE audio file is missing" + "notifLibraryScanCancelled": "Bibliotheksscan abgebrochen", + "@notifLibraryScanCancelled": { + "description": "Notification title when library scan is cancelled by the user" }, "notifLibraryScanStopped": "Scan wurde vor Abschluss gestoppt.", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", - "trackCopyLyrics": "Lyrics kopieren", - "@trackCopyLyrics": { - "description": "Action - copy lyrics to clipboard" - }, - "regionCountryAU": "Australia", - "downloadAlbumFolderStructure": "Album-Ordnerstruktur", - "downloadMusixmatchAuto": "Auto", - "actionDismiss": "Schließen", - "storeFilterAll": "Alle", - "extensionsDisabled": "Deaktiviert", - "@logClearLogs": { - "description": "Clear button tooltip" - }, - "dialogDownloadAllMessage": "{count} titel herunterladen?", - "@optionsEmbedLyrics": { - "description": "Embed lyrics in audio files" - }, - "tutorialLibraryTitle": "Deine Bibliothek", - "optionsCheckUpdatesSubtitle": "Benachrichtigen, wenn neue Version verfügbar", - "@optionsCheckUpdatesSubtitle": { - "description": "Subtitle for update check" + "@notifLibraryScanStopped": { + "description": "Notification body when library scan is cancelled" }, - "collectionPlaylist": "Playlist", - "@collectionPlaylist": { - "description": "Single playlist label" + "notifDownloadingUpdate": "SpotiFLAC Mobile v{version} wird heruntergeladen", + "@notifDownloadingUpdate": { + "description": "Notification title while downloading an app update", + "placeholders": { + "version": { + "type": "String" + } + } }, - "dateMonthsAgo": "Vor {count} Monaten", - "@dateMonthsAgo": { - "description": "Relative date - months ago", + "notifUpdateProgress": "{received} / {total} MB • {percentage}%", + "@notifUpdateProgress": { + "description": "Notification body showing update download progress", "placeholders": { - "count": { + "received": { + "type": "String" + }, + "total": { + "type": "String" + }, + "percentage": { "type": "int" } } }, - "@extensionRemoveButton": { - "description": "Button to uninstall extension" - }, - "collectionPlaylistRenamed": "Playlist umbenannt", - "collectionCreatePlaylist": "Playlist erstellen", - "homeGoToAlbum": "Zum Album gehen", - "@homeGoToAlbum": { - "description": "Context menu item to navigate to the album page" - }, - "folderOrganizationByArtistSubtitle": "Trenne Ordner nach Künstler", - "@optionsClearHistory": { - "description": "Delete all download history" + "notifUpdateReady": "Update bereit", + "@notifUpdateReady": { + "description": "Notification title when app update download is complete" }, - "@searchAlbums": { - "description": "Search result category - albums" + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} heruntergeladen. Zum Installieren tippen.", + "@notifUpdateReadyBody": { + "description": "Notification body when app update is ready to install", + "placeholders": { + "version": { + "type": "String" + } + } }, - "@sectionDebug": { - "description": "Settings section header" + "notifUpdateFailed": "Update fehlgeschlagen", + "@notifUpdateFailed": { + "description": "Notification title when app update download fails" }, - "extensionsVersion": "Version {version}", - "@navHome": { - "description": "Bottom navigation - Home tab" + "notifUpdateFailedBody": "Update konnte nicht heruntergeladen werden. Versuche es später erneut.", + "@notifUpdateFailedBody": { + "description": "Notification body when app update download fails" }, - "@editMetadataFieldDate": { - "description": "Chip label for date field in auto-fill selector" + "searchTracks": "Titel", + "@searchTracks": { + "description": "Search filter label - tracks" }, - "downloadUsePrimaryArtistOnly": "Primärer Künstler nur für Ordner", - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", - "@setupStorageGranted": { - "description": "Success message for storage permission" + "homeSearchHintDefault": "Unterstützte URL einfügen oder suchen...", + "@homeSearchHintDefault": { + "description": "Default placeholder for the main search field on Home" }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", - "a11ySelectAlbum": "Wähle Album {albumName}", - "@a11ySelectAlbum": { - "description": "Accessibility label for selecting an album", + "homeSearchHintProvider": "Mit {providerName} suchen...", + "@homeSearchHintProvider": { + "description": "Placeholder for the main search field when a provider is selected", "placeholders": { - "albumName": { + "providerName": { "type": "String" } } }, - "aboutMobileSource": "Mobiler Quellcode", - "@aboutMobileSource": { - "description": "Link to mobile GitHub repo" + "homeImportCsvTooltip": "Import playlist (CSV, M3U)", + "@homeImportCsvTooltip": { + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, - "@extensionCustomUrlHandling": { - "description": "Extension detail section title for custom URL handling" + "homeChangeSearchProviderTooltip": "Suchanbieter ändern", + "@homeChangeSearchProviderTooltip": { + "description": "Tooltip for the Home search provider picker" }, - "@downloadMusixmatchLanguageAuto": { - "description": "Subtitle when no language is set" + "actionPaste": "Einfügen", + "@actionPaste": { + "description": "Generic action - paste from clipboard" }, - "@cancelDownloadKeep": { - "description": "Dialog button - keep the active download (do not cancel)" + "tutorialSearchHint": "Einfügen oder suchen...", + "@tutorialSearchHint": { + "description": "Placeholder shown in the tutorial search demo" }, - "libraryFilterSource": "Quelle", - "@libraryFilterSource": { - "description": "Filter section - source type" + "tutorialDownloadCompletedSemantics": "Download abgeschlossen", + "@tutorialDownloadCompletedSemantics": { + "description": "Accessibility label for completed download state in tutorial demo" }, - "sectionStorageAccess": "Speicherzugriff", - "logFilterBySeverity": "Logs nach Schweregrad filtern", - "libraryFolderNotExist": "Der ausgewählte Ordner existiert nicht", - "optionsEmbedMetadataSubtitleOn": "Schreibe Metadaten, Cover und eingebettete Songtexte in Dateien", - "albumFolderArtistAlbum": "Künstler/Album", - "@albumFolderArtistAlbum": { - "description": "Album folder option" + "tutorialDownloadInProgressSemantics": "Download wird ausgeführt", + "@tutorialDownloadInProgressSemantics": { + "description": "Accessibility label for active download state in tutorial demo" }, - "allFilesAccessDeniedMessage": "Zugriff verweigert. Bitte aktiviere \"Zugriff auf alle Dateien\" manuell in den Systemeinstellungen.", - "@allFilesAccessDeniedMessage": { - "description": "Message when permission is permanently denied" + "tutorialStartDownloadSemantics": "Download starten", + "@tutorialStartDownloadSemantics": { + "description": "Accessibility label for idle download button in tutorial demo" }, - "editMetadataSelectEmpty": "Nur leer", - "settingsLocalLibrarySubtitle": "Musik scannen & Duplikate erkennen", - "@settingsAutoExportFailed": { - "description": "Setting toggle for auto-export" + "optionsEmbedMetadata": "Eingebettete Metadaten", + "@optionsEmbedMetadata": { + "description": "Settings toggle title for writing metadata into downloaded files" }, - "cacheCleanupUnusedSubtitle": "Verwaisten Downloadverlauf und fehlende Bibliothekseinträge löschen", - "@tutorialSettingsTitle": { - "description": "Tutorial settings page title" + "optionsEmbedMetadataSubtitleOn": "Schreibe Metadaten, Cover und eingebettete Songtexte in Dateien", + "@optionsEmbedMetadataSubtitleOn": { + "description": "Subtitle when metadata embedding is enabled" }, - "libraryFilterMetadataMissingGenre": "Genre fehlt", - "@appearanceSelectAccentColor": { - "description": "Accessibility label for picking an accent color", - "placeholders": { - "hex": { - "type": "String" - } - } + "optionsEmbedMetadataSubtitleOff": "Deaktiviert (erweitert): Metadateneinbettung überspringen", + "@optionsEmbedMetadataSubtitleOff": { + "description": "Subtitle when metadata embedding is disabled" }, - "setupFolderDescription": "Wähle einen Ordner, in dem die heruntergeladene Musik gespeichert wird.", - "extensionDetailsTags": "Tags", - "unknownArtist": "Unbekannter Künstler", - "trackFetchOnlineLyrics": "Online abrufen", - "snackbarNoActionDefined": "Keine Aktion für Taste definiert", - "@snackbarNoActionDefined": { - "description": "Snackbar when an extension button has no action configured" + "trackCoverNoEmbeddedArt": "Kein eingebettetes Albumcover gefunden", + "@trackCoverNoEmbeddedArt": { + "description": "Message shown when a track file has no embedded cover art" }, - "downloadAllCount": "Alle {count} Titel herunterladen", - "@downloadAllCount": { - "description": "Download all button with count", + "trackCoverReplace": "Cover ersetzen", + "@trackCoverReplace": { + "description": "Button label for replacing selected cover art" + }, + "trackCoverPick": "Cover auswählen", + "@trackCoverPick": { + "description": "Button label for selecting cover art" + }, + "trackCoverClearSelected": "Ausgewähltes Cover löschen", + "@trackCoverClearSelected": { + "description": "Tooltip for clearing the newly selected cover art" + }, + "trackCoverCurrent": "Aktuelles Cover", + "@trackCoverCurrent": { + "description": "Label for the currently embedded cover preview" + }, + "trackCoverSelected": "Ausgewähltes Cover", + "@trackCoverSelected": { + "description": "Label for the newly selected cover preview" + }, + "trackCoverReplaceNotice": "Das ausgewählte Cover ersetzt das aktuell eingebettete Cover, wenn auf speichern gedrückt wird.", + "@trackCoverReplaceNotice": { + "description": "Notice shown when a new cover has been selected but not saved yet" + }, + "trackCoverResolution": "Cover resolution", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" + }, + "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" + }, + "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", + "@trackCoverResizeFailed": { + "description": "Error shown when resizing cover art before saving metadata fails" + }, + "actionStop": "Stop", + "@actionStop": { + "description": "Generic action - stop" + }, + "queueFinalizingDownload": "Download wird abgeschlossen", + "@queueFinalizingDownload": { + "description": "Accessibility label for a queue item that is finalizing" + }, + "queueDownloadNext": "Download next", + "@queueDownloadNext": { + "description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it" + }, + "queueMoveUp": "Move up", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" + }, + "queueMoveDown": "Move down", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" + }, + "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" + }, + "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" + }, + "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" + }, + "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" + }, + "nowPlayingRepeatOff": "Repeat off", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" + }, + "nowPlayingRepeatAll": "Repeat all", + "@nowPlayingRepeatAll": { + "description": "Repeat toggle tooltip when the whole queue repeats" + }, + "nowPlayingRepeatOne": "Repeat one", + "@nowPlayingRepeatOne": { + "description": "Repeat toggle tooltip when the current track repeats" + }, + "queueNetworkFailedOffline": "{count} downloads failed while offline", + "@queueNetworkFailedOffline": { + "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", "placeholders": { "count": { "type": "int" } } }, - "downloadedAlbumDiscHeader": "Disc {discNumber}", - "@backupInvalidFile": { - "description": "Snackbar when the chosen file is not a valid backup" + "queueDownloadedFileMissing": "Heruntergeladene Datei fehlt", + "@queueDownloadedFileMissing": { + "description": "Accessibility label when a downloaded file is missing from disk" }, - "@extensionHooksAvailable": { - "description": "Post-processing hooks count", + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." + }, + "queueDownloadCompleted": "Download abgeschlossen", + "@queueDownloadCompleted": { + "description": "Accessibility label for completed download state in queue" + }, + "queueRateLimitTitle": "Service rate limited", + "@queueRateLimitTitle": { + "description": "Title shown on a failed queue item when the download service rate limits requests" + }, + "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", + "@queueRateLimitMessage": { + "description": "Explanation shown on a failed queue item when the download service rate limits requests" + }, + "appearanceSelectAccentColor": "Wähle Akzentfarbe {hex}", + "@appearanceSelectAccentColor": { + "description": "Accessibility label for picking an accent color", "placeholders": { - "count": { - "type": "int" + "hex": { + "type": "String" } } }, - "@logIssueTrackNotFoundSuggestion": { - "description": "Diagnostic badge suggestion when a track is unavailable" + "logAutoScrollOn": "Auto-Scrollen AN", + "@logAutoScrollOn": { + "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "@snackbarFileNotFound": { - "description": "Snackbar - file doesn't exist" + "logAutoScrollOff": "Auto-Scrollen AUS", + "@logAutoScrollOff": { + "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "extensionHealthOnline": "Online", - "@extensionHealthOnline": { - "description": "Extension service health status - online" + "logCopyLogs": "Logs kopieren", + "@logCopyLogs": { + "description": "Tooltip for copying logs" }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", - "trackOptionRemoveFromWishlist": "Von der Wunschliste entfernen", - "extensionsFallbackTitle": "Fallback-Erweiterungen", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" + "logClearSearch": "Suche löschen", + "@logClearSearch": { + "description": "Tooltip for clearing the log search field" }, - "metadataSaveFailedFfmpeg": "Fehler beim Speichern der Metadaten über FFmpeg", - "@albumFolderAlbumOnly": { - "description": "Album folder option" + "logIssueIspBlockingLabel": "ISP BLOCKIERUNG ERKANNT", + "@logIssueIspBlockingLabel": { + "description": "Diagnostic badge label when ISP blocking is detected" }, - "@albumFolderYearAlbumSubtitle": { - "description": "Folder structure example" + "logIssueIspBlockingDescription": "Dein ISP blockiert möglicherweise den Zugriff auf den Download Dienst", + "@logIssueIspBlockingDescription": { + "description": "Diagnostic badge description for ISP blocking" }, - "downloadedAlbumDeleteSelected": "Ausgewählte löschen", - "selectionSelectPlaylistsToDelete": "Playlist zum Löschen wählen", - "@selectionSelectPlaylistsToDelete": { - "description": "Hint shown when no playlists are selected for deletion" + "logIssueIspBlockingSuggestion": "Versuche es einem VPN oder ändere DNS auf 1.1.1.1 oder 8.8.8.8", + "@logIssueIspBlockingSuggestion": { + "description": "Diagnostic badge suggestion for ISP blocking" }, - "storeAddRepoDescription": "Gib eine GitHub Repository-URL ein, die eine Registry.json Datei enthält, um Erweiterungen zu durchsuchen und zu installieren.", - "appearanceThemeDark": "Dunkel", - "downloadedAlbumTapToSelect": "Tippe auf Titel zum Auswählen", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } + "logIssueRateLimitedLabel": "LIMIT ERKANNT", + "@logIssueRateLimitedLabel": { + "description": "Diagnostic badge label when the service rate limits requests" }, - "@backupRestored": { - "description": "Snackbar after a successful restore" + "logIssueRateLimitedDescription": "Zu viele Anfragen an den Dienst", + "@logIssueRateLimitedDescription": { + "description": "Diagnostic badge description for rate limiting" }, - "nowPlayingLibraryEmpty": "Your library is empty", - "@nowPlayingLibraryEmpty": { - "description": "Snackbar when shuffle library is requested but library has no tracks" + "logIssueRateLimitedSuggestion": "Warte ein paar Minuten, bevor du es erneut versuchst", + "@logIssueRateLimitedSuggestion": { + "description": "Diagnostic badge suggestion for rate limiting" }, - "editMetadataAutoFillNoResults": "Keine passenden Metadaten online gefunden", - "updateDownloading": "Wird heruntergeladen...", - "trackLyricsSource": "Quelle: {source}", - "logFilterLevel": "Stufe", - "logNoLogsYet": "Noch keine Logs", - "cacheSizeOnly": "{size}", - "@cacheSizeOnly": { - "description": "Cache size only", - "placeholders": { - "size": { - "type": "String" - } - } + "logIssueNetworkErrorLabel": "NETZWERKFEHLER", + "@logIssueNetworkErrorLabel": { + "description": "Diagnostic badge label for generic network errors" }, - "trackOpenInService": "Öffne in {serviceName}", - "@trackOpenInService": { - "description": "Button label to open a track in a named music service", + "logIssueNetworkErrorDescription": "Verbindungsprobleme erkannt", + "@logIssueNetworkErrorDescription": { + "description": "Diagnostic badge description for generic network errors" + }, + "logIssueNetworkErrorSuggestion": "Überprüfe deine Internetverbindung", + "@logIssueNetworkErrorSuggestion": { + "description": "Diagnostic badge suggestion for generic network errors" + }, + "logIssueTrackNotFoundLabel": "TITEL NICHT GEFUNDEN", + "@logIssueTrackNotFoundLabel": { + "description": "Diagnostic badge label when a track is unavailable" + }, + "logIssueTrackNotFoundDescription": "Einige Titel konnten auf Download-Diensten nicht gefunden werden", + "@logIssueTrackNotFoundDescription": { + "description": "Diagnostic badge description when a track is unavailable" + }, + "logIssueTrackNotFoundSuggestion": "Der Titel ist möglicherweise nicht in verlustfreier Qualität verfügbar", + "@logIssueTrackNotFoundSuggestion": { + "description": "Diagnostic badge suggestion when a track is unavailable" + }, + "clickableLookingUpArtist": "Künstler wird gesucht...", + "@clickableLookingUpArtist": { + "description": "Snackbar shown while clickable artist metadata is being resolved" + }, + "clickableInformationUnavailable": "{type} Informationen nicht verfügbar", + "@clickableInformationUnavailable": { + "description": "Snackbar shown when clickable metadata cannot open a destination", "placeholders": { - "serviceName": { + "type": { "type": "String" } } }, - "@cacheLibraryCoverDesc": { - "description": "Description of what library cover cache contains" + "extensionDetailsTags": "Tags", + "@extensionDetailsTags": { + "description": "Section title for extension tags" }, - "libraryClearConfirmMessage": "Dadurch werden alle gescannten Titel aus deiner Bibliothek entfernt. Deine eigentlichen Musikdateien werden nicht gelöscht.", - "@dialogImportPlaylistMessage": { - "description": "Dialog message - import playlist confirmation", + "extensionDetailsInformation": "Info", + "@extensionDetailsInformation": { + "description": "Section title for extension metadata information" + }, + "extensionUtilityFunctions": "Hilfsfunktionen", + "@extensionUtilityFunctions": { + "description": "Capability label for utility-only extensions" + }, + "actionDismiss": "Schließen", + "@actionDismiss": { + "description": "Generic action - dismiss" + }, + "setupChangeFolderTooltip": "Ordner ändern", + "@setupChangeFolderTooltip": { + "description": "Tooltip for editing the selected download folder" + }, + "a11yOpenTrackByArtist": "Öffne Track {trackName} von {artistName}", + "@a11yOpenTrackByArtist": { + "description": "Accessibility label for opening a track item", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" } } }, - "extensionsHomeFeedAuto": "Auto", - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "dateToday": "Heute", "a11yOpenItem": "{itemType} {name} öffnen", "@a11yOpenItem": { "description": "Accessibility label for opening a generic item", @@ -5259,844 +5362,1187 @@ } } }, - "audioAnalysisBitDepth": "Bit-Tiefe", - "editMetadataFieldTrackTotal": "Titel insgesamt", - "@editMetadataFieldTrackTotal": { - "description": "Label for total tracks field in the edit metadata sheet" - }, - "@editMetadataFieldDiscTotal": { - "description": "Label for total discs field in the edit metadata sheet" - }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Ordner benannt nach dem Tag des Albumkünstlers", - "@notifDownloadingUpdate": { - "description": "Notification title while downloading an app update", + "a11yOpenItemCount": "Öffne {title}, {count} {count, plural, =1{Item} other{Items}}", + "@a11yOpenItemCount": { + "description": "Accessibility label for opening a grouped item with count", "placeholders": { - "version": { + "title": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@csvImportTracks": { - "description": "Label shown in quality picker for CSV import", + "a11yOpenAlbumByArtistTrackCount": "Öffne Album {albumName} von {artistName}, {trackCount} Titel", + "@a11yOpenAlbumByArtistTrackCount": { + "description": "Accessibility label for opening an album item with track count", "placeholders": { - "count": { + "albumName": { + "type": "String" + }, + "artistName": { + "type": "String" + }, + "trackCount": { "type": "int" } } }, - "trackEditMetadata": "Metadaten bearbeiten", - "discographyDownloadAll": "Alle Herunterladen", - "@discographyDownloadAll": { - "description": "Option - download entire discography" - }, - "@editMetadataFieldAlbum": { - "description": "Chip label for album field in auto-fill selector" - }, - "albumFolderArtistAlbumSubtitle": "Alben/Künster Name/Album Name/", - "extensionHealthServiceUnknown": "Dienst-Status unbekannt", - "navHome": "Startseite", - "queueDownloadStarting": "Starte...", - "@dialogRemoveExtension": { - "description": "Dialog title - uninstall extension" - }, - "notifLibraryScanProgressNoTotal": "{scanned} gescannte Dateien • {percentage}%", - "@appearanceAmoledDark": { - "description": "Theme option - pure black" - }, - "qualityHiResFlac": "Hi-Res FLAC", - "selectionSelected": "{count} ausgewählt", - "extensionDetailsInformation": "Info", - "@extensionDetailsInformation": { - "description": "Section title for extension metadata information" - }, - "discographyDownload": "Diskographie herunterladen", - "editMetadataFieldCopyright": "Urheberrecht", - "@setupOpenSettings": { - "description": "Button to open system settings" - }, - "libraryFilterSort": "Sortieren", - "cacheLibraryCoverDesc": "Cover aus lokalen Musikdateien extrahiert. Wird beim nächsten Scannen neu extrahiert.", - "dialogRemoveExtension": "Erweiterung entfernen", - "backupExportSectionTitle": "Create backup", - "downloadEmbedLyricsDisabled": "Metadaten-Einbettung zuerst aktivieren", - "openInOtherServices": "Open in Other Services", - "actionSelectAll": "Alles Auswählen", - "settingsDownloadNetworkSubtitle": "Wähle aus, welches Netzwerk für Downloads verwendet werden soll. Wenn nur WLAN aktiviert wird, werden Downloads auf mobilen Daten angehalten.", - "downloadFolderOrganization": "Ordnerstruktur", - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", - "@tutorialWelcomeTip2": { - "description": "Tutorial welcome tip 2" - }, - "selectionAllSelected": "Alle Titel sind ausgewählt", - "@selectionAllSelected": { - "description": "Status - all items selected" - }, - "settingsLogsSubtitle": "App-Logs zum Debuggen anzeigen", - "albumFolderYearAlbumSubtitle": "Alben/[2005] Album Name/", - "cancelDownloadKeep": "Behalten", - "optionsDetailedLoggingOn": "Detaillierte Logs werden aufgezeichnet", - "safMigrationMessage2": "Bitte wähle dein Download-Ordner erneut aus, um zum neuen System zu wechseln.", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" + "a11yTrackByArtist": "{trackName} von {artistName}", + "@a11yTrackByArtist": { + "description": "Accessibility label for a queue or list track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "regionCountryJP": "Japan", - "notifUpdateFailed": "Update fehlgeschlagen", - "downloadCreatePlaylistSourceFolderRedundant": "Wird durch die Ordnerorganisationseinstellung verarbeitet", - "@trackLyricsSaved": { - "description": "Snackbar after lyrics saved", + "a11ySelectAlbum": "Wähle Album {albumName}", + "@a11ySelectAlbum": { + "description": "Accessibility label for selecting an album", "placeholders": { - "fileName": { + "albumName": { "type": "String" } } }, - "downloadLocationSubtitle": "Wählen Sie den Speicherort für Ihre heruntergeladenen Titel", - "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", - "lyricsProvidersDisabledSection": "({count}) deaktiviert", - "@dateDaysAgo": { - "description": "Relative date - days ago", + "a11yOpenAlbum": "Album öffnen {albumName}", + "@a11yOpenAlbum": { + "description": "Accessibility label for opening an album", "placeholders": { - "count": { - "type": "int" + "albumName": { + "type": "String" } } }, - "librarySourceLocal": "Lokal", - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", - "sectionService": "Anbieter", - "lyricsProviderQqMusicDesc": "QQ Music (gut für chinesische Lieder, via Proxy)", - "@lyricsProviderQqMusicDesc": { - "description": "Description for QQ Music provider" + "settingsFiles": "Dateien & Ordner", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" }, - "cacheCleanupUnusedDesc": "Verwaisten Downloadverlauf und Bibliothekseinträge für fehlende Dateien entfernen.", - "selectionTapPlaylistsToSelect": "Zum Auswählen auf Playlists tippen", - "notifUpdateFailedBody": "Update konnte nicht heruntergeladen werden. Versuche es später erneut.", - "downloadNeteaseIncludeTranslationDisabled": "Original Lyrics verwenden", - "artistPopular": "Beliebt", - "extensionRemoveButton": "Erweiterung entfernen", - "allFilesAccessEnabledSubtitle": "Darf in jeden Ordner schreiben", - "@allFilesAccessEnabledSubtitle": { - "description": "Subtitle when all files access is enabled" + "settingsFilesSubtitle": "Speicherort, Dateiname, Ordnerstruktur", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" }, - "extensionsSearchProvider": "Such-Provider", - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", - "selectionBatchConvertConfirmTitle": "Batch-Konvertierung", - "extensionMetadataProvider": "Metadaten-Anbieter", - "queueDownloadedFileMissing": "Heruntergeladene Datei fehlt", - "logClearLogs": "Logs löschen", - "@downloadAppleQqMultiPerson": { - "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" + "settingsMetadata": "Metadaten", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", - "@tutorialWelcomeTip1": { - "description": "Tutorial welcome tip 1" + "settingsMetadataSubtitle": "Cover Art, Tags, ReplayGain, Anbieter", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" }, - "logIssueRateLimitedSuggestion": "Warte ein paar Minuten, bevor du es erneut versuchst", - "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", - "@regionCountryUS": { - "description": "Country name for SongLink region picker" + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" }, - "trackArtist": "Künstler", - "extensionCustomUrlHandling": "Benutzerdefinierte URL-Handling", - "appearanceDynamicColorSubtitle": "Farben deines Hintergrundbilds verwenden", - "@appearanceDynamicColorSubtitle": { - "description": "Subtitle for dynamic color" + "settingsLyricsSubtitle": "Einbetten, Modus, Anbieter, Sprachoptionen", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" }, - "searchSortDefault": "Standard", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" + "settingsApp": "App", + "@settingsApp": { + "description": "Settings menu item - app settings" }, - "albumFolderStructureDescription": "Choose how album folders are structured", - "@albumFolderStructureDescription": { - "description": "Album folder structure picker description" + "settingsAppSubtitle": "Updates, Daten, Erweiterungsrepo, Debug", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" }, - "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", - "@libraryBuiltInPreviewPlayerSubtitle": { - "description": "Subtitle for built-in preview player option" + "sectionMetadataProviders": "Anbieter", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" }, - "storageModeAppFolder": "App-Ordner (empfohlen)", - "@actionPause": { - "description": "Action button - pause download" + "sectionDuplicates": "Duplikate", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" }, - "actionPaste": "Einfügen", - "extensionSettingsCount": "{count} {count, plural, =1{Einstellung} other{Einstellungen}}", - "downloadNativeWorker": "Nativer Download Dienst", - "releaseTypeEp": "EP", - "@releaseTypeEp": { - "description": "Badge label for EP releases" + "sectionLyricsProviderOptions": "Anbieter-Optionen", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", - "cacheRefreshStats": "Statistik aktualisieren", - "collectionPlaylistChangeCover": "Coverbild ändern", - "@collectionPlaylistChangeCover": { - "description": "Bottom sheet action to pick a custom cover image for a playlist" + "metadataProvidersTitle": "Priorität des Metadaten-Anbieters", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" }, - "optionsClearHistory": "Download-Verlauf löschen", - "trackGenre": "Genre", - "snackbarSelectedPlaylistsEmpty": "Ausgewählte Playlisten haben keine Titel", - "collectionAddedTracksToPlaylist": "{count} {count, plural, =1{Titel} other{Titel}} zu {playlistName} hinzugefügt", - "downloadNeteaseIncludeRomanization": "Netease: Romanisierung einschließen", - "libraryFilterMetadataMissingArtist": "Fehlender Künstler", - "extensionsNoCustomSearch": "Keine Erweiterungen mit benutzerdefinierter Suche", - "@extensionsTitle": { - "description": "Extensions page title" + "metadataProvidersSubtitle": "Zieh, um Such- und Metadatenquellenreihenfolge zu setzen", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" }, - "extensionDownloadProvider": "Download-Anbieter", - "@extensionDownloadProvider": { - "description": "Capability - provides downloads" + "downloadDeduplication": "Doppelte Downloads überspringen", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" }, - "lyricsMode": "Lyrics-Modus", - "aboutReportIssueSubtitle": "Melde Probleme, die dir auffallen", - "@downloadSeparateSinglesFolder": { - "description": "Setting - separate folder for singles" + "downloadDeduplicationEnabled": "Bereits heruntergeladene Titel werden übersprungen", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" }, - "appearanceAmoledDark": "AMOLED Schwarz", - "logIssueNetworkErrorDescription": "Verbindungsprobleme erkannt", - "folderOrganizationByArtistAlbumSubtitle": "Verschachtelte Ordner für Künstler und Album", - "@libraryForceFullScanSubtitle": { - "description": "Subtitle for force full scan button" + "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", + "@downloadDeduplicationWithQualityVariants": { + "description": "Deduplication subtitle when separate quality versions are allowed" }, - "setupGrantPermission": "Berechtigung erlauben", - "lyricsProvidersDescription": "Lyrics aktivieren, deaktivieren und neu ordnen. Anbieter werden von oben nach unten ausprobiert, bis Lyrics gefunden werden.", - "dateDaysAgo": "Vor {count} Tagen", - "extensionsHomeFeedDescription": "Wählen Sie die Erweiterung aus, die den Start-Feed auf dem Hauptbildschirm anzeigt", - "downloadLossyMp3Subtitle": "Beste Kompatibilität, ~10MB pro Titel", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" + "downloadDeduplicationDisabled": "Alle Titel werden unabhängig vom Verlauf heruntergeladen", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" }, - "nowPlayingDetails": "Details", - "collectionWishlistEmptyTitle": "Wunschliste ist leer", - "downloadAppleQqMultiPersonEnabled": "Sängerlabel für Duette und Gruppentitel enthalten", - "@snackbarExtensionUpdatedVersion": { - "description": "Snackbar after updating an extension from the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - }, - "version": { - "type": "String" - } - } + "downloadQualityVariants": "Allow different quality versions", + "@downloadQualityVariants": { + "description": "Setting to retain multiple quality versions of the same track" }, - "extensionHealthServiceDegraded": "Dienst Eingeschränkt", - "selectionConvertNoConvertible": "Keine konvertierbare Titel ausgewählt", - "setupStorageGranted": "Speicherberechtigung erlaubt!", - "downloadAllowLocalNetwork": "Allow Local Network Access", - "nowPlayingNoLyrics": "No lyrics in this file", - "selectionDeleteTracksCount": "Lösche {count} {count, plural, =1{Titel} other{Titel}}", - "@selectionDeleteTracksCount": { - "description": "Button label for deleting selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", + "@downloadQualityVariantsDescription": { + "description": "Description for retaining multiple quality versions" }, - "@libraryForceFullScan": { - "description": "Button to force a complete rescan of library" + "trackOptionDownloadQualityVariant": "Download another quality", + "@trackOptionDownloadQualityVariant": { + "description": "Track menu action to download another quality version" }, - "notifLibraryScanExcluded": "{count} ausgeschlossen", - "@aboutPaxsenixSubtitle": { - "description": "Subtitle for Paxsenix special thanks entry on the about page" + "downloadFallbackExtensions": "Fallback-Erweiterungen", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" }, - "setupChangeFolderTooltip": "Ordner ändern", - "logIssueIspBlockingDescription": "Dein ISP blockiert möglicherweise den Zugriff auf den Download Dienst", - "@logIssueIspBlockingDescription": { - "description": "Diagnostic badge description for ISP blocking" + "downloadFallbackExtensionsSubtitle": "Wähle, welche Erweiterungen als Fallback verwendet werden können", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" }, - "libraryClear": "Bibliothek löschen", - "collectionRemoveFromPlaylist": "Von Playlist entfernen", - "@collectionRemoveFromPlaylist": { - "description": "Tooltip for removing track from playlist" + "editMetadataFieldDateHint": "JJJJ-MM-TT oder JJJJJ", + "@editMetadataFieldDateHint": { + "description": "Hint text for the edit metadata date field" }, - "backupIncludeSecrets": "Include extension credentials", - "notifDownloadsFinishedBody": "{completed, plural, =1{1 Titel heruntergeladen} other{{completed} Titel heruntergeladen}}, {failed, plural, =1{1 fehlgeschlagen} other{{failed} fehlgeschlagen}}", - "storeCategoryMetadata": "Metadaten", - "@trackLyricsEmbedded": { - "description": "Snackbar - lyrics saved to file" + "editMetadataFieldTrackTotal": "Titel insgesamt", + "@editMetadataFieldTrackTotal": { + "description": "Label for total tracks field in the edit metadata sheet" }, "editMetadataFieldDiscTotal": "Disc gesamt", - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", - "playlistsCount": "{count, plural, =1{1 Playlist} other{{count} Playlists}}", - "downloadCreatePlaylistSourceFolderDisabled": "Alle Titel direkt im Download-Ordner gespeichert", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" + "@editMetadataFieldDiscTotal": { + "description": "Label for total discs field in the edit metadata sheet" }, - "libraryFilterLocal": "Lokal", - "tutorialDownloadInProgressSemantics": "Download wird ausgeführt", - "searchSortDurationLong": "Dauer (längste)", - "@appearanceLanguage": { - "description": "Language setting title" + "editMetadataFieldComposer": "Komponist", + "@editMetadataFieldComposer": { + "description": "Label for composer field in the edit metadata sheet" }, - "libraryAbout": "Über die lokale Bibliothek", - "@libraryAbout": { - "description": "Section header for about info" + "editMetadataFieldComment": "Kommentar", + "@editMetadataFieldComment": { + "description": "Label for comment field in the edit metadata sheet" }, - "cueSplitNoAudioFile": "Audiodatei für dieses CUE-Sheet nicht gefunden", - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} heruntergeladen. Zum Installieren tippen.", - "appearanceSelectAccentColor": "Wähle Akzentfarbe {hex}", - "@homeAlbumInfoUnavailable": { - "description": "Snackbar when album info cannot be loaded" + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" }, - "trackReplayGain": "Rescan ReplayGain", - "downloadSeparateSinglesFolder": "Singles Ordner trennen", - "trackAlbumArtist": "Album Künstler", - "qualityFlacLossless": "FLAC Verlustfrei", - "@extensionVerificationHelpMessageWaiting": { - "description": "Dialog message when verification may need manual browser help" + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" }, - "tutorialSettingsTitle": "Passe deine Benutzererfahrung an", - "extensionActionFailed": "Aktion fehlgeschlagen", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Personen-Lyrics", - "downloadFallbackExtensionsSubtitle": "Wähle, welche Erweiterungen als Fallback verwendet werden können", - "storeExtensionsCount": "{count} {count, plural, =1{Erweiterung} other{Erweiterungen}}", - "trackCoverNoEmbeddedArt": "Kein eingebettetes Albumcover gefunden", - "@trackCoverNoEmbeddedArt": { - "description": "Message shown when a track file has no embedded cover art" + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", - "setupStorageAccessMessageAndroid11": "Android 11+ benötigt die Berechtigung „Auf alle Dateien“, um Dateien im ausgewählten Download-Ordner zu speichern.", - "notifDownloadsFinished": "Downloads abgeschlossen ({completed} fertig, {failed} fehlgeschlagen)", - "notifLibraryScanProgressWithTotal": "{scanned}/{total} Dateien • {percentage}%", - "optionsPrimaryProvider": "Primärer Anbieter", - "@optionsPrimaryProvider": { - "description": "Main search provider setting" + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" }, - "logIssueTrackNotFoundSuggestion": "Der Titel ist möglicherweise nicht in verlustfreier Qualität verfügbar", - "collectionAddedToLoved": "\"{trackName}\" zu Lieblingssongs hinzugefügt", - "albumFolderArtistAlbumFlat": "Künstler / Album (Singles flach)", - "homeAlbumInfoUnavailable": "Albuminfo nicht verfügbar", - "settingsLyrics": "Lyrics", - "extensionVerificationBrowserExternal": "External", - "regionCountryIN": "Indien", - "extensionHealthUnknown": "Unbekannt", - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", - "settingsAutoExportFailed": "Auto-Export fehlgeschlagener Downloads", - "logFilterSection": "Filter", - "dialogDiscardChanges": "Änderungen verwerfen?", - "@qualityHiResFlacSubtitle": { - "description": "Technical spec for hi-res" + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" }, - "searchTracks": "Titel", - "searchAlbums": "Alben", - "trackConvertFormat": "Format konvertieren", - "metadataProviderPriorityTitle": "Metadaten Priorität", - "libraryFolderHint": "Tippe um Ordner auszuwählen", - "downloadedAlbumDeleteMessage": "{count} {count, plural, =1{Titel} other{Titel}} aus diesem Album löschen?\n\nDadurch werden auch die Dateien aus dem Speicher gelöscht.", - "@downloadedAlbumDeleteMessage": { - "description": "Delete confirmation with count", + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, + "editMetadataAdvanced": "Erweitert", + "@editMetadataAdvanced": { + "description": "Expandable section label for advanced metadata fields" + }, + "libraryFilterMetadataMissingTrackNumber": "Fehlende Tracknummer", + "@libraryFilterMetadataMissingTrackNumber": { + "description": "Filter option - items missing track number" + }, + "libraryFilterMetadataMissingDiscNumber": "Fehlende Disc-Nummer", + "@libraryFilterMetadataMissingDiscNumber": { + "description": "Filter option - items missing disc number" + }, + "libraryFilterMetadataMissingArtist": "Fehlender Künstler", + "@libraryFilterMetadataMissingArtist": { + "description": "Filter option - items missing artist" + }, + "libraryFilterMetadataIncorrectIsrcFormat": "Falsches ISRC-Format", + "@libraryFilterMetadataIncorrectIsrcFormat": { + "description": "Filter option - items with an invalid ISRC format" + }, + "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, + "libraryFilterMetadataMissingLabel": "Label fehlt", + "@libraryFilterMetadataMissingLabel": { + "description": "Filter option - items missing record label" + }, + "collectionDeletePlaylistsMessage": "Lösche {count} {count, plural, =1{Playlist} other{Playlists}}?", + "@collectionDeletePlaylistsMessage": { + "description": "Confirmation message for deleting selected playlists", "placeholders": { "count": { "type": "int" } } }, - "trackAlbum": "Album", - "updateAvailable": "Update verfügbar", - "optionsEmbedLyrics": "Liedtexte einbetten", - "trackReEnrichProgress": "Metadaten neu anreichern...", - "@trackReEnrichProgress": { - "description": "Snackbar while re-enriching metadata" - }, - "audioAnalysisPeak": "Maximum", - "@audioAnalysisPeak": { - "description": "Peak amplitude metric label" - }, - "optionsExtensionStoreSubtitle": "Repo-Tab in der Navigation anzeigen", - "settingsTitle": "Einstellungen", - "@settingsAbout": { - "description": "Settings section - app info" + "collectionPlaylistsDeleted": "{count} {count, plural, =1{Playlist} other{Playlists}} gelöscht", + "@collectionPlaylistsDeleted": { + "description": "Snackbar after deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheExploreFeed": "Feed-Cache entdecken", - "@dialogDownloadPlaylistsMessage": { - "description": "Dialog message for bulk playlist download confirmation", + "collectionAddedTracksToPlaylist": "{count} {count, plural, =1{Titel} other{Titel}} zu {playlistName} hinzugefügt", + "@collectionAddedTracksToPlaylist": { + "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { - "trackCount": { + "count": { "type": "int" }, - "playlistCount": { - "type": "int" + "playlistName": { + "type": "String" } } }, - "downloadedAlbumSelectedCount": "{count} ausgewählt", - "downloadAskQualitySubtitle": "Qualitätsauswahl für jeden Download anzeigen", - "filenameShowAdvancedTags": "Erweiterte Tags anzeigen", - "@filenameShowAdvancedTags": { - "description": "Toggle label for showing advanced filename tags" - }, - "@editMetadataFieldComment": { - "description": "Label for comment field in the edit metadata sheet" - }, - "downloadFallbackExtensions": "Fallback-Erweiterungen", - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", - "cacheLibraryCover": "Bibliotheks-Cover-Cache", - "actionShuffle": "Shuffle", - "backupCreated": "Backup created", - "downloadLossyAacSubtitle": "Beste mobile Kompatibilität, M4A Container", - "actionCreate": "Erstellen", - "snackbarAddedToQueueGeneric": "Added to queue", - "downloadedAlbumDownloadedCount": "{count} heruntergeladen", - "snackbarLoadingCueSheet": "CAE-Sheet wird geladen...", - "@trackCoverClearSelected": { - "description": "Tooltip for clearing the newly selected cover art" - }, - "aboutOriginalCreator": "Schöpfer des ursprünglichen SpotiFLAC", - "a11yTrackByArtist": "{trackName} von {artistName}", - "audioAnalysisDynamicRange": "Dynamischer Bereich", - "homeChangeSearchProviderTooltip": "Suchanbieter ändern", - "loadingSharedLink": "Link wird geladen...", - "lyricsModeEmbedSubtitle": "Lyrics in FLAC Metadaten gespeichert", - "setupNotificationBackgroundDescription": "Erhalte Benachrichtigungen über den Fortschritt und die Fertigstellung deiner Downloads, selbst wenn die App im Hintergrund läuft.", - "snackbarViewQueue": "Warteschlange anzeigen", - "@audioAnalysisDuration": { - "description": "Duration metric label" - }, - "downloadSeparateSinglesDisabled": "Singles und Alben im selben Ordner gespeichert", - "backupRestored": "Backup restored successfully", - "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", - "@trackConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless conversion of a single file", + "collectionAddedTracksToPlaylistWithExisting": "{count} {count, plural, =1{Titel} other{Titel}} zu {playlistName} ({alreadyCount} bereits in der Playlist)", + "@collectionAddedTracksToPlaylistWithExisting": { + "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { - "sourceFormat": { - "type": "String" + "count": { + "type": "int" }, - "targetFormat": { + "playlistName": { "type": "String" }, - "quality": { - "type": "String" + "alreadyCount": { + "type": "int" } } }, - "discographySelectAlbumsSubtitle": "Wähle bestimmte Alben oder Singles", - "@discographySelectAlbumsSubtitle": { - "description": "Subtitle for select albums option" - }, - "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", - "errorUrlFetchFailed": "Laden fehlgeschlagen. Bitte erneut versuchen.", - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", - "dialogSave": "Speichern", - "trackReEnrichSearching": "Suche Metadaten online...", - "regionCountryUS": "United States", - "audioAnalysisDescription": "Verlustfreie Qualität mit Spektrumanalyse überprüfen", - "downloadFilenameFormat": "Dateinamenformat", - "cueSplitTitle": "CUE-Sheet aufteilen", - "settingsAppSubtitle": "Updates, Daten, Erweiterungsrepo, Debug", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "@setupPermissionRequiredMessage": { - "description": "Generic permission required message", + "itemCount": "{count} {count, plural, =1{Sache} other{Sachen}}", + "@itemCount": { + "description": "Generic item count label", "placeholders": { - "permissionType": { - "type": "String" + "count": { + "type": "int" } } }, - "errorMissingExtensionSource": "Kann {item} nicht laden wegen fehlender Erweiterungsquelle", - "albumFolderAlbumOnlySubtitle": "Alben/Album Name/", - "logIssueTrackNotFoundLabel": "TITEL NICHT GEFUNDEN", - "extensionVerificationHelpTitleManual": "Open verification manually", - "dialogDiscard": "Verwerfen", - "storageModeSaf": "Benutzerdefinierter Ordner (SAF)", - "errorRateLimited": "Anfragelimit überschritten", - "downloadSelectQuality": "Qualität wählen", - "dialogDownloadPlaylistsMessage": "Lade {trackCount} {trackCount, plural, =1{Titel} other{Titel}} von {playlistCount} {playlistCount, plural, =1{Playlist} other{Playlists}}?", - "collectionFoldersTitle": "Meine Ordner", - "progressFetchingMetadata": "Lade Metadaten... {current}/{total}", - "settingsDownloadNetworkAny": "WLAN + Mobile Daten", - "audioAnalysisDuration": "Länge", - "audioAnalysisAnalyzing": "Audio wird analysiert...", - "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", - "editMetadataFieldDiscNum": "Disk #", - "@editMetadataFieldDiscNum": { - "description": "Chip label for disc number field in auto-fill selector" - }, - "@noTracksFoundForAlbum": { - "description": "Empty state message when an album has no tracks" - }, - "previewPlay": "Vorschau abspielen", - "setupPermissionRequiredMessage": "{permissionType}-Berechtigung ist erforderlich für\ndie beste Benutzererfahrung. Du kannst dies später in den Einstellungen ändern.", - "aboutVersion": "Version", - "qualityHiResFlacSubtitle": "24-Bit / bis 96kHz", - "audioAnalysisSamples": "Proben", - "libraryFilterQualityHiRes": "Hi-Res (24bit)", - "sectionMetadataProviders": "Anbieter", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "trackCopyright": "Urheberrecht", - "libraryForceFullScanSubtitle": "Alle Dateien erneut scannen und Cache ignorieren", - "trackCopiedToClipboard": "In Zwischenablage kopiert", - "optionsEmbedMetadata": "Eingebettete Metadaten", - "collectionAddedTracksToPlaylistWithExisting": "{count} {count, plural, =1{Titel} other{Titel}} zu {playlistName} ({alreadyCount} bereits in der Playlist)", - "@collectionAddedTracksToPlaylistWithExisting": { - "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "trackReEnrichSuccessWithFailures": "Metadaten erfolgreich neu angereichert ({successCount}/{total}) - fehlgeschlagen: {failedCount}", + "@trackReEnrichSuccessWithFailures": { + "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", "placeholders": { - "count": { + "successCount": { "type": "int" }, - "playlistName": { - "type": "String" + "total": { + "type": "int" }, - "alreadyCount": { + "failedCount": { "type": "int" } } }, - "storeCategoryIntegration": "Integration", - "storeClearFilters": "Filter entfernen", - "navSettings": "Einstellungen", - "@homeRecent": { - "description": "Section header for recent searches" + "selectionDeleteTracksCount": "Lösche {count} {count, plural, =1{Titel} other{Titel}}", + "@selectionDeleteTracksCount": { + "description": "Button label for deleting selected tracks", + "placeholders": { + "count": { + "type": "int" + } + } }, - "sectionApp": "App", - "@sectionLanguage": { - "description": "Settings section header for language" + "queueDownloadSpeedStatus": "Herunterladen - {speed} MB/s", + "@queueDownloadSpeedStatus": { + "description": "Queue status while downloading with speed", + "placeholders": { + "speed": { + "type": "String" + } + } }, - "downloadFilterContributingDisabled": "Volle Album Künstler String verwendet", - "albumFolderArtistAlbumSinglesSubtitle": "Künstler/Album/ und Künstler/Singles/", - "collectionDeletePlaylistsMessage": "Lösche {count} {count, plural, =1{Playlist} other{Playlists}}?", - "lyricsProvidersSaved": "Priorität des Lyrics-Anbieters gespeichert", - "@trackReplayGainFailed": { - "description": "Snackbar message when ReplayGain scan/write fails" + "queueDownloadStarting": "Starte...", + "queueCheckingDownloadSession": "Checking download session...", + "queueResolvingDownloadMetadata": "Resolving track metadata...", + "queueResolvingDownloadStream": "Preparing audio stream...", + "queueWaitingForVerification": "Waiting for verification...", + "queueResumingAfterVerification": "Resuming after verification...", + "@queueDownloadStarting": { + "description": "Queue status before download progress is available" }, - "trackTrackName": "Name des Titels", - "homeRecent": "Zuletzt", - "recentEmpty": "Noch keine aktuellen Einträge", - "cacheClearAll": "Gesamten Cache leeren", - "trackReEnrichFieldReleaseInfo": "Datum & ISRC", - "regionCountryMX": "Mexico", - "a11yOpenAlbumByArtistTrackCount": "Öffne Album {albumName} von {artistName}, {trackCount} Titel", - "editMetadataFieldAlbum": "Album", - "settingsAbout": "Über", - "libraryFilterTitle": "Filter", - "cleanupOrphanedDownloadsResult": "Entfernte {count} verwaiste Einträge aus dem Verlauf", - "extensionHooksAvailable": "{count} Hook(s) verfügbar", - "backupContentsSettings": "Appeinstellungen", - "trackLyricsEmbedded": "Lyrics erfolgreich eingebettet", - "optionsUpdateChannelPreview": "Vorschau-Versionen erhalten", - "collectionAddedToFavoriteArtists": "\"{artistName}\" zu Lieblingskünstlern hinzugefügt", - "libraryForceFullScan": "Vollen Neu-Scan erzwingen", - "snackbarProviderPrioritySaved": "Anbieterpriorität gespeichert", - "collectionFavoriteArtistsEmptySubtitle": "Tippe auf das Herz auf einer Künstlerseite, um sie hier zu sehen", - "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", - "extensionServiceStatus": "Dienststatus", - "dateWeeksAgo": "Vor {count} Wochen", - "historyFilterSingles": "Singles", - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", - "trackLyricsSaved": "Lyrics in {fileName} gespeichert", - "cacheClearAllConfirmTitle": "Gesamten Cache leeren?", - "noTracksFoundForAlbum": "Keine Titel in diesem Album gefunden", - "sectionLanguage": "Sprache", - "@logIssueTrackNotFoundDescription": { - "description": "Diagnostic badge description when a track is unavailable" + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." }, - "setupSelectFolder": "Ordner wählen", - "dateYesterday": "Gestern", - "collectionAddToPlaylist": "Zur Playlist hinzufügen", - "snackbarUnsupportedAudioFormat": "Nicht unterstütztes Audioformat", - "libraryScanCancelled": "Scan abgebrochen", - "appearanceLanguage": "App Sprache", - "extensionsTitle": "Erweiterungen", - "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", - "permissionNotification": "Benachrichtigung", - "notifUpdateReady": "Update bereit", - "lyricsModeDescription": "Wähle wie Songtexte mit deinen Downloads gespeichert werden", - "downloadFrom": "Herunterladen von", - "collectionWishlistEmptySubtitle": "Tippe auf das + bei den Titeln, um sie zum späteren Herunterladen zu speichern", - "cueSplitSplitting": "CUE-Sheet wird geteilt... ({current}/{total})", - "trackOptionAddToWishlist": "Zur Wunschliste hinzufügen", - "settingsBackup": "Backup & Restore", - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", - "notifDownloadCompleteCount": "Download abgeschlossen ({completed}/{total})", - "extensionsNoDownloadProvider": "Keine Erweiterungen mit Download-Provider", - "libraryFilterSortGenreAsc": "Genre (A-Z)", - "trackReplayGainFailed": "Failed to add ReplayGain tags", - "collectionPlaylistRemoveCover": "Cover entfernen", - "storeEmptyNoResults": "Keine Erweiterungen gefunden", - "logIssueTrackNotFoundDescription": "Einige Titel konnten auf Download-Diensten nicht gefunden werden", - "editMetadataFieldComment": "Kommentar", - "settingsMetadata": "Metadaten", - "settingsCache": "Speicher & Cache", - "providerPriorityFallbackExtensionsHint": "Hier werden nur aktivierte Erweiterungen mit Download-Provider-Funktion aufgelistet.", - "libraryFilterAll": "Alle", - "notifDownloadingUpdate": "SpotiFLAC Mobile v{version} wird heruntergeladen", - "extensionsProviderPrioritySection": "Provider-Priorität", - "storeChangeRepoTooltip": "Repository ändern", - "snackbarFailedToInstall": "Erweiterung konnte nicht installiert werden", - "libraryScanSubtitle": "Suche nach Audiodateien", - "snackbarExtensionInstalled": "{extensionName} installiert.", - "setupOpenSettings": "Einstellungen öffnen", - "extensionsInstalledSection": "Installierte Erweiterungen", - "aboutLinks": "Links", - "trackCoverClearSelected": "Ausgewähltes Cover löschen", - "libraryAutoScanWeekly": "Wöchentlich", - "downloadMusixmatchLanguageAuto": "Auto (Originalsprache)", - "optionsDefaultSearchTab": "Standard Such-Tab", - "downloadPrimaryArtistOnlyOn": "Primary only: On", - "folderOrganizationDescription": "Heruntergeladene Dateien in Ordner organisieren", - "@folderOrganizationDescription": { - "description": "Folder organization sheet description" + "a11ySelectTrack": "Titel auswählen", + "@a11ySelectTrack": { + "description": "Accessibility label for selecting a track" }, - "lyricsModeEmbed": "In Datei einbetten", - "trackReEnrichFfmpegFailed": "FFmpeg Metadaten-Einbettung fehlgeschlagen", - "@extensionsSearchProviderDescription": { - "description": "Search provider setting description" + "a11yDeselectTrack": "Titel abwählen", + "@a11yDeselectTrack": { + "description": "Accessibility label for deselecting a track" }, - "libraryFilterQualityLossy": "Verlustbehaftet", - "actionPause": "Pause", - "csvImportTracks": "{count} Titel aus CSV", - "actionGo": "Los", - "sectionDebug": "Debug", - "editMetadataFieldDate": "Datum", - "timeHoursAgo": "{count, plural, =1{vor 1 Stunde} other{vor {count} Stunden}}", - "sectionPerformance": "Performance", - "extensionsDownloadPrioritySubtitle": "Download-Service-Reihenfolge festlegen", - "cacheAppDirectoryDesc": "HTTP-Antworten, WebView Daten und andere temporäre App-Daten.", - "sectionData": "Daten", - "notifFinalizingTrack": "{trackName} wird fertiggestellt", - "snackbarFileNotFound": "Datei nicht gefunden", - "extensionQualityOptions": "Qualitätsoptionen", - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", - "storeRepoDialogTitle": "Erweiterungs-Repository", - "extensionsSearchProviderDescription": "Wähle den Dienst für die Suche von Titel", - "albumFolderAlbumOnly": "Nur Alben", - "nowPlayingOpenInExternalPlayer": "Open in external player", - "cueSplitButton": "In Titel aufteilen", - "updateRequiredTitle": "Update required", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" + "a11yPlayTrackByArtist": "Spiele {trackName} von {artistName}", + "@a11yPlayTrackByArtist": { + "description": "Accessibility label for playing a local library track", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", + "storeExtensionsCount": "{count} {count, plural, =1{Erweiterung} other{Erweiterungen}}", + "@storeExtensionsCount": { + "description": "Store extension result count", "placeholders": { "count": { "type": "int" } } }, - "appearanceHeroAnimations": "Hero animations", - "@appearanceHeroAnimations": { - "description": "Toggle for shared-element (Hero) transitions" + "storeRequiresVersion": "Benötigt v{version}+", + "@storeRequiresVersion": { + "description": "Store compatibility badge for minimum app version", + "placeholders": { + "version": { + "type": "String" + } + } }, - "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", - "@appearanceHeroAnimationsSubtitle": { - "description": "Subtitle for the Hero animations toggle" + "actionGo": "Los", + "@actionGo": { + "description": "Generic action button label" + }, + "logIssueSummary": "Problemübersicht", + "@logIssueSummary": { + "description": "Header for log issue analysis summary" + }, + "logTotalErrors": "Gesamte Fehler: {count}", + "@logTotalErrors": { + "description": "Total error count in log issue analysis", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "logAffectedDomains": "Betroffen: {domains}", + "@logAffectedDomains": { + "description": "Affected domains in log issue analysis", + "placeholders": { + "domains": { + "type": "String" + } + } + }, + "libraryScanCancelled": "Scan abgebrochen", + "@libraryScanCancelled": { + "description": "Library scan status when a scan was cancelled" + }, + "libraryScanCancelledSubtitle": "Du kannst erneut Scannen, wenn er fertig ist.", + "@libraryScanCancelledSubtitle": { + "description": "Library scan status subtitle after cancellation" + }, + "libraryDownloadsHistoryExcluded": "{count} aus dem Download-Verlauf (von der Liste ausgeschlossen)", + "@libraryDownloadsHistoryExcluded": { + "description": "Library count note for downloaded history items excluded from the local list", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadNativeWorker": "Nativer Download Dienst", + "@downloadNativeWorker": { + "description": "Setting title for Android native download worker" + }, + "downloadNativeWorkerSubtitle": "Android background service for extension downloads", + "@downloadNativeWorkerSubtitle": { + "description": "Setting subtitle for Android native download worker" + }, + "extensionServiceStatus": "Dienststatus", + "@extensionServiceStatus": { + "description": "Extension detail section header for service status" + }, + "extensionServiceHealth": "Service-Gesundheit", + "@extensionServiceHealth": { + "description": "Extension capability label for service health checks" + }, + "extensionHealthChecksConfigured": "{count} {count, plural, =1{Prüfung} other{Prüfungen}} konfiguriert", + "@extensionHealthChecksConfigured": { + "description": "Extension service health check count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionOauthConnectHint": "Tippe auf \"Mit Spotify verbinden\" um dieses Feld auszufüllen.", + "@extensionOauthConnectHint": { + "description": "Hint for an OAuth login link field before connecting Spotify" + }, + "extensionLastChecked": "Zuletzt geprüft {time}", + "@extensionLastChecked": { + "description": "Timestamp for the latest extension service health check", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "extensionRefreshStatus": "Status aktualisieren", + "@extensionRefreshStatus": { + "description": "Tooltip for refreshing extension service health status" + }, + "extensionCustomUrlHandling": "Benutzerdefinierte URL-Handling", + "@extensionCustomUrlHandling": { + "description": "Extension detail section title for custom URL handling" + }, + "extensionCustomUrlHandlingSubtitle": "Diese Erweiterung kann Links von diesen Seiten benutzen", + "@extensionCustomUrlHandlingSubtitle": { + "description": "Extension detail subtitle for custom URL handling" + }, + "extensionCustomUrlHandlingShareHint": "Teile Links von diesen Seiten mit SpotiFLAC Mobile und diese Erweiterung wird sie verarbeiten.", + "@extensionCustomUrlHandlingShareHint": { + "description": "Extension detail hint explaining share-to-app URL handling" + }, + "extensionSettingsCount": "{count} {count, plural, =1{Einstellung} other{Einstellungen}}", + "@extensionSettingsCount": { + "description": "Count of settings exposed by an extension quality option", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionHealthOnline": "Online", + "@extensionHealthOnline": { + "description": "Extension service health status - online" + }, + "extensionHealthDegraded": "Eingeschränkt", + "@extensionHealthDegraded": { + "description": "Extension service health status - degraded" + }, + "extensionHealthOffline": "Offline", + "@extensionHealthOffline": { + "description": "Extension service health status - offline" + }, + "extensionHealthNotConfigured": "Nicht konfiguriert", + "@extensionHealthNotConfigured": { + "description": "Extension service health status - not configured" + }, + "extensionHealthUnknown": "Unbekannt", + "@extensionHealthUnknown": { + "description": "Extension service health status - unknown" + }, + "extensionHealthRequired": "benötigt", + "@extensionHealthRequired": { + "description": "Label for a required extension service health check" + }, + "extensionSettingNotSet": "Nicht eingestellt", + "@extensionSettingNotSet": { + "description": "Value shown when an extension setting has no value" + }, + "extensionActionFailed": "Aktion fehlgeschlagen", + "@extensionActionFailed": { + "description": "Fallback error when an extension action fails without details" + }, + "extensionEnterValue": "Wert eingeben", + "@extensionEnterValue": { + "description": "Hint for editing an extension setting value" + }, + "extensionHealthServiceOnline": "Dienste online", + "@extensionHealthServiceOnline": { + "description": "Tooltip for online extension service" + }, + "extensionHealthServiceDegraded": "Dienst Eingeschränkt", + "@extensionHealthServiceDegraded": { + "description": "Tooltip for degraded extension service" + }, + "extensionHealthServiceOffline": "Dienst offline", + "@extensionHealthServiceOffline": { + "description": "Tooltip for offline extension service" + }, + "extensionHealthServiceUnknown": "Dienst-Status unbekannt", + "@extensionHealthServiceUnknown": { + "description": "Tooltip for unknown extension service health" + }, + "audioAnalysisStereo": "Stereo", + "@audioAnalysisStereo": { + "description": "Audio channel layout label - stereo" + }, + "audioAnalysisMono": "Mono", + "@audioAnalysisMono": { + "description": "Audio channel layout label - mono" + }, + "trackOpenInService": "Öffne in {serviceName}", + "@trackOpenInService": { + "description": "Button label to open a track in a named music service", + "placeholders": { + "serviceName": { + "type": "String" + } + } + }, + "trackLyricsEmbeddedSource": "Eingebettet", + "@trackLyricsEmbeddedSource": { + "description": "Lyrics source label for embedded lyrics" + }, + "unknownAlbum": "Unbekanntes Album", + "@unknownAlbum": { + "description": "Fallback album name when metadata is missing" + }, + "unknownArtist": "Unbekannter Künstler", + "@unknownArtist": { + "description": "Fallback artist name when metadata is missing" + }, + "permissionAudio": "Audio", + "@permissionAudio": { + "description": "Audio permission type label" + }, + "permissionStorage": "Speicher", + "@permissionStorage": { + "description": "Storage permission type label" + }, + "permissionNotification": "Benachrichtigung", + "@permissionNotification": { + "description": "Notification permission type label" + }, + "errorInvalidFolderSelected": "Ungültiger Ordner ausgewählt", + "@errorInvalidFolderSelected": { + "description": "Error when the selected folder is invalid" + }, + "storeAnyVersion": "Alle", + "@storeAnyVersion": { + "description": "Store detail value when any app version is accepted" + }, + "storeCategoryMetadata": "Metadaten", + "@storeCategoryMetadata": { + "description": "Store extension category - metadata" + }, + "storeCategoryDownload": "Herunterladen", + "@storeCategoryDownload": { + "description": "Store extension category - download" + }, + "storeCategoryUtility": "Utility", + "@storeCategoryUtility": { + "description": "Store extension category - utility" + }, + "storeCategoryLyrics": "Lyrics", + "@storeCategoryLyrics": { + "description": "Store extension category - lyrics" + }, + "storeCategoryIntegration": "Integration", + "@storeCategoryIntegration": { + "description": "Store extension category - integration" + }, + "artistReleases": "Releases", + "@artistReleases": { + "description": "Section header for all artist releases" + }, + "editMetadataSelectNone": "Keine", + "@editMetadataSelectNone": { + "description": "Button to clear selected fields for auto-fill" + }, + "queueRetryAllFailed": "Retry {count} failed", + "@queueRetryAllFailed": { + "description": "Button to retry every failed download in the queue", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "settingsSaveDownloadHistory": "Save download history", + "@settingsSaveDownloadHistory": { + "description": "Settings switch title for storing completed downloads in history" + }, + "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "@settingsSaveDownloadHistorySubtitle": { + "description": "Settings switch subtitle for storing completed downloads in history" + }, + "dialogDisableHistoryTitle": "Turn off download history?", + "@dialogDisableHistoryTitle": { + "description": "Confirmation dialog title shown before disabling download history" + }, + "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "@dialogDisableHistoryMessage": { + "description": "Confirmation dialog message shown before disabling download history" + }, + "dialogDisableAndClear": "Turn off and clear", + "@dialogDisableAndClear": { + "description": "Confirmation action to disable download history and clear existing entries" + }, + "openInOtherServices": "Open in Other Services", + "@openInOtherServices": { + "description": "Title and tooltip for finding the current collection in other services" + }, + "shareSheetNoExtensions": "No other compatible services", + "@shareSheetNoExtensions": { + "description": "Empty state when no extensions can be searched for cross-service links" + }, + "shareSheetNotFound": "Not found", + "@shareSheetNotFound": { + "description": "Cross-service share sheet row subtitle when a service has no match" + }, + "shareSheetCopyLink": "Copy Link", + "@shareSheetCopyLink": { + "description": "Tooltip for copying a cross-service link" + }, + "shareSheetLinkCopied": "{service} link copied", + "@shareSheetLinkCopied": { + "description": "Snackbar after copying a cross-service link", + "placeholders": { + "service": {} + } + }, + "libraryPlayback": "Playback", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "External player", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Built-in preview player", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Jetzt läuft", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Nothing is playing", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimize", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Up next", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, + "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, + "nowPlayingOpenInExternalPlayer": "Open in external player", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Player", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lyrics", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "No lyrics in this file", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Your library is empty", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Shuffle on", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Play in order", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Shuffle library", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Queue is empty", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "No metadata available", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" + }, + "snackbarPlayingNext": "Als nächstes", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Added to queue", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Shuffle", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" + }, + "downloadPrimaryArtistOnlyOn": "Primary only: On", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Original quality", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "trackConvertDithering": "Dithering", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "Resampler", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "Keine", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "Triangular HP", + "@trackConvertDitherTriangularHp": { + "description": "Lossless conversion high-pass triangular dither option" + }, + "trackConvertResamplerSwr": "SWR", + "@trackConvertResamplerSwr": { + "description": "Lossless conversion default FFmpeg swresample resampler option" + }, + "trackConvertResamplerSoxr": "SoXr", + "@trackConvertResamplerSoxr": { + "description": "Lossless conversion SoX resampler option" + }, + "updateSeeReleaseNotes": "See release notes for details.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Unknown title", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Play next", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Add to queue", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + }, + "version": { + "type": "String" + } + } + }, + "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" + }, + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" + }, + "trackCoverOnline": "Online cover", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" + }, + "regionCountryUS": "United States", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" + }, + "regionCountryGB": "United Kingdom", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" + }, + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloads": "Concurrent downloads", - "@settingsConcurrentDownloads": { - "description": "Setting title - how many tracks download at the same time" + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", - "@settingsConcurrentDownloadsSubtitle": { - "description": "Subtitle explaining the concurrent downloads picker" + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsOne": "1 track at a time", - "@concurrentDownloadsOne": { - "description": "Concurrent downloads option - sequential" + "regionCountryKR": "Südkorea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsCount": "Up to {count} tracks at once", - "@concurrentDownloadsCount": { - "description": "Concurrent downloads option - parallel", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryIN": "Indien", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalization": "Volume normalization", - "@libraryPlaybackNormalization": { - "description": "Toggle title for ReplayGain playback normalization in the built-in player" + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", - "@libraryPlaybackNormalizationSubtitle": { - "description": "Subtitle explaining playback volume normalization" + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysis": "Audio analysis cache", - "@cacheAudioAnalysis": { - "description": "Cache item title for saved audio analysis results" + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", - "@cacheAudioAnalysisDesc": { - "description": "Description of what audio analysis cache contains" + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginal": "Keep original file", - "@trackConvertKeepOriginal": { - "description": "Toggle to preserve the source file during conversion" + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", - "@trackConvertKeepOriginalDescription": { - "description": "Description for preserving the source file during conversion" + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" }, - "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", - "@trackConvertConfirmKeepOriginal": { - "description": "Confirmation message when the source file will be preserved", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" }, - "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": { - "description": "Batch conversion confirmation when source files will be preserved", - "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" }, - "downloadFolderAccessLostTitle": "Download folder access lost", - "@downloadFolderAccessLostTitle": { - "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" }, - "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", - "@downloadFolderAccessLostSubtitle": { - "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" }, - "downloadFolderReselect": "Re-select folder", - "@downloadFolderReselect": { - "description": "Button that reopens the folder picker to restore download folder access" + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" }, - "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", - "@downloadErrorSafPermissionLost": { - "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" + "extensionVerificationHelpTitleManual": "Open verification manually", + "@extensionVerificationHelpTitleManual": { + "description": "Dialog title when automatic browser launch for verification fails" }, - "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", - "@downloadErrorFolderAccessLost": { - "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" + "extensionVerificationHelpTitleWaiting": "Verification still waiting", + "@extensionVerificationHelpTitleWaiting": { + "description": "Dialog title when verification is taking longer than expected" }, - "notifVerificationRequiredTitle": "Verification required", - "@notifVerificationRequiredTitle": { - "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" + "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", + "@extensionVerificationHelpMessageManual": { + "description": "Dialog message when automatic browser launch for verification fails" }, - "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", - "@notifVerificationRequiredBody": { - "description": "Notification body prompting the user to return to the app to solve a verification challenge" + "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", + "@extensionVerificationHelpMessageWaiting": { + "description": "Dialog message when verification may need manual browser help" }, - "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", - "@downloadDeduplicationWithQualityVariants": { - "description": "Deduplication subtitle when separate quality versions are allowed" + "extensionVerificationClose": "Schließen", + "@extensionVerificationClose": { + "description": "Button to dismiss the extension verification help dialog" }, - "downloadQualityVariants": "Allow different quality versions", - "@downloadQualityVariants": { - "description": "Setting to retain multiple quality versions of the same track" + "extensionVerificationCopyLink": "Copy link", + "@extensionVerificationCopyLink": { + "description": "Button to copy the extension verification URL" }, - "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", - "@downloadQualityVariantsDescription": { - "description": "Description for retaining multiple quality versions" + "extensionVerificationLinkCopied": "Verification link copied", + "@extensionVerificationLinkCopied": { + "description": "Snackbar after copying the extension verification URL" }, - "trackOptionDownloadQualityVariant": "Download another quality", - "@trackOptionDownloadQualityVariant": { - "description": "Track menu action to download another quality version" + "extensionVerificationOpenBrowser": "Open browser", + "@extensionVerificationOpenBrowser": { + "description": "Button to open the extension verification URL in a browser" }, - "queueCheckingDownloadSession": "Checking download session...", - "queueResolvingDownloadMetadata": "Resolving track metadata...", - "queueResolvingDownloadStream": "Preparing audio stream...", - "queueWaitingForVerification": "Waiting for verification...", - "queueResumingAfterVerification": "Resuming after verification...", "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", - "collectionExportM3u": "Export as M3U8", - "collectionExportM3uDone": "Exported {exported} of {total} tracks", - "collectionExportM3uNone": "No downloaded files to export", - "collectionExportM3uFailed": "Export failed", - "trackOpenOn": "Open on...", - "trackOpenOnNoLinks": "No platform links found for this track.", - "libraryReviewDuplicates": "Review duplicates", - "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", - "duplicatesTitle": "Duplicates", - "duplicatesEmpty": "No duplicate tracks found.", - "duplicatesKeepBest": "Keep best", - "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", - "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", - "downloadAutoConvert": "Auto-convert after download", - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "downloadAutoConvertFormat": "Output format", - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "downloadAutoConvertBitrate": "Output quality", - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "appearanceForceBlur": "Always use blur effects", - "appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "editMetadataAutoFillSource": "Metadata source", - "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", - "editMetadataAutoFillFind": "Find metadata", - "editMetadataAutoFillPreview": "Data from {source}", - "editMetadataAutoFillCoverAvailable": "Cover artwork available", - "editMetadataAutoFillApply": "Apply selected data", - "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", - "libraryDefaultView": "Default view", - "libraryDefaultViewLastUsed": "Last used", - "audioAnalysisCutoffNotDetected": "Not detected", - "queueCancelledTitle": "Download cancelled", - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", - "trackCoverResolution": "Cover resolution", - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", - "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", - "queueDownloadNext": "Download next", - "queueMoveUp": "Move up", - "queueMoveDown": "Move down", - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", - "nowPlayingRepeatOff": "Repeat off", - "nowPlayingRepeatAll": "Repeat all", - "nowPlayingRepeatOne": "Repeat one", - "queueNetworkFailedOffline": "{count} downloads failed while offline", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "libraryFilterMetadataMissingIsrc": "Missing ISRC" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From a190d05fc4f6ca17ede79edcec843f9ff916dcbf Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:41 +0700 Subject: [PATCH 09/59] New translations app_en.arb (Japanese) [ci skip] --- lib/l10n/arb/app_ja.arb | 9612 ++++++++++++++++++++------------------- 1 file changed, 5029 insertions(+), 4583 deletions(-) diff --git a/lib/l10n/arb/app_ja.arb b/lib/l10n/arb/app_ja.arb index bdb67b05c..b1d2f08cf 100644 --- a/lib/l10n/arb/app_ja.arb +++ b/lib/l10n/arb/app_ja.arb @@ -1,2673 +1,2662 @@ { "@@locale": "ja", "@@last_modified": "2026-04-28", - "libraryEnableLocalLibrarySubtitle": "Scan and track your existing music", - "@libraryEnableLocalLibrarySubtitle": { - "description": "Subtitle for enable toggle" - }, - "@audioAnalysisCodec": { - "description": "Audio codec metric label" + "appName": "SpotiFLAC Mobile", + "@appName": { + "description": "App name - DO NOT TRANSLATE" }, - "extensionUtilityFunctions": "Utility Functions", - "@extensionUtilityFunctions": { - "description": "Capability label for utility-only extensions" + "navHome": "ホーム", + "@navHome": { + "description": "Bottom navigation - Home tab" }, - "logClearLogsMessage": "すべてのログを消去してもよろしいですか?", - "@logClearLogsMessage": { - "description": "Clear logs confirmation message" + "navLibrary": "ライブラリ", + "@navLibrary": { + "description": "Bottom navigation - Library tab" }, - "@storeClearFilters": { - "description": "Button to clear all filters" + "navSettings": "設定", + "@navSettings": { + "description": "Bottom navigation - Settings tab" }, - "cacheCleanupUnused": "未使用のデータを削除", - "@cacheCleanupUnused": { - "description": "Action title for cleaning unused entries" + "navStore": "Repo", + "@navStore": { + "description": "Bottom navigation - Extension repo tab" }, - "trackConvertDitherNone": "None", - "@trackConvertDitherNone": { - "description": "Lossless conversion dither option with no dithering applied" + "homeTitle": "ホーム", + "@homeTitle": { + "description": "Home screen title" }, - "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", - "@libraryTracksUnit": { - "description": "Unit label for tracks count (without the number itself)", - "placeholders": { - "count": { - "type": "int" - } - } + "homeSubtitle": "Paste a supported URL or search by name", + "@homeSubtitle": { + "description": "Subtitle shown below search box" }, - "folderOrganizationNone": "構成がありません", - "@folderOrganizationNone": { - "description": "Folder option - flat structure" + "homeEmptyTitle": "No search providers yet", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" }, - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" }, - "@trackConvertConfirmTitle": { - "description": "Confirmation dialog title" + "homeSupports": "サポート: トラック、アルバム、プレイリスト、アーティスト、URL", + "@homeSupports": { + "description": "Info text about supported URL types" }, - "@extensionPatternsCount": { - "description": "URL patterns count", - "placeholders": { - "count": { - "type": "int" - } - } + "homeRecent": "最近", + "@homeRecent": { + "description": "Section header for recent searches" }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" + "historyFilterAll": "すべて", + "@historyFilterAll": { + "description": "Filter chip - show all items" }, - "libraryAutoScanOff": "Off", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" + "historyFilterAlbums": "アルバム", + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" }, - "shareSheetLinkCopied": "{service} link copied", - "@shareSheetLinkCopied": { - "description": "Snackbar after copying a cross-service link", - "placeholders": { - "service": {} - } + "historyFilterSingles": "シングル", + "@historyFilterSingles": { + "description": "Filter chip - show singles only" }, - "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" + "historySearchHint": "検索履歴...", + "@historySearchHint": { + "description": "Search bar placeholder in history" }, - "@replayGainBatchConfirmMessage": { - "description": "Message of the batch ReplayGain confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsTitle": "設定", + "@settingsTitle": { + "description": "Settings screen title" }, - "@extensionsHomeFeedUse": { - "description": "Extensions page - subtitle for a specific extension home feed option", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "settingsDownload": "ダウンロード", + "@settingsDownload": { + "description": "Settings section - download options" }, - "selectionShareCount": "{count} {count, plural, =1{個のトラック} other{個のトラック}}を共有", - "@selectionShareCount": { - "description": "Share button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsAppearance": "外観", + "@settingsAppearance": { + "description": "Settings section - visual customization" }, - "@storeExtensionsCount": { - "description": "Store extension result count", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsExtensions": "拡張", + "@settingsExtensions": { + "description": "Settings section - extension management" }, - "@logSearchHint": { - "description": "Log search placeholder" + "settingsAbout": "アプリについて", + "@settingsAbout": { + "description": "Settings section - app info" }, - "@audioAnalysisSamples": { - "description": "Total samples metric label" + "downloadTitle": "ダウンロード", + "@downloadTitle": { + "description": "Download settings page title" }, - "trackCoverReplace": "Replace Cover", - "@trackCoverReplace": { - "description": "Button label for replacing selected cover art" + "downloadAskQualitySubtitle": "Show quality picker for each download", + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" }, - "@discographyAddedToQueue": { - "description": "Snackbar - tracks added from discography", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameFormat": "ファイル名の形式", + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" + "downloadSingleFilenameFormat": "Single Filename Format", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" }, - "@nowPlayingDetails": { - "description": "Menu item and section title for track metadata details" + "downloadSingleFilenameFormatDescription": "Filename pattern for singles and EPs. Uses the same tags as the album format.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" }, - "@trackGenre": { - "description": "Metadata label - music genre" + "downloadFolderOrganization": "フォルダ構成", + "@downloadFolderOrganization": { + "description": "Title of the folder organization picker bottom sheet" }, - "recentTypeSong": "曲", - "@recentTypeSong": { - "description": "Recent access item type - song/track" + "appearanceTitle": "外観", + "@appearanceTitle": { + "description": "Appearance settings page title" }, - "logShareLogs": "ログを共有", - "@logShareLogs": { - "description": "Share button tooltip" + "appearanceThemeSystem": "システム", + "@appearanceThemeSystem": { + "description": "Follow system theme" }, - "@storeFilterLyrics": { - "description": "Repo filter - lyrics providers" + "appearanceThemeLight": "ライト", + "@appearanceThemeLight": { + "description": "Light theme" }, - "extensionsInstallButton": "拡張をインストール", - "@extensionsInstallButton": { - "description": "Button to install extension from file" + "appearanceThemeDark": "ダーク", + "@appearanceThemeDark": { + "description": "Dark theme" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", - "@replayGainBatchSuccess": { - "description": "Snackbar after batch ReplayGain completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "appearanceDynamicColor": "ダイナミックカラー", + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" }, - "nowPlayingMinimize": "Minimize", - "@nowPlayingMinimize": { - "description": "Tooltip for minimizing the now playing screen" + "appearanceDynamicColorSubtitle": "壁紙の色を使用する", + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" }, - "logIssueNetworkErrorSuggestion": "Check your internet connection", - "@logIssueNetworkErrorSuggestion": { - "description": "Diagnostic badge suggestion for generic network errors" + "appearanceHistoryView": "履歴の表示", + "@appearanceHistoryView": { + "description": "Layout style for history" }, - "extensionsNoExtensions": "拡張はインストールされていません", - "@extensionsNoExtensions": { - "description": "Empty state - no extensions" + "appearanceHistoryViewList": "リスト", + "@appearanceHistoryViewList": { + "description": "List layout option" }, - "@cacheRefresh": { - "description": "Tooltip for refresh button on cache management page" + "appearanceHistoryViewGrid": "グリッド", + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" }, - "@snackbarHistoryCleared": { - "description": "Snackbar - history deleted" + "optionsPrimaryProvider": "プライマリーのプロバイダー", + "@optionsPrimaryProvider": { + "description": "Main search provider setting" }, - "cueSplitFailed": "CUE split failed", - "@cueSplitFailed": { - "description": "Snackbar when CUE split fails" + "optionsPrimaryProviderSubtitle": "Service used for searching by track or album name", + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" }, - "trackConvertLosslessSuffix": "Lossless", - "@trackConvertLosslessSuffix": { - "description": "Suffix used in converted lossless quality labels" - }, - "homeSubtitle": "Paste a supported URL or search by name", - "@homeSubtitle": { - "description": "Subtitle shown below search box" - }, - "selectionBatchConvertConfirmMessageLossless": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.", - "@selectionBatchConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless batch conversion", + "optionsUsingExtension": "拡張の使用: {extensionName}", + "@optionsUsingExtension": { + "description": "Shows active extension name", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "extensionName": { "type": "String" } } }, - "@extensionVerificationHelpMessageManual": { - "description": "Dialog message when automatic browser launch for verification fails" - }, - "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", - "@queueRateLimitMessage": { - "description": "Explanation shown on a failed queue item when the download service rate limits requests" - }, - "searchSortDateOldest": "Release Date (Oldest)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "nowPlayingShuffleOn": "Shuffle on", - "@nowPlayingShuffleOn": { - "description": "Tooltip when shuffle mode is enabled" - }, - "sectionColor": "カラー", - "@sectionColor": { - "description": "Settings section header" - }, - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "cacheCoverImage": "カバー画像のキャッシュ", - "@cacheCoverImage": { - "description": "Cache item title for persistent cover images" + "optionsDefaultSearchTab": "Default Search Tab", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" }, - "@navSettings": { - "description": "Bottom navigation - Settings tab" + "optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" }, - "@trackCoverReplaceNotice": { - "description": "Notice shown when a new cover has been selected but not saved yet" + "optionsAutoFallback": "Auto Fallback", + "@optionsAutoFallback": { + "description": "Auto-retry with other services" }, - "cueSplitConfirmTitle": "Split CUE Album", - "@cueSplitConfirmTitle": { - "description": "CUE split confirmation dialog title" + "optionsAutoFallbackSubtitle": "Try other services if download fails", + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" }, - "@trackDeleteConfirmMessage": { - "description": "Delete confirmation message" + "optionsEmbedLyrics": "歌詞を埋め込む", + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" }, - "cacheClearSuccess": "消去済み: {target}", - "@cacheClearSuccess": { - "description": "Snackbar after clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "optionsEmbedLyricsSubtitle": "Save synced lyrics alongside your downloaded tracks", + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" }, - "editMetadataFieldCover": "Cover Art", - "@editMetadataFieldCover": { - "description": "Chip label for cover art field in auto-fill selector" + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" }, - "snackbarSelectExtFile": ".spotiflac-ext ファイルを選択してください", - "@snackbarSelectExtFile": { - "description": "Snackbar - wrong file type selected" + "optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" }, - "libraryFilterFormat": "形式", - "@libraryFilterFormat": { - "description": "Filter section - file format" + "optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" }, - "@downloadLossyAac": { - "description": "Lossy format option - AAC in M4A container at 320kbps" + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "@setupNext": { - "description": "Next button text" + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "@releaseTypeSingle": { - "description": "Badge label for single releases" + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" }, - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", - "@trackConvertLosslessOutputWithCap": { - "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", "placeholders": { - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "bulkDownloadSelectPlaylists": "Select playlists to download", - "@bulkDownloadSelectPlaylists": { - "description": "Button label when no playlists are selected for download" - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "@timeJustNow": { - "description": "Relative time - less than a minute ago" - }, - "downloadLossyOpus256": "Opus 256kbps", - "@downloadLossyOpus256": { - "description": "Lossy format option - Opus 256kbps" + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" }, - "discographySinglesOnlySubtitle": "{count} tracks from {albumCount} singles", - "@discographySinglesOnlySubtitle": { - "description": "Subtitle showing singles tracks count", + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { "count": { "type": "int" - }, - "albumCount": { - "type": "int" } } }, - "optionsExtensionStore": "Extension Repo", - "@optionsExtensionStore": { - "description": "Show/hide repo tab" + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" }, - "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", - "@libraryDownloadsHistoryExcluded": { - "description": "Library count note for downloaded history items excluded from the local list", + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", "placeholders": { - "count": { + "success": { + "type": "int" + }, + "total": { "type": "int" } } }, - "@errorUrlFetchFailed": { - "description": "Error message - generic URL fetch failure" - }, - "@trackOptionAddToWishlist": { - "description": "Bottom sheet action label - add track to wishlist" + "optionsArtistTagMode": "Artist Tag Mode", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" }, - "discographySinglesOnly": "シングルと EP のみ", - "@discographySinglesOnly": { - "description": "Option - download only singles" + "optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" }, - "@downloadSongLinkRegionDesc": { - "description": "Description in SongLink region picker" + "optionsArtistTagModeJoined": "Single joined value", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" }, - "notifEmbeddingMetadata": "Embedding metadata...", - "@notifEmbeddingMetadata": { - "description": "Notification body while embedding metadata into a downloaded track" + "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" }, - "@settingsLocalLibrarySubtitle": { - "description": "Subtitle for local library settings" + "optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "@downloadLocationSubtitle": { - "description": "Subtitle shown in the download location picker sheet" + "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", + "@optionsArtistTagModeSplitVorbisSubtitle": { + "description": "Subtitle for split Vorbis artist tag mode" }, - "trackConvertOriginalQuality": "Original quality", - "@trackConvertOriginalQuality": { - "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + "optionsExtensionStore": "Extension Repo", + "@optionsExtensionStore": { + "description": "Show/hide repo tab" }, - "nowPlayingTabLyrics": "Lyrics", - "@nowPlayingTabLyrics": { - "description": "Tab label for the lyrics view" + "optionsExtensionStoreSubtitle": "Show Repo tab in navigation", + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension repo toggle" }, - "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", - "@selectionConvertCount": { - "description": "Convert button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsCheckUpdates": "更新を確認", + "@optionsCheckUpdates": { + "description": "Auto update check toggle" }, - "@extensionsInstalledSection": { - "description": "Section header - installed extensions" + "optionsCheckUpdatesSubtitle": "Notify when new version is available", + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" }, - "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is off" + "optionsUpdateChannel": "更新チャンネル", + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" }, - "nowPlayingShuffleLibrary": "Shuffle library", - "@nowPlayingShuffleLibrary": { - "description": "Button label to shuffle and play the entire local library" + "optionsUpdateChannelStable": "安定版リリースのみ", + "@optionsUpdateChannelStable": { + "description": "Only stable updates" }, - "trackReEnrichFieldCover": "Cover Art", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" + "optionsUpdateChannelPreview": "プレビューリリースを入手", + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", - "@tutorialExtensionsTip3": { - "description": "Tutorial extensions tip 3" + "optionsUpdateChannelWarning": "Preview may contain bugs or incomplete features", + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" }, - "@cacheCleanupUnusedDesc": { - "description": "Description of what cleanup unused data does" - }, - "a11yOpenAlbum": "Open album {albumName}", - "@a11yOpenAlbum": { - "description": "Accessibility label for opening an album", - "placeholders": { - "albumName": { - "type": "String" - } - } + "optionsClearHistory": "ダウンロード履歴を消去", + "@optionsClearHistory": { + "description": "Delete all download history" }, - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" + "optionsClearHistorySubtitle": "ダウンロード済みのすべてのトラックを履歴から削除", + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" }, - "nowPlayingQueueEmpty": "Queue is empty", - "@nowPlayingQueueEmpty": { - "description": "Empty state when the playback queue has no items" + "optionsDetailedLogging": "詳細ログ", + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" }, - "@settingsDownload": { - "description": "Settings section - download options" + "optionsDetailedLoggingOn": "詳細なログを記録しています", + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", - "@notifTracksDownloadedSuccess": { - "description": "Notification body for queue complete - how many tracks were downloaded", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsDetailedLoggingOff": "バグレポートを有効", + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" }, - "storeCategoryDownload": "Download", - "@storeCategoryDownload": { - "description": "Store extension category - download" + "extensionsTitle": "拡張", + "@extensionsTitle": { + "description": "Extensions page title" }, - "aboutTelegramChannel": "Telegram チャンネル", - "@aboutTelegramChannel": { - "description": "Link to Telegram channel" + "extensionsDisabled": "無効", + "@extensionsDisabled": { + "description": "Extension status - inactive" }, - "@downloadedAlbumDiscHeader": { - "description": "Header for disc separator in multi-disc albums", + "extensionsVersion": "バージョン {version}", + "@extensionsVersion": { + "description": "Extension version display", "placeholders": { - "discNumber": { - "type": "int", - "example": "1" + "version": { + "type": "String" } } }, - "@recentEmpty": { - "description": "Empty state text for recent access list" + "extensionsUninstall": "アンインストール", + "@extensionsUninstall": { + "description": "Uninstall extension button" }, - "@backupRestoreConfirmMessage": { - "description": "Confirmation dialog message before restoring a backup" + "storeTitle": "Extension Repo", + "@storeTitle": { + "description": "Repo screen title" }, - "@shareSheetCopyLink": { - "description": "Tooltip for copying a cross-service link" + "storeSearch": "拡張を検索...", + "@storeSearch": { + "description": "Repo search placeholder" }, - "regionCountryID": "Indonesia", - "@regionCountryID": { - "description": "Country name for SongLink region picker" + "storeInstall": "インストール", + "@storeInstall": { + "description": "Install extension button" }, - "@libraryInLibrary": { - "description": "Badge shown on tracks that exist in local library" + "storeInstalled": "インストール済み", + "@storeInstalled": { + "description": "Already installed badge" }, - "extensionPostProcessingHooks": "ポストプロセスフック", - "@extensionPostProcessingHooks": { - "description": "Capability - post-processing" + "storeUpdate": "更新", + "@storeUpdate": { + "description": "Update available button" }, - "@setupGrantPermission": { - "description": "Button to request permission" + "aboutTitle": "アプリについて", + "@aboutTitle": { + "description": "About page title" }, - "storeFilterDownload": "ダウンロード", - "@storeFilterDownload": { - "description": "Repo filter - download providers" + "aboutContributors": "貢献者", + "@aboutContributors": { + "description": "Section for contributors" }, - "@collectionAddToPlaylist": { - "description": "Action to add a track to user playlist" + "aboutMobileDeveloper": "モバイルバージョンの開発者", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" }, - "@discographyFailedToFetch": { - "description": "Error - some albums failed to load" + "aboutOriginalCreator": "オリジナルの SpotiFLAC の作者", + "@aboutOriginalCreator": { + "description": "Role description for original creator" }, - "@updateWhatsNew": { - "description": "Changelog section title" + "aboutLogoArtist": "美しいアプリロゴを作成した才能あるアーティストです!", + "@aboutLogoArtist": { + "description": "Role description for logo artist" }, - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" + "aboutTranslators": "翻訳者", + "@aboutTranslators": { + "description": "Section for translators" }, - "dialogDeleteSelectedTitle": "選択済みを削除", - "@dialogDeleteSelectedTitle": { - "description": "Dialog title - delete selected items" + "aboutSpecialThanks": "スペシャルサンクス", + "@aboutSpecialThanks": { + "description": "Section for special thanks" }, - "trackCoverPick": "Pick Cover", - "@trackCoverPick": { - "description": "Button label for selecting cover art" + "aboutLinks": "リンク", + "@aboutLinks": { + "description": "Section for external links" }, - "@collectionCreatePlaylist": { - "description": "Action to create a new playlist" + "aboutMobileSource": "モバイル版のソースコード", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" }, - "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", - "@selectionBatchConvertSuccess": { - "description": "Snackbar after batch conversion completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "aboutPCSource": "PC 版のソースコード", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" }, - "qualityHiResFlacMax": "ハイレゾ FLAC 最大", - "@qualityHiResFlacMax": { - "description": "Quality option - maximum resolution FLAC" + "aboutKeepAndroidOpen": "Keep Android Open", + "@aboutKeepAndroidOpen": { + "description": "Link to Keep Android Open campaign website" }, - "audioAnalysisStereo": "Stereo", - "@audioAnalysisStereo": { - "description": "Audio channel layout label - stereo" + "aboutReportIssue": "問題を報告する", + "@aboutReportIssue": { + "description": "Link to report bugs" }, - "backupExportButton": "Create backup file", - "@backupExportButton": { - "description": "Button to create and share a backup file" + "aboutReportIssueSubtitle": "問題が発生した場合に報告してください", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" }, - "settingsApp": "App", - "@settingsApp": { - "description": "Settings menu item - app settings" + "aboutFeatureRequest": "機能の要望", + "@aboutFeatureRequest": { + "description": "Link to suggest features" }, - "clickableInformationUnavailable": "{type} information not available", - "@clickableInformationUnavailable": { - "description": "Snackbar shown when clickable metadata cannot open a destination", - "placeholders": { - "type": { - "type": "String" - } - } + "aboutFeatureRequestSubtitle": "アプリの新機能を提案する", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" }, - "@logFilterLevel": { - "description": "Filter by log level" + "aboutTelegramChannel": "Telegram チャンネル", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" }, - "sectionTheme": "テーマ", - "@sectionTheme": { - "description": "Settings section header" + "aboutTelegramChannelSubtitle": "お知らせと更新", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" }, - "@extensionActionFailed": { - "description": "Fallback error when an extension action fails without details" + "aboutTelegramChat": "Telegram コミュニティ", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" }, - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + "aboutTelegramChatSubtitle": "その他のユーザーとチャット", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" }, - "@extensionsNoCustomSearch": { - "description": "Empty state - no search providers" + "aboutSocial": "ソーシャル", + "@aboutSocial": { + "description": "Section for social links" }, - "@collectionPlaylistRemoveCover": { - "description": "Bottom sheet action to remove custom cover image from a playlist" + "aboutApp": "アプリ", + "@aboutApp": { + "description": "Section for app info" }, - "@tutorialWelcomeDesc": { - "description": "Tutorial welcome page description" + "aboutVersion": "バージョン", + "@aboutVersion": { + "description": "Version info label" }, - "@tutorialSearchDesc": { - "description": "Tutorial search page description" + "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" }, - "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", - "@collectionAddedToWishlist": { - "description": "Snackbar after adding track to wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } + "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" }, - "logAffectedDomains": "Affected: {domains}", - "@logAffectedDomains": { - "description": "Affected domains in log issue analysis", - "placeholders": { - "domains": { - "type": "String" - } - } + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" }, - "@folderOrganizationByArtistSubtitle": { - "description": "Subtitle for artist folder option" + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" }, - "errorNoTracksFound": "トラックがありません", - "@errorNoTracksFound": { - "description": "Error - search returned no results" + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" }, - "providerPriorityTitle": "プロバイダーの優先度", - "@providerPriorityTitle": { - "description": "Provider priority page title" + "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", + "@aboutAppDescription": { + "description": "App description in header card" }, - "@notifUpdateReadyBody": { - "description": "Notification body when app update is ready to install", + "artistAlbums": "アルバム", + "@artistAlbums": { + "description": "Section header for artist albums" + }, + "artistSingles": "シングルと EP", + "@artistSingles": { + "description": "Section header for singles/EPs" + }, + "artistCompilations": "コンピレーション", + "@artistCompilations": { + "description": "Section header for compilations" + }, + "artistPopular": "人気", + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, + "artistMonthlyListeners": "{count} 人の月間リスナー", + "@artistMonthlyListeners": { + "description": "Monthly listener count display", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "String", + "description": "Formatted listener count" } } }, - "@settingsExtensions": { - "description": "Settings section - extension management" + "trackMetadataService": "サービス", + "@trackMetadataService": { + "description": "Metadata field - download service used" }, - "trackDeleteConfirmTitle": "デバイスから削除しますか?", - "@trackDeleteConfirmTitle": { - "description": "Delete confirmation title" + "trackMetadataPlay": "再生", + "@trackMetadataPlay": { + "description": "Action button - play track" }, - "@settingsDownloadNetwork": { - "description": "Setting for network type preference" + "trackMetadataShare": "共有", + "@trackMetadataShare": { + "description": "Action button - share track" }, - "downloadProvidersNoneEnabled": "No providers enabled", - "@downloadProvidersNoneEnabled": { - "description": "Shown when no lyrics providers are active" + "trackMetadataDelete": "削除", + "@trackMetadataDelete": { + "description": "Action button - delete track" }, - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" + "setupGrantPermission": "権限を許可", + "@setupGrantPermission": { + "description": "Button to request permission" }, - "trackReEnrichFieldBasicTags": "Album, Album Artist", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + "setupSkip": "今はスキップ", + "@setupSkip": { + "description": "Skip current step button" }, - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" + "setupStorageAccessRequired": "ストレージアクセスが必要です", + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" }, - "@logClearLogsTitle": { - "description": "Clear logs dialog title" + "setupStorageAccessMessageAndroid11": "Android 11+ requires \"All files access\" permission to save files to your chosen download folder.", + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" }, - "storageModeSafSubtitle": "Pick any folder, including SD card", - "@storageModeSafSubtitle": { - "description": "Subtitle for SAF storage mode" + "setupOpenSettings": "設定を開く", + "@setupOpenSettings": { + "description": "Button to open system settings" }, - "@notifUpdateProgress": { - "description": "Notification body showing update download progress", + "setupPermissionDeniedMessage": "Permission denied. Please grant all permissions to continue.", + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, + "setupPermissionRequired": "{permissionType} の権限が必要です", + "@setupPermissionRequired": { + "description": "Generic permission required title", "placeholders": { - "received": { - "type": "String" - }, - "total": { - "type": "String" - }, - "percentage": { - "type": "int" + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" } } }, - "downloadUsePrimaryArtistOnlyEnabled": "Featured artists removed from folder name (e.g. Justin Bieber, Quavo → Justin Bieber)", - "@downloadUsePrimaryArtistOnlyEnabled": { - "description": "Subtitle when primary artist only is enabled" - }, - "notifScanningLibrary": "Scanning local library", - "@notifScanningLibrary": { - "description": "Notification title while scanning local library" - }, - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "setupGetStarted": "Get Started", - "@setupGetStarted": { - "description": "Final setup button" - }, - "libraryFilterQualityCD": "CD (16bit)", - "@libraryFilterQualityCD": { - "description": "Filter option - CD quality audio" - }, - "sectionLayout": "レイアウト", - "@sectionLayout": { - "description": "Settings section header" - }, - "@tooltipLoveAll": { - "description": "Tooltip for the Love All button on album/playlist screens" - }, - "queueFinalizingDownload": "Finalizing download", - "@queueFinalizingDownload": { - "description": "Accessibility label for a queue item that is finalizing" - }, - "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", - "@trackConvertActionLabelLossy": { - "description": "Convert button label for lossy conversion", + "setupPermissionRequiredMessage": "最適な体験を得るには {permissionType} の権限が必要です。この権限は設定で後から変更できます。", + "@setupPermissionRequiredMessage": { + "description": "Generic permission required message", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { + "permissionType": { "type": "String" } } }, - "extensionsMetadataPriority": "メタデータの優先度", - "@extensionsMetadataPriority": { - "description": "Setting - metadata provider order" + "setupUseDefaultFolder": "デフォルトのフォルダを使用しますか?", + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" }, - "updateCurrent": "現在", - "@updateCurrent": { - "description": "Label for current version" + "setupNoFolderSelected": "No folder selected. Would you like to use the default Music folder?", + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" }, - "@aboutFeatureRequest": { - "description": "Link to suggest features" + "setupUseDefault": "デフォルトを使用する", + "@setupUseDefault": { + "description": "Button to use default folder" }, - "@safMigrationSuccess": { - "description": "Snackbar after successfully migrating to SAF" + "setupDownloadLocationTitle": "ダウンロード先", + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" }, - "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", - "@cleanupOrphanedDownloadsNone": { - "description": "Snackbar when no orphans found" + "setupDownloadLocationIosMessage": "On iOS, downloads are saved to the app's Documents folder. You can access them via the Files app.", + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", - "@lyricsProviderNeteaseDesc": { - "description": "Description for Netease provider" + "setupAppDocumentsFolder": "アプリのドキュメントフォルダ", + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" }, - "libraryScanCancelledSubtitle": "You can retry the scan when ready.", - "@libraryScanCancelledSubtitle": { - "description": "Library scan status subtitle after cancellation" + "setupAppDocumentsFolderSubtitle": "Recommended - accessible via Files app", + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" }, - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" + "setupChooseFromFiles": "ファイルから選択", + "@setupChooseFromFiles": { + "description": "iOS file picker option" }, - "@trackAlbum": { - "description": "Metadata label - album name" + "setupChooseFromFilesSubtitle": "iCloud またはその他の場所を選択", + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" }, - "dialogDeleteSelectedMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from history?\n\nThis will also delete the files from storage.", - "@dialogDeleteSelectedMessage": { - "description": "Dialog message - delete selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "setupIosEmptyFolderWarning": "iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" }, - "trackReEnrich": "Re-enrich", - "@trackReEnrich": { - "description": "Menu action - re-embed metadata into audio file" + "setupIcloudNotSupported": "iCloud Drive is not supported. Please use the app Documents folder.", + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" }, - "@lyricsProvidersSaved": { - "description": "Snackbar after saving lyrics provider priority" + "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "@setupDownloadInFlac": { + "description": "App tagline in setup" }, - "@storageModeSaf": { - "description": "Storage mode option - Storage Access Framework" + "setupStorageGranted": "ストレージの権限が許可されました!", + "@setupStorageGranted": { + "description": "Success message for storage permission" }, - "libraryStorageAccessRequired": "ストレージアクセスが必要です", - "@libraryStorageAccessRequired": { - "description": "Dialog title for storage permission" + "setupStorageRequired": "ストレージの権限が必要です", + "@setupStorageRequired": { + "description": "Title when storage permission needed" }, - "@cacheClearAllConfirmTitle": { - "description": "Dialog title before clearing all caches" + "setupStorageDescription": "SpotiFLAC はダウンロードした音楽ファイルを保存するためにストレージの権限が必要です。", + "@setupStorageDescription": { + "description": "Explanation for storage permission" }, - "@unknownArtist": { - "description": "Fallback artist name when metadata is missing" + "setupNotificationGranted": "通知の権限が許可されました!", + "@setupNotificationGranted": { + "description": "Success message for notification permission" }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist folder is enabled" + "setupNotificationEnable": "通知を有効化する", + "@setupNotificationEnable": { + "description": "Button to enable notifications" }, - "dialogClearHistoryMessage": "Are you sure you want to clear all download history? This cannot be undone.", - "@dialogClearHistoryMessage": { - "description": "Dialog message - clear history confirmation" + "setupFolderChoose": "ダウンロードフォルダを選択", + "@setupFolderChoose": { + "description": "Button to choose folder" }, - "@sectionData": { - "description": "Settings section header" + "setupFolderDescription": "Select a folder where your downloaded music will be saved.", + "@setupFolderDescription": { + "description": "Explanation for folder selection" }, - "audioAnalysisRms": "RMS", - "@audioAnalysisRms": { - "description": "RMS level metric label" + "setupSelectFolder": "フォルダを選択", + "@setupSelectFolder": { + "description": "Button to select folder" }, - "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", - "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is on" + "setupEnableNotifications": "通知を有効化する", + "@setupEnableNotifications": { + "description": "Button to enable notifications" }, - "timeJustNow": "Just now", - "@extensionCustomUrlHandlingShareHint": { - "description": "Extension detail hint explaining share-to-app URL handling" + "setupNotificationBackgroundDescription": "Get notified about download progress and completion. This helps you track downloads when the app is in background.", + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" }, - "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", - "@cleanupOrphanedDownloads": { - "description": "Button to remove history entries for deleted files" + "setupSkipForNow": "今はスキップ", + "@setupSkipForNow": { + "description": "Skip button text" }, - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" + "setupNext": "次へ", + "@setupNext": { + "description": "Next button text" }, - "@tutorialWelcomeTitle": { - "description": "Tutorial welcome page title" + "setupGetStarted": "Get Started", + "@setupGetStarted": { + "description": "Final setup button" }, - "collectionFavoriteArtists": "Favorite Artists", - "audioAnalysisRescanning": "Re-analyzing audio...", - "@audioAnalysisRescanning": { - "description": "Loading text while audio is being re-analyzed after an explicit refresh" + "setupAllowAccessToManageFiles": "Please enable \"Allow access to manage all files\" in the next screen.", + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" }, - "logTitle": "ログ", - "@logTitle": { - "description": "Logs screen title" + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" }, - "@regionCountryGB": { - "description": "Country name for SongLink region picker" + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" }, - "@progressFetchingMetadata": { - "description": "Progress indicator - loading track info", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" }, - "aboutLogoArtist": "美しいアプリロゴを作成した才能あるアーティストです!", - "@aboutLogoArtist": { - "description": "Role description for logo artist" + "dialogCancel": "キャンセル", + "@dialogCancel": { + "description": "Dialog button - cancel action" }, - "channelPreview": "プレビュー", - "@channelPreview": { - "description": "Update channel - beta/preview releases" + "dialogSave": "保存", + "@dialogSave": { + "description": "Dialog button - save changes" }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", - "@collectionPlaylistsDeleted": { - "description": "Snackbar after deleting selected playlists", + "dialogDelete": "削除", + "@dialogDelete": { + "description": "Dialog button - delete item" + }, + "dialogRetry": "再試行", + "@dialogRetry": { + "description": "Dialog button - retry action" + }, + "dialogClear": "消去", + "@dialogClear": { + "description": "Dialog button - clear items" + }, + "dialogDone": "完了", + "@dialogDone": { + "description": "Dialog button - action completed" + }, + "dialogImport": "インポート", + "@dialogImport": { + "description": "Dialog button - import data" + }, + "dialogDownload": "Download", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, + "previewPlay": "Play preview", + "@previewPlay": { + "description": "Tooltip for the button that plays a short track preview snippet" + }, + "previewStop": "Stop preview", + "@previewStop": { + "description": "Tooltip for the button that stops the playing track preview snippet" + }, + "previewUnavailable": "Preview unavailable", + "@previewUnavailable": { + "description": "Snackbar shown when a track preview snippet cannot be played" + }, + "dialogDiscard": "破棄", + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, + "dialogRemove": "削除", + "@dialogRemove": { + "description": "Dialog button - remove item" + }, + "dialogUninstall": "アンインストール", + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, + "dialogDiscardChanges": "変更を破棄しますか?", + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, + "dialogUnsavedChanges": "You have unsaved changes. Do you want to discard them?", + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, + "dialogClearAll": "すべて消去", + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, + "dialogRemoveExtension": "拡張を削除", + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogRemoveExtensionMessage": "Are you sure you want to remove this extension? This cannot be undone.", + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, + "dialogUninstallExtension": "拡張をアンインストールしますか?", + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogUninstallExtensionMessage": "Are you sure you want to remove {extensionName}?", + "@dialogUninstallExtensionMessage": { + "description": "Dialog message - uninstall specific extension", "placeholders": { - "count": { - "type": "int" + "extensionName": { + "type": "String" } } }, - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" + "dialogClearHistoryTitle": "履歴を消去", + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" }, - "homeTitle": "ホーム", - "@homeTitle": { - "description": "Home screen title" + "dialogClearHistoryMessage": "Are you sure you want to clear all download history? This cannot be undone.", + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" }, - "extensionMinAppVersion": "最小のアプリバージョン", - "@extensionMinAppVersion": { - "description": "Extension detail - minimum app version" + "dialogDeleteSelectedTitle": "選択済みを削除", + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", - "@backupContentsLiked": { - "description": "Backup contents row for liked tracks count", + "dialogDeleteSelectedMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from history?\n\nThis will also delete the files from storage.", + "@dialogDeleteSelectedMessage": { + "description": "Dialog message - delete selected tracks", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" + "dialogImportPlaylistTitle": "プレイリストをインポート", + "@dialogImportPlaylistTitle": { + "description": "Dialog title - import CSV playlist" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", - "@notifDownloadsCanceledBody": { - "description": "Notification body when downloads are canceled by the user", + "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", + "csvImportTracks": "{count} tracks from CSV", + "@csvImportTracks": { + "description": "Label shown in quality picker for CSV import", "placeholders": { "count": { "type": "int" } } }, - "@dialogRetry": { - "description": "Dialog button - retry action" - }, - "@homeChangeSearchProviderTooltip": { - "description": "Tooltip for the Home search provider picker" - }, - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" + "collectionExportM3u": "Export as M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" }, - "@trackReEnrichSuccessWithFailures": { - "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "collectionExportM3uDone": "Exported {exported} of {total} tracks", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { - "successCount": { + "exported": { "type": "int" }, "total": { "type": "int" - }, - "failedCount": { - "type": "int" } } }, - "previewUnavailable": "Preview unavailable", - "@previewUnavailable": { - "description": "Snackbar shown when a track preview snippet cannot be played" - }, - "nowPlayingTabPlayer": "Player", - "@nowPlayingTabPlayer": { - "description": "Tab label for the player view" + "collectionExportM3uNone": "No downloaded files to export", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "@backupContentsPlaylists": { - "description": "Backup contents row for playlist count", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionExportM3uFailed": "Export failed", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "libraryLastScannedNever": "Never", - "@libraryLastScannedNever": { - "description": "Shown when library has never been scanned" + "trackOpenOn": "Open on...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" }, - "trackTrackNumber": "トラック番号", - "@trackTrackNumber": { - "description": "Metadata label - track number" + "trackOpenOnNoLinks": "No platform links found for this track.", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" }, - "trackReplayGainScanning": "Analyzing loudness...", - "@trackReplayGainScanning": { - "description": "Snackbar/progress message while scanning ReplayGain for a single track" + "libraryReviewDuplicates": "Review duplicates", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" }, - "downloadLossyMp3": "MP3 320kbps", - "@downloadLossyMp3": { - "description": "Lossy format option - MP3 320kbps" + "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" }, - "@albumFolderArtistAlbumSingles": { - "description": "Album folder option with singles inside artist" + "duplicatesTitle": "Duplicates", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" }, - "@extensionHealthNotConfigured": { - "description": "Extension service health status - not configured" + "duplicatesEmpty": "No duplicate tracks found.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" }, - "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is off" + "duplicatesKeepBest": "Keep best", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting to create a subfolder per playlist source" + "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", + "placeholders": { + "count": { + "type": "int" + }, + "trackName": { + "type": "String" + } + } }, - "@trackReleaseDate": { - "description": "Metadata label - release date" + "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "aboutContributors": "貢献者", - "@aboutContributors": { - "description": "Section for contributors" + "@dialogImportPlaylistMessage": { + "description": "Dialog message - import playlist confirmation", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@audioAnalysisMono": { - "description": "Audio channel layout label - mono" + "snackbarAddedToQueue": "「{trackName}」をキューに追加しました", + "@snackbarAddedToQueue": { + "description": "Snackbar - track added to download queue", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@audioAnalysisNyquist": { - "description": "Nyquist frequency metric label" + "snackbarAddedTracksToQueue": "{count} 個のトラックをキューに追加しました", + "@snackbarAddedTracksToQueue": { + "description": "Snackbar - multiple tracks added to queue", + "placeholders": { + "count": { + "type": "int" + } + } }, - "permissionStorage": "Storage", - "@permissionStorage": { - "description": "Storage permission type label" + "snackbarAlreadyDownloaded": "「{trackName}」は既にダウンロードされています", + "@snackbarAlreadyDownloaded": { + "description": "Snackbar - track already exists", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "permissionAudio": "Audio", - "@permissionAudio": { - "description": "Audio permission type label" + "snackbarAlreadyInLibrary": "\"{trackName}\" already exists in your library", + "@snackbarAlreadyInLibrary": { + "description": "Snackbar - track already exists in local library", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@libraryScanSubtitle": { - "description": "Subtitle for scan button" + "snackbarHistoryCleared": "履歴を消去しました", + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" }, - "@snackbarUnsupportedAudioFormat": { - "description": "Snackbar when the audio format is not supported for the requested operation" + "snackbarDeletedTracks": "{count} {count, plural, =1{個のトラック} other{個のトラック}}を削除", + "@snackbarDeletedTracks": { + "description": "Snackbar - tracks deleted", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@notifLibraryScanStopped": { - "description": "Notification body when library scan is cancelled" + "snackbarCannotOpenFile": "ファイルが開けません: {error}", + "@snackbarCannotOpenFile": { + "description": "Snackbar - file open error", + "placeholders": { + "error": { + "type": "String" + } + } }, - "@downloadMusixmatchAuto": { - "description": "Button to clear Musixmatch language (use auto)" + "snackbarViewQueue": "キューを表示", + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, - "@trackLyricsTimeout": { - "description": "Message when lyrics request times out" + "snackbarUrlCopied": "{platform} の URL をクリップボードにコピーしました", + "@snackbarUrlCopied": { + "description": "Snackbar - URL copied", + "placeholders": { + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } + } }, - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" + "snackbarFileNotFound": "ファイルがありません", + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" }, - "@regionCountryXK": { - "description": "Country name for SongLink region picker" + "snackbarSelectExtFile": ".spotiflac-ext ファイルを選択してください", + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" }, - "aboutTelegramChatSubtitle": "その他のユーザーとチャット", - "@aboutTelegramChatSubtitle": { - "description": "Subtitle for Telegram chat" + "snackbarProviderPrioritySaved": "プロバイダーの優先度を保存しました", + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" }, - "selectionAllPlaylistsSelected": "All playlists selected", - "@selectionAllPlaylistsSelected": { - "description": "Shown when all playlists are selected in selection mode" + "snackbarMetadataProviderSaved": "メタデータプロバイダーの優先度を保存しました", + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" }, - "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", - "@cacheTrackLookupDesc": { - "description": "Description of what track lookup cache contains" + "snackbarExtensionInstalled": "{extensionName} をインストールしました。", + "@snackbarExtensionInstalled": { + "description": "Snackbar - extension installed successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@unknownAlbum": { - "description": "Fallback album name when metadata is missing" + "snackbarExtensionUpdated": "{extensionName} を更新しました。", + "@snackbarExtensionUpdated": { + "description": "Snackbar - extension updated successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@extensionsErrorLoading": { - "description": "Error message when extension fails to load" + "snackbarFailedToInstall": "拡張のインストールに失敗しました", + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" }, - "@cacheTitle": { - "description": "Cache management page title" + "snackbarFailedToUpdate": "拡張の更新に失敗しました", + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" }, - "@downloadFilenameFormat": { - "description": "Setting for output filename pattern" + "errorRateLimited": "レート制限", + "@errorRateLimited": { + "description": "Error title - too many requests" + }, + "errorRateLimitedMessage": "Too many requests. Please wait a moment before searching again.", + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" + }, + "errorNoTracksFound": "トラックがありません", + "@errorNoTracksFound": { + "description": "Error - search returned no results" + }, + "searchEmptyResultSubtitle": "Try another keyword", + "@searchEmptyResultSubtitle": { + "description": "Subtitle shown under the empty search result state on the home screen" }, "errorUrlNotRecognized": "Link not recognized", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when album artist is used for folder names" + "errorUrlNotRecognizedMessage": "This link is not supported. Make sure the URL is correct and a compatible extension is installed.", + "@errorUrlNotRecognizedMessage": { + "description": "Error message - URL not recognized explanation" }, - "@qualityFlacLossless": { - "description": "Quality option - CD quality FLAC" + "errorUrlFetchFailed": "Failed to load content from this link. Please try again.", + "@errorUrlFetchFailed": { + "description": "Error message - generic URL fetch failure" }, - "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", - "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is on" + "errorMissingExtensionSource": "{item} を読み込めません: 拡張ソースがありません", + "@errorMissingExtensionSource": { + "description": "Error - extension source not available", + "placeholders": { + "item": { + "type": "String" + } + } }, - "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", - "@collectionLovedEmptySubtitle": { - "description": "Loved empty state subtitle" + "actionPause": "一時停止", + "@actionPause": { + "description": "Action button - pause download" }, - "@libraryBuiltInPlayerInfo": { - "description": "Info note explaining the built-in player is for previews only" + "actionResume": "再開", + "@actionResume": { + "description": "Action button - resume download" }, - "@notifLibraryScanProgressNoTotal": { - "description": "Notification body for library scan progress when total is unknown", + "actionCancel": "キャンセル", + "@actionCancel": { + "description": "Action button - cancel operation" + }, + "actionSelectAll": "すべて選択", + "@actionSelectAll": { + "description": "Action button - select all items" + }, + "actionDeselect": "選択を解除", + "@actionDeselect": { + "description": "Action button - deselect all" + }, + "selectionSelected": "{count} 個を選択済み", + "@selectionSelected": { + "description": "Selection count indicator", "placeholders": { - "scanned": { - "type": "int" - }, - "percentage": { + "count": { "type": "int" } } }, - "@tutorialSearchTitle": { - "description": "Tutorial search page title" + "selectionAllSelected": "すべてのトラックを選択済み", + "@selectionAllSelected": { + "description": "Status - all items selected" }, - "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", - "@a11yTrackByArtist": { - "description": "Accessibility label for a queue or list track item", + "selectionSelectToDelete": "トラックを選択で削除", + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "progressFetchingMetadata": "メタデータを取得中... {current}/{total}", + "@progressFetchingMetadata": { + "description": "Progress indicator - loading track info", "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "libraryFilterMetadataMissingLabel": "Missing label", - "@libraryFilterMetadataMissingLabel": { - "description": "Filter option - items missing record label" - }, - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "trackMetadata": "メタデータ", - "@trackMetadata": { - "description": "Tab title - track metadata" + "progressReadingCsv": "CSV を読み取り中...", + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" }, - "trackOptionRemoveFromLoved": "Remove from Loved", - "@trackOptionRemoveFromLoved": { - "description": "Bottom sheet action label - remove track from loved folder" + "searchSongs": "曲", + "@searchSongs": { + "description": "Search result category - songs" }, - "@aboutTelegramChat": { - "description": "Link to Telegram chat group" + "searchArtists": "アーティスト", + "@searchArtists": { + "description": "Search result category - artists" }, - "@trackCopiedToClipboard": { - "description": "Snackbar - content copied" + "searchAlbums": "アルバム", + "@searchAlbums": { + "description": "Search result category - albums" }, - "aboutKeepAndroidOpen": "Keep Android Open", - "@aboutKeepAndroidOpen": { - "description": "Link to Keep Android Open campaign website" + "searchPlaylists": "プレイリスト", + "@searchPlaylists": { + "description": "Search result category - playlists" }, - "@lyricsProvidersDisabledSection": { - "description": "Section header for disabled providers", - "placeholders": { - "count": { - "type": "int" - } - } + "searchSortTitle": "Sort Results", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" }, - "@downloadAllowLocalNetwork": { - "description": "Setting title for allowing requests to private/local network targets" + "searchSortDefault": "Default", + "@searchSortDefault": { + "description": "Sort option - default API order" }, - "@openInOtherServices": { - "description": "Title and tooltip for finding the current collection in other services" + "searchSortTitleAZ": "Title (A-Z)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" }, - "@extensionVerificationBrowserInApp": { - "description": "Chip label for in-app browser verification mode" + "searchSortTitleZA": "Title (Z-A)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" }, - "sectionSearchSource": "検索ソース", - "@sectionSearchSource": { - "description": "Settings section header" + "searchSortArtistAZ": "Artist (A-Z)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" }, - "allFilesAccess": "すべてのファイルへのアクセス", - "@allFilesAccess": { - "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + "searchSortArtistZA": "Artist (Z-A)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } + "searchSortDurationShort": "Duration (Shortest)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" }, - "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", - "@snackbarFailedToEmbedLyrics": { - "description": "Snackbar when lyrics embedding fails" + "searchSortDurationLong": "Duration (Longest)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" }, - "@lyricsProviderMusixmatchDesc": { - "description": "Description for Musixmatch provider" + "searchSortDateOldest": "Release Date (Oldest)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" }, - "queueRateLimitTitle": "Service rate limited", - "@queueRateLimitTitle": { - "description": "Title shown on a failed queue item when the download service rate limits requests" + "searchSortDateNewest": "Release Date (Newest)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" }, - "@notifDownloadComplete": { - "description": "Notification title when a single download is complete" + "tooltipPlay": "再生", + "@tooltipPlay": { + "description": "Tooltip - play button" }, - "@homeSupports": { - "description": "Info text about supported URL types" + "filenameFormat": "ファイル名の形式", + "@filenameFormat": { + "description": "Setting title - filename pattern" }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" + "filenameShowAdvancedTags": "高度なタグを表示", + "@filenameShowAdvancedTags": { + "description": "Toggle label for showing advanced filename tags" }, - "@lyricsModeEmbedSubtitle": { - "description": "Subtitle for embed option" + "filenameShowAdvancedTagsDescription": "Enable formatted tags for track padding and date patterns", + "@filenameShowAdvancedTagsDescription": { + "description": "Description for advanced filename tag toggle" }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" + "folderOrganizationNone": "構成がありません", + "@folderOrganizationNone": { + "description": "Folder option - flat structure" }, - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" + "folderOrganizationByPlaylist": "By Playlist", + "@folderOrganizationByPlaylist": { + "description": "Folder option - playlist folders" }, - "@trackArtist": { - "description": "Metadata label - artist name" + "folderOrganizationByPlaylistSubtitle": "Separate folder for each playlist", + "@folderOrganizationByPlaylistSubtitle": { + "description": "Subtitle for playlist folder option" }, - "cacheCoverImageDesc": "Downloaded album and track cover art. Will re-download when viewed.", - "@cacheCoverImageDesc": { - "description": "Description of what cover image cache contains" + "folderOrganizationByArtist": "アーティスト別", + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" }, - "queueClearAll": "すべて消去", - "@queueClearAll": { - "description": "Button - clear all queue items" + "folderOrganizationByAlbum": "アルバム別", + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" }, - "downloadUsePrimaryArtistOnlyDisabled": "Full artist string used for folder name", - "@downloadUsePrimaryArtistOnlyDisabled": { - "description": "Subtitle when primary artist only is disabled" + "folderOrganizationByArtistAlbum": "アーティスト/アルバム", + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" }, - "backupImportSectionTitle": "Restore backup", - "@backupImportSectionTitle": { - "description": "Section title for the import/restore card" + "folderOrganizationDescription": "ダウンロードしたファイルをフォルダに整理する", + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" }, - "@downloadMusixmatchLanguageHint": { - "description": "Placeholder for Musixmatch language input" + "folderOrganizationNoneSubtitle": "ダウンロードフォルダ内のすべてのファイル", + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" }, - "collectionRemoveFromFolder": "フォルダから削除", - "@collectionRemoveFromFolder": { - "description": "Tooltip for removing track from wishlist/loved folder" + "folderOrganizationByArtistSubtitle": "Separate folder for each artist", + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" }, - "storeFilterMetadata": "メタデータ", - "@storeFilterMetadata": { - "description": "Repo filter - metadata providers" + "folderOrganizationByAlbumSubtitle": "Separate folder for each album", + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" }, - "shareSheetCopyLink": "Copy Link", - "errorRateLimitedMessage": "Too many requests. Please wait a moment before searching again.", - "@errorRateLimitedMessage": { - "description": "Error message - rate limit explanation" + "folderOrganizationByArtistAlbumSubtitle": "Nested folders for artist and album", + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" }, - "libraryFilterSortGenreDesc": "Genre (Z-A)", - "@libraryFilterSortGenreDesc": { - "description": "Sort option - genre descending" + "updateAvailable": "更新が利用可能です", + "@updateAvailable": { + "description": "Update dialog title" }, - "trackFileNotFound": "ファイルがありません", - "@trackFileNotFound": { - "description": "Error - file doesn't exist" + "updateLater": "後で", + "@updateLater": { + "description": "Update button - dismiss" }, - "@queueEmptySinglesSubtitle": { - "description": "Empty state subtitle for single track downloads" + "updateStartingDownload": "ダウンロードを開始中...", + "@updateStartingDownload": { + "description": "Update status - initializing" }, - "@queueDownloadStarting": { - "description": "Queue status before download progress is available" + "updateDownloadFailed": "ダウンロードに失敗しました", + "@updateDownloadFailed": { + "description": "Update error title" }, - "metadataProviderPriorityInfo": "Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.", - "@metadataProviderPriorityInfo": { - "description": "Info tip about rate limits" + "updateFailedMessage": "更新のダウンロードに失敗しました", + "@updateFailedMessage": { + "description": "Update error message" }, - "aboutPCSource": "PC 版のソースコード", - "@aboutPCSource": { - "description": "Link to PC GitHub repo" + "updateNewVersionReady": "新しいバージョンの準備ができています", + "@updateNewVersionReady": { + "description": "Update subtitle" }, - "editMetadataAutoFill": "Auto-fill from online", - "@editMetadataAutoFill": { - "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + "updateRequiredTitle": "Update required", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "snackbarDeletedTracks": "{count} {count, plural, =1{個のトラック} other{個のトラック}}を削除", - "@snackbarDeletedTracks": { - "description": "Snackbar - tracks deleted", + "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { "count": { "type": "int" } } }, - "@extensionHealthServiceDegraded": { - "description": "Tooltip for degraded extension service" + "updateCurrent": "現在", + "@updateCurrent": { + "description": "Label for current version" }, - "lyricsProviderLrclibDesc": "Open-source synced lyrics database", - "@lyricsProviderLrclibDesc": { - "description": "Description for LRCLIB provider" + "updateNew": "新着", + "@updateNew": { + "description": "Label for new version" }, - "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", - "@downloadMusixmatchLanguageDesc": { - "description": "Description in Musixmatch language picker" + "updateDownloading": "ダウンロード中...", + "@updateDownloading": { + "description": "Update status - downloading" }, - "@optionsEmbedMetadataSubtitleOn": { - "description": "Subtitle when metadata embedding is enabled" - }, - "@setupSkipForNow": { - "description": "Skip button text" - }, - "@a11ySelectTrack": { - "description": "Accessibility label for selecting a track" - }, - "@folderOrganizationByAlbumSubtitle": { - "description": "Subtitle for album folder option" - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@extensionVerificationBrowserTitle": { - "description": "Settings option title for extension verification browser preference" + "updateWhatsNew": "新着情報", + "@updateWhatsNew": { + "description": "Changelog section title" }, - "@backupContentsExtensions": { - "description": "Backup contents row for installed extensions count", - "placeholders": { - "count": { - "type": "int" - } - } + "updateDownloadInstall": "ダウンロードとインストール", + "@updateDownloadInstall": { + "description": "Update button - download and install" }, - "snackbarUrlCopied": "{platform} の URL をクリップボードにコピーしました", - "@snackbarUrlCopied": { - "description": "Snackbar - URL copied", - "placeholders": { - "platform": { - "type": "String", - "description": "Platform name (Spotify/Deezer)" - } - } + "updateDontRemind": "通知しない", + "@updateDontRemind": { + "description": "Update button - skip this version" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", - "@aboutBinimumDesc": { - "description": "Credit description for binimum" + "providerPriorityTitle": "プロバイダーの優先度", + "@providerPriorityTitle": { + "description": "Provider priority page title" }, - "discographyFetchingAlbum": "Fetching {current} of {total}...", - "@discographyFetchingAlbum": { - "description": "Progress - fetching specific album", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "providerPriorityDescription": "Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.", + "@providerPriorityDescription": { + "description": "Provider priority page description" }, - "logAutoScrollOn": "Auto-scroll ON", - "@logAutoScrollOn": { - "description": "Tooltip when auto-scroll is enabled on the log screen" + "providerPriorityInfo": "If a track is not available on the first provider, the app will automatically try the next one.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" }, - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" + "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" }, - "@regionCountryBR": { - "description": "Country name for SongLink region picker" + "providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" }, - "@lyricsProvidersTitle": { - "description": "Settings item title for lyrics provider order" + "providerExtension": "拡張", + "@providerExtension": { + "description": "Label for extension-provided providers" }, - "trackMetadataService": "サービス", - "@trackMetadataService": { - "description": "Metadata field - download service used" + "metadataProviderPriorityTitle": "メタデータの優先度", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" }, - "discographyAddedToQueue": "Added {count} tracks to queue", - "cueSplitTrackCount": "{count} tracks", - "@cueSplitTrackCount": { - "description": "Number of tracks in CUE sheet", - "placeholders": { - "count": { - "type": "int" - } - } + "metadataProviderPriorityDescription": "Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" }, - "dialogImportPlaylistTitle": "プレイリストをインポート", - "@dialogImportPlaylistTitle": { - "description": "Dialog title - import CSV playlist" + "metadataProviderPriorityInfo": "Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" }, - "@cleanupOrphanedDownloadsSubtitle": { - "description": "Subtitle for orphaned cleanup button" + "logTitle": "ログ", + "@logTitle": { + "description": "Logs screen title" }, - "settingsLocalLibrary": "ローカルライブラリ", - "@settingsLocalLibrary": { - "description": "Settings menu item - local library" + "logCopied": "ログをクリップボードにコピーしました", + "@logCopied": { + "description": "Snackbar - logs copied" }, - "@metadataSaveFailedStorage": { - "description": "Snackbar error when writing metadata file back to storage fails" + "logSearchHint": "ログを検索...", + "@logSearchHint": { + "description": "Log search placeholder" }, - "logCopyLogs": "Copy logs", - "@logCopyLogs": { - "description": "Tooltip for copying logs" + "logFilterLevel": "レベル", + "@logFilterLevel": { + "description": "Filter by log level" }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", - "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for WiFi-only option in picker" + "logFilterSection": "フィルター", + "@logFilterSection": { + "description": "Filter section title" }, - "@lyricsModeBothSubtitle": { - "description": "Subtitle for both option" + "logShareLogs": "ログを共有", + "@logShareLogs": { + "description": "Share button tooltip" }, - "@collectionAlreadyInPlaylist": { - "description": "Snackbar when track already exists in playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "logClearLogs": "ログを消去", + "@logClearLogs": { + "description": "Clear button tooltip" }, - "@collectionFoldersTitle": { - "description": "Library section title for custom folders" + "logClearLogsTitle": "ログを消去", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" }, - "searchSortDateNewest": "Release Date (Newest)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" + "logClearLogsMessage": "すべてのログを消去してもよろしいですか?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" + "logFilterBySeverity": "Filter logs by severity", + "@logFilterBySeverity": { + "description": "Filter dialog title" }, - "@recentTypeAlbum": { - "description": "Recent access item type - album" + "logNoLogsYet": "まだログはありません", + "@logNoLogsYet": { + "description": "Empty state title" }, - "nowPlayingPlayInOrder": "Play in order", - "@nowPlayingPlayInOrder": { - "description": "Tooltip when shuffle mode is disabled" + "logNoLogsYetSubtitle": "Logs will appear here as you use the app", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" }, - "@cueSplitConfirmMessage": { - "description": "CUE split confirmation dialog message", + "logEntriesFiltered": "エントリー ({count} 個をフィルター済み)", + "@logEntriesFiltered": { + "description": "Log count with filter active", "placeholders": { - "album": { - "type": "String" - }, "count": { "type": "int" } } }, - "@audioAnalysisFileSize": { - "description": "File size metric label" - }, - "artistSingles": "シングルと EP", - "@artistSingles": { - "description": "Section header for singles/EPs" - }, - "@snackbarProviderPrioritySaved": { - "description": "Snackbar - provider order saved" - }, - "@recentPlaylistInfo": { - "description": "Snackbar message when tapping playlist in recent access", + "logEntries": "エントリー ({count})", + "@logEntries": { + "description": "Total log count", "placeholders": { - "name": { - "type": "String", - "description": "Playlist name" + "count": { + "type": "int" } } }, - "@lyricsProviderLyricsPlusDesc": { - "description": "Description for LyricsPlus provider" + "channelStable": "安定版", + "@channelStable": { + "description": "Update channel - stable releases" }, - "@libraryFilterDownloaded": { - "description": "Filter chip - show only downloaded items" + "channelPreview": "プレビュー", + "@channelPreview": { + "description": "Update channel - beta/preview releases" }, - "recentPlaylistInfo": "プレイリスト: {name}", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" + "sectionSearchSource": "検索ソース", + "@sectionSearchSource": { + "description": "Settings section header" }, - "@actionCreate": { - "description": "Generic action button - create" + "sectionDownload": "ダウンロード", + "@sectionDownload": { + "description": "Settings section header" }, - "@downloadSelectQuality": { - "description": "Dialog title - choose audio quality" + "sectionPerformance": "パフォーマンス", + "@sectionPerformance": { + "description": "Settings section header" }, - "cueSplitAlbum": "Album: {album}", - "@cueSplitAlbum": { - "description": "Album name in CUE split sheet", - "placeholders": { - "album": { - "type": "String" - } - } + "sectionApp": "アプリ", + "@sectionApp": { + "description": "Settings section header" }, - "@trackCoverNoSource": { - "description": "Snackbar when no cover art URL or embedded cover" + "sectionData": "データ", + "@sectionData": { + "description": "Settings section header" }, - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" + "sectionDebug": "デバッグ", + "@sectionDebug": { + "description": "Settings section header" }, - "@notifLibraryScanCompleteBody": { - "description": "Notification body for library scan complete - number of indexed tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "sectionService": "サービス", + "@sectionService": { + "description": "Settings section header" }, - "optionsDetailedLogging": "詳細ログ", - "@optionsDetailedLogging": { - "description": "Enable verbose logs for debugging" + "sectionAudioQuality": "オーディオ品質", + "@sectionAudioQuality": { + "description": "Settings section header" }, - "@lyricsProvidersDiscardContent": { - "description": "Body text of the discard-changes dialog on lyrics provider page" + "sectionFileSettings": "ファイル設定", + "@sectionFileSettings": { + "description": "Settings section header" }, - "@dialogDisableHistoryTitle": { - "description": "Confirmation dialog title shown before disabling download history" + "sectionLyrics": "歌詞", + "@sectionLyrics": { + "description": "Settings section header" }, - "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" + "lyricsMode": "歌詞モード", + "@lyricsMode": { + "description": "Setting - how to save lyrics" }, - "@appName": { - "description": "App name - DO NOT TRANSLATE" + "lyricsModeDescription": "Choose how lyrics are saved with your downloads", + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" }, - "libraryActions": "アクション", - "@libraryActions": { - "description": "Section header for library actions" + "lyricsModeEmbed": "Embed in file", + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" }, - "setupNoFolderSelected": "No folder selected. Would you like to use the default Music folder?", - "@setupNoFolderSelected": { - "description": "Prompt when no folder selected" + "lyricsModeEmbedSubtitle": "FLAC メタデータに保存された歌詞", + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", - "trackSaveFailed": "失敗: {error}", - "@trackSaveFailed": { - "description": "Snackbar when save operation fails", - "placeholders": { - "error": { - "type": "String" - } - } + "lyricsModeExternal": "外部 .lrc ファイル", + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" }, - "replayGainBatchConfirmTitle": "Add ReplayGain", - "@replayGainBatchConfirmTitle": { - "description": "Title of the batch ReplayGain confirmation dialog" + "lyricsModeExternalSubtitle": "Separate .lrc file for players like Samsung Music", + "@lyricsModeExternalSubtitle": { + "description": "Subtitle for external option" }, - "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", - "@tutorialExtensionsTip1": { - "description": "Tutorial extensions tip 1" + "lyricsModeBoth": "両方", + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" }, - "@trackAddToQueue": { - "description": "Menu action to add a track to the playback queue" + "lyricsModeBothSubtitle": "Embed and save .lrc file", + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" }, - "@cacheTrackLookup": { - "description": "Cache item title for track ID lookup cache" + "sectionColor": "カラー", + "@sectionColor": { + "description": "Settings section header" }, - "@discographyNoAlbums": { - "description": "Error - no albums found for artist" + "sectionTheme": "テーマ", + "@sectionTheme": { + "description": "Settings section header" }, - "@updateLater": { - "description": "Update button - dismiss" + "sectionLayout": "レイアウト", + "@sectionLayout": { + "description": "Settings section header" }, - "@snackbarFailedToInstall": { - "description": "Snackbar - extension install error" + "sectionLanguage": "言語", + "@sectionLanguage": { + "description": "Settings section header for language" }, - "@albumFolderArtistAlbumFlatSubtitle": { - "description": "Folder structure example for flat singles" + "appearanceLanguage": "アプリの言語", + "@appearanceLanguage": { + "description": "Language setting title" }, - "@errorMissingExtensionSource": { - "description": "Error - extension source not available", - "placeholders": { - "item": { - "type": "String" - } - } + "settingsAppearanceSubtitle": "テーマ、カラー、画面", + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" }, - "libraryFilterSortAlbumAsc": "Album (A-Z)", - "@libraryFilterSortAlbumAsc": { - "description": "Sort option - album ascending" + "settingsDownloadSubtitle": "Service, quality, fallback", + "@settingsDownloadSubtitle": { + "description": "Download settings description" }, - "@queueTrackCount": { - "description": "Track count label with plural support", + "settingsExtensionsSubtitle": "ダウンロードプロバイダーを管理", + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" + }, + "settingsLogsSubtitle": "デバッグのためのアプリログを表示", + "@settingsLogsSubtitle": { + "description": "Logs settings description" + }, + "loadingSharedLink": "共有リンクを読み込み中...", + "@loadingSharedLink": { + "description": "Status when opening shared URL" + }, + "pressBackAgainToExit": "Press back again to exit", + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, + "downloadAllCount": "すべてダウンロード ({count})", + "@downloadAllCount": { + "description": "Download all button with count", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisMono": "Mono", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", + "tracksCount": "{count, plural, =1{1 個のトラック} other{{count} 個のトラック}}", + "@tracksCount": { + "description": "Track count display", "placeholders": { - "source": { - "type": "String" + "count": { + "type": "int" } } }, - "@lyricsModeEmbed": { - "description": "Lyrics mode option - embed in audio file" + "trackCopyFilePath": "ファイルパスをコピー", + "@trackCopyFilePath": { + "description": "Action - copy file path" }, - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" + "trackRemoveFromDevice": "デバイスから削除", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" }, - "@cacheRefreshStats": { - "description": "Button label to refresh cache statistics" + "trackLoadLyrics": "歌詞を読み込み", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" }, - "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", - "@lyricsProviderAppleMusicDesc": { - "description": "Description for Apple Music provider" + "trackMetadata": "メタデータ", + "@trackMetadata": { + "description": "Tab title - track metadata" }, - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" + "trackFileInfo": "ファイル情報", + "@trackFileInfo": { + "description": "Tab title - file information" }, - "updateFailedMessage": "更新のダウンロードに失敗しました", - "@updateFailedMessage": { - "description": "Update error message" + "trackLyrics": "歌詞", + "@trackLyrics": { + "description": "Tab title - lyrics" }, - "cacheEstimatedTotal": "Estimated cache usage: {size}", - "@cacheEstimatedTotal": { - "description": "Total cache size shown in summary", - "placeholders": { - "size": { - "type": "String" - } - } + "trackFileNotFound": "ファイルがありません", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" }, - "@aboutVersion": { - "description": "Version info label" + "trackOpenInDeezer": "Deezer で開く", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" }, - "dialogRetry": "再試行", - "@cueSplitSplitting": { - "description": "Snackbar while splitting CUE", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "trackOpenInSpotify": "Spotify で開く", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" }, - "@searchSortTitleZA": { - "description": "Sort option - title descending" + "trackTrackName": "トラック名", + "@trackTrackName": { + "description": "Metadata label - track title" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", - "@tutorialLibraryTip2": { - "description": "Tutorial library tip 2" + "trackArtist": "アーティスト", + "@trackArtist": { + "description": "Metadata label - artist name" }, - "extensionHealthServiceOffline": "Service offline", - "@extensionHealthServiceOffline": { - "description": "Tooltip for offline extension service" + "trackAlbumArtist": "アルバムアーティスト", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" }, - "actionDeselect": "選択を解除", - "@actionDeselect": { - "description": "Action button - deselect all" + "trackAlbum": "アルバム", + "@trackAlbum": { + "description": "Metadata label - album name" }, - "@trackConvertOriginal": { - "description": "Label for keeping original bit depth or sample rate during conversion" + "trackTrackNumber": "トラック番号", + "@trackTrackNumber": { + "description": "Metadata label - track number" }, - "@libraryClearConfirmTitle": { - "description": "Dialog title for clear confirmation" + "trackDiscNumber": "ディスク番号", + "@trackDiscNumber": { + "description": "Metadata label - disc number" }, - "@dialogDownloadAllMessage": { - "description": "Body of the Download All confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDuration": "再生時間", + "@trackDuration": { + "description": "Metadata label - track length" }, - "homeSupports": "サポート: トラック、アルバム、プレイリスト、アーティスト、URL", - "@downloadedAlbumDeleteSelected": { - "description": "Button - delete selected tracks" + "trackAudioQuality": "オーディオ品質", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" }, - "@recentShowAllDownloads": { - "description": "Button label to unhide hidden downloads in recent access" + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" + "trackReleaseDate": "リリース日", + "@trackReleaseDate": { + "description": "Metadata label - release date" }, - "collectionPlaylistEmptyTitle": "Playlist is empty", - "@collectionPlaylistEmptyTitle": { - "description": "Playlist empty state title" + "trackGenre": "ジャンル", + "@trackGenre": { + "description": "Metadata label - music genre" }, - "libraryFilterSortLatest": "Latest", - "@libraryFilterSortLatest": { - "description": "Sort option - newest first" + "trackLabel": "レーベル", + "@trackLabel": { + "description": "Metadata label - record label" }, - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" + "trackCopyright": "著作権", + "@trackCopyright": { + "description": "Metadata label - copyright information" }, - "@selectionSelected": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDownloaded": "ダウンロード済み", + "@trackDownloaded": { + "description": "Metadata label - download date" }, - "@tracksCount": { - "description": "Track count display", + "trackCopyLyrics": "歌詞をコピー", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", "placeholders": { - "count": { - "type": "int" + "source": { + "type": "String" } } }, - "@optionsCheckUpdates": { - "description": "Auto update check toggle" - }, - "@qualityHiResFlacMaxSubtitle": { - "description": "Technical spec for hi-res max" - }, - "actionStop": "Stop", - "@actionStop": { - "description": "Generic action - stop" - }, - "@selectionSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "folderOrganizationNoneSubtitle": "ダウンロードフォルダ内のすべてのファイル", - "@folderOrganizationNoneSubtitle": { - "description": "Subtitle for no organization option" - }, - "@updateDownloading": { - "description": "Update status - downloading" + "trackLyricsNotAvailable": "このトラックの歌詞は利用できません", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" }, - "artistAlbums": "アルバム", - "@artistAlbums": { - "description": "Section header for artist albums" + "trackLyricsNotInFile": "No lyrics found in this file", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" }, - "trackConvertDitherTriangular": "TPDF", - "@trackConvertDitherTriangular": { - "description": "Lossless conversion triangular probability density function dither option" + "trackFetchOnlineLyrics": "Fetch from Online", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", - "@nowPlayingShuffleLibraryFailed": { - "description": "Snackbar when shuffling the library fails", - "placeholders": { - "error": { - "type": "String" - } - } + "trackLyricsTimeout": "リクエストがタイムアウトしました。後ほどお試しください。", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" }, - "@setupIcloudNotSupported": { - "description": "Error when user selects iCloud Drive on iOS" + "trackLyricsLoadFailed": "歌詞の読み込みに失敗しました", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" }, - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + "trackEmbedLyrics": "歌詞を埋め込む", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" }, - "@extensionsProviderPrioritySection": { - "description": "Section header - provider priority" + "trackLyricsEmbedded": "Lyrics embedded successfully", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" }, - "@libraryShowDuplicateIndicatorSubtitle": { - "description": "Subtitle for duplicate indicator toggle" + "trackInstrumental": "インストゥルメンタルのトラック", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" }, - "sectionDuplicates": "Duplicates", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" + "trackCopiedToClipboard": "クリップボードにコピーしました", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" }, - "@backupTitle": { - "description": "App bar title for the backup and restore page" + "trackDeleteConfirmTitle": "デバイスから削除しますか?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" }, - "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", - "cacheSectionMaintenance": "メンテナンス", - "@cacheSectionMaintenance": { - "description": "Section header for cleanup actions" + "trackDeleteConfirmMessage": "This will permanently delete the downloaded file and remove it from your history.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" }, - "@editMetadataFieldGenre": { - "description": "Chip label for genre field in auto-fill selector" + "dateToday": "今日", + "@dateToday": { + "description": "Relative date - today" }, - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" + "dateYesterday": "昨日", + "@dateYesterday": { + "description": "Relative date - yesterday" }, - "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", - "@selectionBatchConvertConfirmMessage": { - "description": "Confirmation dialog message for batch conversion", + "dateDaysAgo": "{count} 日前", + "@dateDaysAgo": { + "description": "Relative date - days ago", "placeholders": { "count": { "type": "int" - }, - "format": { - "type": "String" - }, - "bitrate": { - "type": "String" } } }, - "@selectionTapPlaylistsToSelect": { - "description": "Hint shown in playlist selection mode" - }, - "qualityHiResFlacMaxSubtitle": "24-bit / 最大 192kHz", - "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", - "@snackbarRemovedTracksFromLoved": { - "description": "Snackbar after removing multiple tracks from Loved folder", + "dateWeeksAgo": "{count} 週間前", + "@dateWeeksAgo": { + "description": "Relative date - weeks ago", "placeholders": { "count": { "type": "int" } } }, - "folderOrganizationByArtistAlbum": "アーティスト/アルバム", - "@folderOrganizationByArtistAlbum": { - "description": "Folder option - nested folders" - }, - "snackbarCannotOpenFile": "ファイルが開けません: {error}", - "@snackbarCannotOpenFile": { - "description": "Snackbar - file open error", + "dateMonthsAgo": "{count} ヶ月前", + "@dateMonthsAgo": { + "description": "Relative date - months ago", "placeholders": { - "error": { - "type": "String" + "count": { + "type": "int" } } }, - "@optionsDetailedLoggingOff": { - "description": "Status when logging disabled" - }, - "@setupStorageDescription": { - "description": "Explanation for storage permission" - }, - "audioAnalysisCodec": "Codec", - "@regionCountryFR": { - "description": "Country name for SongLink region picker" - }, - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" + "storeFilterAll": "すべて", + "@storeFilterAll": { + "description": "Repo filter - all extensions" }, - "@libraryClearConfirmMessage": { - "description": "Dialog message for clear confirmation" + "storeFilterMetadata": "メタデータ", + "@storeFilterMetadata": { + "description": "Repo filter - metadata providers" }, - "trackLyricsNotAvailable": "このトラックの歌詞は利用できません", - "@trackLyricsNotAvailable": { - "description": "Message when lyrics not found" + "storeFilterDownload": "ダウンロード", + "@storeFilterDownload": { + "description": "Repo filter - download providers" }, "storeFilterUtility": "ユーティリティ", "@storeFilterUtility": { "description": "Repo filter - utility extensions" }, - "collectionAddedToPlaylist": "Added to \"{playlistName}\"", - "@collectionAddedToPlaylist": { - "description": "Snackbar after adding track to playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "storeFilterLyrics": "歌詞", + "@storeFilterLyrics": { + "description": "Repo filter - lyrics providers" }, - "cacheClearConfirmTitle": "キャッシュを消去しますか?", - "@cacheClearConfirmTitle": { - "description": "Dialog title before clearing one cache category" + "storeFilterIntegration": "統合", + "@storeFilterIntegration": { + "description": "Repo filter - integrations" }, - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" + "storeClearFilters": "フィルターを消去", + "@storeClearFilters": { + "description": "Button to clear all filters" }, - "@aboutMobileDeveloper": { - "description": "Role description for mobile dev" + "storeAddRepoTitle": "Add Extension Repository", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" }, - "albumFolderYearAlbum": "[年] アルバム", - "@albumFolderYearAlbum": { - "description": "Album folder option with year" + "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" }, - "cacheTitle": "ストレージとキャッシュ", - "@extensionPostProcessing": { - "description": "Capability - post-download processing" + "storeRepoUrlLabel": "Repository URL", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" }, - "extensionsNoMetadataProvider": "メタデータプロバイダーの拡張はありません", - "@extensionsNoMetadataProvider": { - "description": "Empty state - no metadata providers" + "storeRepoUrlHint": "https://github.com/user/repo", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" }, - "searchSortTitleZA": "Title (Z-A)", - "@queueClearAllMessage": { - "description": "Clear queue confirmation" + "storeAddRepoButton": "Add Repository", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" }, - "audioAnalysisTitle": "Audio Quality Analysis", - "@audioAnalysisTitle": { - "description": "Title for audio analysis section" - }, - "@aboutReportIssueSubtitle": { - "description": "Subtitle for report issue" + "storeChangeRepoTooltip": "Change repository", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" }, - "@audioAnalysisSampleRate": { - "description": "Sample rate metric label" + "storeRepoDialogTitle": "Extension Repository", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" }, - "@discographySelectedCount": { - "description": "Selection count badge", - "placeholders": { - "count": { - "type": "int" - } - } + "storeRepoDialogCurrent": "Current repository:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" }, - "qualityFlacLosslessSubtitle": "16-bit / 44.1kHz", - "@qualityFlacLosslessSubtitle": { - "description": "Technical spec for lossless" + "storeNewRepoUrlLabel": "New Repository URL", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" }, - "libraryScanFinalizing": "Finalizing library...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" + "storeLoadError": "Failed to load repository", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" }, - "@trackEditMetadata": { - "description": "Menu action - edit embedded metadata" + "storeEmptyNoExtensions": "No extensions available", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" }, - "@downloadNeteaseIncludeRomanization": { - "description": "Setting to include romanized lyrics from Netease" + "storeEmptyNoResults": "No extensions found", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" }, - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" + "extensionId": "ID", + "@extensionId": { + "description": "Extension detail - unique ID" }, - "regionCountryDE": "Germany", - "@regionCountryDE": { - "description": "Country name for SongLink region picker" + "extensionError": "エラー", + "@extensionError": { + "description": "Extension detail - error message" }, - "optionsAutoFallback": "Auto Fallback", - "@optionsAutoFallback": { - "description": "Auto-retry with other services" + "extensionCapabilities": "機能", + "@extensionCapabilities": { + "description": "Section header - extension features" }, - "@trackMetadataPlay": { - "description": "Action button - play track" + "extensionMetadataProvider": "メタデータのプロバイダー", + "@extensionMetadataProvider": { + "description": "Capability - provides metadata" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" + "extensionDownloadProvider": "ダウンロードのプロバイダー", + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" }, - "aboutMobileDeveloper": "モバイルバージョンの開発者", - "@trackDownloaded": { - "description": "Metadata label - download date" + "extensionLyricsProvider": "歌詞のプロバイダー", + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" }, - "homeSkipAlreadyDownloaded": "Skip already downloaded songs", - "@homeSkipAlreadyDownloaded": { - "description": "Checkbox label in import dialog to skip already-downloaded songs" + "extensionUrlHandler": "URL ハンドラ", + "@extensionUrlHandler": { + "description": "Capability - handles URLs" }, - "dialogUninstall": "アンインストール", - "@dialogUninstall": { - "description": "Dialog button - uninstall extension" + "extensionQualityOptions": "品質のオプション", + "@extensionQualityOptions": { + "description": "Capability - quality selection" }, - "collectionDeletePlaylist": "Delete playlist", - "@collectionDeletePlaylist": { - "description": "Action to delete playlist" + "extensionPostProcessingHooks": "ポストプロセスフック", + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" }, - "trackCoverOnline": "Online cover", - "@trackCoverOnline": { - "description": "Label shown when metadata autofill downloaded cover art from the internet" + "extensionPermissions": "権限", + "@extensionPermissions": { + "description": "Section header - required permissions" }, - "downloadTitle": "ダウンロード", - "@downloadTitle": { - "description": "Download settings page title" + "extensionSettings": "設定", + "@extensionSettings": { + "description": "Section header - extension settings" }, - "searchArtists": "アーティスト", - "@searchArtists": { - "description": "Search result category - artists" + "extensionRemoveButton": "拡張を削除", + "@extensionRemoveButton": { + "description": "Button to uninstall extension" }, - "extensionUrlHandler": "URL ハンドラ", - "@extensionUrlHandler": { - "description": "Capability - handles URLs" + "extensionUpdated": "更新済み", + "@extensionUpdated": { + "description": "Extension detail - last update" }, - "@timeHoursAgo": { - "description": "Relative time - hours ago", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionMinAppVersion": "最小のアプリバージョン", + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" }, - "editMetadataAdvanced": "Advanced", - "@editMetadataAdvanced": { - "description": "Expandable section label for advanced metadata fields" + "extensionCustomTrackMatching": "カスタムトラックマッチング", + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" }, - "@actionSelectAll": { - "description": "Action button - select all items" + "extensionPostProcessing": "ポストプロセス", + "@extensionPostProcessing": { + "description": "Capability - post-download processing" }, - "timeMinutesAgo": "{count, plural, =1{1 分前} other{{count} 分前}}", - "@timeMinutesAgo": { - "description": "Relative time - minutes ago", + "extensionHooksAvailable": "{count} 個のフックが利用可能です", + "@extensionHooksAvailable": { + "description": "Post-processing hooks count", "placeholders": { "count": { "type": "int" } } }, - "regionCountryXK": "Kosovo", - "@downloadAskQualitySubtitle": { - "description": "Subtitle for ask quality toggle" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "@updateAvailable": { - "description": "Update dialog title" - }, - "cacheEntries": "{count} 個のエントリ", - "@cacheEntries": { - "description": "Track cache entry count", + "extensionPatternsCount": "{count} 個のパターン", + "@extensionPatternsCount": { + "description": "URL patterns count", "placeholders": { "count": { "type": "int" } } }, - "@notifLibraryScanExcluded": { - "description": "Library scan complete suffix - excluded track count", + "extensionStrategy": "ストラテジー: {strategy}", + "@extensionStrategy": { + "description": "Track matching strategy name", "placeholders": { - "count": { - "type": "int" + "strategy": { + "type": "String" } } }, - "extensionsMetadataPrioritySubtitle": "検索とメタデータソースの順序を設定", - "@extensionsMetadataPrioritySubtitle": { - "description": "Subtitle for metadata priority" + "extensionsProviderPrioritySection": "プロバイダーの優先度", + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" }, - "downloadedAlbumSelectToDelete": "トラックを選択で削除", - "@downloadedAlbumSelectToDelete": { - "description": "Placeholder when nothing selected" + "extensionsInstalledSection": "インストール済みの拡張", + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" }, - "@dialogClearHistoryTitle": { - "description": "Dialog title - clear download history" + "extensionsNoExtensions": "拡張はインストールされていません", + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" }, - "tutorialSettingsTip1": "Change download location and folder organization", - "@tutorialSettingsTip1": { - "description": "Tutorial settings tip 1" + "extensionsNoExtensionsSubtitle": "新しいプロバイダーを追加するには .spotiflac-ext ファイルをインストールします", + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, + "extensionsInstallButton": "拡張をインストール", + "@extensionsInstallButton": { + "description": "Button to install extension from file" }, + "extensionsInfoTip": "拡張は新しいメタデータとダウンロードプロバイダーを追加することがあります。信頼できるソースからの拡張のみをインストールしてください。", + "@extensionsInfoTip": { + "description": "Security warning about extensions" + }, + "extensionsInstalledSuccess": "拡張のインストールが成功しました", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "allFilesAccessDisabledSubtitle": "Limited to media folders only", - "@allFilesAccessDisabledSubtitle": { - "description": "Subtitle when all files access is disabled" - }, - "@appearanceHistoryViewList": { - "description": "List layout option" + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } }, - "@notifAlreadyInLibraryCount": { - "description": "Notification title when track is already in library, with count", + "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", + "@extensionsInstallPartialSuccess": { + "description": "Message when installing multiple extensions partially succeeds", "placeholders": { - "completed": { - "type": "int" + "installed": { + "type": "int", + "description": "Number of successfully installed extensions" }, - "total": { - "type": "int" + "attempted": { + "type": "int", + "description": "Number of selected extensions" } } }, - "@libraryFilterAll": { - "description": "Filter chip - show all library items" - }, - "settingsDownload": "ダウンロード", - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" + "extensionsDownloadPriority": "ダウンロードの優先度", + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" }, - "@libraryFilterSort": { - "description": "Filter section - sort order" + "extensionsDownloadPrioritySubtitle": "ダウンロードサービスの順序を設定", + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" }, - "metadataProvidersSubtitle": "Drag to set search and metadata source order", - "@extensionPermissions": { - "description": "Section header - required permissions" + "extensionsFallbackTitle": "Fallback Extensions", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "selectionSelectToDelete": "トラックを選択で削除", - "@libraryExternalPlayerSubtitle": { - "description": "Subtitle for external player option" + "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" }, - "extensionVerificationOpenBrowser": "Open browser", - "@extensionVerificationOpenBrowser": { - "description": "Button to open the extension verification URL in a browser" + "extensionsNoDownloadProvider": "ダウンロードプロバイダーの拡張はありません", + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" }, - "@trackConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless-to-lossless conversion", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionsMetadataPriority": "メタデータの優先度", + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" }, - "@snackbarAddedTracksToQueue": { - "description": "Snackbar - multiple tracks added to queue", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsMetadataPrioritySubtitle": "検索とメタデータソースの順序を設定", + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" }, - "@backupContentsWishlist": { - "description": "Backup contents row for wishlist tracks count", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsNoMetadataProvider": "メタデータプロバイダーの拡張はありません", + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" }, - "@cacheCleanupUnusedSubtitle": { - "description": "Subtitle for cleanup unused data action" + "extensionsSearchProvider": "検索のプロバイダー", + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" }, - "trackLabel": "レーベル", - "@trackLabel": { - "description": "Metadata label - record label" + "extensionsNoCustomSearch": "カスタム検索の拡張はありません", + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" }, - "@collectionAddedToLoved": { - "description": "Snackbar after adding track to loved folder", - "placeholders": { - "trackName": { - "type": "String" - } - } + "extensionsSearchProviderDescription": "トラックの検索に使用するサービスを選択してください", + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" }, - "regionCountryGB": "United Kingdom", - "dialogCancel": "キャンセル", - "@dialogCancel": { - "description": "Dialog button - cancel action" + "extensionsCustomSearch": "カスタム検索", + "@extensionsCustomSearch": { + "description": "Label for custom search provider" }, - "@folderOrganizationByArtistAlbumSubtitle": { - "description": "Subtitle for nested folder option" + "extensionsErrorLoading": "拡張の読み込みエラー", + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" }, - "@notifAllDownloadsComplete": { - "description": "Notification title when all downloads finish successfully" + "qualityFlacLossless": "FLAC ロスレス", + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" }, - "setupEnableNotifications": "通知を有効化する", - "@setupEnableNotifications": { - "description": "Button to enable notifications" + "qualityFlacLosslessSubtitle": "16-bit / 44.1kHz", + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" }, - "@notifFinalizingTrack": { - "description": "Notification title while finalizing (embedding metadata) a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "qualityHiResFlac": "ハイレゾ FLAC", + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" }, - "@downloadLossy320FormatDesc": { - "description": "Description in the lossy format picker" + "qualityHiResFlacSubtitle": "24-bit / 最大 96kHz", + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" }, - "filenameFormat": "ファイル名の形式", - "@filenameFormat": { - "description": "Setting title - filename pattern" + "qualityHiResFlacMax": "ハイレゾ FLAC 最大", + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" }, - "historySearchHint": "検索履歴...", - "@historySearchHint": { - "description": "Search bar placeholder in history" + "qualityHiResFlacMaxSubtitle": "24-bit / 最大 192kHz", + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" }, - "@tutorialReadyMessage": { - "description": "Tutorial completion message" + "downloadLossy320": "Lossy 320kbps", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" }, - "cacheTempDirectoryDesc": "Temporary files from downloads and audio conversion.", - "@cacheTempDirectoryDesc": { - "description": "Description of what temporary directory contains" + "downloadLossyFormat": "Lossy Format", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" }, - "@trackSaveLyrics": { - "description": "Menu action - save lyrics as .lrc file" + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" }, - "@notifDownloadsFinished": { - "description": "Notification title when queue finishes with some failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" }, - "@historyFilterAlbums": { - "description": "Filter chip - show albums only" + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" }, - "trackEmbedLyrics": "歌詞を埋め込む", - "@trackEmbedLyrics": { - "description": "Action - embed lyrics into audio file" + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" }, - "@downloadPrimaryArtistOnlyOff": { - "description": "Status label when primary-artist-only folder naming is disabled" + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" }, - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" }, - "snackbarHistoryCleared": "履歴を消去しました", - "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", - "@artistPopular": { - "description": "Section header for popular/top tracks" + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" }, - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" }, - "extensionLyricsProvider": "歌詞のプロバイダー", - "@extensionLyricsProvider": { - "description": "Capability - provides lyrics" + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" }, - "historyFilterAll": "すべて", - "@historyFilterAll": { - "description": "Filter chip - show all items" + "downloadLossy320Format": "Lossy 320kbps Format", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" }, - "tutorialSearchTitle": "Finding Music", - "@lyricsModeExternal": { - "description": "Lyrics mode option - separate LRC file" + "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "@downloadLossy320FormatDesc": { + "description": "Description in the lossy format picker" }, - "@actionDismiss": { - "description": "Generic action - dismiss" + "downloadLossyMp3": "MP3 320kbps", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" }, - "trackOpenInSpotify": "Spotify で開く", - "@trackOpenInSpotify": { - "description": "Action - open track in Spotify app" + "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" }, - "@libraryClear": { - "description": "Button to clear all library entries" + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "discographyFailedToFetch": "一部のアルバムの取得に失敗しました", - "@filenameShowAdvancedTagsDescription": { - "description": "Description for advanced filename tag toggle" + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" }, - "@storeUpdate": { - "description": "Update available button" + "downloadLossyOpus256": "Opus 256kbps", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" }, - "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", - "@collectionPlaylistTracks": { - "description": "Track count label for custom playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" }, - "optionsPrimaryProviderSubtitle": "Service used for searching by track or album name", - "@optionsPrimaryProviderSubtitle": { - "description": "Subtitle for primary provider" + "downloadLossyOpus128": "Opus 128kbps", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" }, - "@downloadEmbedLyricsDisabled": { - "description": "Subtitle when lyrics embedding is blocked by metadata toggle" + "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" }, - "@librarySourceLocal": { - "description": "Badge for tracks from local library scan" + "downloadAskBeforeDownload": "ダウンロード前に確認する", + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" }, - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" + "downloadDirectory": "ダウンロードディレクトリ", + "@downloadDirectory": { + "description": "Setting - download folder" }, - "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is off" + "downloadSeparateSinglesFolder": "シングルのフォルダを分割", + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" }, - "queueDownloadingCount": "Downloading ({count})", - "@queueDownloadingCount": { - "description": "Header for active downloads section with count", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAlbumFolderStructure": "アルバムフォルダの構造", + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" }, - "extensionVerificationBrowserInApp": "In-app", - "trackAudioQuality": "オーディオ品質", - "@trackAudioQuality": { - "description": "Metadata label - audio quality" - }, - "libraryRemovedMissingFiles": "Removed {count} missing files from library", - "@libraryRemovedMissingFiles": { - "description": "Snackbar after cleanup", - "placeholders": { - "count": { - "type": "int" - } - } + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" + "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "@errorInvalidFolderSelected": { - "description": "Error when the selected folder is invalid" + "downloadUsePrimaryArtistOnly": "Primary artist only for folders", + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" }, - "@searchSortArtistZA": { - "description": "Sort option - artist descending" + "downloadUsePrimaryArtistOnlyEnabled": "Featured artists removed from folder name (e.g. Justin Bieber, Quavo → Justin Bieber)", + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" }, - "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", - "@snackbarAddedTracksToLoved": { - "description": "Snackbar after adding multiple tracks to Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadUsePrimaryArtistOnlyDisabled": "Full artist string used for folder name", + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" }, - "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", - "@cancelDownloadContent": { - "description": "Dialog body when confirming cancellation of an active download", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadSelectQuality": "品質を選択", + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" }, - "settingsCacheSubtitle": "View size and clear cached data", - "@settingsCacheSubtitle": { - "description": "Subtitle for cache management menu" + "downloadFrom": "ダウンロード元", + "@downloadFrom": { + "description": "Label - download source" }, - "notifLibraryScanCompleteBody": "{count} tracks indexed", - "@cacheSizeWithFiles": { - "description": "Cache size and file count", - "placeholders": { - "size": { - "type": "String" - }, - "count": { - "type": "int" - } - } + "appearanceAmoledDark": "AMOLED ダーク", + "@appearanceAmoledDark": { + "description": "Theme option - pure black" }, - "@downloadAskBeforeDownload": { - "description": "Setting - show quality picker" + "appearanceAmoledDarkSubtitle": "ピュアブラックの背景", + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" }, - "@extensionHealthDegraded": { - "description": "Extension service health status - degraded" + "appearanceHeroAnimations": "Hero animations", + "@appearanceHeroAnimations": { + "description": "Toggle for shared-element (Hero) transitions" }, - "@sectionPerformance": { - "description": "Settings section header" + "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", + "@appearanceHeroAnimationsSubtitle": { + "description": "Subtitle for the Hero animations toggle" }, - "@trackCoverCurrent": { - "description": "Label for the currently embedded cover preview" + "appearanceForceBlur": "Always use blur effects", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" }, - "discographySelectAlbums": "アルバムを選択...", - "@discographySelectAlbums": { - "description": "Option - manually select albums to download" + "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" }, - "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", - "@aboutAppDescription": { - "description": "App description in header card" + "queueClearAll": "すべて消去", + "@queueClearAll": { + "description": "Button - clear all queue items" }, - "extensionCustomTrackMatching": "カスタムトラックマッチング", - "@extensionCustomTrackMatching": { - "description": "Capability - custom track matching algorithm" + "queueClearAllMessage": "すべてのダウンロードを消去してもよろしいですか?", + "@queueClearAllMessage": { + "description": "Clear queue confirmation" }, - "@editMetadataSelectNone": { - "description": "Button to clear selected fields for auto-fill" + "settingsAutoExportFailed": "ダウンロードの自動エクスポートに失敗しました", + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" }, - "@trackPlayNext": { - "description": "Menu action to play a track as the next queue item" + "settingsAutoExportFailedSubtitle": "Save failed downloads to TXT file automatically", + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" }, - "extensionCapabilities": "機能", - "@extensionCapabilities": { - "description": "Section header - extension features" + "settingsDownloadNetwork": "ダウンロードネットワーク", + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" }, - "@downloadSelectServiceToEnable": { - "description": "Subtitle when quality picker is disabled due to extension service" + "settingsDownloadNetworkAny": "Wi-Fi + モバイルデータ", + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" }, - "logIssueRateLimitedDescription": "Too many requests to the service", - "@logIssueRateLimitedDescription": { - "description": "Diagnostic badge description for rate limiting" + "settingsDownloadNetworkWifiOnly": "Wi-Fi のみ", + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" }, - "@actionResume": { - "description": "Action button - resume download" + "settingsDownloadNetworkSubtitle": "Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.", + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" }, - "@updateDownloadInstall": { - "description": "Update button - download and install" + "settingsConcurrentDownloads": "Concurrent downloads", + "@settingsConcurrentDownloads": { + "description": "Setting title - how many tracks download at the same time" }, - "downloadLossy320Format": "Lossy 320kbps Format", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" + "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", + "@settingsConcurrentDownloadsSubtitle": { + "description": "Subtitle explaining the concurrent downloads picker" }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@trackCopyright": { - "description": "Metadata label - copyright information" + "concurrentDownloadsOne": "1 track at a time", + "@concurrentDownloadsOne": { + "description": "Concurrent downloads option - sequential" }, - "@snackbarExtensionInstalled": { - "description": "Snackbar - extension installed successfully", + "concurrentDownloadsCount": "Up to {count} tracks at once", + "@concurrentDownloadsCount": { + "description": "Concurrent downloads option - parallel", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "@regionCountryJP": { - "description": "Country name for SongLink region picker" + "albumFolderArtistAlbum": "アーティスト / アルバム", + "@albumFolderArtistAlbum": { + "description": "Album folder option" }, - "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", - "@trackReEnrichOnlineSubtitle": { - "description": "Subtitle for re-enrich metadata action for local items" + "albumFolderArtistAlbumSubtitle": "アルバム/アーティスト名/アルバム名/", + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" }, - "nowPlayingNothingPlaying": "Nothing is playing", - "@nowPlayingNothingPlaying": { - "description": "Empty state when no track is currently playing" + "albumFolderArtistYearAlbum": "アーティスト / [年] アルバム", + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", - "@tutorialDownloadDesc": { - "description": "Tutorial download page description" + "albumFolderArtistYearAlbumSubtitle": "アルバム/アーティスト名/[2005] アルバム名/", + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" }, - "@appearanceTitle": { - "description": "Appearance settings page title" + "albumFolderAlbumOnly": "アルバムのみ", + "@albumFolderAlbumOnly": { + "description": "Album folder option" }, - "@backupExportSectionDescription": { - "description": "Description of what a backup contains" + "albumFolderAlbumOnlySubtitle": "アルバム/アルバム名/", + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" }, - "@downloadLossyOpus128": { - "description": "Lossy format option - Opus 128kbps" + "albumFolderYearAlbum": "[年] アルバム", + "@albumFolderYearAlbum": { + "description": "Album folder option with year" }, - "@logFilterSection": { - "description": "Filter section title" + "albumFolderYearAlbumSubtitle": "アルバム/[2005] アルバム名/", + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" }, - "trackReEnrichSuccess": "Metadata re-enriched successfully", - "@trackReEnrichSuccess": { - "description": "Snackbar after successful re-enrichment" + "albumFolderArtistAlbumSingles": "アーティスト / アルバム + シングル", + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", - "@backupContentsHistory": { - "description": "Backup contents row for history count", + "albumFolderArtistAlbumSinglesSubtitle": "Artist/Album/ and Artist/Singles/", + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", + "@albumFolderArtistAlbumFlat": { + "description": "Album folder option with singles directly in artist folder" + }, + "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", + "@albumFolderArtistAlbumFlatSubtitle": { + "description": "Folder structure example for flat singles" + }, + "downloadedAlbumDeleteSelected": "選択済みを削除", + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" + }, + "downloadedAlbumDeleteMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from this album?\n\nThis will also delete the files from storage.", + "@downloadedAlbumDeleteMessage": { + "description": "Delete confirmation with count", "placeholders": { "count": { "type": "int" } } }, - "snackbarAddedToQueue": "「{trackName}」をキューに追加しました", - "@snackbarAddedToQueue": { - "description": "Snackbar - track added to download queue", + "downloadedAlbumSelectedCount": "{count} 個を選択済み", + "@downloadedAlbumSelectedCount": { + "description": "Selection count indicator", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "libraryAutoScanOnOpen": "Every app open", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "audioAnalysisChannels": "Channels", - "@audioAnalysisChannels": { - "description": "Channels metric label" + "downloadedAlbumTapToSelect": "トラックをタップで選択", + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" }, - "appearanceHistoryViewList": "リスト", - "updateDownloadInstall": "ダウンロードとインストール", - "@libraryShowDuplicateIndicator": { - "description": "Toggle for duplicate indicator in search" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "searchSortTitleAZ": "Title (A-Z)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", - "@collectionRemovedFromLoved": { - "description": "Snackbar after removing track from loved folder", + "downloadedAlbumDeleteCount": "{count} {count, plural, =1{個のトラック} other{個のトラック}}を削除", + "@downloadedAlbumDeleteCount": { + "description": "Delete button text with count", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "sectionAudioQuality": "オーディオ品質", - "@sectionAudioQuality": { - "description": "Settings section header" + "downloadedAlbumSelectToDelete": "トラックを選択で削除", + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" }, - "trackConvertSuccess": "Converted to {format} successfully", - "@trackConvertSuccess": { - "description": "Snackbar after successful conversion", + "downloadedAlbumDiscHeader": "ディスク {discNumber}", + "@downloadedAlbumDiscHeader": { + "description": "Header for disc separator in multi-disc albums", "placeholders": { - "format": { - "type": "String" + "discNumber": { + "type": "int", + "example": "1" } } }, - "dialogUninstallExtensionMessage": "Are you sure you want to remove {extensionName}?", - "@dialogUninstallExtensionMessage": { - "description": "Dialog message - uninstall specific extension", + "recentTypeArtist": "アーティスト", + "@recentTypeArtist": { + "description": "Recent access item type - artist" + }, + "recentTypeAlbum": "アルバム", + "@recentTypeAlbum": { + "description": "Recent access item type - album" + }, + "recentTypeSong": "曲", + "@recentTypeSong": { + "description": "Recent access item type - song/track" + }, + "recentTypePlaylist": "プレイリスト", + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" + }, + "recentEmpty": "No recent items yet", + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, + "recentShowAllDownloads": "すべてのダウンロードを表示", + "@recentShowAllDownloads": { + "description": "Button label to unhide hidden downloads in recent access" + }, + "recentPlaylistInfo": "プレイリスト: {name}", + "@recentPlaylistInfo": { + "description": "Snackbar message when tapping playlist in recent access", "placeholders": { - "extensionName": { - "type": "String" + "name": { + "type": "String", + "description": "Playlist name" } } }, - "downloadNativeWorkerSubtitle": "拡張機能のダウンロード用 Android バックグラウンドサービス", - "@downloadNativeWorkerSubtitle": { - "description": "Setting subtitle for Android native download worker" + "discographyDownload": "ディスコグラフィをダウンロード", + "@discographyDownload": { + "description": "Button - download artist discography" }, - "storeUpdate": "更新", - "libraryFilterMetadataMissingAny": "Missing any metadata", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" + "discographyDownloadAll": "すべてダウンロード", + "@discographyDownloadAll": { + "description": "Option - download entire discography" }, - "@selectionBatchConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless batch conversion", + "discographyDownloadAllSubtitle": "{albumCount} 個のリリースから {count} 個のトラック", + "@discographyDownloadAllSubtitle": { + "description": "Subtitle showing total tracks and albums", "placeholders": { "count": { "type": "int" }, - "format": { - "type": "String" - }, - "quality": { - "type": "String" + "albumCount": { + "type": "int" } } }, - "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", - "@editMetadataAutoFillDesc": { - "description": "Description for the auto-fill section" - }, - "@lyricsProviderExtensionDesc": { - "description": "Generic description for extension-based lyrics providers" - }, - "downloadSongLinkRegion": "SongLink Region", - "@downloadSongLinkRegion": { - "description": "Setting for SongLink region used during fallback resolution" - }, - "shareSheetNoExtensions": "No other compatible services", - "@shareSheetNoExtensions": { - "description": "Empty state when no extensions can be searched for cross-service links" + "discographyAlbumsOnly": "アルバムのみ", + "@discographyAlbumsOnly": { + "description": "Option - download only albums" }, - "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", - "@queueFlacConfirmMessage": { - "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", + "discographyAlbumsOnlySubtitle": "{count} tracks from {albumCount} albums", + "@discographyAlbumsOnlySubtitle": { + "description": "Subtitle showing album tracks count", "placeholders": { "count": { "type": "int" + }, + "albumCount": { + "type": "int" } } }, - "tooltipAddToPlaylist": "Add to Playlist", - "@tooltipAddToPlaylist": { - "description": "Tooltip for the Add to Playlist button" + "discographySinglesOnly": "シングルと EP のみ", + "@discographySinglesOnly": { + "description": "Option - download only singles" }, - "@snackbarAddedToQueueGeneric": { - "description": "Snackbar when a track is added to the playback queue without naming it" + "discographySinglesOnlySubtitle": "{count} tracks from {albumCount} singles", + "@discographySinglesOnlySubtitle": { + "description": "Subtitle showing singles tracks count", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } }, - "@tutorialSettingsTip2": { - "description": "Tutorial settings tip 2" + "discographySelectAlbums": "アルバムを選択...", + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" }, - "extensionPermissions": "権限", - "releaseTypeSingle": "Single", - "aboutTelegramChannelSubtitle": "お知らせと更新", - "@aboutTelegramChannelSubtitle": { - "description": "Subtitle for Telegram channel" + "discographySelectAlbumsSubtitle": "Choose specific albums or singles", + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" }, - "@dialogDisableAndClear": { - "description": "Confirmation action to disable download history and clear existing entries" + "discographyFetchingTracks": "トラックを取得中です...", + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" }, - "@homeSearchHintProvider": { - "description": "Placeholder for the main search field when a provider is selected", + "discographyFetchingAlbum": "Fetching {current} of {total}...", + "@discographyFetchingAlbum": { + "description": "Progress - fetching specific album", "placeholders": { - "providerName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "metadataProvidersTitle": "Metadata Provider Priority", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "trackAddToQueue": "Add to queue", - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" + "discographySelectedCount": "{count} 個を選択済み", + "@discographySelectedCount": { + "description": "Selection count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@editMetadataSelectEmpty": { - "description": "Button to select only fields that are currently empty" + "discographyDownloadSelected": "選択済みをダウンロード", + "@discographyDownloadSelected": { + "description": "Button - download selected albums" }, - "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", - "discographyAlbumsOnlySubtitle": "{count} tracks from {albumCount} albums", - "@discographyAlbumsOnlySubtitle": { - "description": "Subtitle showing album tracks count", + "discographyAddedToQueue": "Added {count} tracks to queue", + "@discographyAddedToQueue": { + "description": "Snackbar - tracks added from discography", "placeholders": { "count": { "type": "int" + } + } + }, + "discographySkippedDownloaded": "{added} added, {skipped} already downloaded", + "@discographySkippedDownloaded": { + "description": "Snackbar - with skipped tracks count", + "placeholders": { + "added": { + "type": "int" }, - "albumCount": { + "skipped": { "type": "int" } } }, - "setupNotificationEnable": "通知を有効化する", - "@setupNotificationEnable": { - "description": "Button to enable notifications" - }, - "settingsAppearanceSubtitle": "テーマ、カラー、画面", - "@settingsAppearanceSubtitle": { - "description": "Appearance settings description" + "discographyNoAlbums": "利用可能なアルバムがありません", + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" }, - "@notifUpdateFailedBody": { - "description": "Notification body when app update download fails" + "discographyFailedToFetch": "一部のアルバムの取得に失敗しました", + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" }, - "@aboutOriginalCreator": { - "description": "Role description for original creator" + "sectionStorageAccess": "ストレージアクセス", + "@sectionStorageAccess": { + "description": "Section header for storage access settings" }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", - "@libraryBuiltInPreviewPlayer": { - "description": "Setting option to use the built-in preview player" + "allFilesAccess": "すべてのファイルへのアクセス", + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "tooltipPlay": "再生", - "@tooltipPlay": { - "description": "Tooltip - play button" + "allFilesAccessEnabledSubtitle": "Can write to any folder", + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" }, - "@safMigrationMessage2": { - "description": "Second paragraph of SAF migration dialog" + "allFilesAccessDisabledSubtitle": "Limited to media folders only", + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" }, - "@extensionsSearchProvider": { - "description": "Setting - search provider selection" + "allFilesAccessDescription": "Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.", + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" }, - "libraryAboutDescription": "Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.", - "@libraryAboutDescription": { - "description": "Description of local library feature" - }, - "downloadAskBeforeDownload": "ダウンロード前に確認する", - "nowPlayingNoMetadata": "No metadata available", - "@nowPlayingNoMetadata": { - "description": "Empty state when track metadata cannot be loaded" - }, - "trackInstrumental": "インストゥルメンタルのトラック", - "@trackInstrumental": { - "description": "Message when track is instrumental (no lyrics)" + "allFilesAccessDeniedMessage": "Permission was denied. Please enable 'All files access' manually in system settings.", + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" }, - "@collectionWishlistEmptyTitle": { - "description": "Wishlist empty state title" + "allFilesAccessDisabledMessage": "All Files Access disabled. The app will use limited storage access.", + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", - "downloadDeduplication": "Skip Duplicate Downloads", - "libraryFilterSortOldest": "Oldest", - "@libraryFilterSortOldest": { - "description": "Sort option - oldest first" + "settingsLocalLibrary": "ローカルライブラリ", + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" }, - "setupSkip": "今はスキップ", - "@setupSkip": { - "description": "Skip current step button" + "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" }, - "@setupFolderDescription": { - "description": "Explanation for folder selection" + "settingsCache": "ストレージとキャッシュ", + "@settingsCache": { + "description": "Settings menu item - cache management" }, - "@settingsLogsSubtitle": { - "description": "Logs settings description" + "settingsCacheSubtitle": "View size and clear cached data", + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" }, - "storeNewRepoUrlLabel": "New Repository URL", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" + "libraryTitle": "ローカルライブラリ", + "@libraryTitle": { + "description": "Library settings page title" }, - "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", - "@cacheClearConfirmMessage": { - "description": "Dialog message before clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "libraryScanSettings": "スキャン設定", + "@libraryScanSettings": { + "description": "Section header for scan settings" }, - "trackMetadataPlay": "再生", + "libraryEnableLocalLibrary": "ローカルライブラリを有効", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, - "optionsUpdateChannel": "更新チャンネル", - "@optionsUpdateChannel": { - "description": "Stable vs preview releases" + "libraryEnableLocalLibrarySubtitle": "Scan and track your existing music", + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" }, - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist folder is disabled" + "libraryFolder": "ライブラリのフォルダ", + "@libraryFolder": { + "description": "Folder selection setting" }, - "@extensionRefreshStatus": { - "description": "Tooltip for refreshing extension service health status" + "libraryFolderHint": "タップでフォルダを選択", + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", - "@backupRestoreRestartHint": { - "description": "Hint shown after restoring that an app restart is recommended" + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" }, - "@snackbarExtensionInstalledEnable": { - "description": "Snackbar after installing an extension from the repo tab", + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", "placeholders": { - "extensionName": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { "type": "String" } } }, - "settingsAutoExportFailedSubtitle": "Save failed downloads to TXT file automatically", - "@settingsAutoExportFailedSubtitle": { - "description": "Subtitle for auto-export setting" - }, - "searchSortArtistAZ": "Artist (A-Z)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" }, - "editMetadataFieldAlbumArtist": "Album Artist", - "@editMetadataFieldAlbumArtist": { - "description": "Chip label for album artist field in auto-fill selector" + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" }, - "@queueEmptyHistory": { - "description": "Empty state title when download history is empty" + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" }, - "@dialogDisableHistoryMessage": { - "description": "Confirmation dialog message shown before disabling download history" + "libraryShowDuplicateIndicator": "Show Duplicate Indicator", + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" }, - "queueFlacNoReliableMatches": "No reliable online matches found for the selection", - "@queueFlacNoReliableMatches": { - "description": "Snackbar when no safe FLAC redownload matches were found" + "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" }, - "trackOpenInDeezer": "Deezer で開く", - "@trackOpenInDeezer": { - "description": "Action - open track in Deezer app" + "libraryAutoScan": "Auto Scan", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" }, - "setupChooseFromFilesSubtitle": "iCloud またはその他の場所を選択", - "@setupChooseFromFilesSubtitle": { - "description": "Subtitle for file picker" + "libraryAutoScanSubtitle": "Automatically scan your library for new files", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" }, - "artistMonthlyListeners": "{count} 人の月間リスナー", - "@artistMonthlyListeners": { - "description": "Monthly listener count display", - "placeholders": { - "count": { - "type": "String", - "description": "Formatted listener count" - } - } + "libraryAutoScanOff": "Off", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" }, - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" + "libraryAutoScanOnOpen": "Every app open", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" }, - "cacheSectionStorage": "キャッシュ済みデータ", - "@cacheSectionStorage": { - "description": "Section header for cache entries" + "libraryAutoScanDaily": "Daily", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" }, + "libraryAutoScanWeekly": "Weekly", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "tutorialDownloadCompletedSemantics": "Download completed", - "@tutorialDownloadCompletedSemantics": { - "description": "Accessibility label for completed download state in tutorial demo" + "libraryActions": "アクション", + "@libraryActions": { + "description": "Section header for library actions" }, - "@logNoLogsYet": { - "description": "Empty state title" + "libraryScan": "ライブラリをスキャン", + "@libraryScan": { + "description": "Button to start library scan" }, - "@selectionDeletePlaylistsCount": { - "description": "Button label for deleting multiple selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryScanSubtitle": "オーディオファイルをスキャン", + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" }, - "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", - "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is on" + "libraryScanSelectFolderFirst": "Select a folder first", + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" }, - "setupAppDocumentsFolder": "アプリのドキュメントフォルダ", - "@setupAppDocumentsFolder": { - "description": "iOS documents folder option" + "libraryCleanupMissingFiles": "Cleanup Missing Files", + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" }, - "storeLoadError": "Failed to load repository", - "settingsDownloadNetwork": "ダウンロードネットワーク", - "metadataSaveFailedStorage": "Failed to write metadata back to storage", - "@logAutoScrollOff": { - "description": "Tooltip when auto-scroll is disabled on the log screen" + "libraryCleanupMissingFilesSubtitle": "Remove entries for files that no longer exist", + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" }, - "@trackConvertFormat": { - "description": "Menu item - convert audio format" + "libraryClear": "ライブラリを消去", + "@libraryClear": { + "description": "Button to clear all library entries" }, - "optionsArtistTagModeJoined": "Single joined value", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" + "libraryClearSubtitle": "Remove all scanned tracks", + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" }, - "@dateYesterday": { - "description": "Relative date - yesterday" + "libraryClearConfirmTitle": "ライブラリを消去", + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" }, - "@settingsExtensionsSubtitle": { - "description": "Extensions settings description" + "libraryClearConfirmMessage": "This will remove all scanned tracks from your library. Your actual music files will not be deleted.", + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" }, - "searchSortArtistZA": "Artist (Z-A)", - "@extensionSettings": { - "description": "Section header - extension settings" + "libraryAbout": "ローカルライブラリについて", + "@libraryAbout": { + "description": "Section header for about info" }, - "@extensionOauthConnectHint": { - "description": "Hint for an OAuth login link field before connecting Spotify" + "libraryAboutDescription": "Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.", + "@libraryAboutDescription": { + "description": "Description of local library feature" }, - "@notifUpdateReady": { - "description": "Notification title when app update download is complete" + "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@regionCountryMX": { - "description": "Country name for SongLink region picker" - }, - "@nowPlayingOpenInExternalPlayer": { - "description": "Menu item to open the current track in an external player" - }, - "trackConvertDithering": "Dithering", - "@trackConvertDithering": { - "description": "Section label for lossless conversion dithering options" - }, - "settingsDownloadSubtitle": "Service, quality, fallback", - "@settingsDownloadSubtitle": { - "description": "Download settings description" + "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } }, "libraryLastScanned": "最終スキャン: {time}", "@libraryLastScanned": { @@ -2678,620 +2667,723 @@ } } }, - "setupIosEmptyFolderWarning": "iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.", - "@setupIosEmptyFolderWarning": { - "description": "iOS folder selection warning" + "libraryLastScannedNever": "Never", + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" }, - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" + "libraryScanning": "スキャン中...", + "@libraryScanning": { + "description": "Status during scan" }, - "@snackbarFailedToInstallNamed": { - "description": "Snackbar when extension install fails in the repo tab", + "libraryScanFinalizing": "Finalizing library...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, + "libraryScanProgress": "{progress}% of {total} files", + "@libraryScanProgress": { + "description": "Scan progress display", "placeholders": { - "extensionName": { + "progress": { "type": "String" + }, + "total": { + "type": "int" } } }, - "@collectionAddedTracksToPlaylist": { - "description": "Snackbar after adding multiple tracks to a playlist", + "libraryInLibrary": "ライブラリ内", + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, + "libraryRemovedMissingFiles": "Removed {count} missing files from library", + "@libraryRemovedMissingFiles": { + "description": "Snackbar after cleanup", "placeholders": { "count": { "type": "int" - }, - "playlistName": { - "type": "String" } } }, - "updateNew": "新着", - "@updateNew": { - "description": "Label for new version" + "libraryCleared": "Library cleared", + "@libraryCleared": { + "description": "Snackbar after clearing library" }, - "settingsExtensionsSubtitle": "ダウンロードプロバイダーを管理", - "@albumFolderArtistAlbumSinglesSubtitle": { - "description": "Folder structure example" + "libraryStorageAccessRequired": "ストレージアクセスが必要です", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" }, - "trackReEnrichSelectAll": "Select All", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" + "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" }, - "@extensionsUninstall": { - "description": "Uninstall extension button" + "libraryFolderNotExist": "Selected folder does not exist", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" }, - "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when track artist is used for folder names" + "librarySourceDownloaded": "ダウンロード済み", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" }, - "@logIssueNetworkErrorLabel": { - "description": "Diagnostic badge label for generic network errors" + "librarySourceLocal": "ローカル", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" }, - "albumFolderArtistYearAlbumSubtitle": "アルバム/アーティスト名/[2005] アルバム名/", - "@albumFolderArtistYearAlbumSubtitle": { - "description": "Folder structure example" + "libraryFilterAll": "すべて", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" }, - "itemCount": "{count} {count, plural, =1{item} other{items}}", - "@itemCount": { - "description": "Generic item count label", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterDownloaded": "ダウンロード済み", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" }, - "discographyFetchingTracks": "トラックを取得中です...", - "@discographyFetchingTracks": { - "description": "Progress - fetching album tracks" + "libraryFilterLocal": "ローカル", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" }, - "@libraryFolder": { - "description": "Folder selection setting" + "libraryFilterTitle": "フィルター", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" }, - "queueEmptyAlbums": "No album downloads", - "@queueEmptyAlbums": { - "description": "Empty state title when no album downloads exist" + "libraryFilterReset": "リセット", + "@libraryFilterReset": { + "description": "Reset all filters button" }, - "@metadataProviderPriorityDescription": { - "description": "Metadata priority page description" + "libraryFilterApply": "適用", + "@libraryFilterApply": { + "description": "Apply filters button" }, - "@extensionVerificationHelpTitleManual": { - "description": "Dialog title when automatic browser launch for verification fails" + "libraryFilterSource": "ソース", + "@libraryFilterSource": { + "description": "Filter section - source type" }, - "extensionError": "エラー", - "@extensionError": { - "description": "Extension detail - error message" + "libraryFilterQuality": "品質", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" }, - "@trackLyricsLoadFailed": { - "description": "Message when lyrics loading fails" + "libraryFilterQualityHiRes": "ハイレゾ (24bit)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" }, - "@downloadedAlbumDeleteCount": { - "description": "Delete button text with count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterQualityCD": "CD (16bit)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" }, - "@extensionsNoHomeFeedExtensions": { - "description": "Extensions page - shown when no installed extension has home feed" + "libraryFilterQualityLossy": "Lossy", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" }, - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterFormat": "形式", + "@libraryFilterFormat": { + "description": "Filter section - file format" }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", - "@backupContentsArtists": { - "description": "Backup contents row for favorite artists count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadata": "Metadata", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" }, - "@trackRemoveFromDevice": { - "description": "Action - delete downloaded file" + "libraryFilterMetadataComplete": "Complete metadata", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" }, - "lyricsProvidersEnabledSection": "Enabled ({count})", - "@lyricsProvidersEnabledSection": { - "description": "Section header for enabled providers", + "libraryFilterMetadataMissingAny": "Missing any metadata", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Missing year", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Missing genre", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, + "libraryFilterSort": "Sort", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "Latest", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "Oldest", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" + }, + "libraryFilterSortAlbumAsc": "Album (A-Z)", + "@libraryFilterSortAlbumAsc": { + "description": "Sort option - album ascending" + }, + "libraryFilterSortAlbumDesc": "Album (Z-A)", + "@libraryFilterSortAlbumDesc": { + "description": "Sort option - album descending" + }, + "libraryFilterSortGenreAsc": "Genre (A-Z)", + "@libraryFilterSortGenreAsc": { + "description": "Sort option - genre ascending" + }, + "libraryFilterSortGenreDesc": "Genre (Z-A)", + "@libraryFilterSortGenreDesc": { + "description": "Sort option - genre descending" + }, + "timeJustNow": "Just now", + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, + "timeMinutesAgo": "{count, plural, =1{1 分前} other{{count} 分前}}", + "@timeMinutesAgo": { + "description": "Relative time - minutes ago", "placeholders": { "count": { "type": "int" } } }, - "@cueSplitTitle": { - "description": "Title for CUE split bottom sheet" - }, - "@downloadedAlbumSelectedCount": { - "description": "Selection count indicator", + "timeHoursAgo": "{count, plural, =1{1 時間前} other{{count} 時間前}}", + "@timeHoursAgo": { + "description": "Relative time - hours ago", "placeholders": { "count": { "type": "int" } } }, - "@trackOptionRemoveFromWishlist": { - "description": "Bottom sheet action label - remove track from wishlist" + "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" }, - "notifDownloadingTrack": "Downloading {trackName}", - "@notifDownloadingTrack": { - "description": "Notification title while downloading a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" }, - "@discographySkippedDownloaded": { - "description": "Snackbar - with skipped tracks count", - "placeholders": { - "added": { - "type": "int" - }, - "skipped": { - "type": "int" - } - } - }, - "@tutorialSettingsTip3": { - "description": "Tutorial settings tip 3" - }, - "@announcementUnableToOpenLink": { - "description": "Snackbar shown when an announcement CTA link cannot be opened" - }, - "trackReleaseDate": "リリース日", - "discographySelectedCount": "{count} 個を選択済み", - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "logIssueNetworkErrorLabel": "NETWORK ERROR", - "updateStartingDownload": "ダウンロードを開始中...", - "@updateStartingDownload": { - "description": "Update status - initializing" - }, - "trackDiscNumber": "ディスク番号", - "@trackDiscNumber": { - "description": "Metadata label - disc number" + "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" }, - "optionsUsingExtension": "拡張の使用: {extensionName}", - "@optionsUsingExtension": { - "description": "Shows active extension name", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" }, - "dialogDisableHistoryTitle": "Turn off download history?", "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, - "@collectionPlaylistEmptySubtitle": { - "description": "Playlist empty state subtitle" - }, - "@tutorialSearchHint": { - "description": "Placeholder shown in the tutorial search demo" - }, - "cleanupOrphanedDownloadsNone": "No orphaned entries found", - "discographySkippedDownloaded": "{added} added, {skipped} already downloaded", - "@updateDontRemind": { - "description": "Update button - skip this version" - }, - "@snackbarLoadingCueSheet": { - "description": "Snackbar while loading a CUE sheet file" + "tutorialSearchTitle": "Finding Music", + "@tutorialSearchTitle": { + "description": "Tutorial search page title" }, - "@dialogUninstallExtension": { - "description": "Dialog title - uninstall extension" + "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "@tutorialSearchDesc": { + "description": "Tutorial search page description" }, - "lyricsProvidersTitle": "Lyrics Provider Priority", - "@dialogRemove": { - "description": "Dialog button - remove item" + "tutorialDownloadTitle": "音楽をダウンロード中", + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" }, - "snackbarError": "Error: {error}", - "@snackbarError": { - "description": "Generic error snackbar with error detail", - "placeholders": { - "error": { - "type": "String" - } - } + "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" }, - "@sectionApp": { - "description": "Settings section header" + "tutorialLibraryTitle": "あなたのライブラリ", + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" }, - "@libraryPlayback": { - "description": "Section header for playback settings in library settings" + "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" }, - "@downloadPrimaryArtistOnlyOn": { - "description": "Status label when primary-artist-only folder naming is enabled" + "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" }, - "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", - "previewStop": "Stop preview", - "@previewStop": { - "description": "Tooltip for the button that stops the playing track preview snippet" + "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" }, - "trackConvertConfirmMessageLossless": "Convert from {sourceFormat} to {targetFormat}? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.", - "discographyAlbumsOnly": "アルバムのみ", - "@discographyAlbumsOnly": { - "description": "Option - download only albums" + "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" }, - "@editMetadataFieldCopyright": { - "description": "Chip label for copyright field in auto-fill selector" + "tutorialExtensionsTitle": "拡張", + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" }, - "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", - "aboutSocial": "ソーシャル", - "@aboutSocial": { - "description": "Section for social links" + "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" }, - "audioAnalysisNyquist": "Nyquist", - "trackCoverSelected": "Selected cover", - "@trackCoverSelected": { - "description": "Label for the newly selected cover preview" + "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" }, - "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" + "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" }, - "homeEmptyTitle": "No search providers yet", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" + "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" }, - "@extensionHealthUnknown": { - "description": "Extension service health status - unknown" + "tutorialSettingsTitle": "Customize Your Experience", + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" }, - "storeInstalled": "インストール済み", - "@storeInstalled": { - "description": "Already installed badge" + "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" }, - "trackReplayGainSuccess": "ReplayGain tags added", - "@trackReplayGainSuccess": { - "description": "Snackbar message after ReplayGain tags written for a single track" + "tutorialSettingsTip1": "Change download location and folder organization", + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" }, - "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", - "@collectionPlaylistRenamed": { - "description": "Snackbar after renaming playlist" + "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" }, - "@trackConvertResamplerSoxr": { - "description": "Lossless conversion SoX resampler option" + "tutorialSettingsTip3": "Customize app theme and appearance", + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" }, - "@dialogUnsavedChanges": { - "description": "Dialog message - unsaved changes" + "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "@tutorialReadyMessage": { + "description": "Tutorial completion message" }, - "dialogDownload": "Download", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" + "libraryForceFullScan": "強制フルスキャン", + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" }, - "trackLyricsLoadFailed": "歌詞の読み込みに失敗しました", - "@backupContentsTitle": { - "description": "Header above the list summarizing what the backup contains" + "libraryForceFullScanSubtitle": "Rescan all files, ignoring cache", + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" }, - "@safMigrationTitle": { - "description": "Title of SAF migration dialog" + "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" }, - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" + "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" }, - "setupPermissionDeniedMessage": "Permission denied. Please grant all permissions to continue.", - "@setupPermissionDeniedMessage": { - "description": "Error when permission denied" + "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", + "@cleanupOrphanedDownloadsResult": { + "description": "Snackbar after orphan cleanup", + "placeholders": { + "count": { + "type": "int" + } + } }, - "settingsDownloadNetworkWifiOnly": "Wi-Fi のみ", - "@settingsDownloadNetworkWifiOnly": { - "description": "Network option - only use WiFi" + "cleanupOrphanedDownloadsNone": "No orphaned entries found", + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" }, - "@backupIncludeSecrets": { - "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" + "cacheTitle": "ストレージとキャッシュ", + "@cacheTitle": { + "description": "Cache management page title" }, - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" + "cacheSummaryTitle": "キャッシュの概要", + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" }, - "@extensionHealthServiceUnknown": { - "description": "Tooltip for unknown extension service health" + "cacheSummarySubtitle": "Clearing cache will not remove downloaded music files.", + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" }, - "snackbarExtensionUpdated": "{extensionName} を更新しました。", - "@snackbarExtensionUpdated": { - "description": "Snackbar - extension updated successfully", + "cacheEstimatedTotal": "Estimated cache usage: {size}", + "@cacheEstimatedTotal": { + "description": "Total cache size shown in summary", "placeholders": { - "extensionName": { + "size": { "type": "String" } } }, - "homeEmptySubtitle": "Install an extension to continue.", - "@settingsTitle": { - "description": "Settings screen title" + "cacheSectionStorage": "キャッシュ済みデータ", + "@cacheSectionStorage": { + "description": "Section header for cache entries" }, - "@libraryFilterMetadataIncorrectIsrcFormat": { - "description": "Filter option - items with an invalid ISRC format" + "cacheSectionMaintenance": "メンテナンス", + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" }, - "@notifLibraryScanComplete": { - "description": "Notification title when library scan finishes" + "cacheAppDirectory": "アプリキャッシュのディレクトリ", + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" }, - "@logIssueIspBlockingLabel": { - "description": "Diagnostic badge label when ISP blocking is detected" + "cacheAppDirectoryDesc": "HTTP responses, WebView data, and other temporary app data.", + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" }, - "tutorialDownloadTitle": "音楽をダウンロード中", - "@tutorialDownloadTitle": { - "description": "Tutorial download page title" - }, - "unknownTitle": "Unknown title", - "@unknownTitle": { - "description": "Fallback track title when metadata is missing" - }, - "navLibrary": "ライブラリ", - "@navLibrary": { - "description": "Bottom navigation - Library tab" - }, - "@snackbarAlreadyDownloaded": { - "description": "Snackbar - track already exists", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "editMetadataSelectAll": "All", - "@editMetadataSelectAll": { - "description": "Button to select all fields for auto-fill" - }, - "storeEmptyNoExtensions": "No extensions available", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" - }, - "optionsUpdateChannelWarning": "Preview may contain bugs or incomplete features", - "@optionsUpdateChannelWarning": { - "description": "Warning about preview channel" + "cacheTempDirectory": "一時ディレクトリ", + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" }, - "@collectionPlaylistNameHint": { - "description": "Hint text for playlist name input" + "cacheTempDirectoryDesc": "Temporary files from downloads and audio conversion.", + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" }, - "notifLibraryScanComplete": "Library scan complete", - "editMetadataFieldIsrc": "ISRC", - "@editMetadataFieldIsrc": { - "description": "Chip label for ISRC field in auto-fill selector" + "cacheCoverImage": "カバー画像のキャッシュ", + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" }, - "@libraryFolderHint": { - "description": "Placeholder when no folder selected" + "cacheCoverImageDesc": "Downloaded album and track cover art. Will re-download when viewed.", + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" }, - "homeSearchHintDefault": "Paste supported URL or search...", - "@homeSearchHintDefault": { - "description": "Default placeholder for the main search field on Home" + "cacheLibraryCover": "ライブラリのカバーキャッシュ", + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" }, - "extensionsNoExtensionsSubtitle": "新しいプロバイダーを追加するには .spotiflac-ext ファイルをインストールします", - "@extensionsNoExtensionsSubtitle": { - "description": "Empty state subtitle" + "cacheLibraryCoverDesc": "Cover art extracted from local music files. Will re-extract on next scan.", + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" }, - "@extensionEnterValue": { - "description": "Hint for editing an extension setting value" + "libraryPlaybackNormalization": "Volume normalization", + "@libraryPlaybackNormalization": { + "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, - "backupRestoreConfirmTitle": "Restore this backup?", - "@backupRestoreConfirmTitle": { - "description": "Confirmation dialog title before restoring a backup" + "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", + "@libraryPlaybackNormalizationSubtitle": { + "description": "Subtitle explaining playback volume normalization" }, - "@libraryScanSelectFolderFirst": { - "description": "Message when trying to scan without folder" + "cacheAudioAnalysis": "Audio analysis cache", + "@cacheAudioAnalysis": { + "description": "Cache item title for saved audio analysis results" }, - "@qualityHiResFlac": { - "description": "Quality option - high resolution FLAC" + "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", + "@cacheAudioAnalysisDesc": { + "description": "Description of what audio analysis cache contains" }, - "aboutSpecialThanks": "スペシャルサンクス", - "@aboutSpecialThanks": { - "description": "Section for special thanks" + "cacheExploreFeed": "Explore feed cache", + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" }, - "storeInstall": "インストール", - "@storeInstall": { - "description": "Install extension button" + "cacheExploreFeedDesc": "Explore tab content (new releases, trending). Will refresh on next visit.", + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" }, - "@collectionWishlistEmptySubtitle": { - "description": "Wishlist empty state subtitle" + "cacheTrackLookup": "Track lookup cache", + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" }, - "historyFilterAlbums": "アルバム", - "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", - "@extensionCustomUrlHandlingSubtitle": { - "description": "Extension detail subtitle for custom URL handling" + "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" }, - "filenameShowAdvancedTagsDescription": "Enable formatted tags for track padding and date patterns", - "@aboutReportIssue": { - "description": "Link to report bugs" + "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" }, - "@folderOrganizationByPlaylist": { - "description": "Folder option - playlist folders" + "cacheNoData": "キャッシュデータはありません", + "@cacheNoData": { + "description": "Label when cache category has no data" }, - "@dateWeeksAgo": { - "description": "Relative date - weeks ago", + "cacheSizeWithFiles": "{size} in {count} files", + "@cacheSizeWithFiles": { + "description": "Cache size and file count", "placeholders": { + "size": { + "type": "String" + }, "count": { "type": "int" } } }, - "logEntriesFiltered": "エントリー ({count} 個をフィルター済み)", - "@logEntriesFiltered": { - "description": "Log count with filter active", + "cacheSizeOnly": "{size}", + "@cacheSizeOnly": { + "description": "Cache size only", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheEntries": "{count} 個のエントリ", + "@cacheEntries": { + "description": "Track cache entry count", "placeholders": { "count": { "type": "int" } } }, - "@lyricsModeDescription": { - "description": "Lyrics mode picker description" - }, - "@setupAppDocumentsFolderSubtitle": { - "description": "Subtitle for documents folder" - }, - "storeAddRepoButton": "Add Repository", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "@collectionLovedEmptyTitle": { - "description": "Loved empty state title" - }, - "aboutReportIssue": "問題を報告する", - "snackbarFailedToWriteStorage": "Failed to write back to storage", - "@snackbarFailedToWriteStorage": { - "description": "Snackbar when writing metadata back to file fails" - }, - "errorInvalidFolderSelected": "Invalid folder selected", - "allFilesAccessDisabledMessage": "All Files Access disabled. The app will use limited storage access.", - "@allFilesAccessDisabledMessage": { - "description": "Snackbar message when user disables all files access" - }, - "downloadMusixmatchLanguageCode": "Language code", - "@downloadMusixmatchLanguageCode": { - "description": "Label for Musixmatch language input field" - }, - "dialogUnsavedChanges": "You have unsaved changes. Do you want to discard them?", - "setupChooseFromFiles": "ファイルから選択", - "@setupChooseFromFiles": { - "description": "iOS file picker option" - }, - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", - "@backupRestoreConfirmButton": { - "description": "Confirm button to proceed with restore" - }, - "@queueEmptyAlbumsSubtitle": { - "description": "Empty state subtitle for album downloads" - }, - "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", - "@collectionRemovedFromWishlist": { - "description": "Snackbar after removing track from wishlist", + "cacheClearSuccess": "消去済み: {target}", + "@cacheClearSuccess": { + "description": "Snackbar after clearing selected cache", "placeholders": { - "trackName": { + "target": { "type": "String" } } }, - "extensionsInstalledSuccess": "拡張のインストールが成功しました", - "progressReadingCsv": "CSV を読み取り中...", - "@progressReadingCsv": { - "description": "Progress indicator - parsing CSV file" + "cacheClearConfirmTitle": "キャッシュを消去しますか?", + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" }, - "artistReleases": "Releases", - "@artistReleases": { - "description": "Section header for all artist releases" + "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", + "@cacheClearConfirmMessage": { + "description": "Dialog message before clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } }, - "extensionVerificationBrowserTitle": "Verification browser", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" + "cacheClearAllConfirmTitle": "すべてのキャッシュを消去しますか?", + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" }, - "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", - "downloadLossy320": "Lossy 320kbps", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" + "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" }, - "queueFlacAction": "Queue FLAC", - "@queueFlacAction": { - "description": "Action/button label for queueing FLAC redownloads for local tracks" + "cacheClearAll": "すべてのキャッシュを消去", + "@cacheClearAll": { + "description": "Button label to clear all caches" }, - "@setupDownloadLocationIosMessage": { - "description": "iOS-specific folder info" + "cacheCleanupUnused": "未使用のデータを削除", + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" }, - "trackConvertOriginal": "Original", - "sectionLyricsProviderOptions": "Provider Options", - "nowPlayingTitle": "Now Playing", - "@nowPlayingTitle": { - "description": "Title for the now playing screen" + "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" }, - "@extensionHealthChecksConfigured": { - "description": "Extension service health check count", + "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", + "@cacheCleanupResult": { + "description": "Snackbar after unused data cleanup", "placeholders": { - "count": { + "downloadCount": { + "type": "int" + }, + "libraryCount": { "type": "int" } } }, - "@cacheClearAll": { - "description": "Button label to clear all caches" - }, - "a11yDeselectTrack": "Deselect track", - "@a11yDeselectTrack": { - "description": "Accessibility label for deselecting a track" + "cacheRefreshStats": "状態を更新", + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" }, - "@lyricsProvidersInfoText": { - "description": "Info tip on lyrics provider priority page" + "trackSaveCoverArt": "カバー画像を保存", + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" }, - "queueEmptyHistory": "No download history", - "dialogClear": "消去", - "@dialogClear": { - "description": "Dialog button - clear items" + "trackSaveLyrics": "歌詞を保存 (.lrc)", + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" }, - "allFilesAccessDescription": "Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.", - "@allFilesAccessDescription": { - "description": "Description explaining when to enable all files access" + "trackSaveLyricsProgress": "Saving lyrics...", + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" }, - "trackConvertConfirmTitle": "変換を確認", - "storeCategoryLyrics": "Lyrics", - "@storeCategoryLyrics": { - "description": "Store extension category - lyrics" + "trackReEnrich": "Re-enrich", + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" }, - "@lyricsProvidersDescription": { - "description": "Description on the lyrics provider priority page" + "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" }, - "tooltipLoveAll": "Love All", - "downloadDirectory": "ダウンロードディレクトリ", - "@downloadDirectory": { - "description": "Setting - download folder" + "trackReEnrichFieldCover": "Cover Art", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" }, - "@tutorialExtensionsTip2": { - "description": "Tutorial extensions tip 2" + "trackReEnrichFieldLyrics": "Lyrics", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" }, - "libraryFolder": "ライブラリのフォルダ", - "@metadataProviderPriorityTitle": { - "description": "Metadata priority page title" + "trackReEnrichFieldBasicTags": "Album, Album Artist", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "@cleanupOrphanedDownloadsResult": { - "description": "Snackbar after orphan cleanup", + "trackReEnrichFieldTrackInfo": "Track & Disc Number", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Select All", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" + }, + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" + }, + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" + }, + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" + }, + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" + }, + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", "placeholders": { - "count": { + "changeCount": { + "type": "int" + }, + "trackCount": { "type": "int" } } }, - "cacheExploreFeedDesc": "Explore tab content (new releases, trending). Will refresh on next visit.", - "@cacheExploreFeedDesc": { - "description": "Description of what explore feed cache contains" + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" }, - "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", - "@a11yOpenTrackByArtist": { - "description": "Accessibility label for opening a track item", + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, + "trackEditMetadata": "メタデータを編集", + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" + }, + "trackCoverSaved": "Cover art saved to {fileName}", + "@trackCoverSaved": { + "description": "Snackbar after cover art saved", "placeholders": { - "trackName": { + "fileName": { "type": "String" - }, - "artistName": { + } + } + }, + "trackCoverNoSource": "No cover art source available", + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" + }, + "trackLyricsSaved": "Lyrics saved to {fileName}", + "@trackLyricsSaved": { + "description": "Snackbar after lyrics saved", + "placeholders": { + "fileName": { "type": "String" } } }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", - "libraryFilterSortAlbumDesc": "Album (Z-A)", - "@libraryFilterSortAlbumDesc": { - "description": "Sort option - album descending" + "trackReEnrichProgress": "Re-enriching metadata...", + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" }, - "trackConvertBitrate": "ビットレート", - "@trackConvertBitrate": { - "description": "Label for bitrate selection" + "trackReEnrichSearching": "Searching metadata online...", + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" }, - "audioAnalysisFileSize": "Size", - "extensionHealthServiceOnline": "Service online", - "@extensionHealthServiceOnline": { - "description": "Tooltip for online extension service" + "trackReEnrichSuccess": "Metadata re-enriched successfully", + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" }, - "logEntries": "エントリー ({count})", - "@logEntries": { - "description": "Total log count", + "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + }, + "queueFlacAction": "Queue FLAC", + "@queueFlacAction": { + "description": "Action/button label for queueing FLAC redownloads for local tracks" + }, + "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", + "@queueFlacConfirmMessage": { + "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { "count": { "type": "int" } } }, + "queueFlacNoReliableMatches": "No reliable online matches found for the selection", + "@queueFlacNoReliableMatches": { + "description": "Snackbar when no safe FLAC redownload matches were found" + }, + "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", + "@queueFlacQueuedWithSkipped": { + "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "placeholders": { + "addedCount": { + "type": "int" + }, + "skippedCount": { + "type": "int" + } + } + }, + "trackSaveFailed": "失敗: {error}", + "@trackSaveFailed": { + "description": "Snackbar when save operation fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "trackConvertFormat": "変換の形式", + "@trackConvertFormat": { + "description": "Menu item - convert audio format" + }, + "trackConvertTitle": "オーディオを変換", + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" + }, + "trackConvertTargetFormat": "ターゲットの形式", + "@trackConvertTargetFormat": { + "description": "Label for format selection" + }, + "trackConvertBitrate": "ビットレート", + "@trackConvertBitrate": { + "description": "Label for bitrate selection" + }, + "trackConvertKeepOriginal": "Keep original file", + "@trackConvertKeepOriginal": { + "description": "Toggle to preserve the source file during conversion" + }, + "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", + "@trackConvertKeepOriginalDescription": { + "description": "Description for preserving the source file during conversion" + }, + "trackConvertConfirmTitle": "変換を確認", + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" + }, "trackConvertConfirmMessage": "Convert from {sourceFormat} to {targetFormat} at {bitrate}?\n\nThe original file will be deleted after conversion.", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", @@ -3307,1570 +3399,1522 @@ } } }, - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" + "trackConvertConfirmMessageLossless": "Convert from {sourceFormat} to {targetFormat}? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.", + "@trackConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless-to-lossless conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "folderOrganizationByAlbum": "アルバム別", - "@folderOrganizationByAlbum": { - "description": "Folder option - album folders" + "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", + "@trackConvertConfirmKeepOriginal": { + "description": "Confirmation message when the source file will be preserved", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "libraryPlayback": "Playback", - "@storeFilterAll": { - "description": "Repo filter - all extensions" + "trackConvertLosslessHint": "Lossless conversion — no quality loss", + "@trackConvertLosslessHint": { + "description": "Hint shown when converting between lossless formats" }, - "aboutApp": "アプリ", - "@aboutApp": { - "description": "Section for app info" + "trackConvertConverting": "オーディオを変換中...", + "@trackConvertConverting": { + "description": "Snackbar while converting" }, - "optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" - }, - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" + "trackConvertSuccess": "Converted to {format} successfully", + "@trackConvertSuccess": { + "description": "Snackbar after successful conversion", + "placeholders": { + "format": { + "type": "String" + } + } }, - "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", - "storeFilterIntegration": "統合", - "@storeFilterIntegration": { - "description": "Repo filter - integrations" + "trackConvertFailed": "変換に失敗しました", + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" }, - "@lyricsProvidersAtLeastOne": { - "description": "Snackbar when user tries to disable the last enabled provider" + "cueSplitTitle": "分割 CUE シート", + "@cueSplitTitle": { + "description": "Title for CUE split bottom sheet" }, - "@appearanceHistoryViewGrid": { - "description": "Grid layout option" + "cueSplitAlbum": "Album: {album}", + "@cueSplitAlbum": { + "description": "Album name in CUE split sheet", + "placeholders": { + "album": { + "type": "String" + } + } }, - "trackDownloaded": "ダウンロード済み", - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", - "setupDownloadLocationIosMessage": "On iOS, downloads are saved to the app's Documents folder. You can access them via the Files app.", - "optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" + "cueSplitArtist": "Artist: {artist}", + "@cueSplitArtist": { + "description": "Artist name in CUE split sheet", + "placeholders": { + "artist": { + "type": "String" + } + } }, - "@queueRetryAllFailed": { - "description": "Button to retry every failed download in the queue", + "cueSplitTrackCount": "{count} tracks", + "@cueSplitTrackCount": { + "description": "Number of tracks in CUE sheet", "placeholders": { "count": { "type": "int" } } }, - "@trackConvertDitherTriangularHp": { - "description": "Lossless conversion high-pass triangular dither option" - }, - "@extensionVerificationCopyLink": { - "description": "Button to copy the extension verification URL" - }, - "searchSongs": "曲", - "@searchSongs": { - "description": "Search result category - songs" - }, - "@appearanceHistoryView": { - "description": "Layout style for history" - }, - "sectionFileSettings": "ファイル設定", - "@sectionFileSettings": { - "description": "Settings section header" - }, - "@cancelDownloadTitle": { - "description": "Dialog title when confirming cancellation of an active download" - }, - "@cacheLibraryCover": { - "description": "Cache item title for local library cover art images" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "dialogDelete": "削除", - "@dialogDelete": { - "description": "Dialog button - delete item" - }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", - "@tutorialLibraryDesc": { - "description": "Tutorial library page description" + "cueSplitConfirmTitle": "Split CUE Album", + "@cueSplitConfirmTitle": { + "description": "CUE split confirmation dialog title" }, - "@queueDownloadSpeedStatus": { - "description": "Queue status while downloading with speed", + "cueSplitConfirmMessage": "Split \"{album}\" into {count} individual FLAC files?\n\nFiles will be saved to the same directory.", + "@cueSplitConfirmMessage": { + "description": "CUE split confirmation dialog message", "placeholders": { - "speed": { + "album": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", - "@cacheCleanupResult": { - "description": "Snackbar after unused data cleanup", + "cueSplitSplitting": "Splitting CUE sheet... ({current}/{total})", + "@cueSplitSplitting": { + "description": "Snackbar while splitting CUE", "placeholders": { - "downloadCount": { + "current": { "type": "int" }, - "libraryCount": { + "total": { "type": "int" } } }, - "trackConvertLosslessHint": "Lossless conversion — no quality loss", - "@trackConvertLosslessHint": { - "description": "Hint shown when converting between lossless formats" - }, - "collectionRenamePlaylist": "Rename playlist", - "@collectionRenamePlaylist": { - "description": "Action to rename playlist" - }, - "@libraryFilterTitle": { - "description": "Filter bottom sheet title" - }, - "@storageModeAppFolder": { - "description": "Storage mode option - app-managed folder" - }, - "logTotalErrors": "Total errors: {count}", - "@logTotalErrors": { - "description": "Total error count in log issue analysis", + "cueSplitSuccess": "Split into {count} tracks successfully", + "@cueSplitSuccess": { + "description": "Snackbar after successful CUE split", "placeholders": { "count": { "type": "int" } } }, - "@setupStorageRequired": { - "description": "Title when storage permission needed" + "cueSplitFailed": "CUE split failed", + "@cueSplitFailed": { + "description": "Snackbar when CUE split fails" }, - "@snackbarMetadataProviderSaved": { - "description": "Snackbar - metadata provider order saved" + "cueSplitNoAudioFile": "Audio file not found for this CUE sheet", + "@cueSplitNoAudioFile": { + "description": "Error when CUE audio file is missing" }, - "@selectionBatchConvertConfirmTitle": { - "description": "Confirmation dialog title for batch conversion" + "cueSplitButton": "Split into Tracks", + "@cueSplitButton": { + "description": "Button text to start CUE splitting" }, - "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", - "@extensionsHomeFeedAutoSubtitle": { - "description": "Extensions page - subtitle for auto home feed option" + "actionCreate": "Create", + "@actionCreate": { + "description": "Generic action button - create" }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "settingsBackupSubtitle": "Move your library, history and settings to a new device", - "@settingsBackupSubtitle": { - "description": "Subtitle for backup and restore settings item" + "collectionFoldersTitle": "My folders", + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" }, - "recentTypeArtist": "アーティスト", - "@recentTypeArtist": { - "description": "Recent access item type - artist" + "collectionWishlist": "Wishlist", + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" }, - "collectionPlaylistEmptySubtitle": "Long-press + on any track to add it here", - "artistCompilations": "コンピレーション", - "@artistCompilations": { - "description": "Section header for compilations" + "collectionLoved": "Loved", + "@collectionLoved": { + "description": "Custom folder for favorite tracks" }, - "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", - "@snackbarFolderPickerFailed": { - "description": "Snackbar shown when folder picker fails to open", - "placeholders": { - "error": { - "type": "String" - } - } + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" }, - "@optionsDetailedLoggingOn": { - "description": "Status when logging enabled" + "collectionPlaylist": "Playlist", + "@collectionPlaylist": { + "description": "Single playlist label" }, - "settingsSaveDownloadHistory": "Save download history", - "@settingsSaveDownloadHistory": { - "description": "Settings switch title for storing completed downloads in history" + "collectionAddToPlaylist": "Add to playlist", + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" }, - "@storeCategoryIntegration": { - "description": "Store extension category - integration" + "collectionCreatePlaylist": "Create playlist", + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" }, - "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", - "@a11yOpenItemCount": { - "description": "Accessibility label for opening a grouped item with count", + "collectionNoPlaylistsYet": "No playlists yet", + "@collectionNoPlaylistsYet": { + "description": "Empty state title when user has no playlists" + }, + "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", "placeholders": { - "title": { - "type": "String" - }, "count": { "type": "int" } } }, - "trackFileInfo": "ファイル情報", - "@trackFileInfo": { - "description": "Tab title - file information" + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", - "audioAnalysisNoClipping": "No clipping", - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", - "@tutorialSettingsDesc": { - "description": "Tutorial settings page description" + "collectionAddedToPlaylist": "Added to \"{playlistName}\"", + "@collectionAddedToPlaylist": { + "description": "Snackbar after adding track to playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "lyricsModeExternalSubtitle": "Separate .lrc file for players like Samsung Music", - "@lyricsModeExternalSubtitle": { - "description": "Subtitle for external option" + "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "trackLoadLyrics": "歌詞を読み込み", - "@trackLoadLyrics": { - "description": "Action - fetch lyrics" + "collectionPlaylistNameHint": "Playlist name", + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", - "@extensionVerificationHelpTitleWaiting": { - "description": "Dialog title when verification is taking longer than expected" - }, - "libraryFilterReset": "リセット", - "@libraryFilterReset": { - "description": "Reset all filters button" - }, - "@downloadAlbumArtistMetadataFull": { - "description": "Status label when album-artist folder filtering uses full metadata" - }, - "storeTitle": "Extension Repo", - "@storeTitle": { - "description": "Repo screen title" - }, - "libraryCleared": "Library cleared", - "@libraryCleared": { - "description": "Snackbar after clearing library" + "collectionPlaylistNameRequired": "Playlist name is required", + "@collectionPlaylistNameRequired": { + "description": "Validation error for empty playlist name" }, - "queueDownloadCompleted": "Download completed", - "@queueDownloadCompleted": { - "description": "Accessibility label for completed download state in queue" + "collectionRenamePlaylist": "Rename playlist", + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" }, - "libraryTitle": "ローカルライブラリ", - "@libraryTitle": { - "description": "Library settings page title" + "collectionDeletePlaylist": "Delete playlist", + "@collectionDeletePlaylist": { + "description": "Action to delete playlist" }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", - "@queueAlbumCount": { - "description": "Album count label with plural support", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionPlaylistRenamed": "Playlist renamed", + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" }, - "libraryClearConfirmTitle": "ライブラリを消去", - "@backupExportSectionTitle": { - "description": "Section title for the export/backup card" + "collectionWishlistEmptyTitle": "Wishlist is empty", + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" }, - "dialogClearAll": "すべて消去", - "@dialogClearAll": { - "description": "Dialog title - clear all items" + "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", - "@tutorialExtensionsDesc": { - "description": "Tutorial extensions page description" + "collectionLovedEmptyTitle": "Loved folder is empty", + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" }, - "libraryExternalPlayer": "External player", - "@libraryExternalPlayer": { - "description": "Setting option to use an external music player" + "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" }, - "editMetadataFieldGenre": "Genre", - "@tutorialLibraryTitle": { - "description": "Tutorial library page title" + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" }, - "folderOrganizationByPlaylist": "By Playlist", - "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" }, - "editMetadataSelectNone": "None", - "@historyFilterSingles": { - "description": "Filter chip - show singles only" + "collectionPlaylistEmptyTitle": "Playlist is empty", + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" }, - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" + "collectionPlaylistEmptySubtitle": "Long-press + on any track to add it here", + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" }, - "trackSaveCoverArt": "カバー画像を保存", - "@trackSaveCoverArt": { - "description": "Menu action - save album cover art as file" + "collectionRemoveFromPlaylist": "Remove from playlist", + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" }, - "@downloadAlbumFolderStructure": { - "description": "Setting - album folder organization" + "collectionRemoveFromFolder": "フォルダから削除", + "@collectionRemoveFromFolder": { + "description": "Tooltip for removing track from wishlist/loved folder" }, - "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", - "@notifDownloadCompleteCount": { - "description": "Notification title when download is complete, with count", + "collectionAddedToLoved": "\"{trackName}\" added to Loved", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", "placeholders": { - "completed": { - "type": "int" - }, - "total": { - "type": "int" + "trackName": { + "type": "String" } } }, - "setupUseDefault": "デフォルトを使用する", - "@setupUseDefault": { - "description": "Button to use default folder" - }, - "logNoLogsYetSubtitle": "Logs will appear here as you use the app", - "@logNoLogsYetSubtitle": { - "description": "Empty state subtitle" - }, - "@dateToday": { - "description": "Relative date - today" - }, - "trackSaveLyricsProgress": "Saving lyrics...", - "@trackSaveLyricsProgress": { - "description": "Snackbar while saving lyrics to file" + "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "trackCoverSaved": "Cover art saved to {fileName}", - "@trackCoverSaved": { - "description": "Snackbar after cover art saved", + "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", "placeholders": { - "fileName": { + "trackName": { "type": "String" } } }, - "trackReEnrichFieldLyrics": "Lyrics", - "@audioAnalysisRescan": { - "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" + "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is on" + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, - "dialogDisableAndClear": "Turn off and clear", - "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", - "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", - "@notifLibraryScanProgressWithTotal": { - "description": "Notification body for library scan progress when total is known", + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", "placeholders": { - "scanned": { - "type": "int" - }, - "total": { - "type": "int" - }, - "percentage": { - "type": "int" + "artistName": { + "type": "String" } } }, - "@extensionDetailsTags": { - "description": "Section title for extension tags" + "trackOptionAddToLoved": "Add to Loved", + "@trackOptionAddToLoved": { + "description": "Bottom sheet action label - add track to loved folder" }, - "@albumFolderAlbumOnlySubtitle": { - "description": "Folder structure example" + "trackOptionRemoveFromLoved": "Remove from Loved", + "@trackOptionRemoveFromLoved": { + "description": "Bottom sheet action label - remove track from loved folder" }, - "@audioAnalysisAnalyzing": { - "description": "Loading text while analyzing audio" + "trackOptionAddToWishlist": "ウィッシュリストに追加", + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" }, - "@settingsDonate": { - "description": "Settings menu item - donate page" + "trackOptionRemoveFromWishlist": "ウィッシュから削除", + "@trackOptionRemoveFromWishlist": { + "description": "Bottom sheet action label - remove track from wishlist" }, - "@collectionPlaylistNameRequired": { - "description": "Validation error for empty playlist name" + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" }, - "@backupImportSectionDescription": { - "description": "Description for the restore action" + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" }, - "storeFilterLyrics": "歌詞", - "libraryAutoScan": "Auto Scan", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" + "collectionPlaylistChangeCover": "カバー画像を変更", + "@collectionPlaylistChangeCover": { + "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", - "@safMigrationMessage1": { - "description": "First paragraph of SAF migration dialog" + "collectionPlaylistRemoveCover": "カバー画像を削除", + "@collectionPlaylistRemoveCover": { + "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "setupStorageRequired": "ストレージの権限が必要です", - "@notifLibraryScanErrors": { - "description": "Library scan complete suffix - error count", + "selectionShareCount": "{count} {count, plural, =1{個のトラック} other{個のトラック}}を共有", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", "placeholders": { "count": { "type": "int" } } }, - "appearanceHistoryViewGrid": "グリッド", - "trackConvertConverting": "オーディオを変換中...", - "@trackConvertConverting": { - "description": "Snackbar while converting" - }, - "@setupUseDefaultFolder": { - "description": "Dialog title for default folder" + "selectionShareNoFiles": "No shareable files found", + "@selectionShareNoFiles": { + "description": "Snackbar when no selected files exist on disk" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", - "snackbarPlayingNext": "Playing next", - "@snackbarPlayingNext": { - "description": "Snackbar when a track is inserted as the next queue item" + "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" - }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", - "@sectionService": { - "description": "Settings section header" - }, - "notifUpdateProgress": "{received} / {total} MB • {percentage}%", - "@discographyDownloadSelected": { - "description": "Button - download selected albums" - }, - "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", - "@cacheClearAllConfirmMessage": { - "description": "Dialog message before clearing all caches" - }, - "extensionsHomeFeedProvider": "Home Feed Provider", - "@extensionsHomeFeedProvider": { - "description": "Extensions page - label for home feed provider selector" - }, - "@cacheExploreFeed": { - "description": "Cache item title for explore home feed cache" + "selectionConvertNoConvertible": "No convertible tracks selected", + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" }, - "@audioAnalysisDynamicRange": { - "description": "Dynamic range metric label" + "selectionBatchConvertConfirmTitle": "一括変換", + "@selectionBatchConvertConfirmTitle": { + "description": "Confirmation dialog title for batch conversion" }, - "unknownAlbum": "Unknown Album", - "trackCoverCurrent": "Current cover", - "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", - "downloadPrimaryArtistOnlyOff": "Primary only: Off", - "dialogDone": "完了", - "@dialogDone": { - "description": "Dialog button - action completed" + "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "storeRepoUrlLabel": "Repository URL", - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", - "@logIssueRateLimitedSuggestion": { - "description": "Diagnostic badge suggestion for rate limiting" + "selectionBatchConvertConfirmMessageLossless": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "libraryScanProgress": "{progress}% of {total} files", - "@libraryScanProgress": { - "description": "Scan progress display", + "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": { + "description": "Batch conversion confirmation when source files will be preserved", "placeholders": { - "progress": { + "count": { + "type": "int" + }, + "format": { "type": "String" + } + } + }, + "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": { + "type": "int" }, "total": { "type": "int" + }, + "format": { + "type": "String" } } }, - "collectionLovedEmptyTitle": "Loved folder is empty", - "tutorialExtensionsTitle": "拡張", - "@tutorialExtensionsTitle": { - "description": "Tutorial extensions page title" + "downloadedAlbumDownloadedCount": "{count} 個をダウンロード済み", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "searchSortDurationShort": "Duration (Shortest)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when album artist is used for folder names" }, - "trackCopyFilePath": "ファイルパスをコピー", - "@trackCopyFilePath": { - "description": "Action - copy file path" + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when track artist is used for folder names" }, - "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", - "@trackConvertResampler": { - "description": "Section label for lossless conversion resampler options" + "lyricsProvidersTitle": "Lyrics Provider Priority", + "@lyricsProvidersTitle": { + "description": "Settings item title for lyrics provider order" }, - "editMetadataFieldTrackNum": "Track #", - "@editMetadataFieldTrackNum": { - "description": "Chip label for track number field in auto-fill selector" + "lyricsProvidersDescription": "Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.", + "@lyricsProvidersDescription": { + "description": "Description on the lyrics provider priority page" }, - "snackbarFailedToUpdate": "拡張の更新に失敗しました", - "@snackbarFailedToUpdate": { - "description": "Snackbar - extension update error" + "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", + "@lyricsProvidersInfoText": { + "description": "Info tip on lyrics provider priority page" }, - "notifAlreadyInLibrary": "Already in Library", - "@notifAlreadyInLibrary": { - "description": "Notification title when track is already in library" + "lyricsProvidersEnabledSection": "Enabled ({count})", + "@lyricsProvidersEnabledSection": { + "description": "Section header for enabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionPlaylistNameHint": "Playlist name", - "extensionVerificationCopyLink": "Copy link", - "@replayGainBatchAnalyzing": { - "description": "Progress dialog title while batch scanning ReplayGain" + "lyricsProvidersDisabledSection": "Disabled ({count})", + "@lyricsProvidersDisabledSection": { + "description": "Section header for disabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "setupLanguageTitle": "Choose Language", - "extensionId": "ID", - "@extensionId": { - "description": "Extension detail - unique ID" + "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", + "@lyricsProvidersAtLeastOne": { + "description": "Snackbar when user tries to disable the last enabled provider" }, - "regionCountryBR": "Brazil", - "@updateNewVersionReady": { - "description": "Update subtitle" + "lyricsProvidersSaved": "Lyrics provider priority saved", + "@lyricsProvidersSaved": { + "description": "Snackbar after saving lyrics provider priority" }, - "@queueDownloadedFileMissing": { - "description": "Accessibility label when a downloaded file is missing from disk" + "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", + "@lyricsProvidersDiscardContent": { + "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "@lyricsMode": { - "description": "Setting - how to save lyrics" + "lyricsProviderLrclibDesc": "Open-source synced lyrics database", + "@lyricsProviderLrclibDesc": { + "description": "Description for LRCLIB provider" }, - "@settingsAppearance": { - "description": "Settings section - visual customization" + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", + "@lyricsProviderNeteaseDesc": { + "description": "Description for Netease provider" }, - "@setupStorageAccessMessageAndroid11": { - "description": "Android 11+ specific explanation" + "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", + "@lyricsProviderMusixmatchDesc": { + "description": "Description for Musixmatch provider" }, - "@tutorialLibraryTip3": { - "description": "Tutorial library tip 3" + "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", + "@lyricsProviderAppleMusicDesc": { + "description": "Description for Apple Music provider" }, - "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person lyrics is off" + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "@lyricsProviderQqMusicDesc": { + "description": "Description for QQ Music provider" }, - "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", - "@libraryStorageAccessMessage": { - "description": "Dialog message for storage permission" + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" }, - "@tutorialLibraryTip1": { - "description": "Tutorial library tip 1" + "lyricsProviderExtensionDesc": "Extension provider", + "@lyricsProviderExtensionDesc": { + "description": "Generic description for extension-based lyrics providers" }, - "dialogRemoveExtensionMessage": "Are you sure you want to remove this extension? This cannot be undone.", - "@dialogRemoveExtensionMessage": { - "description": "Dialog message - uninstall confirmation" + "safMigrationTitle": "Storage Update Required", + "@safMigrationTitle": { + "description": "Title of SAF migration dialog" }, - "setupDownloadLocationTitle": "ダウンロード先", - "@setupDownloadLocationTitle": { - "description": "Download location dialog title" + "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", + "@safMigrationMessage1": { + "description": "First paragraph of SAF migration dialog" }, - "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", - "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is on" + "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", + "@safMigrationMessage2": { + "description": "Second paragraph of SAF migration dialog" }, - "@audioAnalysisBitDepth": { - "description": "Bit depth metric label" + "safMigrationSuccess": "Download folder updated to SAF mode", + "@safMigrationSuccess": { + "description": "Snackbar after successfully migrating to SAF" }, - "trackOptionAddToLoved": "Add to Loved", - "@trackOptionAddToLoved": { - "description": "Bottom sheet action label - add track to loved folder" + "settingsDonate": "Support Development", + "@settingsDonate": { + "description": "Settings menu item - donate page" }, - "cacheAppDirectory": "アプリキャッシュのディレクトリ", - "@cacheAppDirectory": { - "description": "Cache item title for app cache directory" + "settingsDonateSubtitle": "Buy the developer a coffee", + "@settingsDonateSubtitle": { + "description": "Subtitle for donate menu item" }, - "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", - "@navStore": { - "description": "Bottom navigation - Extension repo tab" + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" }, - "extensionPostProcessing": "ポストプロセス", - "@searchTracks": { - "description": "Search filter label - tracks" + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" }, - "logCopied": "ログをクリップボードにコピーしました", - "@logCopied": { - "description": "Snackbar - logs copied" - }, - "@extensionHealthRequired": { - "description": "Label for a required extension service health check" + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" }, - "@previewPlay": { - "description": "Tooltip for the button that plays a short track preview snippet" + "backupExportSectionTitle": "Create backup", + "@backupExportSectionTitle": { + "description": "Section title for the export/backup card" }, - "clickableLookingUpArtist": "Looking up artist...", - "@clickableLookingUpArtist": { - "description": "Snackbar shown while clickable artist metadata is being resolved" + "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", + "@backupExportSectionDescription": { + "description": "Description of what a backup contains" }, - "@extensionVerificationBrowserSubtitleInApp": { - "description": "Subtitle when in-app browser is preferred for extension verification" + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" }, - "setupUseDefaultFolder": "デフォルトのフォルダを使用しますか?", - "tutorialSearchHint": "Paste or search...", - "@logIssueTrackNotFoundLabel": { - "description": "Diagnostic badge label when a track is unavailable" + "backupImportSectionTitle": "Restore backup", + "@backupImportSectionTitle": { + "description": "Section title for the import/restore card" }, - "@storageModeAppFolderSubtitle": { - "description": "Subtitle for app folder storage mode" + "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", + "@backupImportSectionDescription": { + "description": "Description for the restore action" }, - "downloadMusixmatchLanguage": "Musixmatch Language", - "@downloadMusixmatchLanguage": { - "description": "Setting for Musixmatch lyrics translation language" + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" }, - "lyricsModeExternal": "外部 .lrc ファイル", - "@setupSelectFolder": { - "description": "Button to select folder" + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" }, - "logSearchHint": "ログを検索...", + "backupCreateFailed": "Failed to create backup", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "@settingsSaveDownloadHistorySubtitle": { - "description": "Settings switch subtitle for storing completed downloads in history" - }, - "@albumFolderArtistAlbumFlat": { - "description": "Album folder option with singles directly in artist folder" - }, - "extensionHealthRequired": "required", - "actionCancel": "キャンセル", - "@actionCancel": { - "description": "Action button - cancel operation" - }, - "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", - "@optionsEmbedMetadataSubtitleOff": { - "description": "Subtitle when metadata embedding is disabled" - }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", - "@downloadAllowLocalNetworkDisabled": { - "description": "Subtitle when allow local network access is off" - }, - "@extensionsDownloadPrioritySubtitle": { - "description": "Subtitle for download priority" - }, - "downloadSingleFilenameFormat": "Single Filename Format", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "cacheSummarySubtitle": "Clearing cache will not remove downloaded music files.", - "@cacheSummarySubtitle": { - "description": "Helper text for cache summary card" - }, - "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", - "libraryFilterMetadataMissingTrackNumber": "Missing track number", - "@libraryFilterMetadataMissingTrackNumber": { - "description": "Filter option - items missing track number" - }, - "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", - "@backupIncludeSecretsDescription": { - "description": "Explanation for the include-credentials toggle" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" + "backupRestoreConfirmTitle": "Restore this backup?", + "@backupRestoreConfirmTitle": { + "description": "Confirmation dialog title before restoring a backup" }, - "@extensionServiceStatus": { - "description": "Extension detail section header for service status" + "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", + "@backupRestoreConfirmMessage": { + "description": "Confirmation dialog message before restoring a backup" }, - "queueEmptySingles": "No single downloads", - "@queueEmptySingles": { - "description": "Empty state title when no single track downloads exist" + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" }, - "@snackbarSelectedPlaylistsEmpty": { - "description": "Snackbar when selected playlists contain no tracks" + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" }, - "@errorRateLimited": { - "description": "Error title - too many requests" + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", - "@setupDownloadInFlac": { - "description": "App tagline in setup" + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" }, - "trackRemoveFromDevice": "デバイスから削除", - "@extensionsNoDownloadProvider": { - "description": "Empty state - no download providers" + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" }, - "@backupCreated": { - "description": "Snackbar after a backup file is created" + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" }, - "cacheSummaryTitle": "キャッシュの概要", - "@cacheSummaryTitle": { - "description": "Heading for cache summary card" + "backupContentsSettings": "App settings", + "@backupContentsSettings": { + "description": "Backup contents row label for settings" }, - "selectionReplayGainCount": "ReplayGain ({count})", - "@selectionReplayGainCount": { - "description": "Batch selection action button label for ReplayGain", + "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "@backupContentsHistory": { + "description": "Backup contents row for history count", "placeholders": { "count": { "type": "int" } } }, - "@setupNotificationBackgroundDescription": { - "description": "Detailed notification explanation" - }, - "safMigrationTitle": "Storage Update Required", - "snackbarMetadataSaved": "Metadata saved successfully", - "@snackbarMetadataSaved": { - "description": "Snackbar after successfully saving track metadata" - }, - "@backupContentsSettings": { - "description": "Backup contents row label for settings" - }, - "logClearLogsTitle": "ログを消去", - "extensionsCustomSearch": "カスタム検索", - "@extensionsCustomSearch": { - "description": "Label for custom search provider" - }, - "@downloadFrom": { - "description": "Label - download source" + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheSizeWithFiles": "{size} in {count} files", - "selectionShareNoFiles": "No shareable files found", - "@selectionShareNoFiles": { - "description": "Snackbar when no selected files exist on disk" + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "snackbarAddedTracksToQueue": "{count} 個のトラックをキューに追加しました", - "downloadFilenameInsertTag": "Tap to insert tag:", - "@downloadFilenameInsertTag": { - "description": "Label above filename tag chips" + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", "placeholders": { - "artistName": { - "type": "String" + "count": { + "type": "int" } } }, - "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", - "backupRestoreConfirmButton": "Restore", - "@libraryCleanupMissingFiles": { - "description": "Button to remove entries for missing files" + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "backupCreateFailed": "Failed to create backup", - "notifLibraryScanFailed": "Library scan failed", - "@notifLibraryScanFailed": { - "description": "Notification title when library scan fails" + "backupIncludeSecrets": "Include extension credentials", + "@backupIncludeSecrets": { + "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, - "audioAnalysisRescan": "Re-analyze", - "@trackTrackName": { - "description": "Metadata label - track title" + "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", + "@backupIncludeSecretsDescription": { + "description": "Explanation for the include-credentials toggle" }, - "@setupPermissionRequired": { - "description": "Generic permission required title", + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { - "permissionType": { - "type": "String", - "description": "Type of permission (Storage/Notification)" + "count": { + "type": "int" } } }, - "@nowPlayingNoLyrics": { - "description": "Empty state when the playing file has no embedded lyrics" + "tooltipLoveAll": "Love All", + "@tooltipLoveAll": { + "description": "Tooltip for the Love All button on album/playlist screens" }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", + "tooltipAddToPlaylist": "Add to Playlist", + "@tooltipAddToPlaylist": { + "description": "Tooltip for the Add to Playlist button" + }, + "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", + "@snackbarRemovedTracksFromLoved": { + "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { "count": { "type": "int" } } }, - "@extensionMetadataProvider": { - "description": "Capability - provides metadata" + "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", + "@snackbarAddedTracksToLoved": { + "description": "Snackbar after adding multiple tracks to Loved folder", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@downloadFilterContributing": { - "description": "Setting to strip contributing artists from Album Artist folder name" + "dialogDownloadAllTitle": "Download All", + "@dialogDownloadAllTitle": { + "description": "Dialog title for bulk download confirmation" }, - "libraryScanSelectFolderFirst": "Select a folder first", - "@sectionDownload": { - "description": "Settings section header" + "dialogDownloadAllMessage": "Download {count} tracks?", + "@dialogDownloadAllMessage": { + "description": "Body of the Download All confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionHealthNotConfigured": "Not configured", - "queueRetryAllFailed": "Retry {count} failed", - "folderOrganizationByPlaylistSubtitle": "Separate folder for each playlist", - "@folderOrganizationByPlaylistSubtitle": { - "description": "Subtitle for playlist folder option" + "homeSkipAlreadyDownloaded": "Skip already downloaded songs", + "@homeSkipAlreadyDownloaded": { + "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "lyricsProviderExtensionDesc": "Extension provider", - "@libraryFilterQualityHiRes": { - "description": "Filter option - high resolution audio" + "homeGoToAlbum": "Go to Album", + "@homeGoToAlbum": { + "description": "Context menu item to navigate to the album page" }, - "trackConvertTitle": "オーディオを変換", - "@trackConvertTitle": { - "description": "Title of convert bottom sheet" + "homeAlbumInfoUnavailable": "Album info not available", + "@homeAlbumInfoUnavailable": { + "description": "Snackbar when album info cannot be loaded" }, - "setupSkipForNow": "今はスキップ", - "sectionDownload": "ダウンロード", - "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" + "snackbarLoadingCueSheet": "Loading CUE sheet...", + "@snackbarLoadingCueSheet": { + "description": "Snackbar while loading a CUE sheet file" }, - "@trackConvertActionLabelLossless": { - "description": "Convert button label for lossless conversion with quality cap", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" - } - } + "snackbarMetadataSaved": "Metadata saved successfully", + "@snackbarMetadataSaved": { + "description": "Snackbar after successfully saving track metadata" }, - "storeRequiresVersion": "Requires v{version}+", - "@storeRequiresVersion": { - "description": "Store compatibility badge for minimum app version", + "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", + "@snackbarFailedToEmbedLyrics": { + "description": "Snackbar when lyrics embedding fails" + }, + "snackbarFailedToWriteStorage": "Failed to write back to storage", + "@snackbarFailedToWriteStorage": { + "description": "Snackbar when writing metadata back to file fails" + }, + "snackbarError": "Error: {error}", + "@snackbarError": { + "description": "Generic error snackbar with error detail", "placeholders": { - "version": { + "error": { "type": "String" } } }, - "metadataProviderPriorityDescription": "Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.", - "@notifUpdateFailed": { - "description": "Notification title when app update download fails" + "snackbarNoActionDefined": "No action defined for this button", + "@snackbarNoActionDefined": { + "description": "Snackbar when an extension button has no action configured" }, - "extensionsInfoTip": "拡張は新しいメタデータとダウンロードプロバイダーを追加することがあります。信頼できるソースからの拡張のみをインストールしてください。", - "@extensionsInfoTip": { - "description": "Security warning about extensions" + "noTracksFoundForAlbum": "No tracks found for this album", + "@noTracksFoundForAlbum": { + "description": "Empty state message when an album has no tracks" }, - "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person lyrics is on" + "downloadLocationSubtitle": "Choose where to save your downloaded tracks", + "@downloadLocationSubtitle": { + "description": "Subtitle shown in the download location picker sheet" }, - "libraryFilterMetadataMissingYear": "Missing year", - "extensionsDownloadPriority": "ダウンロードの優先度", - "@extensionsDownloadPriority": { - "description": "Setting - download provider order" + "storageModeAppFolder": "App Folder (Recommended)", + "@storageModeAppFolder": { + "description": "Storage mode option - app-managed folder" }, - "@downloadAllowLocalNetworkEnabled": { - "description": "Subtitle when allow local network access is on" + "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", + "@storageModeAppFolderSubtitle": { + "description": "Subtitle for app folder storage mode" }, - "libraryScan": "ライブラリをスキャン", - "@libraryScan": { - "description": "Button to start library scan" + "storageModeSaf": "Custom Folder (SAF)", + "@storageModeSaf": { + "description": "Storage mode option - Storage Access Framework" }, - "editMetadataFieldLabel": "Label", - "@editMetadataFieldLabel": { - "description": "Chip label for label field in auto-fill selector" + "storageModeSafSubtitle": "Pick any folder, including SD card", + "@storageModeSafSubtitle": { + "description": "Subtitle for SAF storage mode" }, - "updateDownloadFailed": "ダウンロードに失敗しました", - "@updateDownloadFailed": { - "description": "Update error title" + "downloadFolderAccessLostTitle": "Download folder access lost", + "@downloadFolderAccessLostTitle": { + "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" }, - "appearanceAmoledDarkSubtitle": "ピュアブラックの背景", - "@appearanceAmoledDarkSubtitle": { - "description": "Subtitle for AMOLED dark" + "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", + "@downloadFolderAccessLostSubtitle": { + "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" }, - "setupIcloudNotSupported": "iCloud Drive is not supported. Please use the app Documents folder.", - "trackLyricsEmbeddedSource": "Embedded", - "@trackLyricsEmbeddedSource": { - "description": "Lyrics source label for embedded lyrics" + "downloadFolderReselect": "Re-select folder", + "@downloadFolderReselect": { + "description": "Button that reopens the folder picker to restore download folder access" }, - "@trackAlbumArtist": { - "description": "Metadata label - album artist" + "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", + "@downloadErrorSafPermissionLost": { + "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" }, - "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", - "@extensionsInstallPartialSuccess": { - "description": "Message when installing multiple extensions partially succeeds", - "placeholders": { - "installed": { - "type": "int", - "description": "Number of successfully installed extensions" - }, - "attempted": { - "type": "int", - "description": "Number of selected extensions" - } - } + "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", + "@downloadErrorFolderAccessLost": { + "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, - "@extensionSettingsCount": { - "description": "Count of settings exposed by an extension quality option", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", + "@downloadFilenameDescription": { + "description": "Description shown in filename format editor" }, - "notifLibraryScanCancelled": "Library scan cancelled", - "@notifLibraryScanCancelled": { - "description": "Notification title when library scan is cancelled by the user" + "downloadFilenameInsertTag": "Tap to insert tag:", + "@downloadFilenameInsertTag": { + "description": "Label above filename tag chips" }, - "collectionPlaylistNameRequired": "Playlist name is required", - "libraryCleanupMissingFiles": "Cleanup Missing Files", - "storeCategoryUtility": "Utility", - "@storeCategoryUtility": { - "description": "Store extension category - utility" + "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", + "@downloadSeparateSinglesEnabled": { + "description": "Subtitle when separate singles folder is on" }, - "searchSortTitle": "Sort Results", - "@extensionVerificationBrowserExternal": { - "description": "Chip label for external browser verification mode" + "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", + "@downloadSeparateSinglesDisabled": { + "description": "Subtitle when separate singles folder is off" }, - "audioAnalysisLufs": "LUFS", - "@setupAllowAccessToManageFiles": { - "description": "Instruction for file access permission" + "downloadArtistNameFilters": "Artist Name Filters", + "@downloadArtistNameFilters": { + "description": "Setting title for artist folder filter options" }, - "extensionsErrorLoading": "拡張の読み込みエラー", - "@actionPaste": { - "description": "Generic action - paste from clipboard" + "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", + "@downloadCreatePlaylistSourceFolder": { + "description": "Setting to create a subfolder per playlist source" }, - "aboutFeatureRequestSubtitle": "アプリの新機能を提案する", - "@aboutFeatureRequestSubtitle": { - "description": "Subtitle for feature request" + "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", + "@downloadCreatePlaylistSourceFolderEnabled": { + "description": "Subtitle when playlist folder is enabled" }, - "@aboutTitle": { - "description": "About page title" + "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", + "@downloadCreatePlaylistSourceFolderDisabled": { + "description": "Subtitle when playlist folder is disabled" }, - "@downloadNeteaseIncludeTranslation": { - "description": "Setting to include translated lyrics from Netease" + "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", + "@downloadCreatePlaylistSourceFolderRedundant": { + "description": "Subtitle when folder organization is already set to playlist" }, - "@actionGo": { - "description": "Generic action button label" + "downloadSongLinkRegion": "SongLink Region", + "@downloadSongLinkRegion": { + "description": "Setting for SongLink region used during fallback resolution" }, - "regionCountryFR": "France", - "trackConvertResamplerSoxr": "SoXr", - "extensionUpdated": "更新済み", - "@extensionUpdated": { - "description": "Extension detail - last update" + "downloadNetworkCompatibilityMode": "Network Compatibility Mode", + "@downloadNetworkCompatibilityMode": { + "description": "Setting for legacy TLS/network handling" }, - "downloadLossyFormat": "Lossy Format", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "@downloadNetworkCompatibilityModeEnabled": { + "description": "Subtitle when network compatibility mode is on" }, - "snackbarAlreadyInLibrary": "\"{trackName}\" already exists in your library", - "@snackbarAlreadyInLibrary": { - "description": "Snackbar - track already exists in local library", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", + "@downloadNetworkCompatibilityModeDisabled": { + "description": "Subtitle when network compatibility mode is off" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", - "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", - "libraryFilterQuality": "品質", - "@libraryFilterQuality": { - "description": "Filter section - audio quality" + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@downloadAllowLocalNetwork": { + "description": "Setting title for allowing requests to private/local network targets" }, - "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", - "@editMetadataAutoFillDone": { - "description": "Snackbar confirming how many fields were auto-filled", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", + "@downloadAllowLocalNetworkEnabled": { + "description": "Subtitle when allow local network access is on" }, - "@discographyDownload": { - "description": "Button - download artist discography" + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" }, - "aboutFeatureRequest": "機能の要望", - "downloadSingleFilenameFormatDescription": "Filename pattern for singles and EPs. Uses the same tags as the album format.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" + "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "@downloadSelectServiceToEnable": { + "description": "Subtitle when quality picker is disabled due to extension service" }, - "queueClearAllMessage": "すべてのダウンロードを消去してもよろしいですか?", - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", - "extensionLastChecked": "Last checked {time}", - "@extensionLastChecked": { - "description": "Timestamp for the latest extension service health check", - "placeholders": { - "time": { - "type": "String" - } - } + "downloadEmbedLyricsDisabled": "Enable metadata embedding first", + "@downloadEmbedLyricsDisabled": { + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "homeImportCsvTooltip": "Import playlist (CSV, M3U)", - "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "downloadNeteaseIncludeTranslation": "Netease: Include Translation", + "@downloadNeteaseIncludeTranslation": { + "description": "Setting to include translated lyrics from Netease" }, - "trackConvertResamplerSwr": "SWR", - "@trackConvertResamplerSwr": { - "description": "Lossless conversion default FFmpeg swresample resampler option" + "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", + "@downloadNeteaseIncludeTranslationEnabled": { + "description": "Subtitle when Netease translation is on" }, - "@downloadFolderOrganization": { - "description": "Title of the folder organization picker bottom sheet" + "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", + "@downloadNeteaseIncludeTranslationDisabled": { + "description": "Subtitle when Netease translation is off" }, - "dialogClearHistoryTitle": "履歴を消去", - "@logClearSearch": { - "description": "Tooltip for clearing the log search field" + "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", + "@downloadNeteaseIncludeRomanization": { + "description": "Setting to include romanized lyrics from Netease" }, - "dialogImport": "インポート", - "@dialogImport": { - "description": "Dialog button - import data" + "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", + "@downloadNeteaseIncludeRomanizationEnabled": { + "description": "Subtitle when Netease romanization is on" }, - "@setupChangeFolderTooltip": { - "description": "Tooltip for editing the selected download folder" + "downloadNeteaseIncludeRomanizationDisabled": "No romanization", + "@downloadNeteaseIncludeRomanizationDisabled": { + "description": "Subtitle when Netease romanization is off" }, - "notifLibraryScanErrors": "{count} errors", - "@downloadNetworkCompatibilityMode": { - "description": "Setting for legacy TLS/network handling" + "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", + "@downloadAppleQqMultiPerson": { + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, - "@metadataSaveFailedFfmpeg": { - "description": "Snackbar error when FFmpeg fails to write metadata" + "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", + "@downloadAppleQqMultiPersonEnabled": { + "description": "Subtitle when multi-person lyrics is on" }, - "dialogUninstallExtension": "拡張をアンインストールしますか?", - "recentTypePlaylist": "プレイリスト", - "@recentTypePlaylist": { - "description": "Recent access item type - playlist" + "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", + "@downloadAppleQqMultiPersonDisabled": { + "description": "Subtitle when multi-person lyrics is off" }, - "trackDeleteConfirmMessage": "This will permanently delete the downloaded file and remove it from your history.", - "@logIssueNetworkErrorDescription": { - "description": "Diagnostic badge description for generic network errors" + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "appearanceThemeSystem": "システム", - "@appearanceThemeSystem": { - "description": "Follow system theme" + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "albumFolderArtistAlbumSingles": "アーティスト / アルバム + シングル", - "@aboutTranslators": { - "description": "Section for translators" + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "shareSheetNotFound": "Not found", - "@shareSheetNotFound": { - "description": "Cross-service share sheet row subtitle when a service has no match" + "downloadMusixmatchLanguage": "Musixmatch Language", + "@downloadMusixmatchLanguage": { + "description": "Setting for Musixmatch lyrics translation language" }, - "@tutorialDownloadInProgressSemantics": { - "description": "Accessibility label for active download state in tutorial demo" + "downloadMusixmatchLanguageAuto": "Auto (original language)", + "@downloadMusixmatchLanguageAuto": { + "description": "Subtitle when no language is set" }, - "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", - "@editMetadataAutoFillNoneSelected": { - "description": "Snackbar when user taps Fetch without selecting any fields" + "downloadFilterContributing": "Filter Contributing Artists", + "@downloadFilterContributing": { + "description": "Setting to strip contributing artists from Album Artist folder name" }, - "@snackbarViewQueue": { - "description": "Snackbar action - view download queue" + "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", + "@downloadFilterContributingEnabled": { + "description": "Subtitle when contributing artist filter is on" }, - "@optionsUpdateChannelPreview": { - "description": "Include beta/preview updates" + "downloadFilterContributingDisabled": "Full Album Artist string used", + "@downloadFilterContributingDisabled": { + "description": "Subtitle when contributing artist filter is off" }, - "editMetadataFieldComposer": "Composer", - "@editMetadataFieldComposer": { - "description": "Label for composer field in the edit metadata sheet" + "downloadProvidersNoneEnabled": "No providers enabled", + "@downloadProvidersNoneEnabled": { + "description": "Shown when no lyrics providers are active" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", - "@aboutSachinsenalDesc": { - "description": "Credit description for sachinsenal0x64" + "downloadMusixmatchLanguageCode": "Language code", + "@downloadMusixmatchLanguageCode": { + "description": "Label for Musixmatch language input field" }, - "backupTitle": "Backup & Restore", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" + "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "@downloadMusixmatchLanguageHint": { + "description": "Placeholder for Musixmatch language input" }, - "setupStorageAccessRequired": "ストレージアクセスが必要です", - "@setupStorageAccessRequired": { - "description": "Title when storage access needed" + "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", + "@downloadMusixmatchLanguageDesc": { + "description": "Description in Musixmatch language picker" }, - "trackMetadataDelete": "削除", - "@trackMetadataDelete": { - "description": "Action button - delete track" + "downloadMusixmatchAuto": "Auto", + "@downloadMusixmatchAuto": { + "description": "Button to clear Musixmatch language (use auto)" }, - "libraryFilterMetadataMissingDiscNumber": "Missing disc number", - "@libraryFilterMetadataMissingDiscNumber": { - "description": "Filter option - items missing disc number" + "downloadNetworkAnySubtitle": "Use WiFi or mobile data", + "@downloadNetworkAnySubtitle": { + "description": "Subtitle for any-network option in picker" }, - "snackbarMetadataProviderSaved": "メタデータプロバイダーの優先度を保存しました", - "setupPermissionRequired": "{permissionType} の権限が必要です", - "@selectionConvertNoConvertible": { - "description": "Snackbar when no selected tracks support conversion" + "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "@downloadNetworkWifiOnlySubtitle": { + "description": "Subtitle for WiFi-only option in picker" }, - "extensionHealthDegraded": "Degraded", - "regionCountryKR": "South Korea", - "@regionCountryKR": { - "description": "Country name for SongLink region picker" + "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", + "@downloadSongLinkRegionDesc": { + "description": "Description in SongLink region picker" }, - "trackLyricsNotInFile": "No lyrics found in this file", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" + "snackbarUnsupportedAudioFormat": "Unsupported audio format", + "@snackbarUnsupportedAudioFormat": { + "description": "Snackbar when the audio format is not supported for the requested operation" }, - "@downloadedAlbumTapToSelect": { - "description": "Selection hint" + "cacheRefresh": "Refresh", + "@cacheRefresh": { + "description": "Tooltip for refresh button on cache management page" }, - "downloadArtistNameFilters": "Artist Name Filters", - "@downloadArtistNameFilters": { - "description": "Setting title for artist folder filter options" + "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", + "@dialogDownloadPlaylistsMessage": { + "description": "Dialog message for bulk playlist download confirmation", + "placeholders": { + "trackCount": { + "type": "int" + }, + "playlistCount": { + "type": "int" + } + } }, - "@libraryFilterMetadataMissingArtist": { - "description": "Filter option - items missing artist" + "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", + "@bulkDownloadPlaylistsButton": { + "description": "Button label for bulk downloading selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "recentShowAllDownloads": "すべてのダウンロードを表示", - "@appearanceThemeLight": { - "description": "Light theme" + "bulkDownloadSelectPlaylists": "Select playlists to download", + "@bulkDownloadSelectPlaylists": { + "description": "Button label when no playlists are selected for download" }, - "trackReEnrichFieldTrackInfo": "Track & Disc Number", - "@appearanceThemeDark": { - "description": "Dark theme" + "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", + "@snackbarSelectedPlaylistsEmpty": { + "description": "Snackbar when selected playlists contain no tracks" }, - "extensionVerificationLinkCopied": "Verification link copied", - "@extensionVerificationLinkCopied": { - "description": "Snackbar after copying the extension verification URL" + "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@playlistsCount": { + "description": "Playlist count display", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@extensionsHomeFeedDescription": { - "description": "Extensions page - description for home feed provider picker" + "editMetadataAutoFill": "Auto-fill from online", + "@editMetadataAutoFill": { + "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", - "@downloadAlbumArtistMetadataPrimaryOnly": { - "description": "Status label when album-artist folder filtering uses primary artist only" + "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", + "@editMetadataAutoFillDesc": { + "description": "Description for the auto-fill section" }, - "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", - "setupNext": "次へ", - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", - "libraryAutoScanDaily": "Daily", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" + "editMetadataAutoFillSource": "Metadata source", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" }, - "@audioAnalysisDescription": { - "description": "Description for audio analysis tap-to-analyze prompt" + "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" }, - "nowPlayingUpNext": "Up next", - "@nowPlayingUpNext": { - "description": "Title for the playback queue sheet" + "editMetadataAutoFillFind": "Find metadata", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" }, - "nowPlayingPreviousTrack": "Previous track", - "nowPlayingNextTrack": "Next track", - "logAutoScrollOff": "Auto-scroll OFF", - "trackConvertFailed": "変換に失敗しました", - "@trackConvertFailed": { - "description": "Snackbar when conversion fails" + "editMetadataAutoFillPreview": "Data from {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } }, - "extensionsUninstall": "アンインストール", - "safMigrationSuccess": "Download folder updated to SAF mode", - "optionsClearHistorySubtitle": "ダウンロード済みのすべてのトラックを履歴から削除", - "@optionsClearHistorySubtitle": { - "description": "Subtitle for clear history" + "editMetadataAutoFillCoverAvailable": "Cover artwork available", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" }, - "trackPlayNext": "Play next", - "extensionsNoHomeFeedExtensions": "No extensions with home feed", - "optionsUpdateChannelStable": "安定版リリースのみ", - "@optionsUpdateChannelStable": { - "description": "Only stable updates" + "editMetadataAutoFillApply": "Apply selected data", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" }, - "@discographyDownloadAllSubtitle": { - "description": "Subtitle showing total tracks and albums", + "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" }, - "albumCount": { - "type": "int" + "source": { + "type": "String" } } }, - "searchPlaylists": "プレイリスト", - "@searchPlaylists": { - "description": "Search result category - playlists" + "editMetadataAutoFillFetch": "Fetch & Fill", + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" }, - "downloadNetworkCompatibilityMode": "Network Compatibility Mode", - "settingsAppearance": "外観", - "logIssueRateLimitedLabel": "RATE LIMITED", - "@logIssueRateLimitedLabel": { - "description": "Diagnostic badge label when the service rate limits requests" + "editMetadataAutoFillSearching": "Searching online...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" }, - "logIssueSummary": "Issue Summary", - "@logIssueSummary": { - "description": "Header for log issue analysis summary" + "editMetadataAutoFillNoResults": "No matching metadata found online", + "@editMetadataAutoFillNoResults": { + "description": "Snackbar when online metadata search returns no results" }, - "appName": "SpotiFLAC Mobile", - "storeRepoDialogCurrent": "Current repository:", - "@optionsExtensionStoreSubtitle": { - "description": "Subtitle for extension repo toggle" + "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", + "@editMetadataAutoFillDone": { + "description": "Snackbar confirming how many fields were auto-filled", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@trackLyrics": { - "description": "Tab title - lyrics" + "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", + "@editMetadataAutoFillNoneSelected": { + "description": "Snackbar when user taps Fetch without selecting any fields" }, - "@backupImportButton": { - "description": "Button to pick a backup file to restore" + "editMetadataFieldTitle": "Title", + "@editMetadataFieldTitle": { + "description": "Chip label for title field in auto-fill selector" }, - "@setupFolderChoose": { - "description": "Button to choose folder" + "editMetadataFieldArtist": "Artist", + "@editMetadataFieldArtist": { + "description": "Chip label for artist field in auto-fill selector" }, - "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", - "@extensionsDisabled": { - "description": "Extension status - inactive" + "editMetadataFieldAlbum": "Album", + "@editMetadataFieldAlbum": { + "description": "Chip label for album field in auto-fill selector" }, - "@regionCountryAU": { - "description": "Country name for SongLink region picker" + "editMetadataFieldAlbumArtist": "Album Artist", + "@editMetadataFieldAlbumArtist": { + "description": "Chip label for album artist field in auto-fill selector" }, - "@storeCategoryMetadata": { - "description": "Store extension category - metadata" + "editMetadataFieldDate": "Date", + "@editMetadataFieldDate": { + "description": "Chip label for date field in auto-fill selector" }, - "libraryFilterApply": "適用", - "@libraryFilterApply": { - "description": "Apply filters button" + "editMetadataFieldTrackNum": "Track #", + "@editMetadataFieldTrackNum": { + "description": "Chip label for track number field in auto-fill selector" }, - "@libraryFilterSortGenreAsc": { - "description": "Sort option - genre ascending" + "editMetadataFieldDiscNum": "Disc #", + "@editMetadataFieldDiscNum": { + "description": "Chip label for disc number field in auto-fill selector" }, - "setupAllowAccessToManageFiles": "Please enable \"Allow access to manage all files\" in the next screen.", - "@dialogSave": { - "description": "Dialog button - save changes" + "editMetadataFieldGenre": "Genre", + "@editMetadataFieldGenre": { + "description": "Chip label for genre field in auto-fill selector" }, - "trackLyrics": "歌詞", - "extensionSettingNotSet": "Not set", - "@extensionSettingNotSet": { - "description": "Value shown when an extension setting has no value" + "editMetadataFieldIsrc": "ISRC", + "@editMetadataFieldIsrc": { + "description": "Chip label for ISRC field in auto-fill selector" }, - "@audioAnalysisClipping": { - "description": "Clipping metric label" + "editMetadataFieldLabel": "Label", + "@editMetadataFieldLabel": { + "description": "Chip label for label field in auto-fill selector" }, - "downloadNeteaseIncludeTranslation": "Netease: Include Translation", - "@albumFolderArtistAlbumSubtitle": { - "description": "Folder structure example" + "editMetadataFieldCopyright": "Copyright", + "@editMetadataFieldCopyright": { + "description": "Chip label for copyright field in auto-fill selector" }, - "@settingsDonateSubtitle": { - "description": "Subtitle for donate menu item" + "editMetadataFieldCover": "Cover Art", + "@editMetadataFieldCover": { + "description": "Chip label for cover art field in auto-fill selector" }, - "cueSplitSuccess": "Split into {count} tracks successfully", - "@cueSplitSuccess": { - "description": "Snackbar after successful CUE split", + "editMetadataSelectAll": "All", + "@editMetadataSelectAll": { + "description": "Button to select all fields for auto-fill" + }, + "editMetadataSelectEmpty": "Empty only", + "@editMetadataSelectEmpty": { + "description": "Button to select only fields that are currently empty" + }, + "queueDownloadingCount": "Downloading ({count})", + "@queueDownloadingCount": { + "description": "Header for active downloads section with count", "placeholders": { "count": { "type": "int" } } }, - "cueSplitArtist": "Artist: {artist}", - "@cueSplitArtist": { - "description": "Artist name in CUE split sheet", + "queueFilteringIndicator": "Filtering...", + "@queueFilteringIndicator": { + "description": "Shown while filter results are being computed" + }, + "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "@queueTrackCount": { + "description": "Track count label with plural support", "placeholders": { - "artist": { - "type": "String" + "count": { + "type": "int" } } }, - "updateSeeReleaseNotes": "See release notes for details.", - "@updateSeeReleaseNotes": { - "description": "Fallback changelog text when release notes cannot be parsed" - }, - "@trackReEnrichFfmpegFailed": { - "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "@queueAlbumCount": { + "description": "Album count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionWishlist": "Wishlist", - "@collectionWishlist": { - "description": "Custom folder for saved tracks to download later" + "queueEmptyAlbums": "No album downloads", + "@queueEmptyAlbums": { + "description": "Empty state title when no album downloads exist" }, - "editMetadataAutoFillFetch": "Fetch & Fill", - "@extensionsHomeFeedAuto": { - "description": "Label for auto-selected search provider" + "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", + "@queueEmptyAlbumsSubtitle": { + "description": "Empty state subtitle for album downloads" }, - "providerPriorityDescription": "Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.", - "@providerPriorityDescription": { - "description": "Provider priority page description" + "queueEmptySingles": "No single downloads", + "@queueEmptySingles": { + "description": "Empty state title when no single track downloads exist" }, "queueEmptySinglesSubtitle": "Single track downloads will appear here", - "downloadLossyOpus128": "Opus 128kbps", - "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", - "@downloadUseAlbumArtistForFolders": { - "description": "Setting - choose whether artist folders use Album Artist or Track Artist" + "@queueEmptySinglesSubtitle": { + "description": "Empty state subtitle for single track downloads" }, - "@aboutLinks": { - "description": "Section for external links" + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadedAlbumDeleteCount": "{count} {count, plural, =1{個のトラック} other{個のトラック}}を削除", - "updateLater": "後で", - "@logIssueIspBlockingSuggestion": { - "description": "Diagnostic badge suggestion for ISP blocking" + "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" }, - "actionResume": "再開", - "optionsDetailedLoggingOff": "バグレポートを有効", - "@searchSortDefault": { - "description": "Sort option - default API order" + "libraryDefaultView": "Default view", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" }, - "@regionCountryCA": { - "description": "Country name for SongLink region picker" + "libraryDefaultViewLastUsed": "Last used", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" }, - "@sectionStorageAccess": { - "description": "Section header for storage access settings" + "queueEmptyHistory": "No download history", + "@queueEmptyHistory": { + "description": "Empty state title when download history is empty" }, - "downloadFilterContributing": "Filter Contributing Artists", - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", - "storeSearch": "拡張を検索...", - "@storeSearch": { - "description": "Repo search placeholder" + "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", + "@queueEmptyHistorySubtitle": { + "description": "Empty state subtitle for download history" }, - "aboutTelegramChat": "Telegram コミュニティ", - "lyricsModeBoth": "両方", - "@lyricsModeBoth": { - "description": "Lyrics mode option - embed and external" + "selectionAllPlaylistsSelected": "All playlists selected", + "@selectionAllPlaylistsSelected": { + "description": "Shown when all playlists are selected in selection mode" }, - "@permissionNotification": { - "description": "Notification permission type label" - }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" + "selectionTapPlaylistsToSelect": "Tap playlists to select", + "@selectionTapPlaylistsToSelect": { + "description": "Hint shown in playlist selection mode" }, - "libraryEnableLocalLibrary": "ローカルライブラリを有効", - "trackConvertTargetFormat": "ターゲットの形式", - "@trackConvertTargetFormat": { - "description": "Label for format selection" + "selectionSelectPlaylistsToDelete": "Select playlists to delete", + "@selectionSelectPlaylistsToDelete": { + "description": "Hint shown when no playlists are selected for deletion" }, - "extensionSettings": "設定", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" + "audioAnalysisTitle": "Audio Quality Analysis", + "@audioAnalysisTitle": { + "description": "Title for audio analysis section" }, - "trackLyricsTimeout": "リクエストがタイムアウトしました。後ほどお試しください。", - "settingsExtensions": "拡張", - "@settingsBackup": { - "description": "Settings menu item - backup and restore page" + "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", + "@audioAnalysisDescription": { + "description": "Description for audio analysis tap-to-analyze prompt" }, - "librarySourceDownloaded": "ダウンロード済み", - "@librarySourceDownloaded": { - "description": "Badge for tracks downloaded via SpotiFLAC" + "audioAnalysisAnalyzing": "Analyzing audio...", + "@audioAnalysisAnalyzing": { + "description": "Loading text while analyzing audio" }, - "appearanceDynamicColor": "ダイナミックカラー", - "@appearanceDynamicColor": { - "description": "Material You dynamic colors" + "audioAnalysisSampleRate": "Sample Rate", + "@audioAnalysisSampleRate": { + "description": "Sample rate metric label" }, - "backupImportButton": "Choose backup file", - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@optionsEmbedMetadata": { - "description": "Settings toggle title for writing metadata into downloaded files" + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" }, - "appearanceTitle": "外観", - "downloadNeteaseIncludeRomanizationDisabled": "No romanization", - "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is off" + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" }, - "@libraryScanCancelled": { - "description": "Library scan status when a scan was cancelled" + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" }, - "tracksCount": "{count, plural, =1{1 個のトラック} other{{count} 個のトラック}}", - "@snackbarFailedToUpdateNamed": { - "description": "Snackbar when extension update fails in the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "audioAnalysisBitDepth": "Bit Depth", + "@audioAnalysisBitDepth": { + "description": "Bit depth metric label" }, - "@extensionQualityOptions": { - "description": "Capability - quality selection" + "audioAnalysisChannels": "Channels", + "@audioAnalysisChannels": { + "description": "Channels metric label" }, - "logClearSearch": "Clear search", - "trackSaveLyrics": "歌詞を保存 (.lrc)", - "@trackReEnrichSearching": { - "description": "Snackbar while searching metadata from internet for local items" + "audioAnalysisDuration": "Duration", + "@audioAnalysisDuration": { + "description": "Duration metric label" }, - "@editMetadataAutoFillNoResults": { - "description": "Snackbar when online metadata search returns no results" + "audioAnalysisNyquist": "Nyquist", + "@audioAnalysisNyquist": { + "description": "Nyquist frequency metric label" }, - "notifDownloadComplete": "Download Complete", - "snackbarAlreadyDownloaded": "「{trackName}」は既にダウンロードされています", - "folderOrganizationByAlbumSubtitle": "Separate folder for each album", - "storeRepoUrlHint": "https://github.com/user/repo", - "trackConvertDitherTriangularHp": "Triangular HP", - "lyricsModeBothSubtitle": "Embed and save .lrc file", - "trackReEnrichFieldExtra": "Genre, Label, Copyright", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" + "audioAnalysisFileSize": "Size", + "@audioAnalysisFileSize": { + "description": "File size metric label" }, - "sectionLyrics": "歌詞", - "@sectionLyrics": { - "description": "Settings section header" + "audioAnalysisDynamicRange": "Dynamic Range", + "@audioAnalysisDynamicRange": { + "description": "Dynamic range metric label" }, - "extensionStrategy": "ストラテジー: {strategy}", - "@extensionStrategy": { - "description": "Track matching strategy name", - "placeholders": { - "strategy": { - "type": "String" - } - } + "audioAnalysisPeak": "Peak", + "@audioAnalysisPeak": { + "description": "Peak amplitude metric label" }, - "@downloadNativeWorker": { - "description": "Setting title for Android native download worker" + "audioAnalysisRms": "RMS", + "@audioAnalysisRms": { + "description": "RMS level metric label" }, - "optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus", - "extensionsHomeFeedUse": "Use {extensionName} home feed", - "@cacheAppDirectoryDesc": { - "description": "Description of what app cache directory contains" + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" }, - "cancelDownloadTitle": "Cancel download?", - "updateWhatsNew": "新着情報", - "updateNewVersionReady": "新しいバージョンの準備ができています", - "@extensionVerificationClose": { - "description": "Button to dismiss the extension verification help dialog" + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" }, - "a11ySelectTrack": "Select track", - "libraryClearSubtitle": "Remove all scanned tracks", - "@libraryClearSubtitle": { - "description": "Subtitle for clear button" + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" }, - "@settingsDownloadNetworkSubtitle": { - "description": "Subtitle explaining network preference" + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" }, - "storeAnyVersion": "Any", - "@storeAnyVersion": { - "description": "Store detail value when any app version is accepted" + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" }, - "navStore": "Repo", - "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", - "libraryScanSettings": "スキャン設定", - "@libraryScanSettings": { - "description": "Section header for scan settings" + "audioAnalysisCutoffNotDetected": "Not detected", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" }, - "trackDuration": "再生時間", - "@trackDuration": { - "description": "Metadata label - track length" + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" }, - "extensionHealthOffline": "Offline", - "@extensionHealthOffline": { - "description": "Extension service health status - offline" + "audioAnalysisSamples": "Samples", + "@audioAnalysisSamples": { + "description": "Total samples metric label" }, - "editMetadataFieldArtist": "Artist", - "@editMetadataFieldArtist": { - "description": "Chip label for artist field in auto-fill selector" + "audioAnalysisRescan": "Re-analyze", + "@audioAnalysisRescan": { + "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" }, - "libraryInLibrary": "ライブラリ内", - "pressBackAgainToExit": "Press back again to exit", - "@pressBackAgainToExit": { - "description": "Exit confirmation message" + "audioAnalysisRescanning": "Re-analyzing audio...", + "@audioAnalysisRescanning": { + "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "setupNotificationGranted": "通知の権限が許可されました!", - "@setupNotificationGranted": { - "description": "Success message for notification permission" + "extensionsHomeFeedProvider": "Home Feed Provider", + "@extensionsHomeFeedProvider": { + "description": "Extensions page - label for home feed provider selector" }, - "settingsDonate": "Support Development", - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", - "backupContentsTitle": "Backup contents", - "updateDontRemind": "通知しない", - "@dialogDiscard": { - "description": "Dialog button - discard changes" + "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", + "@extensionsHomeFeedDescription": { + "description": "Extensions page - description for home feed provider picker" }, - "editMetadataAutoFillSearching": "Searching online...", - "discographyDownloadSelected": "選択済みをダウンロード", - "trackConvertResampler": "Resampler", - "queueFilteringIndicator": "Filtering...", - "@queueFilteringIndicator": { - "description": "Shown while filter results are being computed" + "extensionsHomeFeedAuto": "Auto", + "@extensionsHomeFeedAuto": { + "description": "Label for auto-selected search provider" }, - "@dialogDownloadAllTitle": { - "description": "Dialog title for bulk download confirmation" + "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", + "@extensionsHomeFeedAutoSubtitle": { + "description": "Extensions page - subtitle for auto home feed option" }, - "cueSplitConfirmMessage": "Split \"{album}\" into {count} individual FLAC files?\n\nFiles will be saved to the same directory.", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when folder organization is already set to playlist" + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" }, - "regionCountryCA": "Canada", - "cacheTempDirectory": "一時ディレクトリ", - "@cacheTempDirectory": { - "description": "Cache item title for temporary files directory" + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" }, - "libraryShowDuplicateIndicator": "Show Duplicate Indicator", - "@logFilterBySeverity": { - "description": "Filter dialog title" + "extensionsHomeFeedUse": "Use {extensionName} home feed", + "@extensionsHomeFeedUse": { + "description": "Extensions page - subtitle for a specific extension home feed option", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "homeSearchHintProvider": "Search with {providerName}...", - "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is off" + "extensionsNoHomeFeedExtensions": "No extensions with home feed", + "@extensionsNoHomeFeedExtensions": { + "description": "Extensions page - shown when no installed extension has home feed" }, - "optionsCheckUpdates": "更新を確認", - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", - "recentTypeAlbum": "アルバム", - "providerExtension": "拡張", - "@providerExtension": { - "description": "Label for extension-provided providers" + "cancelDownloadTitle": "Cancel download?", + "@cancelDownloadTitle": { + "description": "Dialog title when confirming cancellation of an active download" }, - "trackCoverNoSource": "No cover art source available", - "libraryFilterMetadata": "Metadata", - "albumFolderArtistYearAlbum": "アーティスト / [年] アルバム", - "@albumFolderArtistYearAlbum": { - "description": "Album folder option with year" - }, - "audioAnalysisClipping": "Clipping", - "@a11yOpenAlbumByArtistTrackCount": { - "description": "Accessibility label for opening an album item with track count", + "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", + "@cancelDownloadContent": { + "description": "Dialog body when confirming cancellation of an active download", "placeholders": { - "albumName": { - "type": "String" - }, - "artistName": { + "trackName": { "type": "String" - }, - "trackCount": { - "type": "int" } } }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", - "@backupExtensionsRestoreFailed": { - "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "cancelDownloadKeep": "Keep", + "@cancelDownloadKeep": { + "description": "Dialog button - keep the active download (do not cancel)" + }, + "queueCancelledTitle": "Download cancelled", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, + "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", + "@metadataSaveFailedFfmpeg": { + "description": "Snackbar error when FFmpeg fails to write metadata" + }, + "metadataSaveFailedStorage": "Failed to write metadata back to storage", + "@metadataSaveFailedStorage": { + "description": "Snackbar error when writing metadata file back to storage fails" + }, + "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", + "@snackbarFolderPickerFailed": { + "description": "Snackbar shown when folder picker fails to open", "placeholders": { - "count": { - "type": "int" + "error": { + "type": "String" } } }, - "channelStable": "安定版", - "@channelStable": { - "description": "Update channel - stable releases" - }, - "tutorialSettingsTip3": "Customize app theme and appearance", - "setupAppDocumentsFolderSubtitle": "Recommended - accessible via Files app", - "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", - "@a11yPlayTrackByArtist": { - "description": "Accessibility label for playing a local library track", + "notifDownloadingTrack": "Downloading {trackName}", + "@notifDownloadingTrack": { + "description": "Notification title while downloading a track", "placeholders": { "trackName": { "type": "String" - }, - "artistName": { - "type": "String" } } }, - "dialogRemove": "削除", - "extensionVerificationClose": "Close", - "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", - "@bulkDownloadPlaylistsButton": { - "description": "Button label for bulk downloading selected playlists", + "notifFinalizingTrack": "Finalizing {trackName}", + "@notifFinalizingTrack": { + "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" } } }, - "optionsAutoFallbackSubtitle": "Try other services if download fails", - "@optionsAutoFallbackSubtitle": { - "description": "Subtitle for auto fallback" - }, - "extensionPatternsCount": "{count} 個のパターン", - "@libraryFilterLocal": { - "description": "Filter chip - show only local library items" - }, - "errorUrlNotRecognizedMessage": "This link is not supported. Make sure the URL is correct and a compatible extension is installed.", - "@errorUrlNotRecognizedMessage": { - "description": "Error message - URL not recognized explanation" - }, - "@extensionVerificationBrowserSubtitleExternal": { - "description": "Subtitle when external browser is preferred for extension verification" - }, - "optionsArtistTagMode": "Artist Tag Mode", - "libraryFilterMetadataComplete": "Complete metadata", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" + "notifEmbeddingMetadata": "Embedding metadata...", + "@notifEmbeddingMetadata": { + "description": "Notification body while embedding metadata into a downloaded track" }, - "@extensionsVersion": { - "description": "Extension version display", + "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", + "@notifAlreadyInLibraryCount": { + "description": "Notification title when track is already in library, with count", "placeholders": { - "version": { - "type": "String" + "completed": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "@downloadNetworkAnySubtitle": { - "description": "Subtitle for any-network option in picker" - }, - "optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)", - "libraryScanning": "スキャン中...", - "@libraryScanning": { - "description": "Status during scan" - }, - "cacheRefresh": "Refresh", - "@actionShuffle": { - "description": "Tooltip for shuffle playback action" - }, - "optionsEmbedLyricsSubtitle": "Save synced lyrics alongside your downloaded tracks", - "@optionsEmbedLyricsSubtitle": { - "description": "Subtitle for embed lyrics" - }, - "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", - "extensionEnterValue": "Enter value", - "@settingsDownloadNetworkAny": { - "description": "Network option - use any connection" + "notifAlreadyInLibrary": "Already in Library", + "@notifAlreadyInLibrary": { + "description": "Notification title when track is already in library" }, - "collectionLoved": "Loved", - "@collectionLoved": { - "description": "Custom folder for favorite tracks" + "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", + "@notifDownloadCompleteCount": { + "description": "Notification title when download is complete, with count", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } }, - "storeAddRepoTitle": "Add Extension Repository", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" + "notifDownloadComplete": "Download Complete", + "@notifDownloadComplete": { + "description": "Notification title when a single download is complete" }, - "collectionNoPlaylistsYet": "No playlists yet", - "@collectionNoPlaylistsYet": { - "description": "Empty state title when user has no playlists" + "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", + "@notifDownloadsFinished": { + "description": "Notification title when queue finishes with some failures", + "placeholders": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } }, - "libraryCleanupMissingFilesSubtitle": "Remove entries for files that no longer exist", - "@libraryCleanupMissingFilesSubtitle": { - "description": "Subtitle for cleanup button" + "notifVerificationRequiredTitle": "Verification required", + "@notifVerificationRequiredTitle": { + "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" }, - "folderOrganizationByArtist": "アーティスト別", - "@folderOrganizationByArtist": { - "description": "Folder option - artist folders" + "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", + "@notifVerificationRequiredBody": { + "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, - "aboutTranslators": "翻訳者", - "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", - "editMetadataFieldTitle": "Title", - "@editMetadataFieldTitle": { - "description": "Chip label for title field in auto-fill selector" + "notifAllDownloadsComplete": "All Downloads Complete", + "@notifAllDownloadsComplete": { + "description": "Notification title when all downloads finish successfully" }, - "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", - "@downloadFilenameDescription": { - "description": "Description shown in filename format editor" + "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", + "@notifTracksDownloadedSuccess": { + "description": "Notification body for queue complete - how many tracks were downloaded", + "placeholders": { + "count": { + "type": "int" + } + } }, + "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -4882,371 +4926,430 @@ } } }, - "@libraryFolderNotExist": { - "description": "Error when folder doesn't exist" + "notifDownloadsCanceledTitle": "Downloads canceled", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" }, - "@playlistsCount": { - "description": "Playlist count display", + "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", + "@notifDownloadsCanceledBody": { + "description": "Notification body when downloads are canceled by the user", "placeholders": { "count": { "type": "int" } } }, - "@loadingSharedLink": { - "description": "Status when opening shared URL" - }, - "extensionServiceHealth": "Service health", - "@extensionServiceHealth": { - "description": "Extension capability label for service health checks" + "notifScanningLibrary": "Scanning local library", + "@notifScanningLibrary": { + "description": "Notification title while scanning local library" }, - "@collectionDeletePlaylistsMessage": { - "description": "Confirmation message for deleting selected playlists", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", + "@notifLibraryScanProgressWithTotal": { + "description": "Notification body for library scan progress when total is known", "placeholders": { - "count": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "percentage": { "type": "int" } } }, - "setupStorageDescription": "SpotiFLAC はダウンロードした音楽ファイルを保存するためにストレージの権限が必要です。", - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", - "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", - "appearanceThemeLight": "ライト", - "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", - "@queueEmptyHistorySubtitle": { - "description": "Empty state subtitle for download history" - }, - "backupRestoreFailed": "Failed to restore backup", - "@backupRestoreFailed": { - "description": "Snackbar when restore fails" - }, - "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", - "@queueFlacQueuedWithSkipped": { - "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", + "@notifLibraryScanProgressNoTotal": { + "description": "Notification body for library scan progress when total is unknown", "placeholders": { - "addedCount": { + "scanned": { "type": "int" }, - "skippedCount": { + "percentage": { "type": "int" } } }, - "@trackReplayGain": { - "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + "notifLibraryScanComplete": "Library scan complete", + "@notifLibraryScanComplete": { + "description": "Notification title when library scan finishes" }, - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", - "placeholders": { + "notifLibraryScanCompleteBody": "{count} tracks indexed", + "@notifLibraryScanCompleteBody": { + "description": "Notification body for library scan complete - number of indexed tracks", + "placeholders": { "count": { "type": "int" } } }, - "setupFolderChoose": "ダウンロードフォルダを選択", - "dialogDownloadAllTitle": "Download All", - "providerPriorityInfo": "If a track is not available on the first provider, the app will automatically try the next one.", - "@providerPriorityInfo": { - "description": "Info tip about fallback behavior" - }, - "@dialogDiscardChanges": { - "description": "Dialog title - unsaved changes warning" - }, - "discographyNoAlbums": "利用可能なアルバムがありません", - "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", - "cacheNoData": "キャッシュデータはありません", - "@cacheNoData": { - "description": "Label when cache category has no data" - }, - "tutorialStartDownloadSemantics": "Start download", - "@tutorialStartDownloadSemantics": { - "description": "Accessibility label for idle download button in tutorial demo" - }, - "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", - "aboutTitle": "アプリについて", - "@cueSplitButton": { - "description": "Button text to start CUE splitting" - }, - "appearanceHistoryView": "履歴の表示", - "audioAnalysisSampleRate": "Sample Rate", - "@settingsCache": { - "description": "Settings menu item - cache management" - }, - "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", - "cacheTrackLookup": "Track lookup cache", - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@downloadUsePrimaryArtistOnly": { - "description": "Setting - strip featured artists from folder name" - }, - "@regionCountryIN": { - "description": "Country name for SongLink region picker" - }, - "@libraryFilterQualityLossy": { - "description": "Filter option - lossy compressed audio" + "notifLibraryScanExcluded": "{count} excluded", + "@notifLibraryScanExcluded": { + "description": "Library scan complete suffix - excluded track count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionRefreshStatus": "Refresh status", - "notifAllDownloadsComplete": "All Downloads Complete", - "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", - "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", - "@editMetadataFieldDateHint": { - "description": "Hint text for the edit metadata date field" + "notifLibraryScanErrors": "{count} errors", + "@notifLibraryScanErrors": { + "description": "Library scan complete suffix - error count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "trackMetadataShare": "共有", - "@trackMetadataShare": { - "description": "Action button - share track" + "notifLibraryScanFailed": "Library scan failed", + "@notifLibraryScanFailed": { + "description": "Notification title when library scan fails" }, - "discographyDownloadAllSubtitle": "{albumCount} 個のリリースから {count} 個のトラック", - "settingsDonateSubtitle": "Buy the developer a coffee", - "libraryFilterDownloaded": "ダウンロード済み", - "downloadNetworkAnySubtitle": "Use WiFi or mobile data", - "@cueSplitNoAudioFile": { - "description": "Error when CUE audio file is missing" + "notifLibraryScanCancelled": "Library scan cancelled", + "@notifLibraryScanCancelled": { + "description": "Notification title when library scan is cancelled by the user" }, "notifLibraryScanStopped": "Scan stopped before completion.", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", - "trackCopyLyrics": "歌詞をコピー", - "@trackCopyLyrics": { - "description": "Action - copy lyrics to clipboard" - }, - "regionCountryAU": "Australia", - "downloadAlbumFolderStructure": "アルバムフォルダの構造", - "downloadMusixmatchAuto": "Auto", - "actionDismiss": "Dismiss", - "storeFilterAll": "すべて", - "extensionsDisabled": "無効", - "@logClearLogs": { - "description": "Clear button tooltip" - }, - "dialogDownloadAllMessage": "Download {count} tracks?", - "@optionsEmbedLyrics": { - "description": "Embed lyrics in audio files" - }, - "tutorialLibraryTitle": "あなたのライブラリ", - "optionsCheckUpdatesSubtitle": "Notify when new version is available", - "@optionsCheckUpdatesSubtitle": { - "description": "Subtitle for update check" + "@notifLibraryScanStopped": { + "description": "Notification body when library scan is cancelled" }, - "collectionPlaylist": "Playlist", - "@collectionPlaylist": { - "description": "Single playlist label" + "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", + "@notifDownloadingUpdate": { + "description": "Notification title while downloading an app update", + "placeholders": { + "version": { + "type": "String" + } + } }, - "dateMonthsAgo": "{count} ヶ月前", - "@dateMonthsAgo": { - "description": "Relative date - months ago", + "notifUpdateProgress": "{received} / {total} MB • {percentage}%", + "@notifUpdateProgress": { + "description": "Notification body showing update download progress", "placeholders": { - "count": { + "received": { + "type": "String" + }, + "total": { + "type": "String" + }, + "percentage": { "type": "int" } } }, - "@extensionRemoveButton": { - "description": "Button to uninstall extension" - }, - "collectionPlaylistRenamed": "Playlist renamed", - "collectionCreatePlaylist": "Create playlist", - "homeGoToAlbum": "Go to Album", - "@homeGoToAlbum": { - "description": "Context menu item to navigate to the album page" - }, - "folderOrganizationByArtistSubtitle": "Separate folder for each artist", - "@optionsClearHistory": { - "description": "Delete all download history" + "notifUpdateReady": "Update Ready", + "@notifUpdateReady": { + "description": "Notification title when app update download is complete" }, - "@searchAlbums": { - "description": "Search result category - albums" + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", + "@notifUpdateReadyBody": { + "description": "Notification body when app update is ready to install", + "placeholders": { + "version": { + "type": "String" + } + } }, - "@sectionDebug": { - "description": "Settings section header" + "notifUpdateFailed": "Update Failed", + "@notifUpdateFailed": { + "description": "Notification title when app update download fails" }, - "extensionsVersion": "バージョン {version}", - "@navHome": { - "description": "Bottom navigation - Home tab" + "notifUpdateFailedBody": "Could not download update. Try again later.", + "@notifUpdateFailedBody": { + "description": "Notification body when app update download fails" }, - "@editMetadataFieldDate": { - "description": "Chip label for date field in auto-fill selector" + "searchTracks": "Tracks", + "@searchTracks": { + "description": "Search filter label - tracks" }, - "downloadUsePrimaryArtistOnly": "Primary artist only for folders", - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", - "@setupStorageGranted": { - "description": "Success message for storage permission" + "homeSearchHintDefault": "Paste supported URL or search...", + "@homeSearchHintDefault": { + "description": "Default placeholder for the main search field on Home" }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", - "a11ySelectAlbum": "Select album {albumName}", - "@a11ySelectAlbum": { - "description": "Accessibility label for selecting an album", + "homeSearchHintProvider": "Search with {providerName}...", + "@homeSearchHintProvider": { + "description": "Placeholder for the main search field when a provider is selected", "placeholders": { - "albumName": { + "providerName": { "type": "String" } } }, - "aboutMobileSource": "モバイル版のソースコード", - "@aboutMobileSource": { - "description": "Link to mobile GitHub repo" + "homeImportCsvTooltip": "Import playlist (CSV, M3U)", + "@homeImportCsvTooltip": { + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, - "@extensionCustomUrlHandling": { - "description": "Extension detail section title for custom URL handling" + "homeChangeSearchProviderTooltip": "Change search provider", + "@homeChangeSearchProviderTooltip": { + "description": "Tooltip for the Home search provider picker" }, - "@downloadMusixmatchLanguageAuto": { - "description": "Subtitle when no language is set" + "actionPaste": "Paste", + "@actionPaste": { + "description": "Generic action - paste from clipboard" }, - "@cancelDownloadKeep": { - "description": "Dialog button - keep the active download (do not cancel)" + "tutorialSearchHint": "Paste or search...", + "@tutorialSearchHint": { + "description": "Placeholder shown in the tutorial search demo" }, - "libraryFilterSource": "ソース", - "@libraryFilterSource": { - "description": "Filter section - source type" + "tutorialDownloadCompletedSemantics": "Download completed", + "@tutorialDownloadCompletedSemantics": { + "description": "Accessibility label for completed download state in tutorial demo" }, - "sectionStorageAccess": "ストレージアクセス", - "logFilterBySeverity": "Filter logs by severity", - "libraryFolderNotExist": "Selected folder does not exist", - "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", - "albumFolderArtistAlbum": "アーティスト / アルバム", - "@albumFolderArtistAlbum": { - "description": "Album folder option" + "tutorialDownloadInProgressSemantics": "Download in progress", + "@tutorialDownloadInProgressSemantics": { + "description": "Accessibility label for active download state in tutorial demo" }, - "allFilesAccessDeniedMessage": "Permission was denied. Please enable 'All files access' manually in system settings.", - "@allFilesAccessDeniedMessage": { - "description": "Message when permission is permanently denied" + "tutorialStartDownloadSemantics": "Start download", + "@tutorialStartDownloadSemantics": { + "description": "Accessibility label for idle download button in tutorial demo" }, - "editMetadataSelectEmpty": "Empty only", - "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", - "@settingsAutoExportFailed": { - "description": "Setting toggle for auto-export" + "optionsEmbedMetadata": "Embed Metadata", + "@optionsEmbedMetadata": { + "description": "Settings toggle title for writing metadata into downloaded files" }, - "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", - "@tutorialSettingsTitle": { - "description": "Tutorial settings page title" + "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", + "@optionsEmbedMetadataSubtitleOn": { + "description": "Subtitle when metadata embedding is enabled" }, - "libraryFilterMetadataMissingGenre": "Missing genre", - "@appearanceSelectAccentColor": { - "description": "Accessibility label for picking an accent color", - "placeholders": { - "hex": { - "type": "String" - } - } + "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", + "@optionsEmbedMetadataSubtitleOff": { + "description": "Subtitle when metadata embedding is disabled" }, - "setupFolderDescription": "Select a folder where your downloaded music will be saved.", - "extensionDetailsTags": "Tags", - "unknownArtist": "Unknown Artist", - "trackFetchOnlineLyrics": "Fetch from Online", - "snackbarNoActionDefined": "No action defined for this button", - "@snackbarNoActionDefined": { - "description": "Snackbar when an extension button has no action configured" + "trackCoverNoEmbeddedArt": "No embedded album art found", + "@trackCoverNoEmbeddedArt": { + "description": "Message shown when a track file has no embedded cover art" }, - "downloadAllCount": "すべてダウンロード ({count})", - "@downloadAllCount": { - "description": "Download all button with count", + "trackCoverReplace": "Replace Cover", + "@trackCoverReplace": { + "description": "Button label for replacing selected cover art" + }, + "trackCoverPick": "Pick Cover", + "@trackCoverPick": { + "description": "Button label for selecting cover art" + }, + "trackCoverClearSelected": "Clear selected cover", + "@trackCoverClearSelected": { + "description": "Tooltip for clearing the newly selected cover art" + }, + "trackCoverCurrent": "Current cover", + "@trackCoverCurrent": { + "description": "Label for the currently embedded cover preview" + }, + "trackCoverSelected": "Selected cover", + "@trackCoverSelected": { + "description": "Label for the newly selected cover preview" + }, + "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", + "@trackCoverReplaceNotice": { + "description": "Notice shown when a new cover has been selected but not saved yet" + }, + "trackCoverResolution": "Cover resolution", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" + }, + "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" + }, + "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", + "@trackCoverResizeFailed": { + "description": "Error shown when resizing cover art before saving metadata fails" + }, + "actionStop": "Stop", + "@actionStop": { + "description": "Generic action - stop" + }, + "queueFinalizingDownload": "Finalizing download", + "@queueFinalizingDownload": { + "description": "Accessibility label for a queue item that is finalizing" + }, + "queueDownloadNext": "Download next", + "@queueDownloadNext": { + "description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it" + }, + "queueMoveUp": "Move up", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" + }, + "queueMoveDown": "Move down", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" + }, + "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" + }, + "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" + }, + "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" + }, + "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" + }, + "nowPlayingRepeatOff": "Repeat off", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" + }, + "nowPlayingRepeatAll": "Repeat all", + "@nowPlayingRepeatAll": { + "description": "Repeat toggle tooltip when the whole queue repeats" + }, + "nowPlayingRepeatOne": "Repeat one", + "@nowPlayingRepeatOne": { + "description": "Repeat toggle tooltip when the current track repeats" + }, + "queueNetworkFailedOffline": "{count} downloads failed while offline", + "@queueNetworkFailedOffline": { + "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", "placeholders": { "count": { "type": "int" } } }, - "downloadedAlbumDiscHeader": "ディスク {discNumber}", - "@backupInvalidFile": { - "description": "Snackbar when the chosen file is not a valid backup" + "queueDownloadedFileMissing": "Downloaded file missing", + "@queueDownloadedFileMissing": { + "description": "Accessibility label when a downloaded file is missing from disk" }, - "@extensionHooksAvailable": { - "description": "Post-processing hooks count", + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." + }, + "queueDownloadCompleted": "Download completed", + "@queueDownloadCompleted": { + "description": "Accessibility label for completed download state in queue" + }, + "queueRateLimitTitle": "Service rate limited", + "@queueRateLimitTitle": { + "description": "Title shown on a failed queue item when the download service rate limits requests" + }, + "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", + "@queueRateLimitMessage": { + "description": "Explanation shown on a failed queue item when the download service rate limits requests" + }, + "appearanceSelectAccentColor": "Select accent color {hex}", + "@appearanceSelectAccentColor": { + "description": "Accessibility label for picking an accent color", "placeholders": { - "count": { - "type": "int" + "hex": { + "type": "String" } } }, - "@logIssueTrackNotFoundSuggestion": { - "description": "Diagnostic badge suggestion when a track is unavailable" + "logAutoScrollOn": "Auto-scroll ON", + "@logAutoScrollOn": { + "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "@snackbarFileNotFound": { - "description": "Snackbar - file doesn't exist" + "logAutoScrollOff": "Auto-scroll OFF", + "@logAutoScrollOff": { + "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "extensionHealthOnline": "Online", - "@extensionHealthOnline": { - "description": "Extension service health status - online" + "logCopyLogs": "Copy logs", + "@logCopyLogs": { + "description": "Tooltip for copying logs" }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", - "trackOptionRemoveFromWishlist": "ウィッシュから削除", - "extensionsFallbackTitle": "Fallback Extensions", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" + "logClearSearch": "Clear search", + "@logClearSearch": { + "description": "Tooltip for clearing the log search field" }, - "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", - "@albumFolderAlbumOnly": { - "description": "Album folder option" + "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", + "@logIssueIspBlockingLabel": { + "description": "Diagnostic badge label when ISP blocking is detected" }, - "@albumFolderYearAlbumSubtitle": { - "description": "Folder structure example" + "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", + "@logIssueIspBlockingDescription": { + "description": "Diagnostic badge description for ISP blocking" }, - "downloadedAlbumDeleteSelected": "選択済みを削除", - "selectionSelectPlaylistsToDelete": "Select playlists to delete", - "@selectionSelectPlaylistsToDelete": { - "description": "Hint shown when no playlists are selected for deletion" + "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", + "@logIssueIspBlockingSuggestion": { + "description": "Diagnostic badge suggestion for ISP blocking" }, - "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", - "appearanceThemeDark": "ダーク", - "downloadedAlbumTapToSelect": "トラックをタップで選択", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } + "logIssueRateLimitedLabel": "RATE LIMITED", + "@logIssueRateLimitedLabel": { + "description": "Diagnostic badge label when the service rate limits requests" }, - "@backupRestored": { - "description": "Snackbar after a successful restore" + "logIssueRateLimitedDescription": "Too many requests to the service", + "@logIssueRateLimitedDescription": { + "description": "Diagnostic badge description for rate limiting" }, - "nowPlayingLibraryEmpty": "Your library is empty", - "@nowPlayingLibraryEmpty": { - "description": "Snackbar when shuffle library is requested but library has no tracks" + "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", + "@logIssueRateLimitedSuggestion": { + "description": "Diagnostic badge suggestion for rate limiting" }, - "editMetadataAutoFillNoResults": "No matching metadata found online", - "updateDownloading": "ダウンロード中...", - "trackLyricsSource": "Source: {source}", - "logFilterLevel": "レベル", - "logNoLogsYet": "まだログはありません", - "cacheSizeOnly": "{size}", - "@cacheSizeOnly": { - "description": "Cache size only", - "placeholders": { - "size": { - "type": "String" - } - } + "logIssueNetworkErrorLabel": "NETWORK ERROR", + "@logIssueNetworkErrorLabel": { + "description": "Diagnostic badge label for generic network errors" }, - "trackOpenInService": "Open in {serviceName}", - "@trackOpenInService": { - "description": "Button label to open a track in a named music service", + "logIssueNetworkErrorDescription": "Connection issues detected", + "@logIssueNetworkErrorDescription": { + "description": "Diagnostic badge description for generic network errors" + }, + "logIssueNetworkErrorSuggestion": "Check your internet connection", + "@logIssueNetworkErrorSuggestion": { + "description": "Diagnostic badge suggestion for generic network errors" + }, + "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", + "@logIssueTrackNotFoundLabel": { + "description": "Diagnostic badge label when a track is unavailable" + }, + "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", + "@logIssueTrackNotFoundDescription": { + "description": "Diagnostic badge description when a track is unavailable" + }, + "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", + "@logIssueTrackNotFoundSuggestion": { + "description": "Diagnostic badge suggestion when a track is unavailable" + }, + "clickableLookingUpArtist": "Looking up artist...", + "@clickableLookingUpArtist": { + "description": "Snackbar shown while clickable artist metadata is being resolved" + }, + "clickableInformationUnavailable": "{type} information not available", + "@clickableInformationUnavailable": { + "description": "Snackbar shown when clickable metadata cannot open a destination", "placeholders": { - "serviceName": { + "type": { "type": "String" } } }, - "@cacheLibraryCoverDesc": { - "description": "Description of what library cover cache contains" + "extensionDetailsTags": "Tags", + "@extensionDetailsTags": { + "description": "Section title for extension tags" }, - "libraryClearConfirmMessage": "This will remove all scanned tracks from your library. Your actual music files will not be deleted.", - "@dialogImportPlaylistMessage": { - "description": "Dialog message - import playlist confirmation", + "extensionDetailsInformation": "Information", + "@extensionDetailsInformation": { + "description": "Section title for extension metadata information" + }, + "extensionUtilityFunctions": "Utility Functions", + "@extensionUtilityFunctions": { + "description": "Capability label for utility-only extensions" + }, + "actionDismiss": "Dismiss", + "@actionDismiss": { + "description": "Generic action - dismiss" + }, + "setupChangeFolderTooltip": "Change folder", + "@setupChangeFolderTooltip": { + "description": "Tooltip for editing the selected download folder" + }, + "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", + "@a11yOpenTrackByArtist": { + "description": "Accessibility label for opening a track item", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" } } }, - "extensionsHomeFeedAuto": "Auto", - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "dateToday": "今日", "a11yOpenItem": "Open {itemType} {name}", "@a11yOpenItem": { "description": "Accessibility label for opening a generic item", @@ -5259,844 +5362,1187 @@ } } }, - "audioAnalysisBitDepth": "Bit Depth", - "editMetadataFieldTrackTotal": "Track Total", - "@editMetadataFieldTrackTotal": { - "description": "Label for total tracks field in the edit metadata sheet" - }, - "@editMetadataFieldDiscTotal": { - "description": "Label for total discs field in the edit metadata sheet" - }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", - "@notifDownloadingUpdate": { - "description": "Notification title while downloading an app update", + "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", + "@a11yOpenItemCount": { + "description": "Accessibility label for opening a grouped item with count", "placeholders": { - "version": { + "title": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@csvImportTracks": { - "description": "Label shown in quality picker for CSV import", + "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", + "@a11yOpenAlbumByArtistTrackCount": { + "description": "Accessibility label for opening an album item with track count", "placeholders": { - "count": { + "albumName": { + "type": "String" + }, + "artistName": { + "type": "String" + }, + "trackCount": { "type": "int" } } }, - "trackEditMetadata": "メタデータを編集", - "discographyDownloadAll": "すべてダウンロード", - "@discographyDownloadAll": { - "description": "Option - download entire discography" - }, - "@editMetadataFieldAlbum": { - "description": "Chip label for album field in auto-fill selector" - }, - "albumFolderArtistAlbumSubtitle": "アルバム/アーティスト名/アルバム名/", - "extensionHealthServiceUnknown": "Service status unknown", - "navHome": "ホーム", - "queueDownloadStarting": "Starting...", - "@dialogRemoveExtension": { - "description": "Dialog title - uninstall extension" - }, - "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", - "@appearanceAmoledDark": { - "description": "Theme option - pure black" - }, - "qualityHiResFlac": "ハイレゾ FLAC", - "selectionSelected": "{count} 個を選択済み", - "extensionDetailsInformation": "Information", - "@extensionDetailsInformation": { - "description": "Section title for extension metadata information" - }, - "discographyDownload": "ディスコグラフィをダウンロード", - "editMetadataFieldCopyright": "Copyright", - "@setupOpenSettings": { - "description": "Button to open system settings" - }, - "libraryFilterSort": "Sort", - "cacheLibraryCoverDesc": "Cover art extracted from local music files. Will re-extract on next scan.", - "dialogRemoveExtension": "拡張を削除", - "backupExportSectionTitle": "Create backup", - "downloadEmbedLyricsDisabled": "Enable metadata embedding first", - "openInOtherServices": "Open in Other Services", - "actionSelectAll": "すべて選択", - "settingsDownloadNetworkSubtitle": "Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.", - "downloadFolderOrganization": "フォルダ構成", - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", - "@tutorialWelcomeTip2": { - "description": "Tutorial welcome tip 2" - }, - "selectionAllSelected": "すべてのトラックを選択済み", - "@selectionAllSelected": { - "description": "Status - all items selected" - }, - "settingsLogsSubtitle": "デバッグのためのアプリログを表示", - "albumFolderYearAlbumSubtitle": "アルバム/[2005] アルバム名/", - "cancelDownloadKeep": "Keep", - "optionsDetailedLoggingOn": "詳細なログを記録しています", - "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" + "a11yTrackByArtist": "{trackName} by {artistName}", + "@a11yTrackByArtist": { + "description": "Accessibility label for a queue or list track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "regionCountryJP": "Japan", - "notifUpdateFailed": "Update Failed", - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", - "@trackLyricsSaved": { - "description": "Snackbar after lyrics saved", + "a11ySelectAlbum": "Select album {albumName}", + "@a11ySelectAlbum": { + "description": "Accessibility label for selecting an album", "placeholders": { - "fileName": { + "albumName": { "type": "String" } } }, - "downloadLocationSubtitle": "Choose where to save your downloaded tracks", - "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", - "lyricsProvidersDisabledSection": "Disabled ({count})", - "@dateDaysAgo": { - "description": "Relative date - days ago", + "a11yOpenAlbum": "Open album {albumName}", + "@a11yOpenAlbum": { + "description": "Accessibility label for opening an album", "placeholders": { - "count": { - "type": "int" + "albumName": { + "type": "String" } } }, - "librarySourceLocal": "ローカル", - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", - "sectionService": "サービス", - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", - "@lyricsProviderQqMusicDesc": { - "description": "Description for QQ Music provider" + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" }, - "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", - "selectionTapPlaylistsToSelect": "Tap playlists to select", - "notifUpdateFailedBody": "Could not download update. Try again later.", - "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", - "artistPopular": "人気", - "extensionRemoveButton": "拡張を削除", - "allFilesAccessEnabledSubtitle": "Can write to any folder", - "@allFilesAccessEnabledSubtitle": { - "description": "Subtitle when all files access is enabled" + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" }, - "extensionsSearchProvider": "検索のプロバイダー", - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", - "selectionBatchConvertConfirmTitle": "一括変換", - "extensionMetadataProvider": "メタデータのプロバイダー", - "queueDownloadedFileMissing": "Downloaded file missing", - "logClearLogs": "ログを消去", - "@downloadAppleQqMultiPerson": { - "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", - "@tutorialWelcomeTip1": { - "description": "Tutorial welcome tip 1" + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" }, - "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", - "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", - "@regionCountryUS": { - "description": "Country name for SongLink region picker" + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" }, - "trackArtist": "アーティスト", - "extensionCustomUrlHandling": "Custom URL Handling", - "appearanceDynamicColorSubtitle": "壁紙の色を使用する", - "@appearanceDynamicColorSubtitle": { - "description": "Subtitle for dynamic color" + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" }, - "searchSortDefault": "Default", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" + "settingsApp": "App", + "@settingsApp": { + "description": "Settings menu item - app settings" }, - "albumFolderStructureDescription": "Choose how album folders are structured", - "@albumFolderStructureDescription": { - "description": "Album folder structure picker description" + "settingsAppSubtitle": "Updates, data, extension repo, debug", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" }, - "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", - "@libraryBuiltInPreviewPlayerSubtitle": { - "description": "Subtitle for built-in preview player option" + "sectionMetadataProviders": "Providers", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" }, - "storageModeAppFolder": "App Folder (Recommended)", - "@actionPause": { - "description": "Action button - pause download" + "sectionDuplicates": "Duplicates", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" }, - "actionPaste": "Paste", - "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", - "downloadNativeWorker": "Native download worker", - "releaseTypeEp": "EP", - "@releaseTypeEp": { - "description": "Badge label for EP releases" + "sectionLyricsProviderOptions": "Provider Options", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", - "cacheRefreshStats": "状態を更新", - "collectionPlaylistChangeCover": "カバー画像を変更", - "@collectionPlaylistChangeCover": { - "description": "Bottom sheet action to pick a custom cover image for a playlist" + "metadataProvidersTitle": "Metadata Provider Priority", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" }, - "optionsClearHistory": "ダウンロード履歴を消去", - "trackGenre": "ジャンル", - "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", - "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", - "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", - "libraryFilterMetadataMissingArtist": "Missing artist", - "extensionsNoCustomSearch": "カスタム検索の拡張はありません", - "@extensionsTitle": { - "description": "Extensions page title" + "metadataProvidersSubtitle": "Drag to set search and metadata source order", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" }, - "extensionDownloadProvider": "ダウンロードのプロバイダー", - "@extensionDownloadProvider": { - "description": "Capability - provides downloads" + "downloadDeduplication": "Skip Duplicate Downloads", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" }, - "lyricsMode": "歌詞モード", - "aboutReportIssueSubtitle": "問題が発生した場合に報告してください", - "@downloadSeparateSinglesFolder": { - "description": "Setting - separate folder for singles" + "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" }, - "appearanceAmoledDark": "AMOLED ダーク", - "logIssueNetworkErrorDescription": "Connection issues detected", - "folderOrganizationByArtistAlbumSubtitle": "Nested folders for artist and album", - "@libraryForceFullScanSubtitle": { - "description": "Subtitle for force full scan button" + "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", + "@downloadDeduplicationWithQualityVariants": { + "description": "Deduplication subtitle when separate quality versions are allowed" }, - "setupGrantPermission": "権限を許可", - "lyricsProvidersDescription": "Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.", - "dateDaysAgo": "{count} 日前", - "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", - "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" }, - "nowPlayingDetails": "Details", - "collectionWishlistEmptyTitle": "Wishlist is empty", - "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", - "@snackbarExtensionUpdatedVersion": { - "description": "Snackbar after updating an extension from the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - }, - "version": { - "type": "String" - } - } + "downloadQualityVariants": "Allow different quality versions", + "@downloadQualityVariants": { + "description": "Setting to retain multiple quality versions of the same track" }, - "extensionHealthServiceDegraded": "Service degraded", - "selectionConvertNoConvertible": "No convertible tracks selected", - "setupStorageGranted": "ストレージの権限が許可されました!", - "downloadAllowLocalNetwork": "Allow Local Network Access", - "nowPlayingNoLyrics": "No lyrics in this file", - "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", - "@selectionDeleteTracksCount": { - "description": "Button label for deleting selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", + "@downloadQualityVariantsDescription": { + "description": "Description for retaining multiple quality versions" }, - "@libraryForceFullScan": { - "description": "Button to force a complete rescan of library" + "trackOptionDownloadQualityVariant": "Download another quality", + "@trackOptionDownloadQualityVariant": { + "description": "Track menu action to download another quality version" }, - "notifLibraryScanExcluded": "{count} excluded", - "@aboutPaxsenixSubtitle": { - "description": "Subtitle for Paxsenix special thanks entry on the about page" + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" }, - "setupChangeFolderTooltip": "Change folder", - "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", - "@logIssueIspBlockingDescription": { - "description": "Diagnostic badge description for ISP blocking" + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" }, - "libraryClear": "ライブラリを消去", - "collectionRemoveFromPlaylist": "Remove from playlist", - "@collectionRemoveFromPlaylist": { - "description": "Tooltip for removing track from playlist" + "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", + "@editMetadataFieldDateHint": { + "description": "Hint text for the edit metadata date field" }, - "backupIncludeSecrets": "Include extension credentials", - "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", - "storeCategoryMetadata": "Metadata", - "@trackLyricsEmbedded": { - "description": "Snackbar - lyrics saved to file" + "editMetadataFieldTrackTotal": "Track Total", + "@editMetadataFieldTrackTotal": { + "description": "Label for total tracks field in the edit metadata sheet" }, "editMetadataFieldDiscTotal": "Disc Total", - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" + "@editMetadataFieldDiscTotal": { + "description": "Label for total discs field in the edit metadata sheet" }, - "libraryFilterLocal": "ローカル", - "tutorialDownloadInProgressSemantics": "Download in progress", - "searchSortDurationLong": "Duration (Longest)", - "@appearanceLanguage": { - "description": "Language setting title" + "editMetadataFieldComposer": "Composer", + "@editMetadataFieldComposer": { + "description": "Label for composer field in the edit metadata sheet" }, - "libraryAbout": "ローカルライブラリについて", - "@libraryAbout": { - "description": "Section header for about info" + "editMetadataFieldComment": "Comment", + "@editMetadataFieldComment": { + "description": "Label for comment field in the edit metadata sheet" }, - "cueSplitNoAudioFile": "Audio file not found for this CUE sheet", - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", - "appearanceSelectAccentColor": "Select accent color {hex}", - "@homeAlbumInfoUnavailable": { - "description": "Snackbar when album info cannot be loaded" + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" }, - "trackReplayGain": "Rescan ReplayGain", - "downloadSeparateSinglesFolder": "シングルのフォルダを分割", - "trackAlbumArtist": "アルバムアーティスト", - "qualityFlacLossless": "FLAC ロスレス", - "@extensionVerificationHelpMessageWaiting": { - "description": "Dialog message when verification may need manual browser help" + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" }, - "tutorialSettingsTitle": "Customize Your Experience", - "extensionActionFailed": "Action failed", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", - "trackCoverNoEmbeddedArt": "No embedded album art found", - "@trackCoverNoEmbeddedArt": { - "description": "Message shown when a track file has no embedded cover art" + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", - "setupStorageAccessMessageAndroid11": "Android 11+ requires \"All files access\" permission to save files to your chosen download folder.", - "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", - "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", - "optionsPrimaryProvider": "プライマリーのプロバイダー", - "@optionsPrimaryProvider": { - "description": "Main search provider setting" + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" }, - "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", - "collectionAddedToLoved": "\"{trackName}\" added to Loved", - "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", - "homeAlbumInfoUnavailable": "Album info not available", - "settingsLyrics": "Lyrics", - "extensionVerificationBrowserExternal": "External", - "regionCountryIN": "India", - "extensionHealthUnknown": "Unknown", - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", - "settingsAutoExportFailed": "ダウンロードの自動エクスポートに失敗しました", - "logFilterSection": "フィルター", - "dialogDiscardChanges": "変更を破棄しますか?", - "@qualityHiResFlacSubtitle": { - "description": "Technical spec for hi-res" + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" }, - "searchTracks": "Tracks", - "searchAlbums": "アルバム", - "trackConvertFormat": "変換の形式", - "metadataProviderPriorityTitle": "メタデータの優先度", - "libraryFolderHint": "タップでフォルダを選択", - "downloadedAlbumDeleteMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from this album?\n\nThis will also delete the files from storage.", - "@downloadedAlbumDeleteMessage": { - "description": "Delete confirmation with count", + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, + "editMetadataAdvanced": "Advanced", + "@editMetadataAdvanced": { + "description": "Expandable section label for advanced metadata fields" + }, + "libraryFilterMetadataMissingTrackNumber": "Missing track number", + "@libraryFilterMetadataMissingTrackNumber": { + "description": "Filter option - items missing track number" + }, + "libraryFilterMetadataMissingDiscNumber": "Missing disc number", + "@libraryFilterMetadataMissingDiscNumber": { + "description": "Filter option - items missing disc number" + }, + "libraryFilterMetadataMissingArtist": "Missing artist", + "@libraryFilterMetadataMissingArtist": { + "description": "Filter option - items missing artist" + }, + "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", + "@libraryFilterMetadataIncorrectIsrcFormat": { + "description": "Filter option - items with an invalid ISRC format" + }, + "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, + "libraryFilterMetadataMissingLabel": "Missing label", + "@libraryFilterMetadataMissingLabel": { + "description": "Filter option - items missing record label" + }, + "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", + "@collectionDeletePlaylistsMessage": { + "description": "Confirmation message for deleting selected playlists", "placeholders": { "count": { "type": "int" } } }, - "trackAlbum": "アルバム", - "updateAvailable": "更新が利用可能です", - "optionsEmbedLyrics": "歌詞を埋め込む", - "trackReEnrichProgress": "Re-enriching metadata...", - "@trackReEnrichProgress": { - "description": "Snackbar while re-enriching metadata" - }, - "audioAnalysisPeak": "Peak", - "@audioAnalysisPeak": { - "description": "Peak amplitude metric label" - }, - "optionsExtensionStoreSubtitle": "Show Repo tab in navigation", - "settingsTitle": "設定", - "@settingsAbout": { - "description": "Settings section - app info" + "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", + "@collectionPlaylistsDeleted": { + "description": "Snackbar after deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheExploreFeed": "Explore feed cache", - "@dialogDownloadPlaylistsMessage": { - "description": "Dialog message for bulk playlist download confirmation", + "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", + "@collectionAddedTracksToPlaylist": { + "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { - "trackCount": { + "count": { "type": "int" }, - "playlistCount": { - "type": "int" + "playlistName": { + "type": "String" } } }, - "downloadedAlbumSelectedCount": "{count} 個を選択済み", - "downloadAskQualitySubtitle": "Show quality picker for each download", - "filenameShowAdvancedTags": "高度なタグを表示", - "@filenameShowAdvancedTags": { - "description": "Toggle label for showing advanced filename tags" - }, - "@editMetadataFieldComment": { - "description": "Label for comment field in the edit metadata sheet" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", - "cacheLibraryCover": "ライブラリのカバーキャッシュ", - "actionShuffle": "Shuffle", - "backupCreated": "Backup created", - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "actionCreate": "Create", - "snackbarAddedToQueueGeneric": "Added to queue", - "downloadedAlbumDownloadedCount": "{count} 個をダウンロード済み", - "snackbarLoadingCueSheet": "Loading CUE sheet...", - "@trackCoverClearSelected": { - "description": "Tooltip for clearing the newly selected cover art" - }, - "aboutOriginalCreator": "オリジナルの SpotiFLAC の作者", - "a11yTrackByArtist": "{trackName} by {artistName}", - "audioAnalysisDynamicRange": "Dynamic Range", - "homeChangeSearchProviderTooltip": "Change search provider", - "loadingSharedLink": "共有リンクを読み込み中...", - "lyricsModeEmbedSubtitle": "FLAC メタデータに保存された歌詞", - "setupNotificationBackgroundDescription": "Get notified about download progress and completion. This helps you track downloads when the app is in background.", - "snackbarViewQueue": "キューを表示", - "@audioAnalysisDuration": { - "description": "Duration metric label" - }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", - "backupRestored": "Backup restored successfully", - "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", - "@trackConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless conversion of a single file", + "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", + "@collectionAddedTracksToPlaylistWithExisting": { + "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { - "sourceFormat": { - "type": "String" + "count": { + "type": "int" }, - "targetFormat": { + "playlistName": { "type": "String" }, - "quality": { - "type": "String" + "alreadyCount": { + "type": "int" } } }, - "discographySelectAlbumsSubtitle": "Choose specific albums or singles", - "@discographySelectAlbumsSubtitle": { - "description": "Subtitle for select albums option" - }, - "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", - "errorUrlFetchFailed": "Failed to load content from this link. Please try again.", - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", - "dialogSave": "保存", - "trackReEnrichSearching": "Searching metadata online...", - "regionCountryUS": "United States", - "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", - "downloadFilenameFormat": "ファイル名の形式", - "cueSplitTitle": "分割 CUE シート", - "settingsAppSubtitle": "Updates, data, extension repo, debug", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "@setupPermissionRequiredMessage": { - "description": "Generic permission required message", + "itemCount": "{count} {count, plural, =1{item} other{items}}", + "@itemCount": { + "description": "Generic item count label", "placeholders": { - "permissionType": { - "type": "String" + "count": { + "type": "int" } } }, - "errorMissingExtensionSource": "{item} を読み込めません: 拡張ソースがありません", - "albumFolderAlbumOnlySubtitle": "アルバム/アルバム名/", - "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", - "extensionVerificationHelpTitleManual": "Open verification manually", - "dialogDiscard": "破棄", - "storageModeSaf": "Custom Folder (SAF)", - "errorRateLimited": "レート制限", - "downloadSelectQuality": "品質を選択", - "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", - "collectionFoldersTitle": "My folders", - "progressFetchingMetadata": "メタデータを取得中... {current}/{total}", - "settingsDownloadNetworkAny": "Wi-Fi + モバイルデータ", - "audioAnalysisDuration": "Duration", - "audioAnalysisAnalyzing": "Analyzing audio...", - "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", - "editMetadataFieldDiscNum": "Disc #", - "@editMetadataFieldDiscNum": { - "description": "Chip label for disc number field in auto-fill selector" - }, - "@noTracksFoundForAlbum": { - "description": "Empty state message when an album has no tracks" - }, - "previewPlay": "Play preview", - "setupPermissionRequiredMessage": "最適な体験を得るには {permissionType} の権限が必要です。この権限は設定で後から変更できます。", - "aboutVersion": "バージョン", - "qualityHiResFlacSubtitle": "24-bit / 最大 96kHz", - "audioAnalysisSamples": "Samples", - "libraryFilterQualityHiRes": "ハイレゾ (24bit)", - "sectionMetadataProviders": "Providers", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "trackCopyright": "著作権", - "libraryForceFullScanSubtitle": "Rescan all files, ignoring cache", - "trackCopiedToClipboard": "クリップボードにコピーしました", - "optionsEmbedMetadata": "Embed Metadata", - "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", - "@collectionAddedTracksToPlaylistWithExisting": { - "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", + "@trackReEnrichSuccessWithFailures": { + "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", "placeholders": { - "count": { + "successCount": { "type": "int" }, - "playlistName": { - "type": "String" + "total": { + "type": "int" }, - "alreadyCount": { + "failedCount": { "type": "int" } } }, - "storeCategoryIntegration": "Integration", - "storeClearFilters": "フィルターを消去", - "navSettings": "設定", - "@homeRecent": { - "description": "Section header for recent searches" + "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "@selectionDeleteTracksCount": { + "description": "Button label for deleting selected tracks", + "placeholders": { + "count": { + "type": "int" + } + } }, - "sectionApp": "アプリ", - "@sectionLanguage": { - "description": "Settings section header for language" + "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", + "@queueDownloadSpeedStatus": { + "description": "Queue status while downloading with speed", + "placeholders": { + "speed": { + "type": "String" + } + } }, - "downloadFilterContributingDisabled": "Full Album Artist string used", - "albumFolderArtistAlbumSinglesSubtitle": "Artist/Album/ and Artist/Singles/", - "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", - "lyricsProvidersSaved": "Lyrics provider priority saved", - "@trackReplayGainFailed": { - "description": "Snackbar message when ReplayGain scan/write fails" + "queueDownloadStarting": "Starting...", + "queueCheckingDownloadSession": "Checking download session...", + "queueResolvingDownloadMetadata": "Resolving track metadata...", + "queueResolvingDownloadStream": "Preparing audio stream...", + "queueWaitingForVerification": "Waiting for verification...", + "queueResumingAfterVerification": "Resuming after verification...", + "@queueDownloadStarting": { + "description": "Queue status before download progress is available" }, - "trackTrackName": "トラック名", - "homeRecent": "最近", - "recentEmpty": "No recent items yet", - "cacheClearAll": "すべてのキャッシュを消去", - "trackReEnrichFieldReleaseInfo": "Date & ISRC", - "regionCountryMX": "Mexico", - "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", - "editMetadataFieldAlbum": "Album", - "settingsAbout": "アプリについて", - "libraryFilterTitle": "フィルター", - "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", - "extensionHooksAvailable": "{count} 個のフックが利用可能です", - "backupContentsSettings": "App settings", - "trackLyricsEmbedded": "Lyrics embedded successfully", - "optionsUpdateChannelPreview": "プレビューリリースを入手", - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "libraryForceFullScan": "強制フルスキャン", - "snackbarProviderPrioritySaved": "プロバイダーの優先度を保存しました", - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", - "extensionServiceStatus": "Service Status", - "dateWeeksAgo": "{count} 週間前", - "historyFilterSingles": "シングル", - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", - "trackLyricsSaved": "Lyrics saved to {fileName}", - "cacheClearAllConfirmTitle": "すべてのキャッシュを消去しますか?", - "noTracksFoundForAlbum": "No tracks found for this album", - "sectionLanguage": "言語", - "@logIssueTrackNotFoundDescription": { - "description": "Diagnostic badge description when a track is unavailable" + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." }, - "setupSelectFolder": "フォルダを選択", - "dateYesterday": "昨日", - "collectionAddToPlaylist": "Add to playlist", - "snackbarUnsupportedAudioFormat": "Unsupported audio format", - "libraryScanCancelled": "Scan cancelled", - "appearanceLanguage": "アプリの言語", - "extensionsTitle": "拡張", - "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", - "permissionNotification": "Notification", - "notifUpdateReady": "Update Ready", - "lyricsModeDescription": "Choose how lyrics are saved with your downloads", - "downloadFrom": "ダウンロード元", - "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", - "cueSplitSplitting": "Splitting CUE sheet... ({current}/{total})", - "trackOptionAddToWishlist": "ウィッシュリストに追加", - "settingsBackup": "Backup & Restore", - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", - "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", - "extensionsNoDownloadProvider": "ダウンロードプロバイダーの拡張はありません", - "libraryFilterSortGenreAsc": "Genre (A-Z)", - "trackReplayGainFailed": "Failed to add ReplayGain tags", - "collectionPlaylistRemoveCover": "カバー画像を削除", - "storeEmptyNoResults": "No extensions found", - "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", - "editMetadataFieldComment": "Comment", - "settingsMetadata": "Metadata", - "settingsCache": "ストレージとキャッシュ", - "providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.", - "libraryFilterAll": "すべて", - "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", - "extensionsProviderPrioritySection": "プロバイダーの優先度", - "storeChangeRepoTooltip": "Change repository", - "snackbarFailedToInstall": "拡張のインストールに失敗しました", - "libraryScanSubtitle": "オーディオファイルをスキャン", - "snackbarExtensionInstalled": "{extensionName} をインストールしました。", - "setupOpenSettings": "設定を開く", - "extensionsInstalledSection": "インストール済みの拡張", - "aboutLinks": "リンク", - "trackCoverClearSelected": "Clear selected cover", - "libraryAutoScanWeekly": "Weekly", - "downloadMusixmatchLanguageAuto": "Auto (original language)", - "optionsDefaultSearchTab": "Default Search Tab", - "downloadPrimaryArtistOnlyOn": "Primary only: On", - "folderOrganizationDescription": "ダウンロードしたファイルをフォルダに整理する", - "@folderOrganizationDescription": { - "description": "Folder organization sheet description" + "a11ySelectTrack": "Select track", + "@a11ySelectTrack": { + "description": "Accessibility label for selecting a track" }, - "lyricsModeEmbed": "Embed in file", - "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", - "@extensionsSearchProviderDescription": { - "description": "Search provider setting description" + "a11yDeselectTrack": "Deselect track", + "@a11yDeselectTrack": { + "description": "Accessibility label for deselecting a track" }, - "libraryFilterQualityLossy": "Lossy", - "actionPause": "一時停止", - "csvImportTracks": "{count} tracks from CSV", - "actionGo": "Go", - "sectionDebug": "デバッグ", - "editMetadataFieldDate": "Date", - "timeHoursAgo": "{count, plural, =1{1 時間前} other{{count} 時間前}}", - "sectionPerformance": "パフォーマンス", - "extensionsDownloadPrioritySubtitle": "ダウンロードサービスの順序を設定", - "cacheAppDirectoryDesc": "HTTP responses, WebView data, and other temporary app data.", - "sectionData": "データ", - "notifFinalizingTrack": "Finalizing {trackName}", - "snackbarFileNotFound": "ファイルがありません", - "extensionQualityOptions": "品質のオプション", - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", - "storeRepoDialogTitle": "Extension Repository", - "extensionsSearchProviderDescription": "トラックの検索に使用するサービスを選択してください", - "albumFolderAlbumOnly": "アルバムのみ", - "nowPlayingOpenInExternalPlayer": "Open in external player", - "cueSplitButton": "Split into Tracks", - "updateRequiredTitle": "Update required", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" + "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", + "@a11yPlayTrackByArtist": { + "description": "Accessibility label for playing a local library track", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", + "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", + "@storeExtensionsCount": { + "description": "Store extension result count", "placeholders": { "count": { "type": "int" } } }, - "appearanceHeroAnimations": "Hero animations", - "@appearanceHeroAnimations": { - "description": "Toggle for shared-element (Hero) transitions" + "storeRequiresVersion": "Requires v{version}+", + "@storeRequiresVersion": { + "description": "Store compatibility badge for minimum app version", + "placeholders": { + "version": { + "type": "String" + } + } }, - "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", - "@appearanceHeroAnimationsSubtitle": { - "description": "Subtitle for the Hero animations toggle" + "actionGo": "Go", + "@actionGo": { + "description": "Generic action button label" + }, + "logIssueSummary": "Issue Summary", + "@logIssueSummary": { + "description": "Header for log issue analysis summary" + }, + "logTotalErrors": "Total errors: {count}", + "@logTotalErrors": { + "description": "Total error count in log issue analysis", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "logAffectedDomains": "Affected: {domains}", + "@logAffectedDomains": { + "description": "Affected domains in log issue analysis", + "placeholders": { + "domains": { + "type": "String" + } + } + }, + "libraryScanCancelled": "Scan cancelled", + "@libraryScanCancelled": { + "description": "Library scan status when a scan was cancelled" + }, + "libraryScanCancelledSubtitle": "You can retry the scan when ready.", + "@libraryScanCancelledSubtitle": { + "description": "Library scan status subtitle after cancellation" + }, + "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", + "@libraryDownloadsHistoryExcluded": { + "description": "Library count note for downloaded history items excluded from the local list", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadNativeWorker": "Native download worker", + "@downloadNativeWorker": { + "description": "Setting title for Android native download worker" + }, + "downloadNativeWorkerSubtitle": "Android background service for extension downloads", + "@downloadNativeWorkerSubtitle": { + "description": "Setting subtitle for Android native download worker" + }, + "extensionServiceStatus": "Service Status", + "@extensionServiceStatus": { + "description": "Extension detail section header for service status" + }, + "extensionServiceHealth": "Service health", + "@extensionServiceHealth": { + "description": "Extension capability label for service health checks" + }, + "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", + "@extensionHealthChecksConfigured": { + "description": "Extension service health check count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", + "@extensionOauthConnectHint": { + "description": "Hint for an OAuth login link field before connecting Spotify" + }, + "extensionLastChecked": "Last checked {time}", + "@extensionLastChecked": { + "description": "Timestamp for the latest extension service health check", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "extensionRefreshStatus": "Refresh status", + "@extensionRefreshStatus": { + "description": "Tooltip for refreshing extension service health status" + }, + "extensionCustomUrlHandling": "Custom URL Handling", + "@extensionCustomUrlHandling": { + "description": "Extension detail section title for custom URL handling" + }, + "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", + "@extensionCustomUrlHandlingSubtitle": { + "description": "Extension detail subtitle for custom URL handling" + }, + "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", + "@extensionCustomUrlHandlingShareHint": { + "description": "Extension detail hint explaining share-to-app URL handling" + }, + "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", + "@extensionSettingsCount": { + "description": "Count of settings exposed by an extension quality option", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionHealthOnline": "Online", + "@extensionHealthOnline": { + "description": "Extension service health status - online" + }, + "extensionHealthDegraded": "Degraded", + "@extensionHealthDegraded": { + "description": "Extension service health status - degraded" + }, + "extensionHealthOffline": "Offline", + "@extensionHealthOffline": { + "description": "Extension service health status - offline" + }, + "extensionHealthNotConfigured": "Not configured", + "@extensionHealthNotConfigured": { + "description": "Extension service health status - not configured" + }, + "extensionHealthUnknown": "Unknown", + "@extensionHealthUnknown": { + "description": "Extension service health status - unknown" + }, + "extensionHealthRequired": "required", + "@extensionHealthRequired": { + "description": "Label for a required extension service health check" + }, + "extensionSettingNotSet": "Not set", + "@extensionSettingNotSet": { + "description": "Value shown when an extension setting has no value" + }, + "extensionActionFailed": "Action failed", + "@extensionActionFailed": { + "description": "Fallback error when an extension action fails without details" + }, + "extensionEnterValue": "Enter value", + "@extensionEnterValue": { + "description": "Hint for editing an extension setting value" + }, + "extensionHealthServiceOnline": "Service online", + "@extensionHealthServiceOnline": { + "description": "Tooltip for online extension service" + }, + "extensionHealthServiceDegraded": "Service degraded", + "@extensionHealthServiceDegraded": { + "description": "Tooltip for degraded extension service" + }, + "extensionHealthServiceOffline": "Service offline", + "@extensionHealthServiceOffline": { + "description": "Tooltip for offline extension service" + }, + "extensionHealthServiceUnknown": "Service status unknown", + "@extensionHealthServiceUnknown": { + "description": "Tooltip for unknown extension service health" + }, + "audioAnalysisStereo": "Stereo", + "@audioAnalysisStereo": { + "description": "Audio channel layout label - stereo" + }, + "audioAnalysisMono": "Mono", + "@audioAnalysisMono": { + "description": "Audio channel layout label - mono" + }, + "trackOpenInService": "Open in {serviceName}", + "@trackOpenInService": { + "description": "Button label to open a track in a named music service", + "placeholders": { + "serviceName": { + "type": "String" + } + } + }, + "trackLyricsEmbeddedSource": "Embedded", + "@trackLyricsEmbeddedSource": { + "description": "Lyrics source label for embedded lyrics" + }, + "unknownAlbum": "Unknown Album", + "@unknownAlbum": { + "description": "Fallback album name when metadata is missing" + }, + "unknownArtist": "Unknown Artist", + "@unknownArtist": { + "description": "Fallback artist name when metadata is missing" + }, + "permissionAudio": "Audio", + "@permissionAudio": { + "description": "Audio permission type label" + }, + "permissionStorage": "Storage", + "@permissionStorage": { + "description": "Storage permission type label" + }, + "permissionNotification": "Notification", + "@permissionNotification": { + "description": "Notification permission type label" + }, + "errorInvalidFolderSelected": "Invalid folder selected", + "@errorInvalidFolderSelected": { + "description": "Error when the selected folder is invalid" + }, + "storeAnyVersion": "Any", + "@storeAnyVersion": { + "description": "Store detail value when any app version is accepted" + }, + "storeCategoryMetadata": "Metadata", + "@storeCategoryMetadata": { + "description": "Store extension category - metadata" + }, + "storeCategoryDownload": "Download", + "@storeCategoryDownload": { + "description": "Store extension category - download" + }, + "storeCategoryUtility": "Utility", + "@storeCategoryUtility": { + "description": "Store extension category - utility" + }, + "storeCategoryLyrics": "Lyrics", + "@storeCategoryLyrics": { + "description": "Store extension category - lyrics" + }, + "storeCategoryIntegration": "Integration", + "@storeCategoryIntegration": { + "description": "Store extension category - integration" + }, + "artistReleases": "Releases", + "@artistReleases": { + "description": "Section header for all artist releases" + }, + "editMetadataSelectNone": "None", + "@editMetadataSelectNone": { + "description": "Button to clear selected fields for auto-fill" + }, + "queueRetryAllFailed": "Retry {count} failed", + "@queueRetryAllFailed": { + "description": "Button to retry every failed download in the queue", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "settingsSaveDownloadHistory": "Save download history", + "@settingsSaveDownloadHistory": { + "description": "Settings switch title for storing completed downloads in history" + }, + "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "@settingsSaveDownloadHistorySubtitle": { + "description": "Settings switch subtitle for storing completed downloads in history" + }, + "dialogDisableHistoryTitle": "Turn off download history?", + "@dialogDisableHistoryTitle": { + "description": "Confirmation dialog title shown before disabling download history" + }, + "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "@dialogDisableHistoryMessage": { + "description": "Confirmation dialog message shown before disabling download history" + }, + "dialogDisableAndClear": "Turn off and clear", + "@dialogDisableAndClear": { + "description": "Confirmation action to disable download history and clear existing entries" + }, + "openInOtherServices": "Open in Other Services", + "@openInOtherServices": { + "description": "Title and tooltip for finding the current collection in other services" + }, + "shareSheetNoExtensions": "No other compatible services", + "@shareSheetNoExtensions": { + "description": "Empty state when no extensions can be searched for cross-service links" + }, + "shareSheetNotFound": "Not found", + "@shareSheetNotFound": { + "description": "Cross-service share sheet row subtitle when a service has no match" + }, + "shareSheetCopyLink": "Copy Link", + "@shareSheetCopyLink": { + "description": "Tooltip for copying a cross-service link" + }, + "shareSheetLinkCopied": "{service} link copied", + "@shareSheetLinkCopied": { + "description": "Snackbar after copying a cross-service link", + "placeholders": { + "service": {} + } + }, + "libraryPlayback": "Playback", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "External player", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Built-in preview player", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Now Playing", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Nothing is playing", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimize", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Up next", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, + "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, + "nowPlayingOpenInExternalPlayer": "Open in external player", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Player", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lyrics", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "No lyrics in this file", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Your library is empty", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Shuffle on", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Play in order", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Shuffle library", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Queue is empty", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "No metadata available", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" + }, + "snackbarPlayingNext": "Playing next", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Added to queue", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Shuffle", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" + }, + "downloadPrimaryArtistOnlyOn": "Primary only: On", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Original quality", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "trackConvertDithering": "Dithering", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "Resampler", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "None", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "Triangular HP", + "@trackConvertDitherTriangularHp": { + "description": "Lossless conversion high-pass triangular dither option" + }, + "trackConvertResamplerSwr": "SWR", + "@trackConvertResamplerSwr": { + "description": "Lossless conversion default FFmpeg swresample resampler option" + }, + "trackConvertResamplerSoxr": "SoXr", + "@trackConvertResamplerSoxr": { + "description": "Lossless conversion SoX resampler option" + }, + "updateSeeReleaseNotes": "See release notes for details.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Unknown title", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Play next", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Add to queue", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + }, + "version": { + "type": "String" + } + } + }, + "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" + }, + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" + }, + "trackCoverOnline": "Online cover", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" + }, + "regionCountryUS": "United States", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" + }, + "regionCountryGB": "United Kingdom", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" + }, + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloads": "Concurrent downloads", - "@settingsConcurrentDownloads": { - "description": "Setting title - how many tracks download at the same time" + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", - "@settingsConcurrentDownloadsSubtitle": { - "description": "Subtitle explaining the concurrent downloads picker" + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsOne": "1 track at a time", - "@concurrentDownloadsOne": { - "description": "Concurrent downloads option - sequential" + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsCount": "Up to {count} tracks at once", - "@concurrentDownloadsCount": { - "description": "Concurrent downloads option - parallel", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalization": "Volume normalization", - "@libraryPlaybackNormalization": { - "description": "Toggle title for ReplayGain playback normalization in the built-in player" + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", - "@libraryPlaybackNormalizationSubtitle": { - "description": "Subtitle explaining playback volume normalization" + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysis": "Audio analysis cache", - "@cacheAudioAnalysis": { - "description": "Cache item title for saved audio analysis results" + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", - "@cacheAudioAnalysisDesc": { - "description": "Description of what audio analysis cache contains" + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginal": "Keep original file", - "@trackConvertKeepOriginal": { - "description": "Toggle to preserve the source file during conversion" + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", - "@trackConvertKeepOriginalDescription": { - "description": "Description for preserving the source file during conversion" + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" }, - "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", - "@trackConvertConfirmKeepOriginal": { - "description": "Confirmation message when the source file will be preserved", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" }, - "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": { - "description": "Batch conversion confirmation when source files will be preserved", - "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" }, - "downloadFolderAccessLostTitle": "Download folder access lost", - "@downloadFolderAccessLostTitle": { - "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" }, - "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", - "@downloadFolderAccessLostSubtitle": { - "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" }, - "downloadFolderReselect": "Re-select folder", - "@downloadFolderReselect": { - "description": "Button that reopens the folder picker to restore download folder access" + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" }, - "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", - "@downloadErrorSafPermissionLost": { - "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" + "extensionVerificationHelpTitleManual": "Open verification manually", + "@extensionVerificationHelpTitleManual": { + "description": "Dialog title when automatic browser launch for verification fails" }, - "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", - "@downloadErrorFolderAccessLost": { - "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" + "extensionVerificationHelpTitleWaiting": "Verification still waiting", + "@extensionVerificationHelpTitleWaiting": { + "description": "Dialog title when verification is taking longer than expected" }, - "notifVerificationRequiredTitle": "Verification required", - "@notifVerificationRequiredTitle": { - "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" + "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", + "@extensionVerificationHelpMessageManual": { + "description": "Dialog message when automatic browser launch for verification fails" }, - "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", - "@notifVerificationRequiredBody": { - "description": "Notification body prompting the user to return to the app to solve a verification challenge" + "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", + "@extensionVerificationHelpMessageWaiting": { + "description": "Dialog message when verification may need manual browser help" }, - "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", - "@downloadDeduplicationWithQualityVariants": { - "description": "Deduplication subtitle when separate quality versions are allowed" + "extensionVerificationClose": "Close", + "@extensionVerificationClose": { + "description": "Button to dismiss the extension verification help dialog" }, - "downloadQualityVariants": "Allow different quality versions", - "@downloadQualityVariants": { - "description": "Setting to retain multiple quality versions of the same track" + "extensionVerificationCopyLink": "Copy link", + "@extensionVerificationCopyLink": { + "description": "Button to copy the extension verification URL" }, - "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", - "@downloadQualityVariantsDescription": { - "description": "Description for retaining multiple quality versions" + "extensionVerificationLinkCopied": "Verification link copied", + "@extensionVerificationLinkCopied": { + "description": "Snackbar after copying the extension verification URL" }, - "trackOptionDownloadQualityVariant": "Download another quality", - "@trackOptionDownloadQualityVariant": { - "description": "Track menu action to download another quality version" + "extensionVerificationOpenBrowser": "Open browser", + "@extensionVerificationOpenBrowser": { + "description": "Button to open the extension verification URL in a browser" }, - "queueCheckingDownloadSession": "Checking download session...", - "queueResolvingDownloadMetadata": "Resolving track metadata...", - "queueResolvingDownloadStream": "Preparing audio stream...", - "queueWaitingForVerification": "Waiting for verification...", - "queueResumingAfterVerification": "Resuming after verification...", "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", - "collectionExportM3u": "Export as M3U8", - "collectionExportM3uDone": "Exported {exported} of {total} tracks", - "collectionExportM3uNone": "No downloaded files to export", - "collectionExportM3uFailed": "Export failed", - "trackOpenOn": "Open on...", - "trackOpenOnNoLinks": "No platform links found for this track.", - "libraryReviewDuplicates": "Review duplicates", - "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", - "duplicatesTitle": "Duplicates", - "duplicatesEmpty": "No duplicate tracks found.", - "duplicatesKeepBest": "Keep best", - "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", - "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", - "downloadAutoConvert": "Auto-convert after download", - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "downloadAutoConvertFormat": "Output format", - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "downloadAutoConvertBitrate": "Output quality", - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "appearanceForceBlur": "Always use blur effects", - "appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "editMetadataAutoFillSource": "Metadata source", - "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", - "editMetadataAutoFillFind": "Find metadata", - "editMetadataAutoFillPreview": "Data from {source}", - "editMetadataAutoFillCoverAvailable": "Cover artwork available", - "editMetadataAutoFillApply": "Apply selected data", - "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", - "libraryDefaultView": "Default view", - "libraryDefaultViewLastUsed": "Last used", - "audioAnalysisCutoffNotDetected": "Not detected", - "queueCancelledTitle": "Download cancelled", - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", - "trackCoverResolution": "Cover resolution", - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", - "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", - "queueDownloadNext": "Download next", - "queueMoveUp": "Move up", - "queueMoveDown": "Move down", - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", - "nowPlayingRepeatOff": "Repeat off", - "nowPlayingRepeatAll": "Repeat all", - "nowPlayingRepeatOne": "Repeat one", - "queueNetworkFailedOffline": "{count} downloads failed while offline", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "libraryFilterMetadataMissingIsrc": "Missing ISRC" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From 793b189aad7818b63ae85754b38f44e86a0461e1 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:43 +0700 Subject: [PATCH 10/59] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 620 ++++++++++++++++++++++++++++++++++------ 1 file changed, 533 insertions(+), 87 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 1ae0153be..a0061c682 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -461,6 +461,18 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" + }, + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" + }, + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" + }, "aboutAppDescription": "음악 메타데이터를 검색하고, 확장 기능을 관리하고, 라이브러리를 정리하세요", "@aboutAppDescription": { "description": "App description in header card" @@ -790,6 +802,79 @@ } } }, + "collectionExportM3u": "M3U8로 내보내기", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" + }, + "collectionExportM3uDone": "{total} 개의 트랙 중 {exported} 개 내보내기 완료", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", + "placeholders": { + "exported": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "collectionExportM3uNone": "내보낼 다운로드된 파일이 없음", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" + }, + "collectionExportM3uFailed": "내보내기 실패", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" + }, + "trackOpenOn": "음원 플랫폼에서 열기", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" + }, + "trackOpenOnNoLinks": "이 트랙에 대한 플랫폼 링크를 찾을 수 없습니다", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" + }, + "libraryReviewDuplicates": "중복된 트랙 보기", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" + }, + "libraryReviewDuplicatesSubtitle": "중복 저장된 트랙 찾기", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" + }, + "duplicatesTitle": "중복", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" + }, + "duplicatesEmpty": "중복된 트랙이 없습니다", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" + }, + "duplicatesKeepBest": "최고 음질 선택", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" + }, + "duplicatesKeepBestMessage": "\"{trackName}\"의 {count} 개의 저음질 복사본을 삭제하시겠습니까?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", + "placeholders": { + "count": { + "type": "int" + }, + "trackName": { + "type": "String" + } + } + }, + "duplicatesDeleteCopyMessage": "\"{trackName}\"의 복사본을 삭제하시겠습니까?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } + }, "@dialogImportPlaylistMessage": { "description": "Dialog message - import playlist confirmation", "placeholders": { @@ -1491,6 +1576,10 @@ "@trackAudioQuality": { "description": "Metadata label - audio quality" }, + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" + }, "trackReleaseDate": "발매일자", "@trackReleaseDate": { "description": "Metadata label - release date" @@ -1906,6 +1995,42 @@ "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, + "downloadAutoConvert": "다운로드 후 자동 변환", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" + }, + "downloadAutoConvertSubtitle": "다운로드가 완료되면 더 작은 손실 압축 형식으로 변환합니다. 원본은 변환이 성공한 후에만 교체됩니다", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" + }, + "downloadAutoConvertFormat": "출력 형식", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" + }, + "downloadAutoConvertFormatSubtitle": "새로 완료된 다운로드에 사용되는 손실 압축 형식을 선택하세요", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" + }, + "downloadAutoConvertBitrate": "출력 음질", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" + }, + "downloadAutoConvertBitrateSubtitle": "비트 전송률이 높을수록 더 많은 디테일을 보존하지만 파일 크기가 커집니다", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" + }, + "downloadAutoConvertMp3Subtitle": "플레이어 및 기기 전반에 걸쳐 최상의 호환성", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" + }, + "downloadAutoConvertM4aSubtitle": "M4A 컨테이너의 효율적인 AAC 오디오", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" + }, + "downloadAutoConvertOpusSubtitle": "최신 플레이어에 최적화된 효율성", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" + }, "downloadLossy320Format": "손실 압축 320kbps 형식", "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" @@ -2006,6 +2131,14 @@ "@appearanceHeroAnimationsSubtitle": { "description": "Subtitle for the Hero animations toggle" }, + "appearanceForceBlur": "항상 블러 효과 사용", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" + }, + "appearanceForceBlurSubtitle": "기본적으로 비활성화된 기기에서도 하단바 블러 효과를 활성화합니다. 성능이 저하될 수 있습니다", + "@appearanceForceBlurSubtitle": { + "description": "Subtitle for the force-blur toggle" + }, "queueClearAll": "모두 지우기", "@queueClearAll": { "description": "Button - clear all queue items" @@ -2176,6 +2309,10 @@ "@recentEmpty": { "description": "Empty state text for recent access list" }, + "recentClearAllMessage": "최근 활동을 모두 지우시겠습니까? 다운로드 기록 및 음악 파일은 삭제되지 않습니다", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, "recentShowAllDownloads": "모든 다운로드 표시", "@recentShowAllDownloads": { "description": "Button label to unhide hidden downloads in recent access" @@ -2376,6 +2513,53 @@ "@libraryFolderHint": { "description": "Placeholder when no folder selected" }, + "libraryAddFolder": "라이브러리 폴더 추가", + "@libraryAddFolder": { + "description": "Action to add another local library source" + }, + "libraryAddFolderSubtitle": "내부 저장소, SD 카드, SSD 또는 다른 외부 드라이브", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "온라인", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "오프라인. 이 트랙을 복원하려면 저장소를 다시 연결하세요", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "비활성화됨", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{total} 개의 파일 중 {scanned} 개 스캔 완료 ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", + "placeholders": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { + "type": "String" + } + } + }, + "libraryExternalStorage": "외부 저장소", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" + }, + "libraryRemoveFolder": "라이브러리 폴더 제거", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" + }, + "libraryRemoveFolderMessage": "SpotiFLAC Mobile에서 이 폴더와 색인된 트랙을 제거하시겠습니까? 저장소의 오디오 파일은 삭제되지 않습니다", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" + }, "libraryShowDuplicateIndicator": "중복 표시기 표시", "@libraryShowDuplicateIndicator": { "description": "Toggle for duplicate indicator in search" @@ -3032,6 +3216,66 @@ "@trackReEnrichSelectAll": { "description": "Select all fields checkbox in re-enrich" }, + "trackReEnrichModeIsrc": "ISRC만", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" + }, + "trackReEnrichModeIsrcSubtitle": "다른 태그를 변경하지 않고 녹화 식별자를 찾아 추가합니다", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" + }, + "trackReEnrichModeMissing": "누락된 태그 채우기", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" + }, + "trackReEnrichModeMissingSubtitle": "기존 값을 유지하고 비어 있는 필드만 채웁니다", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" + }, + "trackReEnrichModeReplace": "선택된 태그 업데이트", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" + }, + "trackReEnrichModeReplaceSubtitle": "온라인 메타데이터로 대체할 기존 값을 선택하세요", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "업데이트할 태그", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "변경 사항 검토", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "메타데이터 변경 사항 검토", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{trackCount} 개의 트랙에 걸쳐 제안된 {changeCount} 개의 변경 사항", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", + "placeholders": { + "changeCount": { + "type": "int" + }, + "trackCount": { + "type": "int" + } + } + }, + "trackReEnrichNoChanges": "선택한 트랙에 대한 메타데이터 변경 사항이 없습니다", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" + }, + "trackReEnrichApplyChanges": "변경 사항 적용", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "온라인에서 새로고침", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, "trackEditMetadata": "메타데이터 편집", "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" @@ -3657,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (중국 노래에 적합, 프록시 경유)", + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -4012,7 +4256,7 @@ "@downloadNetworkCompatibilityMode": { "description": "Setting for legacy TLS/network handling" }, - "downloadNetworkCompatibilityModeEnabled": "레거시 HTTP 엔드포인트 허용; TLS 검증은 계속 활성화됨", + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", "@downloadNetworkCompatibilityModeEnabled": { "description": "Subtitle when network compatibility mode is on" }, @@ -4194,6 +4438,47 @@ "@editMetadataAutoFillDesc": { "description": "Description for the auto-fill section" }, + "editMetadataAutoFillSource": "메타데이터 출처", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" + }, + "editMetadataAutoFillSourceAutomatic": "자동 (제공자 우선순위)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" + }, + "editMetadataAutoFillFind": "메타데이터 찾기", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" + }, + "editMetadataAutoFillPreview": "{source}의 데이터", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } + }, + "editMetadataAutoFillCoverAvailable": "커버 아트워크 사용 가능", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" + }, + "editMetadataAutoFillApply": "선택된 데이터 적용", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" + }, + "editMetadataAutoFillDoneFromSource": "{source}에서 {count} 개의 {count, plural, =1{필드} other{필드}}가 채워짐", + "@editMetadataAutoFillDoneFromSource": { + "description": "Snackbar confirming fields applied from a selected metadata source", + "placeholders": { + "count": { + "type": "int" + }, + "source": { + "type": "String" + } + } + }, "editMetadataAutoFillFetch": "가져오기 & 채우기", "@editMetadataAutoFillFetch": { "description": "Button label to fetch online metadata and fill selected fields" @@ -4322,6 +4607,27 @@ "@queueEmptySinglesSubtitle": { "description": "Empty state subtitle for single track downloads" }, + "queuePlaylistCount": "{count, plural, =1{1 개의 재생목록} other{{count} 개의 재생목록}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueEmptyPlaylistsSubtitle": "트랙을 정리하려면 재생목록을 만드세요", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" + }, + "libraryDefaultView": "기본 보기", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" + }, + "libraryDefaultViewLastUsed": "최근 사용", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" + }, "queueEmptyHistory": "다운로드 기록이 없음", "@queueEmptyHistory": { "description": "Empty state title when download history is empty" @@ -4422,6 +4728,10 @@ "@audioAnalysisSpectralCutoff": { "description": "Estimated spectral cutoff metric label" }, + "audioAnalysisCutoffNotDetected": "감지되지 않음", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" + }, "audioAnalysisChannelStats": "채널별 통계", "@audioAnalysisChannelStats": { "description": "Per-channel audio analysis section label" @@ -4492,6 +4802,14 @@ "@cancelDownloadKeep": { "description": "Dialog button - keep the active download (do not cancel)" }, + "queueCancelledTitle": "다운로드 취소됨", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "이 다운로드가 취소되었습니다. 다시 시도하거나, 다운로드 목록에서 제거하세요", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, "metadataSaveFailedFfmpeg": "FFmpeg를 통해 메타데이터 저장 실패", "@metadataSaveFailedFfmpeg": { "description": "Snackbar error when FFmpeg fails to write metadata" @@ -4759,7 +5077,7 @@ }, "homeImportCsvTooltip": "재생목록 가져오기 (CSV, M3U)", "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, "homeChangeSearchProviderTooltip": "검색 제공자 변경", "@homeChangeSearchProviderTooltip": { @@ -4825,6 +5143,18 @@ "@trackCoverReplaceNotice": { "description": "Notice shown when a new cover has been selected but not saved yet" }, + "trackCoverResolution": "커버 해상도", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" + }, + "trackCoverResolutionHint": "저장할 때 이미지의 긴 변 길이를 설정합니다. 확대해도 이미지의 세부 정보는 늘어나지 않습니다", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" + }, + "trackCoverResizeFailed": "앨범 커버를 원하는 크기로 조정할 수 없습니다. 다른 크기나 이미지를 사용해 보세요", + "@trackCoverResizeFailed": { + "description": "Error shown when resizing cover art before saving metadata fails" + }, "actionStop": "중지", "@actionStop": { "description": "Generic action - stop" @@ -4833,10 +5163,63 @@ "@queueFinalizingDownload": { "description": "Accessibility label for a queue item that is finalizing" }, + "queueDownloadNext": "다음 다운로드", + "@queueDownloadNext": { + "description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it" + }, + "queueMoveUp": "위로 이동", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" + }, + "queueMoveDown": "아래로 이동", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" + }, + "editMetadataMusicBrainzButton": "MusicBrainz에서 가져오기", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" + }, + "editMetadataMusicBrainzFilled": "MusicBrainz에서 업데이트됨", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" + }, + "editMetadataMusicBrainzNothing": "MusicBrainZ에서 발견되지 않음", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" + }, + "editMetadataMusicBrainzNeedsIsrc": "ISRC 태그 필요", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" + }, + "nowPlayingRepeatOff": "반복 끄기", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" + }, + "nowPlayingRepeatAll": "모두 반복", + "@nowPlayingRepeatAll": { + "description": "Repeat toggle tooltip when the whole queue repeats" + }, + "nowPlayingRepeatOne": "한 곡 반복", + "@nowPlayingRepeatOne": { + "description": "Repeat toggle tooltip when the current track repeats" + }, + "queueNetworkFailedOffline": "오프라인 중에 {count} 개의 다운로드 실패", + "@queueNetworkFailedOffline": { + "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", + "placeholders": { + "count": { + "type": "int" + } + } + }, "queueDownloadedFileMissing": "다운로드된 파일이 없음", "@queueDownloadedFileMissing": { "description": "Accessibility label when a downloaded file is missing from disk" }, + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." + }, "queueDownloadCompleted": "다운로드 완료", "@queueDownloadCompleted": { "description": "Accessibility label for completed download state in queue" @@ -5144,6 +5527,34 @@ "@editMetadataFieldComment": { "description": "Label for comment field in the edit metadata sheet" }, + "trackAlbumType": "발매 유형", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" + }, + "editMetadataFieldAlbumTypeHint": "앨범, 싱글, EP, 컴필레이션...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" + }, + "editMetadataFieldExplicit": "성인용", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" + }, + "editMetadataFieldExplicitHint": "이 트랙에 성인용 콘텐츠가 포함되어 있음을 표시합니다", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" + }, + "metadataExplicitValue": "성인용", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" + }, + "editMetadataFieldUpc": "UPC / 바코드", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" + }, + "editMetadataFieldUpcHint": "숫자 UPC, EAN, 또는 GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, "editMetadataAdvanced": "고급", "@editMetadataAdvanced": { "description": "Expandable section label for advanced metadata fields" @@ -5164,6 +5575,10 @@ "@libraryFilterMetadataIncorrectIsrcFormat": { "description": "Filter option - items with an invalid ISRC format" }, + "libraryFilterMetadataMissingIsrc": "ISRC 누락", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, "libraryFilterMetadataMissingLabel": "레이블 누락", "@libraryFilterMetadataMissingLabel": { "description": "Filter option - items missing record label" @@ -5264,6 +5679,9 @@ "@queueDownloadStarting": { "description": "Queue status before download progress is available" }, + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." + }, "a11ySelectTrack": "트랙 선택", "@a11ySelectTrack": { "description": "Accessibility label for selecting a track" @@ -5630,11 +6048,56 @@ "description": "Title for the playback queue sheet" }, "nowPlayingPreviousTrack": "이전 트랙", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, "nowPlayingNextTrack": "다음 트랙", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, "nowPlayingDetails": "트랙 세부 정보", "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, "nowPlayingOpenInExternalPlayer": "외부 플레이어에서 열기", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" @@ -6010,93 +6473,76 @@ "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": "정보 & 후원", - "collectionExportM3u": "M3U8로 내보내기", - "collectionExportM3uDone": "{total} 개의 트랙 중 {exported} 개 내보내기 완료", - "collectionExportM3uNone": "내보낼 다운로드된 파일이 없음", - "collectionExportM3uFailed": "내보내기 실패", - "trackOpenOn": "음원 플랫폼에서 열기", - "trackOpenOnNoLinks": "이 트랙에 대한 플랫폼 링크를 찾을 수 없습니다", - "libraryReviewDuplicates": "중복된 트랙 보기", - "libraryReviewDuplicatesSubtitle": "중복 저장된 트랙 찾기", - "duplicatesTitle": "중복", - "duplicatesEmpty": "중복된 트랙이 없습니다", - "duplicatesKeepBest": "최고 음질 선택", - "duplicatesKeepBestMessage": "\"{trackName}\"의 {count} 개의 저음질 복사본을 삭제하시겠습니까?", - "duplicatesDeleteCopyMessage": "\"{trackName}\"의 복사본을 삭제하시겠습니까?", - "downloadAutoConvert": "다운로드 후 자동 변환", - "downloadAutoConvertSubtitle": "다운로드가 완료되면 더 작은 손실 압축 형식으로 변환합니다. 원본은 변환이 성공한 후에만 교체됩니다", - "downloadAutoConvertFormat": "출력 형식", - "downloadAutoConvertFormatSubtitle": "새로 완료된 다운로드에 사용되는 손실 압축 형식을 선택하세요", - "downloadAutoConvertBitrate": "출력 음질", - "downloadAutoConvertBitrateSubtitle": "비트 전송률이 높을수록 더 많은 디테일을 보존하지만 파일 크기가 커집니다", - "downloadAutoConvertMp3Subtitle": "플레이어 및 기기 전반에 걸쳐 최상의 호환성", - "downloadAutoConvertM4aSubtitle": "M4A 컨테이너의 효율적인 AAC 오디오", - "downloadAutoConvertOpusSubtitle": "최신 플레이어에 최적화된 효율성", - "appearanceForceBlur": "항상 블러 효과 사용", - "appearanceForceBlurSubtitle": "기본적으로 비활성화된 기기에서도 하단바 블러 효과를 활성화합니다. 성능이 저하될 수 있습니다", - "recentClearAllMessage": "최근 활동을 모두 지우시겠습니까? 다운로드 기록 및 음악 파일은 삭제되지 않습니다", - "libraryAddFolder": "라이브러리 폴더 추가", - "libraryAddFolderSubtitle": "내부 저장소, SD 카드, SSD 또는 다른 외부 드라이브", - "librarySourceOnline": "온라인", - "librarySourceOffline": "오프라인. 이 트랙을 복원하려면 저장소를 다시 연결하세요", - "librarySourceDisabled": "비활성화됨", - "librarySourceScanCount": "{total} 개의 파일 중 {scanned} 개 스캔 완료 ({progress}%)", - "libraryExternalStorage": "외부 저장소", - "libraryRemoveFolder": "라이브러리 폴더 제거", - "libraryRemoveFolderMessage": "SpotiFLAC Mobile에서 이 폴더와 색인된 트랙을 제거하시겠습니까? 저장소의 오디오 파일은 삭제되지 않습니다", - "trackReEnrichModeIsrc": "ISRC만", - "trackReEnrichModeIsrcSubtitle": "다른 태그를 변경하지 않고 녹화 식별자를 찾아 추가합니다", - "trackReEnrichModeMissing": "누락된 태그 채우기", - "trackReEnrichModeMissingSubtitle": "기존 값을 유지하고 비어 있는 필드만 채웁니다", - "trackReEnrichModeReplace": "선택된 태그 업데이트", - "trackReEnrichModeReplaceSubtitle": "온라인 메타데이터로 대체할 기존 값을 선택하세요", - "trackReEnrichFieldsTitle": "업데이트할 태그", - "trackReEnrichReview": "변경 사항 검토", - "trackReEnrichReviewTitle": "메타데이터 변경 사항 검토", - "trackReEnrichReviewSubtitle": "{trackCount} 개의 트랙에 걸쳐 제안된 {changeCount} 개의 변경 사항", - "trackReEnrichNoChanges": "선택한 트랙에 대한 메타데이터 변경 사항이 없습니다", - "trackReEnrichApplyChanges": "변경 사항 적용", - "trackReEnrichRefreshOnline": "온라인에서 새로고침", - "editMetadataAutoFillSource": "메타데이터 출처", - "editMetadataAutoFillSourceAutomatic": "자동 (제공자 우선순위)", - "editMetadataAutoFillFind": "메타데이터 찾기", - "editMetadataAutoFillPreview": "{source}의 데이터", - "editMetadataAutoFillCoverAvailable": "커버 아트워크 사용 가능", - "editMetadataAutoFillApply": "선택된 데이터 적용", - "editMetadataAutoFillDoneFromSource": "{source}에서 {count} 개의 {count, plural, =1{필드} other{필드}}가 채워짐", - "queuePlaylistCount": "{count, plural, =1{1 개의 재생목록} other{{count} 개의 재생목록}}", - "queueEmptyPlaylistsSubtitle": "트랙을 정리하려면 재생목록을 만드세요", - "libraryDefaultView": "기본 보기", - "libraryDefaultViewLastUsed": "최근 사용", - "audioAnalysisCutoffNotDetected": "감지되지 않음", - "queueCancelledTitle": "다운로드 취소됨", - "queueCancelledMessage": "이 다운로드가 취소되었습니다. 다시 시도하거나, 다운로드 목록에서 제거하세요", - "trackCoverResolution": "커버 해상도", - "trackCoverResolutionHint": "저장할 때 이미지의 긴 변 길이를 설정합니다. 확대해도 이미지의 세부 정보는 늘어나지 않습니다", - "trackCoverResizeFailed": "앨범 커버를 원하는 크기로 조정할 수 없습니다. 다른 크기나 이미지를 사용해 보세요", - "queueDownloadNext": "다음 다운로드", - "queueMoveUp": "위로 이동", - "queueMoveDown": "아래로 이동", - "editMetadataMusicBrainzButton": "MusicBrainz에서 가져오기", - "editMetadataMusicBrainzFilled": "MusicBrainz에서 업데이트됨", - "editMetadataMusicBrainzNothing": "MusicBrainZ에서 발견되지 않음", - "editMetadataMusicBrainzNeedsIsrc": "ISRC 태그 필요", - "nowPlayingRepeatOff": "반복 끄기", - "nowPlayingRepeatAll": "모두 반복", - "nowPlayingRepeatOne": "한 곡 반복", - "queueNetworkFailedOffline": "오프라인 중에 {count} 개의 다운로드 실패", - "trackAlbumType": "발매 유형", - "editMetadataFieldAlbumTypeHint": "앨범, 싱글, EP, 컴필레이션...", - "editMetadataFieldExplicit": "성인용", - "editMetadataFieldExplicitHint": "이 트랙에 성인용 콘텐츠가 포함되어 있음을 표시합니다", - "metadataExplicitValue": "성인용", - "editMetadataFieldUpc": "UPC / 바코드", - "editMetadataFieldUpcHint": "숫자 UPC, EAN, 또는 GTIN", - "libraryFilterMetadataMissingIsrc": "ISRC 누락" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From 60758b1988ff8be2ca69f656a752b41ffe0395b8 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:45 +0700 Subject: [PATCH 11/59] New translations app_en.arb (Dutch) [ci skip] --- lib/l10n/arb/app_nl.arb | 55 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/lib/l10n/arb/app_nl.arb b/lib/l10n/arb/app_nl.arb index 64cfe2c90..284f30881 100644 --- a/lib/l10n/arb/app_nl.arb +++ b/lib/l10n/arb/app_nl.arb @@ -461,6 +461,18 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" + }, + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" + }, + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" + }, "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", "@aboutAppDescription": { "description": "App description in header card" @@ -3889,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -6047,6 +6059,45 @@ "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, "nowPlayingOpenInExternalPlayer": "Open in external player", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" @@ -6494,4 +6545,4 @@ "@optionsEmbeddedCoverSizeOriginal": { "description": "Option that preserves the provider artwork at its original resolution" } -} +} \ No newline at end of file From b3ea951166a74ee1f1b05b9de3122d8aa15fe421 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:47 +0700 Subject: [PATCH 12/59] New translations app_en.arb (Portuguese) [ci skip] --- lib/l10n/arb/app_pt_PT.arb | 9614 +++++++++++++++++++----------------- 1 file changed, 5030 insertions(+), 4584 deletions(-) diff --git a/lib/l10n/arb/app_pt_PT.arb b/lib/l10n/arb/app_pt_PT.arb index 51938ee9c..dd1b6cbe3 100644 --- a/lib/l10n/arb/app_pt_PT.arb +++ b/lib/l10n/arb/app_pt_PT.arb @@ -1,2673 +1,2662 @@ { - "@@locale": "pt_PT", + "@@locale": "pt-PT", "@@last_modified": "2026-04-28", - "libraryEnableLocalLibrarySubtitle": "Scan and track your existing music", - "@libraryEnableLocalLibrarySubtitle": { - "description": "Subtitle for enable toggle" - }, - "@audioAnalysisCodec": { - "description": "Audio codec metric label" + "appName": "SpotiFLAC Mobile", + "@appName": { + "description": "App name - DO NOT TRANSLATE" }, - "extensionUtilityFunctions": "Utility Functions", - "@extensionUtilityFunctions": { - "description": "Capability label for utility-only extensions" + "navHome": "Início", + "@navHome": { + "description": "Bottom navigation - Home tab" }, - "logClearLogsMessage": "Tem certeza de que deseja limpar todos os registros?", - "@logClearLogsMessage": { - "description": "Clear logs confirmation message" + "navLibrary": "Biblioteca", + "@navLibrary": { + "description": "Bottom navigation - Library tab" }, - "@storeClearFilters": { - "description": "Button to clear all filters" + "navSettings": "Configurações", + "@navSettings": { + "description": "Bottom navigation - Settings tab" }, - "cacheCleanupUnused": "Cleanup unused data", - "@cacheCleanupUnused": { - "description": "Action title for cleaning unused entries" + "navStore": "Repo", + "@navStore": { + "description": "Bottom navigation - Extension repo tab" }, - "trackConvertDitherNone": "None", - "@trackConvertDitherNone": { - "description": "Lossless conversion dither option with no dithering applied" + "homeTitle": "Início", + "@homeTitle": { + "description": "Home screen title" }, - "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", - "@libraryTracksUnit": { - "description": "Unit label for tracks count (without the number itself)", - "placeholders": { - "count": { - "type": "int" - } - } + "homeSubtitle": "Cole um URL compatível ou pesquise por nome", + "@homeSubtitle": { + "description": "Subtitle shown below search box" }, - "folderOrganizationNone": "Nenhuma organização", - "@folderOrganizationNone": { - "description": "Folder option - flat structure" + "homeEmptyTitle": "Ainda não há provedores de pesquisa", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" }, - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" + "homeEmptySubtitle": "Instale uma extensão para continuar.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" }, - "@trackConvertConfirmTitle": { - "description": "Confirmation dialog title" + "homeSupports": "Suporte: Faixas, Álbuns, Playlists, URLs de Artista", + "@homeSupports": { + "description": "Info text about supported URL types" }, - "@extensionPatternsCount": { - "description": "URL patterns count", - "placeholders": { - "count": { - "type": "int" - } - } + "homeRecent": "Recentes", + "@homeRecent": { + "description": "Section header for recent searches" }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" + "historyFilterAll": "Tudo", + "@historyFilterAll": { + "description": "Filter chip - show all items" }, - "libraryAutoScanOff": "Desligar", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" + "historyFilterAlbums": "Álbuns", + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" }, - "shareSheetLinkCopied": "{service} link copied", - "@shareSheetLinkCopied": { - "description": "Snackbar after copying a cross-service link", - "placeholders": { - "service": {} - } + "historyFilterSingles": "Singles", + "@historyFilterSingles": { + "description": "Filter chip - show singles only" }, - "providerPriorityFallbackExtensionsDescription": "Escolha quais extensões de download instaladas podem ser usadas durante a alternativa automática.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" + "historySearchHint": "Pesquisar histórico...", + "@historySearchHint": { + "description": "Search bar placeholder in history" }, - "@replayGainBatchConfirmMessage": { - "description": "Message of the batch ReplayGain confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsTitle": "Configurações", + "@settingsTitle": { + "description": "Settings screen title" }, - "@extensionsHomeFeedUse": { - "description": "Extensions page - subtitle for a specific extension home feed option", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "settingsDownload": "", + "@settingsDownload": { + "description": "Settings section - download options" }, - "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", - "@selectionShareCount": { - "description": "Share button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsAppearance": "Aparência", + "@settingsAppearance": { + "description": "Settings section - visual customization" }, - "@storeExtensionsCount": { - "description": "Store extension result count", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsExtensions": "Extensões", + "@settingsExtensions": { + "description": "Settings section - extension management" }, - "@logSearchHint": { - "description": "Log search placeholder" + "settingsAbout": "Sobre", + "@settingsAbout": { + "description": "Settings section - app info" }, - "@audioAnalysisSamples": { - "description": "Total samples metric label" + "downloadTitle": "", + "@downloadTitle": { + "description": "Download settings page title" }, - "trackCoverReplace": "Replace Cover", - "@trackCoverReplace": { - "description": "Button label for replacing selected cover art" + "downloadAskQualitySubtitle": "Mostrar seletor de qualidade para cada download", + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" }, - "@discographyAddedToQueue": { - "description": "Snackbar - tracks added from discography", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameFormat": "Formato do Nome do Arquivo", + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" + "downloadSingleFilenameFormat": "Formato do nome do arquivo para Singles", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" }, - "@nowPlayingDetails": { - "description": "Menu item and section title for track metadata details" + "downloadSingleFilenameFormatDescription": "Padrão de nome de arquivo para Singles e EPs. Utiliza as mesmas tags do formato de álbum.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" }, - "@trackGenre": { - "description": "Metadata label - music genre" + "downloadFolderOrganization": "Organização de Pastas", + "@downloadFolderOrganization": { + "description": "Title of the folder organization picker bottom sheet" }, - "recentTypeSong": "Música", - "@recentTypeSong": { - "description": "Recent access item type - song/track" + "appearanceTitle": "Aparência", + "@appearanceTitle": { + "description": "Appearance settings page title" }, - "logShareLogs": "Compartilhar registros", - "@logShareLogs": { - "description": "Share button tooltip" + "appearanceThemeSystem": "Sistema", + "@appearanceThemeSystem": { + "description": "Follow system theme" }, - "@storeFilterLyrics": { - "description": "Repo filter - lyrics providers" + "appearanceThemeLight": "Claro", + "@appearanceThemeLight": { + "description": "Light theme" }, - "extensionsInstallButton": "Instalar Extensão", - "@extensionsInstallButton": { - "description": "Button to install extension from file" + "appearanceThemeDark": "Escuro", + "@appearanceThemeDark": { + "description": "Dark theme" }, - "replayGainBatchSuccess": "ReplayGain adicionado a {success} de {total} faixas", - "@replayGainBatchSuccess": { - "description": "Snackbar after batch ReplayGain completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "appearanceDynamicColor": "Cores Dinâmicas", + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" }, - "nowPlayingMinimize": "Minimize", - "@nowPlayingMinimize": { - "description": "Tooltip for minimizing the now playing screen" + "appearanceDynamicColorSubtitle": "Usar cores do seu papel de parede", + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" }, - "logIssueNetworkErrorSuggestion": "Check your internet connection", - "@logIssueNetworkErrorSuggestion": { - "description": "Diagnostic badge suggestion for generic network errors" + "appearanceHistoryView": "Visualização do Histórico", + "@appearanceHistoryView": { + "description": "Layout style for history" }, - "extensionsNoExtensions": "Nenhuma extensão instalada", - "@extensionsNoExtensions": { - "description": "Empty state - no extensions" + "appearanceHistoryViewList": "Lista", + "@appearanceHistoryViewList": { + "description": "List layout option" }, - "@cacheRefresh": { - "description": "Tooltip for refresh button on cache management page" + "appearanceHistoryViewGrid": "Grade", + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" }, - "@snackbarHistoryCleared": { - "description": "Snackbar - history deleted" + "optionsPrimaryProvider": "Provedor Primário", + "@optionsPrimaryProvider": { + "description": "Main search provider setting" }, - "cueSplitFailed": "CUE split failed", - "@cueSplitFailed": { - "description": "Snackbar when CUE split fails" + "optionsPrimaryProviderSubtitle": "Serviço usado para pesquisar por faixa ou nome do álbum", + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" }, - "trackConvertLosslessSuffix": "Lossless", - "@trackConvertLosslessSuffix": { - "description": "Suffix used in converted lossless quality labels" - }, - "homeSubtitle": "Cole um URL compatível ou pesquise por nome", - "@homeSubtitle": { - "description": "Subtitle shown below search box" - }, - "selectionBatchConvertConfirmMessageLossless": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.", - "@selectionBatchConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless batch conversion", + "optionsUsingExtension": "Usando a extensão: {extensionName}", + "@optionsUsingExtension": { + "description": "Shows active extension name", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "extensionName": { "type": "String" } } }, - "@extensionVerificationHelpMessageManual": { - "description": "Dialog message when automatic browser launch for verification fails" - }, - "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", - "@queueRateLimitMessage": { - "description": "Explanation shown on a failed queue item when the download service rate limits requests" - }, - "searchSortDateOldest": "Data de lançamento (mais antiga)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "nowPlayingShuffleOn": "Shuffle on", - "@nowPlayingShuffleOn": { - "description": "Tooltip when shuffle mode is enabled" - }, - "sectionColor": "Cor", - "@sectionColor": { - "description": "Settings section header" - }, - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "cacheCoverImage": "Cache da imagem de capa", - "@cacheCoverImage": { - "description": "Cache item title for persistent cover images" + "optionsDefaultSearchTab": "Aba de pesquisa padrão", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" }, - "@navSettings": { - "description": "Bottom navigation - Settings tab" + "optionsDefaultSearchTabSubtitle": "Escolha qual aba será aberta primeiro para novos resultados de pesquisa.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" }, - "@trackCoverReplaceNotice": { - "description": "Notice shown when a new cover has been selected but not saved yet" + "optionsAutoFallback": "Fallback Automático", + "@optionsAutoFallback": { + "description": "Auto-retry with other services" }, - "cueSplitConfirmTitle": "Split CUE Album", - "@cueSplitConfirmTitle": { - "description": "CUE split confirmation dialog title" + "optionsAutoFallbackSubtitle": "Tentar outros serviços se o download falhar", + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" }, - "@trackDeleteConfirmMessage": { - "description": "Delete confirmation message" + "optionsEmbedLyrics": "Incorporar Letras", + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" }, - "cacheClearSuccess": "Cleared: {target}", - "@cacheClearSuccess": { - "description": "Snackbar after clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "optionsEmbedLyricsSubtitle": "Salve letras sincronizadas ao lado das suas faixas baixadas", + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" }, - "editMetadataFieldCover": "Cover Art", - "@editMetadataFieldCover": { - "description": "Chip label for cover art field in auto-fill selector" + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" }, - "snackbarSelectExtFile": "Por favor, selecione um arquivo .spotiflac-ext", - "@snackbarSelectExtFile": { - "description": "Snackbar - wrong file type selected" + "optionsReplayGainSubtitleOn": "Analisar o volume e incorporar tags ReplayGain (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" }, - "libraryFilterFormat": "Format", - "@libraryFilterFormat": { - "description": "Filter section - file format" + "optionsReplayGainSubtitleOff": "Desativado: sem etiquetas de normalização de intensidade", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" }, - "@downloadLossyAac": { - "description": "Lossy format option - AAC in M4A container at 320kbps" + "trackReplayGain": "Reanalisar ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "@setupNext": { - "description": "Next button text" + "trackReplayGainScanning": "Analisando o volume...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "@releaseTypeSingle": { - "description": "Badge label for single releases" + "trackReplayGainSuccess": "Etiquetas ReplayGain adicionadas", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" }, - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" + "trackReplayGainFailed": "Falha ao adicionar etiquetas ReplayGain", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", - "@trackConvertLosslessOutputWithCap": { - "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", "placeholders": { - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "bulkDownloadSelectPlaylists": "Select playlists to download", - "@bulkDownloadSelectPlaylists": { - "description": "Button label when no playlists are selected for download" - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "@timeJustNow": { - "description": "Relative time - less than a minute ago" - }, - "downloadLossyOpus256": "Opus 256kbps", - "@downloadLossyOpus256": { - "description": "Lossy format option - Opus 256kbps" + "replayGainBatchConfirmTitle": "Adicionar ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" }, - "discographySinglesOnlySubtitle": "{count} faixas de {albumCount} singles", - "@discographySinglesOnlySubtitle": { - "description": "Subtitle showing singles tracks count", + "replayGainBatchConfirmMessage": "Analisar o volume e gravar etiquetas ReplayGain em {count} faixa(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { "count": { "type": "int" - }, - "albumCount": { - "type": "int" } } }, - "optionsExtensionStore": "Repositório de extensões", - "@optionsExtensionStore": { - "description": "Show/hide repo tab" + "replayGainBatchAnalyzing": "Analisando ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" }, - "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", - "@libraryDownloadsHistoryExcluded": { - "description": "Library count note for downloaded history items excluded from the local list", + "replayGainBatchSuccess": "ReplayGain adicionado a {success} de {total} faixas", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", "placeholders": { - "count": { + "success": { + "type": "int" + }, + "total": { "type": "int" } } }, - "@errorUrlFetchFailed": { - "description": "Error message - generic URL fetch failure" - }, - "@trackOptionAddToWishlist": { - "description": "Bottom sheet action label - add track to wishlist" + "optionsArtistTagMode": "Modo de etiqueta de artista", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" }, - "discographySinglesOnly": "Somente Singles e EPs", - "@discographySinglesOnly": { - "description": "Option - download only singles" + "optionsArtistTagModeDescription": "Escolha como múltiplos artistas são escritos em etiquetas incorporadas.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" }, - "@downloadSongLinkRegionDesc": { - "description": "Description in SongLink region picker" + "optionsArtistTagModeJoined": "Valor único combinado", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" }, - "notifEmbeddingMetadata": "Embedding metadata...", - "@notifEmbeddingMetadata": { - "description": "Notification body while embedding metadata into a downloaded track" + "optionsArtistTagModeJoinedSubtitle": "Escreva um valor ARTIST único como \"Artista A, Artista B\" para máxima compatibilidade com o ‘player’", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" }, - "@settingsLocalLibrarySubtitle": { - "description": "Subtitle for local library settings" + "optionsArtistTagModeSplitVorbis": "Dividir etiquetas para FLAC/Opus", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "@downloadLocationSubtitle": { - "description": "Subtitle shown in the download location picker sheet" + "optionsArtistTagModeSplitVorbisSubtitle": "Escrever uma etiqueta de artista por artista para FLAC e Opus; MP3 e M4A permanecem combinados.", + "@optionsArtistTagModeSplitVorbisSubtitle": { + "description": "Subtitle for split Vorbis artist tag mode" }, - "trackConvertOriginalQuality": "Original quality", - "@trackConvertOriginalQuality": { - "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + "optionsExtensionStore": "Repositório de extensões", + "@optionsExtensionStore": { + "description": "Show/hide repo tab" }, - "nowPlayingTabLyrics": "Lyrics", - "@nowPlayingTabLyrics": { - "description": "Tab label for the lyrics view" + "optionsExtensionStoreSubtitle": "Mostrar aba de repositório na navegação", + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension repo toggle" }, - "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", - "@selectionConvertCount": { - "description": "Convert button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsCheckUpdates": "Procurar Atualizações", + "@optionsCheckUpdates": { + "description": "Auto update check toggle" }, - "@extensionsInstalledSection": { - "description": "Section header - installed extensions" + "optionsCheckUpdatesSubtitle": "Notificar quando uma nova versão estiver disponível", + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" }, - "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is off" + "optionsUpdateChannel": "Canal de Atualização", + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" }, - "nowPlayingShuffleLibrary": "Shuffle library", - "@nowPlayingShuffleLibrary": { - "description": "Button label to shuffle and play the entire local library" + "optionsUpdateChannelStable": "Somente versões estáveis", + "@optionsUpdateChannelStable": { + "description": "Only stable updates" }, - "trackReEnrichFieldCover": "Cover Art", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" + "optionsUpdateChannelPreview": "Obter versões de prévia", + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", - "@tutorialExtensionsTip3": { - "description": "Tutorial extensions tip 3" + "optionsUpdateChannelWarning": "A prévia pode conter erros ou recursos incompletos", + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" }, - "@cacheCleanupUnusedDesc": { - "description": "Description of what cleanup unused data does" - }, - "a11yOpenAlbum": "Open album {albumName}", - "@a11yOpenAlbum": { - "description": "Accessibility label for opening an album", - "placeholders": { - "albumName": { - "type": "String" - } - } + "optionsClearHistory": "Limpar Histórico de Download", + "@optionsClearHistory": { + "description": "Delete all download history" }, - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" + "optionsClearHistorySubtitle": "Remover todas as faixas baixadas do histórico", + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" }, - "nowPlayingQueueEmpty": "Queue is empty", - "@nowPlayingQueueEmpty": { - "description": "Empty state when the playback queue has no items" + "optionsDetailedLogging": "Registro detalhado", + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" }, - "@settingsDownload": { - "description": "Settings section - download options" + "optionsDetailedLoggingOn": "Registros detalhados estão sendo gravados", + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", - "@notifTracksDownloadedSuccess": { - "description": "Notification body for queue complete - how many tracks were downloaded", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsDetailedLoggingOff": "Habilitar para relatórios de erros", + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" }, - "storeCategoryDownload": "Download", - "@storeCategoryDownload": { - "description": "Store extension category - download" + "extensionsTitle": "Extensões", + "@extensionsTitle": { + "description": "Extensions page title" }, - "aboutTelegramChannel": "Canal do Telegram", - "@aboutTelegramChannel": { - "description": "Link to Telegram channel" + "extensionsDisabled": "Desabilitado", + "@extensionsDisabled": { + "description": "Extension status - inactive" }, - "@downloadedAlbumDiscHeader": { - "description": "Header for disc separator in multi-disc albums", + "extensionsVersion": "Versão {version}", + "@extensionsVersion": { + "description": "Extension version display", "placeholders": { - "discNumber": { - "type": "int", - "example": "1" + "version": { + "type": "String" } } }, - "@recentEmpty": { - "description": "Empty state text for recent access list" + "extensionsUninstall": "Desinstalar", + "@extensionsUninstall": { + "description": "Uninstall extension button" }, - "@backupRestoreConfirmMessage": { - "description": "Confirmation dialog message before restoring a backup" + "storeTitle": "Repositório de extensões", + "@storeTitle": { + "description": "Repo screen title" }, - "@shareSheetCopyLink": { - "description": "Tooltip for copying a cross-service link" + "storeSearch": "Pesquisar extensões...", + "@storeSearch": { + "description": "Repo search placeholder" }, - "regionCountryID": "Indonesia", - "@regionCountryID": { - "description": "Country name for SongLink region picker" + "storeInstall": "Instalar", + "@storeInstall": { + "description": "Install extension button" }, - "@libraryInLibrary": { - "description": "Badge shown on tracks that exist in local library" + "storeInstalled": "Instalado", + "@storeInstalled": { + "description": "Already installed badge" }, - "extensionPostProcessingHooks": "Ganchos de Pós-Processamento", - "@extensionPostProcessingHooks": { - "description": "Capability - post-processing" + "storeUpdate": "Atualizar", + "@storeUpdate": { + "description": "Update available button" }, - "@setupGrantPermission": { - "description": "Button to request permission" + "aboutTitle": "Sobre", + "@aboutTitle": { + "description": "About page title" }, - "storeFilterDownload": "Baixar", - "@storeFilterDownload": { - "description": "Repo filter - download providers" + "aboutContributors": "Colaboradores", + "@aboutContributors": { + "description": "Section for contributors" }, - "@collectionAddToPlaylist": { - "description": "Action to add a track to user playlist" + "aboutMobileDeveloper": "Desenvolvedor da versão móvel", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" }, - "@discographyFailedToFetch": { - "description": "Error - some albums failed to load" + "aboutOriginalCreator": "Criador do SpotiFLAC original", + "@aboutOriginalCreator": { + "description": "Role description for original creator" }, - "@updateWhatsNew": { - "description": "Changelog section title" + "aboutLogoArtist": "O artista talentoso que criou o nosso lindo logotipo do aplicativo!", + "@aboutLogoArtist": { + "description": "Role description for logo artist" }, - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" + "aboutTranslators": "Tradutores", + "@aboutTranslators": { + "description": "Section for translators" }, - "dialogDeleteSelectedTitle": "Apagar Selecionados", - "@dialogDeleteSelectedTitle": { - "description": "Dialog title - delete selected items" + "aboutSpecialThanks": "Agradecimentos Especiais", + "@aboutSpecialThanks": { + "description": "Section for special thanks" }, - "trackCoverPick": "Pick Cover", - "@trackCoverPick": { - "description": "Button label for selecting cover art" + "aboutLinks": "Links", + "@aboutLinks": { + "description": "Section for external links" }, - "@collectionCreatePlaylist": { - "description": "Action to create a new playlist" + "aboutMobileSource": "Código-fonte do app móvel", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" }, - "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", - "@selectionBatchConvertSuccess": { - "description": "Snackbar after batch conversion completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "aboutPCSource": "Código-fonte do app desktop", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" }, - "qualityHiResFlacMax": "FLAC Max de alta resolução", - "@qualityHiResFlacMax": { - "description": "Quality option - maximum resolution FLAC" + "aboutKeepAndroidOpen": "Manter o Android aberto", + "@aboutKeepAndroidOpen": { + "description": "Link to Keep Android Open campaign website" }, - "audioAnalysisStereo": "Stereo", - "@audioAnalysisStereo": { - "description": "Audio channel layout label - stereo" + "aboutReportIssue": "Reportar um problema", + "@aboutReportIssue": { + "description": "Link to report bugs" }, - "backupExportButton": "Create backup file", - "@backupExportButton": { - "description": "Button to create and share a backup file" + "aboutReportIssueSubtitle": "Reporte qualquer problema que encontrar", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" }, - "settingsApp": "App", - "@settingsApp": { - "description": "Settings menu item - app settings" + "aboutFeatureRequest": "Solicitação de recurso", + "@aboutFeatureRequest": { + "description": "Link to suggest features" }, - "clickableInformationUnavailable": "{type} information not available", - "@clickableInformationUnavailable": { - "description": "Snackbar shown when clickable metadata cannot open a destination", - "placeholders": { - "type": { - "type": "String" - } - } + "aboutFeatureRequestSubtitle": "Sugira novos recursos para o aplicativo", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" }, - "@logFilterLevel": { - "description": "Filter by log level" + "aboutTelegramChannel": "Canal do Telegram", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" }, - "sectionTheme": "Tema", - "@sectionTheme": { - "description": "Settings section header" + "aboutTelegramChannelSubtitle": "Anúncios e atualizações", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" }, - "@extensionActionFailed": { - "description": "Fallback error when an extension action fails without details" + "aboutTelegramChat": "Comunidade do Telegram", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" }, - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + "aboutTelegramChatSubtitle": "Converse com outros usuários", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" }, - "@extensionsNoCustomSearch": { - "description": "Empty state - no search providers" + "aboutSocial": "Social", + "@aboutSocial": { + "description": "Section for social links" }, - "@collectionPlaylistRemoveCover": { - "description": "Bottom sheet action to remove custom cover image from a playlist" + "aboutApp": "Aplicativo", + "@aboutApp": { + "description": "Section for app info" }, - "@tutorialWelcomeDesc": { - "description": "Tutorial welcome page description" + "aboutVersion": "Versão", + "@aboutVersion": { + "description": "Version info label" }, - "@tutorialSearchDesc": { - "description": "Tutorial search page description" + "aboutBinimumDesc": "O criador do QQDL e da HiFi API. Este projeto ajudou a moldar o suporte a transferências sem perdas.", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" }, - "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", - "@collectionAddedToWishlist": { - "description": "Snackbar after adding track to wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } + "aboutSachinsenalDesc": "O criador original do projeto HiFi. Uma base para integração de fontes sem perdas.", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" }, - "logAffectedDomains": "Affected: {domains}", - "@logAffectedDomains": { - "description": "Affected domains in log issue analysis", - "placeholders": { - "domains": { - "type": "String" - } - } + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" }, - "@folderOrganizationByArtistSubtitle": { - "description": "Subtitle for artist folder option" + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" }, - "errorNoTracksFound": "Nenhuma faixa encontrada", - "@errorNoTracksFound": { - "description": "Error - search returned no results" + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" }, - "providerPriorityTitle": "Prioridade de Provedor", - "@providerPriorityTitle": { - "description": "Provider priority page title" + "aboutAppDescription": "Pesquisar metadados de músicas, gerenciar extensões e organizar sua biblioteca.", + "@aboutAppDescription": { + "description": "App description in header card" }, - "@notifUpdateReadyBody": { - "description": "Notification body when app update is ready to install", + "artistAlbums": "Álbuns", + "@artistAlbums": { + "description": "Section header for artist albums" + }, + "artistSingles": "Singles e EPs", + "@artistSingles": { + "description": "Section header for singles/EPs" + }, + "artistCompilations": "Compilações", + "@artistCompilations": { + "description": "Section header for compilations" + }, + "artistPopular": "Populares", + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, + "artistMonthlyListeners": "{count} ouvintes mensais", + "@artistMonthlyListeners": { + "description": "Monthly listener count display", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "String", + "description": "Formatted listener count" } } }, - "@settingsExtensions": { - "description": "Settings section - extension management" + "trackMetadataService": "Serviço", + "@trackMetadataService": { + "description": "Metadata field - download service used" }, - "trackDeleteConfirmTitle": "Remover do dispositivo?", - "@trackDeleteConfirmTitle": { - "description": "Delete confirmation title" + "trackMetadataPlay": "Reproduzir", + "@trackMetadataPlay": { + "description": "Action button - play track" }, - "@settingsDownloadNetwork": { - "description": "Setting for network type preference" + "trackMetadataShare": "Compartilhar", + "@trackMetadataShare": { + "description": "Action button - share track" }, - "downloadProvidersNoneEnabled": "No providers enabled", - "@downloadProvidersNoneEnabled": { - "description": "Shown when no lyrics providers are active" + "trackMetadataDelete": "Apagar", + "@trackMetadataDelete": { + "description": "Action button - delete track" }, - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" + "setupGrantPermission": "Conceder Permissão", + "@setupGrantPermission": { + "description": "Button to request permission" }, - "trackReEnrichFieldBasicTags": "Album, Album Artist", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + "setupSkip": "Ignorar por enquanto", + "@setupSkip": { + "description": "Skip current step button" }, - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" + "setupStorageAccessRequired": "Acesso ao Armazenamento Necessário", + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" }, - "@logClearLogsTitle": { - "description": "Clear logs dialog title" + "setupStorageAccessMessageAndroid11": "O Android 11+ requer a permissão \"Acesso a Todos os Arquivos\" para salvar arquivos na pasta de download escolhida.", + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" }, - "storageModeSafSubtitle": "Escolha qualquer pasta, incluindo o cartão SD", - "@storageModeSafSubtitle": { - "description": "Subtitle for SAF storage mode" + "setupOpenSettings": "Abrir Configurações", + "@setupOpenSettings": { + "description": "Button to open system settings" }, - "@notifUpdateProgress": { - "description": "Notification body showing update download progress", + "setupPermissionDeniedMessage": "Permissão negada. Por favor, conceda todas as permissões para continuar.", + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, + "setupPermissionRequired": "Permissão {permissionType} Necessária", + "@setupPermissionRequired": { + "description": "Generic permission required title", "placeholders": { - "received": { - "type": "String" - }, - "total": { - "type": "String" - }, - "percentage": { - "type": "int" + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" } } }, - "downloadUsePrimaryArtistOnlyEnabled": "Featured artists removed from folder name (e.g. Justin Bieber, Quavo → Justin Bieber)", - "@downloadUsePrimaryArtistOnlyEnabled": { - "description": "Subtitle when primary artist only is enabled" - }, - "notifScanningLibrary": "Scanning local library", - "@notifScanningLibrary": { - "description": "Notification title while scanning local library" - }, - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "setupGetStarted": "Começar", - "@setupGetStarted": { - "description": "Final setup button" - }, - "libraryFilterQualityCD": "CD (16bit)", - "@libraryFilterQualityCD": { - "description": "Filter option - CD quality audio" - }, - "sectionLayout": "Aparência\n", - "@sectionLayout": { - "description": "Settings section header" - }, - "@tooltipLoveAll": { - "description": "Tooltip for the Love All button on album/playlist screens" - }, - "queueFinalizingDownload": "Finalizing download", - "@queueFinalizingDownload": { - "description": "Accessibility label for a queue item that is finalizing" - }, - "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", - "@trackConvertActionLabelLossy": { - "description": "Convert button label for lossy conversion", + "setupPermissionRequiredMessage": "A permissão {permissionType} é necessária para a melhor experiência. Você pode alterar isso mais tarde em Configurações.", + "@setupPermissionRequiredMessage": { + "description": "Generic permission required message", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { + "permissionType": { "type": "String" } } }, - "extensionsMetadataPriority": "Prioridade de Metadados", - "@extensionsMetadataPriority": { - "description": "Setting - metadata provider order" + "setupUseDefaultFolder": "Usar Pasta Padrão?", + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" }, - "updateCurrent": "Atual", - "@updateCurrent": { - "description": "Label for current version" + "setupNoFolderSelected": "Nenhuma pasta selecionada. Você gostaria de usar a pasta padrão de música?", + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" }, - "@aboutFeatureRequest": { - "description": "Link to suggest features" + "setupUseDefault": "Usar Padrão", + "@setupUseDefault": { + "description": "Button to use default folder" }, - "@safMigrationSuccess": { - "description": "Snackbar after successfully migrating to SAF" + "setupDownloadLocationTitle": "Local do Download", + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" }, - "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", - "@cleanupOrphanedDownloadsNone": { - "description": "Snackbar when no orphans found" + "setupDownloadLocationIosMessage": "No iOS, downloads são salvos na pasta Documentos do aplicativo. Você pode acessá-los através do app Arquivos.", + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", - "@lyricsProviderNeteaseDesc": { - "description": "Description for Netease provider" + "setupAppDocumentsFolder": "Pasta Documentos do App", + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" }, - "libraryScanCancelledSubtitle": "You can retry the scan when ready.", - "@libraryScanCancelledSubtitle": { - "description": "Library scan status subtitle after cancellation" + "setupAppDocumentsFolderSubtitle": "Recomendado - acessível através do aplicativo Arquivos", + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" }, - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" + "setupChooseFromFiles": "Escolher dos Arquivos", + "@setupChooseFromFiles": { + "description": "iOS file picker option" }, - "@trackAlbum": { - "description": "Metadata label - album name" + "setupChooseFromFilesSubtitle": "Selecione o iCloud ou outro local", + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" }, - "dialogDeleteSelectedMessage": "Apagar {count} {count, plural, =1{faixa} other{faixas}} do histórico?\n\nIsso também apagará os arquivos do armazenamento.", - "@dialogDeleteSelectedMessage": { - "description": "Dialog message - delete selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "setupIosEmptyFolderWarning": "Limitação do iOS: Pastas vazias não podem ser selecionadas. Escolha uma pasta com pelo menos um arquivo.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" }, - "trackReEnrich": "Re-enrich", - "@trackReEnrich": { - "description": "Menu action - re-embed metadata into audio file" + "setupIcloudNotSupported": "O iCloud Drive não é compatível. Use a pasta Documentos do aplicativo.", + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" }, - "@lyricsProvidersSaved": { - "description": "Snackbar after saving lyrics provider priority" + "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "@setupDownloadInFlac": { + "description": "App tagline in setup" }, - "@storageModeSaf": { - "description": "Storage mode option - Storage Access Framework" + "setupStorageGranted": "Permissão de Armazenamento Concedida!", + "@setupStorageGranted": { + "description": "Success message for storage permission" }, - "libraryStorageAccessRequired": "Storage Access Required", - "@libraryStorageAccessRequired": { - "description": "Dialog title for storage permission" + "setupStorageRequired": "Permissão de Armazenamento Necessária", + "@setupStorageRequired": { + "description": "Title when storage permission needed" }, - "@cacheClearAllConfirmTitle": { - "description": "Dialog title before clearing all caches" + "setupStorageDescription": "O SpotiFLAC precisa de permissão de armazenamento para salvar os seus arquivos de música baixados.", + "@setupStorageDescription": { + "description": "Explanation for storage permission" }, - "@unknownArtist": { - "description": "Fallback artist name when metadata is missing" + "setupNotificationGranted": "Permissão de Notificações Concedida!", + "@setupNotificationGranted": { + "description": "Success message for notification permission" }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist folder is enabled" + "setupNotificationEnable": "Habilitar Notificações", + "@setupNotificationEnable": { + "description": "Button to enable notifications" }, - "dialogClearHistoryMessage": "Tem certeza que deseja limpar todo o histórico de downloads? Isso não pode ser desfeito.", - "@dialogClearHistoryMessage": { - "description": "Dialog message - clear history confirmation" + "setupFolderChoose": "Escolher Pasta de Download", + "@setupFolderChoose": { + "description": "Button to choose folder" }, - "@sectionData": { - "description": "Settings section header" + "setupFolderDescription": "Selecione uma pasta onde as suas músicas baixadas serão salvas.", + "@setupFolderDescription": { + "description": "Explanation for folder selection" }, - "audioAnalysisRms": "RMS", - "@audioAnalysisRms": { - "description": "RMS level metric label" + "setupSelectFolder": "Seleccionar Pasta", + "@setupSelectFolder": { + "description": "Button to select folder" }, - "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", - "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is on" + "setupEnableNotifications": "Habilitar Notificações", + "@setupEnableNotifications": { + "description": "Button to enable notifications" }, - "timeJustNow": "Just now", - "@extensionCustomUrlHandlingShareHint": { - "description": "Extension detail hint explaining share-to-app URL handling" + "setupNotificationBackgroundDescription": "Seja notificado sobre o progresso e conclusão do download. Isso ajuda você a acompanhar os downloads quando o app estiver em segundo plano.", + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" }, - "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", - "@cleanupOrphanedDownloads": { - "description": "Button to remove history entries for deleted files" + "setupSkipForNow": "Ignorar por enquanto", + "@setupSkipForNow": { + "description": "Skip button text" }, - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" + "setupNext": "Próximo", + "@setupNext": { + "description": "Next button text" }, - "@tutorialWelcomeTitle": { - "description": "Tutorial welcome page title" + "setupGetStarted": "Começar", + "@setupGetStarted": { + "description": "Final setup button" }, - "collectionFavoriteArtists": "Favorite Artists", - "audioAnalysisRescanning": "Re-analyzing audio...", - "@audioAnalysisRescanning": { - "description": "Loading text while audio is being re-analyzed after an explicit refresh" + "setupAllowAccessToManageFiles": "Por favor, habilite \"Permitir acesso para gerenciar todos os arquivos\" na próxima tela.", + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" }, - "logTitle": "Registros", - "@logTitle": { - "description": "Logs screen title" + "setupLanguageTitle": "Escolher idioma", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" }, - "@regionCountryGB": { - "description": "Country name for SongLink region picker" + "setupLanguageDescription": "Selecione o idioma de sua preferência para o aplicativo. Você pode alterar isso depois em Configurações.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" }, - "@progressFetchingMetadata": { - "description": "Progress indicator - loading track info", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "setupLanguageSystemDefault": "Padrão do sistema", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" }, - "aboutLogoArtist": "O artista talentoso que criou o nosso lindo logotipo do aplicativo!", - "@aboutLogoArtist": { - "description": "Role description for logo artist" + "dialogCancel": "Cancelar", + "@dialogCancel": { + "description": "Dialog button - cancel action" }, - "channelPreview": "Prévia", - "@channelPreview": { - "description": "Update channel - beta/preview releases" + "dialogSave": "Salvar", + "@dialogSave": { + "description": "Dialog button - save changes" }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", - "@collectionPlaylistsDeleted": { - "description": "Snackbar after deleting selected playlists", + "dialogDelete": "Apagar", + "@dialogDelete": { + "description": "Dialog button - delete item" + }, + "dialogRetry": "Tentar novamente", + "@dialogRetry": { + "description": "Dialog button - retry action" + }, + "dialogClear": "Limpar", + "@dialogClear": { + "description": "Dialog button - clear items" + }, + "dialogDone": "Concluído", + "@dialogDone": { + "description": "Dialog button - action completed" + }, + "dialogImport": "Importar", + "@dialogImport": { + "description": "Dialog button - import data" + }, + "dialogDownload": "Baixar", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, + "previewPlay": "Reproduzir prévia", + "@previewPlay": { + "description": "Tooltip for the button that plays a short track preview snippet" + }, + "previewStop": "Parar prévia", + "@previewStop": { + "description": "Tooltip for the button that stops the playing track preview snippet" + }, + "previewUnavailable": "Prévia indisponível", + "@previewUnavailable": { + "description": "Snackbar shown when a track preview snippet cannot be played" + }, + "dialogDiscard": "Descartar", + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, + "dialogRemove": "Remover", + "@dialogRemove": { + "description": "Dialog button - remove item" + }, + "dialogUninstall": "Desinstalar", + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, + "dialogDiscardChanges": "Descartar Alterações?", + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, + "dialogUnsavedChanges": "Você tem alterações não salvas. Deseja descartá-las?", + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, + "dialogClearAll": "Limpar Tudo", + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, + "dialogRemoveExtension": "Remover Extensão", + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogRemoveExtensionMessage": "Tem certeza de que deseja remover esta extensão? Isso não pode ser desfeito.", + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, + "dialogUninstallExtension": "Desinstalar Extensão?", + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogUninstallExtensionMessage": "Tem certeza que deseja remover {extensionName}?", + "@dialogUninstallExtensionMessage": { + "description": "Dialog message - uninstall specific extension", "placeholders": { - "count": { - "type": "int" + "extensionName": { + "type": "String" } } }, - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" + "dialogClearHistoryTitle": "Limpar Histórico", + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" }, - "homeTitle": "Início", - "@homeTitle": { - "description": "Home screen title" + "dialogClearHistoryMessage": "Tem certeza que deseja limpar todo o histórico de downloads? Isso não pode ser desfeito.", + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" }, - "extensionMinAppVersion": "Versão Mínima do App", - "@extensionMinAppVersion": { - "description": "Extension detail - minimum app version" + "dialogDeleteSelectedTitle": "Apagar Selecionados", + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", - "@backupContentsLiked": { - "description": "Backup contents row for liked tracks count", + "dialogDeleteSelectedMessage": "Apagar {count} {count, plural, =1{faixa} other{faixas}} do histórico?\n\nIsso também apagará os arquivos do armazenamento.", + "@dialogDeleteSelectedMessage": { + "description": "Dialog message - delete selected tracks", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" + "dialogImportPlaylistTitle": "Importar Playlist", + "@dialogImportPlaylistTitle": { + "description": "Dialog title - import CSV playlist" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", - "@notifDownloadsCanceledBody": { - "description": "Notification body when downloads are canceled by the user", + "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", + "csvImportTracks": "{count} faixas do CSV", + "@csvImportTracks": { + "description": "Label shown in quality picker for CSV import", "placeholders": { "count": { "type": "int" } } }, - "@dialogRetry": { - "description": "Dialog button - retry action" - }, - "@homeChangeSearchProviderTooltip": { - "description": "Tooltip for the Home search provider picker" - }, - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" + "collectionExportM3u": "Export as M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" }, - "@trackReEnrichSuccessWithFailures": { - "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "collectionExportM3uDone": "Exported {exported} of {total} tracks", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { - "successCount": { + "exported": { "type": "int" }, "total": { "type": "int" - }, - "failedCount": { - "type": "int" } } }, - "previewUnavailable": "Prévia indisponível", - "@previewUnavailable": { - "description": "Snackbar shown when a track preview snippet cannot be played" - }, - "nowPlayingTabPlayer": "Player", - "@nowPlayingTabPlayer": { - "description": "Tab label for the player view" + "collectionExportM3uNone": "No downloaded files to export", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "@backupContentsPlaylists": { - "description": "Backup contents row for playlist count", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionExportM3uFailed": "Export failed", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "libraryLastScannedNever": "Never", - "@libraryLastScannedNever": { - "description": "Shown when library has never been scanned" + "trackOpenOn": "Open on...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" }, - "trackTrackNumber": "Número da faixa", - "@trackTrackNumber": { - "description": "Metadata label - track number" + "trackOpenOnNoLinks": "No platform links found for this track.", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" }, - "trackReplayGainScanning": "Analisando o volume...", - "@trackReplayGainScanning": { - "description": "Snackbar/progress message while scanning ReplayGain for a single track" + "libraryReviewDuplicates": "Review duplicates", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" }, - "downloadLossyMp3": "MP3 320kbps", - "@downloadLossyMp3": { - "description": "Lossy format option - MP3 320kbps" + "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" }, - "@albumFolderArtistAlbumSingles": { - "description": "Album folder option with singles inside artist" + "duplicatesTitle": "Duplicates", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" }, - "@extensionHealthNotConfigured": { - "description": "Extension service health status - not configured" + "duplicatesEmpty": "No duplicate tracks found.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" }, - "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is off" + "duplicatesKeepBest": "Keep best", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting to create a subfolder per playlist source" + "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", + "placeholders": { + "count": { + "type": "int" + }, + "trackName": { + "type": "String" + } + } }, - "@trackReleaseDate": { - "description": "Metadata label - release date" + "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "aboutContributors": "Colaboradores", - "@aboutContributors": { - "description": "Section for contributors" + "@dialogImportPlaylistMessage": { + "description": "Dialog message - import playlist confirmation", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@audioAnalysisMono": { - "description": "Audio channel layout label - mono" + "snackbarAddedToQueue": "\"{trackName}\" adicionada à fila", + "@snackbarAddedToQueue": { + "description": "Snackbar - track added to download queue", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@audioAnalysisNyquist": { - "description": "Nyquist frequency metric label" + "snackbarAddedTracksToQueue": "{count} faixas adicionadas à fila", + "@snackbarAddedTracksToQueue": { + "description": "Snackbar - multiple tracks added to queue", + "placeholders": { + "count": { + "type": "int" + } + } }, - "permissionStorage": "Storage", - "@permissionStorage": { - "description": "Storage permission type label" + "snackbarAlreadyDownloaded": "\"{trackName}\" já foi baixada", + "@snackbarAlreadyDownloaded": { + "description": "Snackbar - track already exists", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "permissionAudio": "Audio", - "@permissionAudio": { - "description": "Audio permission type label" + "snackbarAlreadyInLibrary": "\"{trackName}\" já existe na sua biblioteca", + "@snackbarAlreadyInLibrary": { + "description": "Snackbar - track already exists in local library", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@libraryScanSubtitle": { - "description": "Subtitle for scan button" + "snackbarHistoryCleared": "Histórico limpo", + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" }, - "@snackbarUnsupportedAudioFormat": { - "description": "Snackbar when the audio format is not supported for the requested operation" + "snackbarDeletedTracks": "{count} {count, plural, =1{faixa apagada} other{faixas apagadas}}", + "@snackbarDeletedTracks": { + "description": "Snackbar - tracks deleted", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@notifLibraryScanStopped": { - "description": "Notification body when library scan is cancelled" + "snackbarCannotOpenFile": "Não foi possível abrir o arquivo: {error}", + "@snackbarCannotOpenFile": { + "description": "Snackbar - file open error", + "placeholders": { + "error": { + "type": "String" + } + } }, - "@downloadMusixmatchAuto": { - "description": "Button to clear Musixmatch language (use auto)" + "snackbarViewQueue": "Ver Fila", + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, - "@trackLyricsTimeout": { - "description": "Message when lyrics request times out" + "snackbarUrlCopied": "URL do {platform} copiado para a área de transferência", + "@snackbarUrlCopied": { + "description": "Snackbar - URL copied", + "placeholders": { + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } + } }, - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" + "snackbarFileNotFound": "Arquivo não encontrado", + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" }, - "@regionCountryXK": { - "description": "Country name for SongLink region picker" + "snackbarSelectExtFile": "Por favor, selecione um arquivo .spotiflac-ext", + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" }, - "aboutTelegramChatSubtitle": "Converse com outros usuários", - "@aboutTelegramChatSubtitle": { - "description": "Subtitle for Telegram chat" + "snackbarProviderPrioritySaved": "Prioridade de provedor salva", + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" }, - "selectionAllPlaylistsSelected": "All playlists selected", - "@selectionAllPlaylistsSelected": { - "description": "Shown when all playlists are selected in selection mode" + "snackbarMetadataProviderSaved": "Prioridade do provedor de metadados salva", + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" }, - "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", - "@cacheTrackLookupDesc": { - "description": "Description of what track lookup cache contains" + "snackbarExtensionInstalled": "{extensionName} instalada.", + "@snackbarExtensionInstalled": { + "description": "Snackbar - extension installed successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@unknownAlbum": { - "description": "Fallback album name when metadata is missing" + "snackbarExtensionUpdated": "{extensionName} atualizada.", + "@snackbarExtensionUpdated": { + "description": "Snackbar - extension updated successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@extensionsErrorLoading": { - "description": "Error message when extension fails to load" + "snackbarFailedToInstall": "Falha ao instalar a extensão", + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" }, - "@cacheTitle": { - "description": "Cache management page title" + "snackbarFailedToUpdate": "Falha ao atualizar a extensão", + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" }, - "@downloadFilenameFormat": { - "description": "Setting for output filename pattern" + "errorRateLimited": "Tráfico Limitado (Rate Limited)", + "@errorRateLimited": { + "description": "Error title - too many requests" + }, + "errorRateLimitedMessage": "Muitas solicitações. Por favor, aguarde um momento antes de pesquisar novamente.", + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" + }, + "errorNoTracksFound": "Nenhuma faixa encontrada", + "@errorNoTracksFound": { + "description": "Error - search returned no results" + }, + "searchEmptyResultSubtitle": "Tente outra palavra-chave", + "@searchEmptyResultSubtitle": { + "description": "Subtitle shown under the empty search result state on the home screen" }, "errorUrlNotRecognized": "Link não reconhecido", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when album artist is used for folder names" + "errorUrlNotRecognizedMessage": "Este link não é suportado. Verifique se a URL está correta e se uma extensão compatível está instalada.", + "@errorUrlNotRecognizedMessage": { + "description": "Error message - URL not recognized explanation" }, - "@qualityFlacLossless": { - "description": "Quality option - CD quality FLAC" + "errorUrlFetchFailed": "Falha ao carregar o conteúdo deste link. Por favor, tente novamente.", + "@errorUrlFetchFailed": { + "description": "Error message - generic URL fetch failure" }, - "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", - "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is on" + "errorMissingExtensionSource": "Não é possível carregar {item}: faltando a fonte da extensão", + "@errorMissingExtensionSource": { + "description": "Error - extension source not available", + "placeholders": { + "item": { + "type": "String" + } + } }, - "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", - "@collectionLovedEmptySubtitle": { - "description": "Loved empty state subtitle" + "actionPause": "Pausar", + "@actionPause": { + "description": "Action button - pause download" }, - "@libraryBuiltInPlayerInfo": { - "description": "Info note explaining the built-in player is for previews only" + "actionResume": "Retomar", + "@actionResume": { + "description": "Action button - resume download" }, - "@notifLibraryScanProgressNoTotal": { - "description": "Notification body for library scan progress when total is unknown", + "actionCancel": "Cancelar", + "@actionCancel": { + "description": "Action button - cancel operation" + }, + "actionSelectAll": "Selecionar Tudo", + "@actionSelectAll": { + "description": "Action button - select all items" + }, + "actionDeselect": "Desselecionar", + "@actionDeselect": { + "description": "Action button - deselect all" + }, + "selectionSelected": "{count} selecionado(s)", + "@selectionSelected": { + "description": "Selection count indicator", "placeholders": { - "scanned": { - "type": "int" - }, - "percentage": { + "count": { "type": "int" } } }, - "@tutorialSearchTitle": { - "description": "Tutorial search page title" + "selectionAllSelected": "Todas as faixas selecionadas", + "@selectionAllSelected": { + "description": "Status - all items selected" }, - "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", - "@a11yTrackByArtist": { - "description": "Accessibility label for a queue or list track item", + "selectionSelectToDelete": "Selecione as faixas para apagar", + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "progressFetchingMetadata": "Buscando metadados... {current}/{total}", + "@progressFetchingMetadata": { + "description": "Progress indicator - loading track info", "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "libraryFilterMetadataMissingLabel": "Missing label", - "@libraryFilterMetadataMissingLabel": { - "description": "Filter option - items missing record label" - }, - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "trackMetadata": "Metadados", - "@trackMetadata": { - "description": "Tab title - track metadata" + "progressReadingCsv": "Lendo CSV...", + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" }, - "trackOptionRemoveFromLoved": "Remove from Loved", - "@trackOptionRemoveFromLoved": { - "description": "Bottom sheet action label - remove track from loved folder" + "searchSongs": "Músicas", + "@searchSongs": { + "description": "Search result category - songs" }, - "@aboutTelegramChat": { - "description": "Link to Telegram chat group" + "searchArtists": "Artistas", + "@searchArtists": { + "description": "Search result category - artists" }, - "@trackCopiedToClipboard": { - "description": "Snackbar - content copied" + "searchAlbums": "Álbuns", + "@searchAlbums": { + "description": "Search result category - albums" }, - "aboutKeepAndroidOpen": "Manter o Android aberto", - "@aboutKeepAndroidOpen": { - "description": "Link to Keep Android Open campaign website" + "searchPlaylists": "Listas de reprodução", + "@searchPlaylists": { + "description": "Search result category - playlists" }, - "@lyricsProvidersDisabledSection": { - "description": "Section header for disabled providers", - "placeholders": { - "count": { - "type": "int" - } - } + "searchSortTitle": "Ordenar resultados", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" }, - "@downloadAllowLocalNetwork": { - "description": "Setting title for allowing requests to private/local network targets" + "searchSortDefault": "Padrão", + "@searchSortDefault": { + "description": "Sort option - default API order" }, - "@openInOtherServices": { - "description": "Title and tooltip for finding the current collection in other services" + "searchSortTitleAZ": "Título (A-Z)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" }, - "@extensionVerificationBrowserInApp": { - "description": "Chip label for in-app browser verification mode" + "searchSortTitleZA": "Título (Z-A)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" }, - "sectionSearchSource": "Origem da Pesquisa", - "@sectionSearchSource": { - "description": "Settings section header" + "searchSortArtistAZ": "Artista (A-Z)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" }, - "allFilesAccess": "All Files Access", - "@allFilesAccess": { - "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + "searchSortArtistZA": "Artista (Z-A)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" }, - "extensionsInstalledCount": "{count} extensões instaladas com sucesso", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } + "searchSortDurationShort": "Duração (mais curta)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" }, - "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", - "@snackbarFailedToEmbedLyrics": { - "description": "Snackbar when lyrics embedding fails" + "searchSortDurationLong": "Duração (mais longa)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" }, - "@lyricsProviderMusixmatchDesc": { - "description": "Description for Musixmatch provider" + "searchSortDateOldest": "Data de lançamento (mais antiga)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" }, - "queueRateLimitTitle": "Service rate limited", - "@queueRateLimitTitle": { - "description": "Title shown on a failed queue item when the download service rate limits requests" + "searchSortDateNewest": "Data de lançamento (mais recente)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" }, - "@notifDownloadComplete": { - "description": "Notification title when a single download is complete" + "tooltipPlay": "Reproduzir", + "@tooltipPlay": { + "description": "Tooltip - play button" }, - "@homeSupports": { - "description": "Info text about supported URL types" + "filenameFormat": "Formato do Nome do Arquivo", + "@filenameFormat": { + "description": "Setting title - filename pattern" }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" + "filenameShowAdvancedTags": "Exibir etiquetas avançadas", + "@filenameShowAdvancedTags": { + "description": "Toggle label for showing advanced filename tags" }, - "@lyricsModeEmbedSubtitle": { - "description": "Subtitle for embed option" + "filenameShowAdvancedTagsDescription": "Ativar etiquetas formatadas para preenchimento de faixas e padrões de data", + "@filenameShowAdvancedTagsDescription": { + "description": "Description for advanced filename tag toggle" }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" + "folderOrganizationNone": "Nenhuma organização", + "@folderOrganizationNone": { + "description": "Folder option - flat structure" }, - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" + "folderOrganizationByPlaylist": "Por playlist", + "@folderOrganizationByPlaylist": { + "description": "Folder option - playlist folders" }, - "@trackArtist": { - "description": "Metadata label - artist name" + "folderOrganizationByPlaylistSubtitle": "Pasta separada para cada playlist", + "@folderOrganizationByPlaylistSubtitle": { + "description": "Subtitle for playlist folder option" }, - "cacheCoverImageDesc": "Downloaded album and track cover art. Will re-download when viewed.", - "@cacheCoverImageDesc": { - "description": "Description of what cover image cache contains" + "folderOrganizationByArtist": "Por Artista", + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" }, - "queueClearAll": "Limpar Tudo", - "@queueClearAll": { - "description": "Button - clear all queue items" + "folderOrganizationByAlbum": "Por Album", + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" }, - "downloadUsePrimaryArtistOnlyDisabled": "Full artist string used for folder name", - "@downloadUsePrimaryArtistOnlyDisabled": { - "description": "Subtitle when primary artist only is disabled" + "folderOrganizationByArtistAlbum": "Artista/Álbum", + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" }, - "backupImportSectionTitle": "Restore backup", - "@backupImportSectionTitle": { - "description": "Section title for the import/restore card" + "folderOrganizationDescription": "Organizar arquivos baixados em pastas", + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" }, - "@downloadMusixmatchLanguageHint": { - "description": "Placeholder for Musixmatch language input" + "folderOrganizationNoneSubtitle": "Todos os arquivos na pasta de download", + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" }, - "collectionRemoveFromFolder": "Remove from folder", - "@collectionRemoveFromFolder": { - "description": "Tooltip for removing track from wishlist/loved folder" + "folderOrganizationByArtistSubtitle": "Pasta separada para cada artista", + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" }, - "storeFilterMetadata": "Metadados", - "@storeFilterMetadata": { - "description": "Repo filter - metadata providers" + "folderOrganizationByAlbumSubtitle": "Pasta separada para cada álbum", + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" }, - "shareSheetCopyLink": "Copy Link", - "errorRateLimitedMessage": "Muitas solicitações. Por favor, aguarde um momento antes de pesquisar novamente.", - "@errorRateLimitedMessage": { - "description": "Error message - rate limit explanation" + "folderOrganizationByArtistAlbumSubtitle": "Pastas aninhadas para artista e álbum", + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" }, - "libraryFilterSortGenreDesc": "Genre (Z-A)", - "@libraryFilterSortGenreDesc": { - "description": "Sort option - genre descending" + "updateAvailable": "Atualização Disponível", + "@updateAvailable": { + "description": "Update dialog title" }, - "trackFileNotFound": "Arquivo não encontrado", - "@trackFileNotFound": { - "description": "Error - file doesn't exist" + "updateLater": "Depois", + "@updateLater": { + "description": "Update button - dismiss" }, - "@queueEmptySinglesSubtitle": { - "description": "Empty state subtitle for single track downloads" + "updateStartingDownload": "Iniciando download...", + "@updateStartingDownload": { + "description": "Update status - initializing" }, - "@queueDownloadStarting": { - "description": "Queue status before download progress is available" + "updateDownloadFailed": "Download falhou", + "@updateDownloadFailed": { + "description": "Update error title" }, - "metadataProviderPriorityInfo": "O Deezer não tem limites de taxa e é recomendado como principal. O Spotify pode limitar a taxa após muitas solicitações.", - "@metadataProviderPriorityInfo": { - "description": "Info tip about rate limits" + "updateFailedMessage": "Falha ao baixar a atualização", + "@updateFailedMessage": { + "description": "Update error message" }, - "aboutPCSource": "Código-fonte do app desktop", - "@aboutPCSource": { - "description": "Link to PC GitHub repo" + "updateNewVersionReady": "Uma nova versão está pronta", + "@updateNewVersionReady": { + "description": "Update subtitle" }, - "editMetadataAutoFill": "Auto-fill from online", - "@editMetadataAutoFill": { - "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + "updateRequiredTitle": "Update required", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "snackbarDeletedTracks": "{count} {count, plural, =1{faixa apagada} other{faixas apagadas}}", - "@snackbarDeletedTracks": { - "description": "Snackbar - tracks deleted", + "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { "count": { "type": "int" } } }, - "@extensionHealthServiceDegraded": { - "description": "Tooltip for degraded extension service" + "updateCurrent": "Atual", + "@updateCurrent": { + "description": "Label for current version" }, - "lyricsProviderLrclibDesc": "Open-source synced lyrics database", - "@lyricsProviderLrclibDesc": { - "description": "Description for LRCLIB provider" + "updateNew": "Novo", + "@updateNew": { + "description": "Label for new version" }, - "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", - "@downloadMusixmatchLanguageDesc": { - "description": "Description in Musixmatch language picker" + "updateDownloading": "Baixando...", + "@updateDownloading": { + "description": "Update status - downloading" }, - "@optionsEmbedMetadataSubtitleOn": { - "description": "Subtitle when metadata embedding is enabled" - }, - "@setupSkipForNow": { - "description": "Skip button text" - }, - "@a11ySelectTrack": { - "description": "Accessibility label for selecting a track" - }, - "@folderOrganizationByAlbumSubtitle": { - "description": "Subtitle for album folder option" - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@extensionVerificationBrowserTitle": { - "description": "Settings option title for extension verification browser preference" + "updateWhatsNew": "Novidades", + "@updateWhatsNew": { + "description": "Changelog section title" }, - "@backupContentsExtensions": { - "description": "Backup contents row for installed extensions count", - "placeholders": { - "count": { - "type": "int" - } - } + "updateDownloadInstall": "Baixar e Instalar", + "@updateDownloadInstall": { + "description": "Update button - download and install" }, - "snackbarUrlCopied": "URL do {platform} copiado para a área de transferência", - "@snackbarUrlCopied": { - "description": "Snackbar - URL copied", - "placeholders": { - "platform": { - "type": "String", - "description": "Platform name (Spotify/Deezer)" - } - } + "updateDontRemind": "Não lembrar", + "@updateDontRemind": { + "description": "Update button - skip this version" }, - "aboutBinimumDesc": "O criador do QQDL e da HiFi API. Este projeto ajudou a moldar o suporte a transferências sem perdas.", - "@aboutBinimumDesc": { - "description": "Credit description for binimum" + "providerPriorityTitle": "Prioridade de Provedor", + "@providerPriorityTitle": { + "description": "Provider priority page title" }, - "discographyFetchingAlbum": "Buscando {current} de {total}...", - "@discographyFetchingAlbum": { - "description": "Progress - fetching specific album", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "providerPriorityDescription": "Arraste para reordenar provedores de download. O aplicativo irá tentar provedores de cima para baixo ao baixar as faixas.", + "@providerPriorityDescription": { + "description": "Provider priority page description" }, - "logAutoScrollOn": "Auto-scroll ON", - "@logAutoScrollOn": { - "description": "Tooltip when auto-scroll is enabled on the log screen" + "providerPriorityInfo": "Se uma faixa não estiver disponível no primeiro provedor, o aplicativo irá tentar automaticamente a próxima.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" }, - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" + "providerPriorityFallbackExtensionsDescription": "Escolha quais extensões de download instaladas podem ser usadas durante a alternativa automática.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" }, - "@regionCountryBR": { - "description": "Country name for SongLink region picker" + "providerPriorityFallbackExtensionsHint": "Apenas extensões ativadas com capacidade de provedor de download são listadas aqui.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" }, - "@lyricsProvidersTitle": { - "description": "Settings item title for lyrics provider order" + "providerExtension": "Extensão", + "@providerExtension": { + "description": "Label for extension-provided providers" }, - "trackMetadataService": "Serviço", - "@trackMetadataService": { - "description": "Metadata field - download service used" + "metadataProviderPriorityTitle": "Prioridade de Metadados", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" }, - "discographyAddedToQueue": "{count} faixas adicionadas à fila", - "cueSplitTrackCount": "{count} tracks", - "@cueSplitTrackCount": { - "description": "Number of tracks in CUE sheet", - "placeholders": { - "count": { - "type": "int" - } - } + "metadataProviderPriorityDescription": "Arraste para reordenar provedores de metadados. O aplicativo tentará provedores de cima para baixo ao procurar por faixas e buscar metadados.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" }, - "dialogImportPlaylistTitle": "Importar Playlist", - "@dialogImportPlaylistTitle": { - "description": "Dialog title - import CSV playlist" + "metadataProviderPriorityInfo": "O Deezer não tem limites de taxa e é recomendado como principal. O Spotify pode limitar a taxa após muitas solicitações.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" }, - "@cleanupOrphanedDownloadsSubtitle": { - "description": "Subtitle for orphaned cleanup button" + "logTitle": "Registros", + "@logTitle": { + "description": "Logs screen title" }, - "settingsLocalLibrary": "Local Library", - "@settingsLocalLibrary": { - "description": "Settings menu item - local library" + "logCopied": "Registros copiados para área de transferência", + "@logCopied": { + "description": "Snackbar - logs copied" }, - "@metadataSaveFailedStorage": { - "description": "Snackbar error when writing metadata file back to storage fails" + "logSearchHint": "Pesquisar registros...", + "@logSearchHint": { + "description": "Log search placeholder" }, - "logCopyLogs": "Copy logs", - "@logCopyLogs": { - "description": "Tooltip for copying logs" + "logFilterLevel": "Nível", + "@logFilterLevel": { + "description": "Filter by log level" }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", - "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for WiFi-only option in picker" + "logFilterSection": "Filtro", + "@logFilterSection": { + "description": "Filter section title" }, - "@lyricsModeBothSubtitle": { - "description": "Subtitle for both option" + "logShareLogs": "Compartilhar registros", + "@logShareLogs": { + "description": "Share button tooltip" }, - "@collectionAlreadyInPlaylist": { - "description": "Snackbar when track already exists in playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "logClearLogs": "Limpar registros", + "@logClearLogs": { + "description": "Clear button tooltip" }, - "@collectionFoldersTitle": { - "description": "Library section title for custom folders" + "logClearLogsTitle": "Limpar Registros", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" }, - "searchSortDateNewest": "Data de lançamento (mais recente)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" + "logClearLogsMessage": "Tem certeza de que deseja limpar todos os registros?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" + "logFilterBySeverity": "Filtrar registros por gravidade", + "@logFilterBySeverity": { + "description": "Filter dialog title" }, - "@recentTypeAlbum": { - "description": "Recent access item type - album" + "logNoLogsYet": "Ainda não há registros", + "@logNoLogsYet": { + "description": "Empty state title" }, - "nowPlayingPlayInOrder": "Play in order", - "@nowPlayingPlayInOrder": { - "description": "Tooltip when shuffle mode is disabled" + "logNoLogsYetSubtitle": "Os registros aparecerão aqui enquanto você usa o aplicativo", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" }, - "@cueSplitConfirmMessage": { - "description": "CUE split confirmation dialog message", + "logEntriesFiltered": "Entradas ({count} filtradas)", + "@logEntriesFiltered": { + "description": "Log count with filter active", "placeholders": { - "album": { - "type": "String" - }, "count": { "type": "int" } } }, - "@audioAnalysisFileSize": { - "description": "File size metric label" - }, - "artistSingles": "Singles e EPs", - "@artistSingles": { - "description": "Section header for singles/EPs" - }, - "@snackbarProviderPrioritySaved": { - "description": "Snackbar - provider order saved" - }, - "@recentPlaylistInfo": { - "description": "Snackbar message when tapping playlist in recent access", + "logEntries": "Entradas ({count})", + "@logEntries": { + "description": "Total log count", "placeholders": { - "name": { - "type": "String", - "description": "Playlist name" + "count": { + "type": "int" } } }, - "@lyricsProviderLyricsPlusDesc": { - "description": "Description for LyricsPlus provider" + "channelStable": "Estável", + "@channelStable": { + "description": "Update channel - stable releases" }, - "@libraryFilterDownloaded": { - "description": "Filter chip - show only downloaded items" + "channelPreview": "Prévia", + "@channelPreview": { + "description": "Update channel - beta/preview releases" }, - "recentPlaylistInfo": "Playlist: {name}", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" + "sectionSearchSource": "Origem da Pesquisa", + "@sectionSearchSource": { + "description": "Settings section header" }, - "@actionCreate": { - "description": "Generic action button - create" + "sectionDownload": "Baixar", + "@sectionDownload": { + "description": "Settings section header" }, - "@downloadSelectQuality": { - "description": "Dialog title - choose audio quality" + "sectionPerformance": "Desempenho", + "@sectionPerformance": { + "description": "Settings section header" }, - "cueSplitAlbum": "Album: {album}", - "@cueSplitAlbum": { - "description": "Album name in CUE split sheet", - "placeholders": { - "album": { - "type": "String" - } - } + "sectionApp": "Aplicativo", + "@sectionApp": { + "description": "Settings section header" }, - "@trackCoverNoSource": { - "description": "Snackbar when no cover art URL or embedded cover" + "sectionData": "Dados", + "@sectionData": { + "description": "Settings section header" }, - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" + "sectionDebug": "Depuração", + "@sectionDebug": { + "description": "Settings section header" }, - "@notifLibraryScanCompleteBody": { - "description": "Notification body for library scan complete - number of indexed tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "sectionService": "Serviço", + "@sectionService": { + "description": "Settings section header" }, - "optionsDetailedLogging": "Registro detalhado", - "@optionsDetailedLogging": { - "description": "Enable verbose logs for debugging" + "sectionAudioQuality": "Qualidade de Áudio", + "@sectionAudioQuality": { + "description": "Settings section header" }, - "@lyricsProvidersDiscardContent": { - "description": "Body text of the discard-changes dialog on lyrics provider page" + "sectionFileSettings": "Configurações de Arquivo", + "@sectionFileSettings": { + "description": "Settings section header" }, - "@dialogDisableHistoryTitle": { - "description": "Confirmation dialog title shown before disabling download history" + "sectionLyrics": "Letras", + "@sectionLyrics": { + "description": "Settings section header" }, - "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" + "lyricsMode": "Modo de Letras", + "@lyricsMode": { + "description": "Setting - how to save lyrics" }, - "@appName": { - "description": "App name - DO NOT TRANSLATE" + "lyricsModeDescription": "Escolha como as letras são salvas com os seus downloads", + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" }, - "libraryActions": "Actions", - "@libraryActions": { - "description": "Section header for library actions" + "lyricsModeEmbed": "Incorporar no arquivo", + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" }, - "setupNoFolderSelected": "Nenhuma pasta selecionada. Você gostaria de usar a pasta padrão de música?", - "@setupNoFolderSelected": { - "description": "Prompt when no folder selected" + "lyricsModeEmbedSubtitle": "Letra armazenada nos metadados da FLAC", + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", - "trackSaveFailed": "Failed: {error}", - "@trackSaveFailed": { - "description": "Snackbar when save operation fails", - "placeholders": { - "error": { - "type": "String" - } - } + "lyricsModeExternal": "Arquivo .lrc externo", + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" }, - "replayGainBatchConfirmTitle": "Adicionar ReplayGain", - "@replayGainBatchConfirmTitle": { - "description": "Title of the batch ReplayGain confirmation dialog" + "lyricsModeExternalSubtitle": "Arquivo .lrc separado para reprodutores como o Samsung Music", + "@lyricsModeExternalSubtitle": { + "description": "Subtitle for external option" }, - "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", - "@tutorialExtensionsTip1": { - "description": "Tutorial extensions tip 1" + "lyricsModeBoth": "Ambos", + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" }, - "@trackAddToQueue": { - "description": "Menu action to add a track to the playback queue" + "lyricsModeBothSubtitle": "Incorporar e salvar arquivo .lrc", + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" }, - "@cacheTrackLookup": { - "description": "Cache item title for track ID lookup cache" + "sectionColor": "Cor", + "@sectionColor": { + "description": "Settings section header" }, - "@discographyNoAlbums": { - "description": "Error - no albums found for artist" + "sectionTheme": "Tema", + "@sectionTheme": { + "description": "Settings section header" }, - "@updateLater": { - "description": "Update button - dismiss" + "sectionLayout": "Aparência\n", + "@sectionLayout": { + "description": "Settings section header" }, - "@snackbarFailedToInstall": { - "description": "Snackbar - extension install error" + "sectionLanguage": "Idioma", + "@sectionLanguage": { + "description": "Settings section header for language" }, - "@albumFolderArtistAlbumFlatSubtitle": { - "description": "Folder structure example for flat singles" + "appearanceLanguage": "Idioma do aplicativo", + "@appearanceLanguage": { + "description": "Language setting title" }, - "@errorMissingExtensionSource": { - "description": "Error - extension source not available", - "placeholders": { - "item": { - "type": "String" - } - } + "settingsAppearanceSubtitle": "Tema, cores, exibição", + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" }, - "libraryFilterSortAlbumAsc": "Album (A-Z)", - "@libraryFilterSortAlbumAsc": { - "description": "Sort option - album ascending" + "settingsDownloadSubtitle": "Serviço, qualidade, alternativa", + "@settingsDownloadSubtitle": { + "description": "Download settings description" }, - "@queueTrackCount": { - "description": "Track count label with plural support", + "settingsExtensionsSubtitle": "Gerenciar provedores de download", + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" + }, + "settingsLogsSubtitle": "Ver logs do app para depuração", + "@settingsLogsSubtitle": { + "description": "Logs settings description" + }, + "loadingSharedLink": "Carregando link compartilhado...", + "@loadingSharedLink": { + "description": "Status when opening shared URL" + }, + "pressBackAgainToExit": "Pressione voltar novamente para sair", + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, + "downloadAllCount": "Baixar Todos ({count})", + "@downloadAllCount": { + "description": "Download all button with count", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisMono": "Mono", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", + "tracksCount": "{count, plural, =1{1 faixa} other{{count} faixas}}", + "@tracksCount": { + "description": "Track count display", "placeholders": { - "source": { - "type": "String" + "count": { + "type": "int" } } }, - "@lyricsModeEmbed": { - "description": "Lyrics mode option - embed in audio file" + "trackCopyFilePath": "Copiar caminho do arquivo", + "@trackCopyFilePath": { + "description": "Action - copy file path" }, - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" + "trackRemoveFromDevice": "Remover do dispositivo", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" }, - "@cacheRefreshStats": { - "description": "Button label to refresh cache statistics" + "trackLoadLyrics": "Carregar Letras", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" }, - "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", - "@lyricsProviderAppleMusicDesc": { - "description": "Description for Apple Music provider" + "trackMetadata": "Metadados", + "@trackMetadata": { + "description": "Tab title - track metadata" }, - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" + "trackFileInfo": "Informações do Arquivo", + "@trackFileInfo": { + "description": "Tab title - file information" }, - "updateFailedMessage": "Falha ao baixar a atualização", - "@updateFailedMessage": { - "description": "Update error message" + "trackLyrics": "Letras", + "@trackLyrics": { + "description": "Tab title - lyrics" }, - "cacheEstimatedTotal": "Estimated cache usage: {size}", - "@cacheEstimatedTotal": { - "description": "Total cache size shown in summary", - "placeholders": { - "size": { - "type": "String" - } - } + "trackFileNotFound": "Arquivo não encontrado", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" }, - "@aboutVersion": { - "description": "Version info label" + "trackOpenInDeezer": "Abrir no Deezer", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" }, - "dialogRetry": "Tentar novamente", - "@cueSplitSplitting": { - "description": "Snackbar while splitting CUE", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "trackOpenInSpotify": "Abrir no Spotify", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" }, - "@searchSortTitleZA": { - "description": "Sort option - title descending" + "trackTrackName": "Nome da faixa", + "@trackTrackName": { + "description": "Metadata label - track title" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", - "@tutorialLibraryTip2": { - "description": "Tutorial library tip 2" + "trackArtist": "Artista", + "@trackArtist": { + "description": "Metadata label - artist name" }, - "extensionHealthServiceOffline": "Service offline", - "@extensionHealthServiceOffline": { - "description": "Tooltip for offline extension service" + "trackAlbumArtist": "Artista do álbum", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" }, - "actionDeselect": "Desselecionar", - "@actionDeselect": { - "description": "Action button - deselect all" + "trackAlbum": "Álbum", + "@trackAlbum": { + "description": "Metadata label - album name" }, - "@trackConvertOriginal": { - "description": "Label for keeping original bit depth or sample rate during conversion" + "trackTrackNumber": "Número da faixa", + "@trackTrackNumber": { + "description": "Metadata label - track number" }, - "@libraryClearConfirmTitle": { - "description": "Dialog title for clear confirmation" + "trackDiscNumber": "Número do disco", + "@trackDiscNumber": { + "description": "Metadata label - disc number" }, - "@dialogDownloadAllMessage": { - "description": "Body of the Download All confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDuration": "Duração", + "@trackDuration": { + "description": "Metadata label - track length" }, - "homeSupports": "Suporte: Faixas, Álbuns, Playlists, URLs de Artista", - "@downloadedAlbumDeleteSelected": { - "description": "Button - delete selected tracks" + "trackAudioQuality": "Qualidade de Áudio", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" }, - "@recentShowAllDownloads": { - "description": "Button label to unhide hidden downloads in recent access" + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" + "trackReleaseDate": "Data de lançamento", + "@trackReleaseDate": { + "description": "Metadata label - release date" }, - "collectionPlaylistEmptyTitle": "A lista de reprodução está vazia", - "@collectionPlaylistEmptyTitle": { - "description": "Playlist empty state title" + "trackGenre": "Género", + "@trackGenre": { + "description": "Metadata label - music genre" }, - "libraryFilterSortLatest": "Latest", - "@libraryFilterSortLatest": { - "description": "Sort option - newest first" + "trackLabel": "Gravadora", + "@trackLabel": { + "description": "Metadata label - record label" }, - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" + "trackCopyright": "Direitos Autorais", + "@trackCopyright": { + "description": "Metadata label - copyright information" }, - "@selectionSelected": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDownloaded": "Baixado", + "@trackDownloaded": { + "description": "Metadata label - download date" }, - "@tracksCount": { - "description": "Track count display", + "trackCopyLyrics": "Copiar letra", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsSource": "Fonte: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", "placeholders": { - "count": { - "type": "int" + "source": { + "type": "String" } } }, - "@optionsCheckUpdates": { - "description": "Auto update check toggle" - }, - "@qualityHiResFlacMaxSubtitle": { - "description": "Technical spec for hi-res max" - }, - "actionStop": "Stop", - "@actionStop": { - "description": "Generic action - stop" - }, - "@selectionSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "folderOrganizationNoneSubtitle": "Todos os arquivos na pasta de download", - "@folderOrganizationNoneSubtitle": { - "description": "Subtitle for no organization option" - }, - "@updateDownloading": { - "description": "Update status - downloading" + "trackLyricsNotAvailable": "Letra não disponível para esta faixa", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" }, - "artistAlbums": "Álbuns", - "@artistAlbums": { - "description": "Section header for artist albums" + "trackLyricsNotInFile": "Nenhuma letra encontrada neste arquivo", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" }, - "trackConvertDitherTriangular": "TPDF", - "@trackConvertDitherTriangular": { - "description": "Lossless conversion triangular probability density function dither option" + "trackFetchOnlineLyrics": "Buscar online", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", - "@nowPlayingShuffleLibraryFailed": { - "description": "Snackbar when shuffling the library fails", - "placeholders": { - "error": { - "type": "String" - } - } + "trackLyricsTimeout": "A solicitação expirou. Tente novamente mais tarde.", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" }, - "@setupIcloudNotSupported": { - "description": "Error when user selects iCloud Drive on iOS" + "trackLyricsLoadFailed": "Falha ao carregar a letra", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" }, - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + "trackEmbedLyrics": "Incorporar Letras", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" }, - "@extensionsProviderPrioritySection": { - "description": "Section header - provider priority" + "trackLyricsEmbedded": "Letras incorporadas com sucesso", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" }, - "@libraryShowDuplicateIndicatorSubtitle": { - "description": "Subtitle for duplicate indicator toggle" + "trackInstrumental": "Faixa de instrumentais", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" }, - "sectionDuplicates": "Duplicates", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" + "trackCopiedToClipboard": "Copiado para a área de transferência", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" }, - "@backupTitle": { - "description": "App bar title for the backup and restore page" + "trackDeleteConfirmTitle": "Remover do dispositivo?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" }, - "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", - "cacheSectionMaintenance": "Maintenance", - "@cacheSectionMaintenance": { - "description": "Section header for cleanup actions" + "trackDeleteConfirmMessage": "Isto irá excluir o arquivo baixado permanentemente e removê-lo do seu histórico.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" }, - "@editMetadataFieldGenre": { - "description": "Chip label for genre field in auto-fill selector" + "dateToday": "Hoje", + "@dateToday": { + "description": "Relative date - today" }, - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" + "dateYesterday": "Ontem", + "@dateYesterday": { + "description": "Relative date - yesterday" }, - "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", - "@selectionBatchConvertConfirmMessage": { - "description": "Confirmation dialog message for batch conversion", + "dateDaysAgo": "{count} dias atrás", + "@dateDaysAgo": { + "description": "Relative date - days ago", "placeholders": { "count": { "type": "int" - }, - "format": { - "type": "String" - }, - "bitrate": { - "type": "String" } } }, - "@selectionTapPlaylistsToSelect": { - "description": "Hint shown in playlist selection mode" - }, - "qualityHiResFlacMaxSubtitle": "24-bit / até 192kHz", - "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", - "@snackbarRemovedTracksFromLoved": { - "description": "Snackbar after removing multiple tracks from Loved folder", + "dateWeeksAgo": "{count} semanas atrás", + "@dateWeeksAgo": { + "description": "Relative date - weeks ago", "placeholders": { "count": { "type": "int" } } }, - "folderOrganizationByArtistAlbum": "Artista/Álbum", - "@folderOrganizationByArtistAlbum": { - "description": "Folder option - nested folders" - }, - "snackbarCannotOpenFile": "Não foi possível abrir o arquivo: {error}", - "@snackbarCannotOpenFile": { - "description": "Snackbar - file open error", + "dateMonthsAgo": "{count} meses atrás", + "@dateMonthsAgo": { + "description": "Relative date - months ago", "placeholders": { - "error": { - "type": "String" + "count": { + "type": "int" } } }, - "@optionsDetailedLoggingOff": { - "description": "Status when logging disabled" - }, - "@setupStorageDescription": { - "description": "Explanation for storage permission" - }, - "audioAnalysisCodec": "Codec", - "@regionCountryFR": { - "description": "Country name for SongLink region picker" - }, - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" + "storeFilterAll": "Tudo", + "@storeFilterAll": { + "description": "Repo filter - all extensions" }, - "@libraryClearConfirmMessage": { - "description": "Dialog message for clear confirmation" + "storeFilterMetadata": "Metadados", + "@storeFilterMetadata": { + "description": "Repo filter - metadata providers" }, - "trackLyricsNotAvailable": "Letra não disponível para esta faixa", - "@trackLyricsNotAvailable": { - "description": "Message when lyrics not found" + "storeFilterDownload": "Baixar", + "@storeFilterDownload": { + "description": "Repo filter - download providers" }, "storeFilterUtility": "Utilidade", "@storeFilterUtility": { "description": "Repo filter - utility extensions" }, - "collectionAddedToPlaylist": "Added to \"{playlistName}\"", - "@collectionAddedToPlaylist": { - "description": "Snackbar after adding track to playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "storeFilterLyrics": "Letras", + "@storeFilterLyrics": { + "description": "Repo filter - lyrics providers" }, - "cacheClearConfirmTitle": "Clear cache?", - "@cacheClearConfirmTitle": { - "description": "Dialog title before clearing one cache category" + "storeFilterIntegration": "Integração", + "@storeFilterIntegration": { + "description": "Repo filter - integrations" }, - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" + "storeClearFilters": "Limpar filtros", + "@storeClearFilters": { + "description": "Button to clear all filters" }, - "@aboutMobileDeveloper": { - "description": "Role description for mobile dev" + "storeAddRepoTitle": "Adicionar repositório de extensões", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" }, - "albumFolderYearAlbum": "[Ano] Álbum", - "@albumFolderYearAlbum": { - "description": "Album folder option with year" + "storeAddRepoDescription": "Insira a URL de um repositório do GitHub que contenha um arquivo registry.json para navegar e instalar extensões.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" }, - "cacheTitle": "Storage & Cache", - "@extensionPostProcessing": { - "description": "Capability - post-download processing" + "storeRepoUrlLabel": "URL do repositório", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" }, - "extensionsNoMetadataProvider": "Nenhuma extensão com provedor de metadados", - "@extensionsNoMetadataProvider": { - "description": "Empty state - no metadata providers" + "storeRepoUrlHint": "https://github.com/usuario/repositorio", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" }, - "searchSortTitleZA": "Título (Z-A)", - "@queueClearAllMessage": { - "description": "Clear queue confirmation" + "storeAddRepoButton": "Adicionar repositório", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" }, - "audioAnalysisTitle": "Audio Quality Analysis", - "@audioAnalysisTitle": { - "description": "Title for audio analysis section" - }, - "@aboutReportIssueSubtitle": { - "description": "Subtitle for report issue" + "storeChangeRepoTooltip": "Mudar repositório", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" }, - "@audioAnalysisSampleRate": { - "description": "Sample rate metric label" + "storeRepoDialogTitle": "Repositório de extensões", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" }, - "@discographySelectedCount": { - "description": "Selection count badge", - "placeholders": { - "count": { - "type": "int" - } - } + "storeRepoDialogCurrent": "Repositório atual:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" }, - "qualityFlacLosslessSubtitle": "16 bits / 44,1 kHz", - "@qualityFlacLosslessSubtitle": { - "description": "Technical spec for lossless" + "storeNewRepoUrlLabel": "URL do novo repositório", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" }, - "libraryScanFinalizing": "Finalizing library...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" + "storeLoadError": "Falha ao carregar o repositório", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" }, - "@trackEditMetadata": { - "description": "Menu action - edit embedded metadata" + "storeEmptyNoExtensions": "Nenhuma extensão disponível", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" }, - "@downloadNeteaseIncludeRomanization": { - "description": "Setting to include romanized lyrics from Netease" + "storeEmptyNoResults": "Nenhuma extensão encontrada", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" }, - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" + "extensionId": "ID", + "@extensionId": { + "description": "Extension detail - unique ID" }, - "regionCountryDE": "Germany", - "@regionCountryDE": { - "description": "Country name for SongLink region picker" + "extensionError": "Erro", + "@extensionError": { + "description": "Extension detail - error message" }, - "optionsAutoFallback": "Fallback Automático", - "@optionsAutoFallback": { - "description": "Auto-retry with other services" + "extensionCapabilities": "Funcionalidades", + "@extensionCapabilities": { + "description": "Section header - extension features" }, - "@trackMetadataPlay": { - "description": "Action button - play track" + "extensionMetadataProvider": "Provedor de Metadados", + "@extensionMetadataProvider": { + "description": "Capability - provides metadata" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" + "extensionDownloadProvider": "Provedor de Download", + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" }, - "aboutMobileDeveloper": "Desenvolvedor da versão móvel", - "@trackDownloaded": { - "description": "Metadata label - download date" + "extensionLyricsProvider": "Provedor de Letras", + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" }, - "homeSkipAlreadyDownloaded": "Skip already downloaded songs", - "@homeSkipAlreadyDownloaded": { - "description": "Checkbox label in import dialog to skip already-downloaded songs" + "extensionUrlHandler": "Gerenciador de URL", + "@extensionUrlHandler": { + "description": "Capability - handles URLs" }, - "dialogUninstall": "Desinstalar", - "@dialogUninstall": { - "description": "Dialog button - uninstall extension" + "extensionQualityOptions": "Opções de Qualidade", + "@extensionQualityOptions": { + "description": "Capability - quality selection" }, - "collectionDeletePlaylist": "Delete playlist", - "@collectionDeletePlaylist": { - "description": "Action to delete playlist" + "extensionPostProcessingHooks": "Ganchos de Pós-Processamento", + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" }, - "trackCoverOnline": "Online cover", - "@trackCoverOnline": { - "description": "Label shown when metadata autofill downloaded cover art from the internet" + "extensionPermissions": "Permissões", + "@extensionPermissions": { + "description": "Section header - required permissions" }, - "downloadTitle": "", - "@downloadTitle": { - "description": "Download settings page title" + "extensionSettings": "Configurações", + "@extensionSettings": { + "description": "Section header - extension settings" }, - "searchArtists": "Artistas", - "@searchArtists": { - "description": "Search result category - artists" + "extensionRemoveButton": "Remover Extensão", + "@extensionRemoveButton": { + "description": "Button to uninstall extension" }, - "extensionUrlHandler": "Gerenciador de URL", - "@extensionUrlHandler": { - "description": "Capability - handles URLs" + "extensionUpdated": "Atualizado", + "@extensionUpdated": { + "description": "Extension detail - last update" }, - "@timeHoursAgo": { - "description": "Relative time - hours ago", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionMinAppVersion": "Versão Mínima do App", + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" }, - "editMetadataAdvanced": "Advanced", - "@editMetadataAdvanced": { - "description": "Expandable section label for advanced metadata fields" + "extensionCustomTrackMatching": "Correspondência de Faixa Personalizada", + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" }, - "@actionSelectAll": { - "description": "Action button - select all items" + "extensionPostProcessing": "Pós-Processamento", + "@extensionPostProcessing": { + "description": "Capability - post-download processing" }, - "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", - "@timeMinutesAgo": { - "description": "Relative time - minutes ago", + "extensionHooksAvailable": "{count} gancho(s) disponíveis", + "@extensionHooksAvailable": { + "description": "Post-processing hooks count", "placeholders": { "count": { "type": "int" } } }, - "regionCountryXK": "Kosovo", - "@downloadAskQualitySubtitle": { - "description": "Subtitle for ask quality toggle" - }, - "setupLanguageSystemDefault": "Padrão do sistema", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "@updateAvailable": { - "description": "Update dialog title" - }, - "cacheEntries": "{count} entries", - "@cacheEntries": { - "description": "Track cache entry count", + "extensionPatternsCount": "{count} padrão(ões)", + "@extensionPatternsCount": { + "description": "URL patterns count", "placeholders": { "count": { "type": "int" } } }, - "@notifLibraryScanExcluded": { - "description": "Library scan complete suffix - excluded track count", + "extensionStrategy": "Estratégia: {strategy}", + "@extensionStrategy": { + "description": "Track matching strategy name", "placeholders": { - "count": { - "type": "int" + "strategy": { + "type": "String" } } }, - "extensionsMetadataPrioritySubtitle": "Definir ordem de origem de pesquisa e metadados", - "@extensionsMetadataPrioritySubtitle": { - "description": "Subtitle for metadata priority" + "extensionsProviderPrioritySection": "Prioridade de Provedor", + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" }, - "downloadedAlbumSelectToDelete": "Selecione as faixas para apagar", - "@downloadedAlbumSelectToDelete": { - "description": "Placeholder when nothing selected" + "extensionsInstalledSection": "Extensões Instaladas", + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" }, - "@dialogClearHistoryTitle": { - "description": "Dialog title - clear download history" + "extensionsNoExtensions": "Nenhuma extensão instalada", + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" }, - "tutorialSettingsTip1": "Change download location and folder organization", - "@tutorialSettingsTip1": { - "description": "Tutorial settings tip 1" + "extensionsNoExtensionsSubtitle": "Instale arquivos .spotiflac-ext para adicionar novos provedores", + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, + "extensionsInstallButton": "Instalar Extensão", + "@extensionsInstallButton": { + "description": "Button to install extension from file" }, + "extensionsInfoTip": "Extensões podem adicionar novos metadados e baixar provedores. Somente instale extensões a partir de fontes confiáveis.", + "@extensionsInfoTip": { + "description": "Security warning about extensions" + }, + "extensionsInstalledSuccess": "Extensão instalada com sucesso", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "allFilesAccessDisabledSubtitle": "Limited to media folders only", - "@allFilesAccessDisabledSubtitle": { - "description": "Subtitle when all files access is disabled" - }, - "@appearanceHistoryViewList": { - "description": "List layout option" + "extensionsInstalledCount": "{count} extensões instaladas com sucesso", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } }, - "@notifAlreadyInLibraryCount": { - "description": "Notification title when track is already in library, with count", + "extensionsInstallPartialSuccess": "Instaladas {installed} de {attempted} extensões", + "@extensionsInstallPartialSuccess": { + "description": "Message when installing multiple extensions partially succeeds", "placeholders": { - "completed": { - "type": "int" + "installed": { + "type": "int", + "description": "Number of successfully installed extensions" }, - "total": { - "type": "int" + "attempted": { + "type": "int", + "description": "Number of selected extensions" } } }, - "@libraryFilterAll": { - "description": "Filter chip - show all library items" - }, - "settingsDownload": "", - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" + "extensionsDownloadPriority": "Prioridade de Download", + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" }, - "@libraryFilterSort": { - "description": "Filter section - sort order" + "extensionsDownloadPrioritySubtitle": "Definir ordem do serviço de download", + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" }, - "metadataProvidersSubtitle": "Drag to set search and metadata source order", - "@extensionPermissions": { - "description": "Section header - required permissions" + "extensionsFallbackTitle": "Extensões alternativas", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "selectionSelectToDelete": "Selecione as faixas para apagar", - "@libraryExternalPlayerSubtitle": { - "description": "Subtitle for external player option" + "extensionsFallbackSubtitle": "Escolha quais extensões de download instaladas podem ser usadas como alternativa", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" }, - "extensionVerificationOpenBrowser": "Open browser", - "@extensionVerificationOpenBrowser": { - "description": "Button to open the extension verification URL in a browser" + "extensionsNoDownloadProvider": "Nenhuma extensão com provedor de download", + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" }, - "@trackConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless-to-lossless conversion", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionsMetadataPriority": "Prioridade de Metadados", + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" }, - "@snackbarAddedTracksToQueue": { - "description": "Snackbar - multiple tracks added to queue", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsMetadataPrioritySubtitle": "Definir ordem de origem de pesquisa e metadados", + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" }, - "@backupContentsWishlist": { - "description": "Backup contents row for wishlist tracks count", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsNoMetadataProvider": "Nenhuma extensão com provedor de metadados", + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" }, - "@cacheCleanupUnusedSubtitle": { - "description": "Subtitle for cleanup unused data action" + "extensionsSearchProvider": "Provedor de Pesquisa", + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" }, - "trackLabel": "Gravadora", - "@trackLabel": { - "description": "Metadata label - record label" + "extensionsNoCustomSearch": "Nenhuma extensão com pesquisa personalizada", + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" }, - "@collectionAddedToLoved": { - "description": "Snackbar after adding track to loved folder", - "placeholders": { - "trackName": { - "type": "String" - } - } + "extensionsSearchProviderDescription": "Escolha qual serviço utilizar para pesquisar faixas", + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" }, - "regionCountryGB": "United Kingdom", - "dialogCancel": "Cancelar", - "@dialogCancel": { - "description": "Dialog button - cancel action" + "extensionsCustomSearch": "Busca personalizada", + "@extensionsCustomSearch": { + "description": "Label for custom search provider" }, - "@folderOrganizationByArtistAlbumSubtitle": { - "description": "Subtitle for nested folder option" + "extensionsErrorLoading": "Erro ao carregar extensão", + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" }, - "@notifAllDownloadsComplete": { - "description": "Notification title when all downloads finish successfully" + "qualityFlacLossless": "FLAC sem perdas", + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" }, - "setupEnableNotifications": "Habilitar Notificações", - "@setupEnableNotifications": { - "description": "Button to enable notifications" + "qualityFlacLosslessSubtitle": "16 bits / 44,1 kHz", + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" }, - "@notifFinalizingTrack": { - "description": "Notification title while finalizing (embedding metadata) a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "qualityHiResFlac": "FLAC de alta resolução", + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" }, - "@downloadLossy320FormatDesc": { - "description": "Description in the lossy format picker" + "qualityHiResFlacSubtitle": "24-bit / até 96kHz", + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" }, - "filenameFormat": "Formato do Nome do Arquivo", - "@filenameFormat": { - "description": "Setting title - filename pattern" + "qualityHiResFlacMax": "FLAC Max de alta resolução", + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" }, - "historySearchHint": "Pesquisar histórico...", - "@historySearchHint": { - "description": "Search bar placeholder in history" + "qualityHiResFlacMaxSubtitle": "24-bit / até 192kHz", + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" }, - "@tutorialReadyMessage": { - "description": "Tutorial completion message" + "downloadLossy320": "Lossy 320kbps", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" }, - "cacheTempDirectoryDesc": "Temporary files from downloads and audio conversion.", - "@cacheTempDirectoryDesc": { - "description": "Description of what temporary directory contains" + "downloadLossyFormat": "Lossy Format", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" }, - "@trackSaveLyrics": { - "description": "Menu action - save lyrics as .lrc file" + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" }, - "@notifDownloadsFinished": { - "description": "Notification title when queue finishes with some failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" }, - "@historyFilterAlbums": { - "description": "Filter chip - show albums only" + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" }, - "trackEmbedLyrics": "Incorporar Letras", - "@trackEmbedLyrics": { - "description": "Action - embed lyrics into audio file" + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" }, - "@downloadPrimaryArtistOnlyOff": { - "description": "Status label when primary-artist-only folder naming is disabled" + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" }, - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" }, - "snackbarHistoryCleared": "Histórico limpo", - "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", - "@artistPopular": { - "description": "Section header for popular/top tracks" + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" }, - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" }, - "extensionLyricsProvider": "Provedor de Letras", - "@extensionLyricsProvider": { - "description": "Capability - provides lyrics" + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" }, - "historyFilterAll": "Tudo", - "@historyFilterAll": { - "description": "Filter chip - show all items" + "downloadLossy320Format": "Lossy 320kbps Format", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" }, - "tutorialSearchTitle": "Finding Music", - "@lyricsModeExternal": { - "description": "Lyrics mode option - separate LRC file" + "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "@downloadLossy320FormatDesc": { + "description": "Description in the lossy format picker" }, - "@actionDismiss": { - "description": "Generic action - dismiss" + "downloadLossyMp3": "MP3 320kbps", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" }, - "trackOpenInSpotify": "Abrir no Spotify", - "@trackOpenInSpotify": { - "description": "Action - open track in Spotify app" + "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" }, - "@libraryClear": { - "description": "Button to clear all library entries" + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "discographyFailedToFetch": "Falha ao obter alguns álbuns", - "@filenameShowAdvancedTagsDescription": { - "description": "Description for advanced filename tag toggle" + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" }, - "@storeUpdate": { - "description": "Update available button" + "downloadLossyOpus256": "Opus 256kbps", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" }, - "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", - "@collectionPlaylistTracks": { - "description": "Track count label for custom playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" }, - "optionsPrimaryProviderSubtitle": "Serviço usado para pesquisar por faixa ou nome do álbum", - "@optionsPrimaryProviderSubtitle": { - "description": "Subtitle for primary provider" + "downloadLossyOpus128": "Opus 128kbps", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" }, - "@downloadEmbedLyricsDisabled": { - "description": "Subtitle when lyrics embedding is blocked by metadata toggle" + "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" }, - "@librarySourceLocal": { - "description": "Badge for tracks from local library scan" + "downloadAskBeforeDownload": "Perguntar qualidade antes de baixar", + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" }, - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" + "downloadDirectory": "Pasta de Download", + "@downloadDirectory": { + "description": "Setting - download folder" }, - "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is off" + "downloadSeparateSinglesFolder": "Pasta de Singles Separada", + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" }, - "queueDownloadingCount": "Downloading ({count})", - "@queueDownloadingCount": { - "description": "Header for active downloads section with count", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAlbumFolderStructure": "Estrutura da Pasta de Álbum", + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" }, - "extensionVerificationBrowserInApp": "In-app", - "trackAudioQuality": "Qualidade de Áudio", - "@trackAudioQuality": { - "description": "Metadata label - audio quality" - }, - "libraryRemovedMissingFiles": "Removed {count} missing files from library", - "@libraryRemovedMissingFiles": { - "description": "Snackbar after cleanup", - "placeholders": { - "count": { - "type": "int" - } - } + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" + "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "@errorInvalidFolderSelected": { - "description": "Error when the selected folder is invalid" + "downloadUsePrimaryArtistOnly": "Primary artist only for folders", + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" }, - "@searchSortArtistZA": { - "description": "Sort option - artist descending" + "downloadUsePrimaryArtistOnlyEnabled": "Featured artists removed from folder name (e.g. Justin Bieber, Quavo → Justin Bieber)", + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" }, - "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", - "@snackbarAddedTracksToLoved": { - "description": "Snackbar after adding multiple tracks to Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadUsePrimaryArtistOnlyDisabled": "Full artist string used for folder name", + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" }, - "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", - "@cancelDownloadContent": { - "description": "Dialog body when confirming cancellation of an active download", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadSelectQuality": "Selecionar Qualidade", + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" }, - "settingsCacheSubtitle": "View size and clear cached data", - "@settingsCacheSubtitle": { - "description": "Subtitle for cache management menu" + "downloadFrom": "Baixar De", + "@downloadFrom": { + "description": "Label - download source" }, - "notifLibraryScanCompleteBody": "{count} tracks indexed", - "@cacheSizeWithFiles": { - "description": "Cache size and file count", - "placeholders": { - "size": { - "type": "String" - }, - "count": { - "type": "int" - } - } + "appearanceAmoledDark": "Escuro AMOLED", + "@appearanceAmoledDark": { + "description": "Theme option - pure black" }, - "@downloadAskBeforeDownload": { - "description": "Setting - show quality picker" + "appearanceAmoledDarkSubtitle": "Fundo preto puro", + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" }, - "@extensionHealthDegraded": { - "description": "Extension service health status - degraded" + "appearanceHeroAnimations": "Hero animations", + "@appearanceHeroAnimations": { + "description": "Toggle for shared-element (Hero) transitions" }, - "@sectionPerformance": { - "description": "Settings section header" + "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", + "@appearanceHeroAnimationsSubtitle": { + "description": "Subtitle for the Hero animations toggle" }, - "@trackCoverCurrent": { - "description": "Label for the currently embedded cover preview" + "appearanceForceBlur": "Always use blur effects", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" }, - "discographySelectAlbums": "Selecione Álbuns...", - "@discographySelectAlbums": { - "description": "Option - manually select albums to download" + "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" }, - "aboutAppDescription": "Pesquisar metadados de músicas, gerenciar extensões e organizar sua biblioteca.", - "@aboutAppDescription": { - "description": "App description in header card" + "queueClearAll": "Limpar Tudo", + "@queueClearAll": { + "description": "Button - clear all queue items" }, - "extensionCustomTrackMatching": "Correspondência de Faixa Personalizada", - "@extensionCustomTrackMatching": { - "description": "Capability - custom track matching algorithm" + "queueClearAllMessage": "Você tem certeza que deseja limpar todos os downloads?", + "@queueClearAllMessage": { + "description": "Clear queue confirmation" }, - "@editMetadataSelectNone": { - "description": "Button to clear selected fields for auto-fill" + "settingsAutoExportFailed": "Auto-export failed downloads", + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" }, - "@trackPlayNext": { - "description": "Menu action to play a track as the next queue item" + "settingsAutoExportFailedSubtitle": "Save failed downloads to TXT file automatically", + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" }, - "extensionCapabilities": "Funcionalidades", - "@extensionCapabilities": { - "description": "Section header - extension features" + "settingsDownloadNetwork": "Download Network", + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" }, - "@downloadSelectServiceToEnable": { - "description": "Subtitle when quality picker is disabled due to extension service" + "settingsDownloadNetworkAny": "WiFi + Mobile Data", + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" }, - "logIssueRateLimitedDescription": "Too many requests to the service", - "@logIssueRateLimitedDescription": { - "description": "Diagnostic badge description for rate limiting" + "settingsDownloadNetworkWifiOnly": "WiFi Only", + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" }, - "@actionResume": { - "description": "Action button - resume download" + "settingsDownloadNetworkSubtitle": "Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.", + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" }, - "@updateDownloadInstall": { - "description": "Update button - download and install" + "settingsConcurrentDownloads": "Concurrent downloads", + "@settingsConcurrentDownloads": { + "description": "Setting title - how many tracks download at the same time" }, - "downloadLossy320Format": "Lossy 320kbps Format", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" + "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", + "@settingsConcurrentDownloadsSubtitle": { + "description": "Subtitle explaining the concurrent downloads picker" }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@trackCopyright": { - "description": "Metadata label - copyright information" + "concurrentDownloadsOne": "1 track at a time", + "@concurrentDownloadsOne": { + "description": "Concurrent downloads option - sequential" }, - "@snackbarExtensionInstalled": { - "description": "Snackbar - extension installed successfully", + "concurrentDownloadsCount": "Up to {count} tracks at once", + "@concurrentDownloadsCount": { + "description": "Concurrent downloads option - parallel", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "@regionCountryJP": { - "description": "Country name for SongLink region picker" + "albumFolderArtistAlbum": "Artista / Álbum", + "@albumFolderArtistAlbum": { + "description": "Album folder option" }, - "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", - "@trackReEnrichOnlineSubtitle": { - "description": "Subtitle for re-enrich metadata action for local items" + "albumFolderArtistAlbumSubtitle": "Álbuns/Nome do Artista/Nome do Álbum/", + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" }, - "nowPlayingNothingPlaying": "Nothing is playing", - "@nowPlayingNothingPlaying": { - "description": "Empty state when no track is currently playing" + "albumFolderArtistYearAlbum": "Artista / [Ano] Álbum", + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", - "@tutorialDownloadDesc": { - "description": "Tutorial download page description" + "albumFolderArtistYearAlbumSubtitle": "Álbuns/Nome do Artista/[2005] Nome do Álbum/", + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" }, - "@appearanceTitle": { - "description": "Appearance settings page title" + "albumFolderAlbumOnly": "Somente Álbum", + "@albumFolderAlbumOnly": { + "description": "Album folder option" }, - "@backupExportSectionDescription": { - "description": "Description of what a backup contains" + "albumFolderAlbumOnlySubtitle": "Albums/Nome do Álbum/", + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" }, - "@downloadLossyOpus128": { - "description": "Lossy format option - Opus 128kbps" + "albumFolderYearAlbum": "[Ano] Álbum", + "@albumFolderYearAlbum": { + "description": "Album folder option with year" }, - "@logFilterSection": { - "description": "Filter section title" + "albumFolderYearAlbumSubtitle": "Álbuns/[2005] Nome do Álbum/", + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" }, - "trackReEnrichSuccess": "Metadata re-enriched successfully", - "@trackReEnrichSuccess": { - "description": "Snackbar after successful re-enrichment" + "albumFolderArtistAlbumSingles": "Artista / Álbum + Singles", + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", - "@backupContentsHistory": { - "description": "Backup contents row for history count", + "albumFolderArtistAlbumSinglesSubtitle": "Artista/Álbum/ e Artista/Singles/", + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", + "@albumFolderArtistAlbumFlat": { + "description": "Album folder option with singles directly in artist folder" + }, + "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", + "@albumFolderArtistAlbumFlatSubtitle": { + "description": "Folder structure example for flat singles" + }, + "downloadedAlbumDeleteSelected": "Apagar Selecionados", + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" + }, + "downloadedAlbumDeleteMessage": "Excluir {count} {count, plural, =1{faixa} other{faixas}} deste álbum?\n\nIsso também excluirá os arquivos do armazenamento.", + "@downloadedAlbumDeleteMessage": { + "description": "Delete confirmation with count", "placeholders": { "count": { "type": "int" } } }, - "snackbarAddedToQueue": "\"{trackName}\" adicionada à fila", - "@snackbarAddedToQueue": { - "description": "Snackbar - track added to download queue", + "downloadedAlbumSelectedCount": "{count} selecionado(s)", + "@downloadedAlbumSelectedCount": { + "description": "Selection count indicator", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "libraryAutoScanOnOpen": "Sempre que abrir o aplicativo", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "audioAnalysisChannels": "Channels", - "@audioAnalysisChannels": { - "description": "Channels metric label" + "downloadedAlbumTapToSelect": "Toque nas faixas para selecionar", + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" }, - "appearanceHistoryViewList": "Lista", - "updateDownloadInstall": "Baixar e Instalar", - "@libraryShowDuplicateIndicator": { - "description": "Toggle for duplicate indicator in search" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "searchSortTitleAZ": "Título (A-Z)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", - "@collectionRemovedFromLoved": { - "description": "Snackbar after removing track from loved folder", + "downloadedAlbumDeleteCount": "Apagar {count} {count, plural, =1{faixa} other{faixas}}", + "@downloadedAlbumDeleteCount": { + "description": "Delete button text with count", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "sectionAudioQuality": "Qualidade de Áudio", - "@sectionAudioQuality": { - "description": "Settings section header" + "downloadedAlbumSelectToDelete": "Selecione as faixas para apagar", + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" }, - "trackConvertSuccess": "Converted to {format} successfully", - "@trackConvertSuccess": { - "description": "Snackbar after successful conversion", + "downloadedAlbumDiscHeader": "Disco {discNumber}", + "@downloadedAlbumDiscHeader": { + "description": "Header for disc separator in multi-disc albums", "placeholders": { - "format": { - "type": "String" + "discNumber": { + "type": "int", + "example": "1" } } }, - "dialogUninstallExtensionMessage": "Tem certeza que deseja remover {extensionName}?", - "@dialogUninstallExtensionMessage": { - "description": "Dialog message - uninstall specific extension", + "recentTypeArtist": "Artista", + "@recentTypeArtist": { + "description": "Recent access item type - artist" + }, + "recentTypeAlbum": "Álbum", + "@recentTypeAlbum": { + "description": "Recent access item type - album" + }, + "recentTypeSong": "Música", + "@recentTypeSong": { + "description": "Recent access item type - song/track" + }, + "recentTypePlaylist": "Playlist", + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" + }, + "recentEmpty": "No recent items yet", + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, + "recentShowAllDownloads": "Show All Downloads", + "@recentShowAllDownloads": { + "description": "Button label to unhide hidden downloads in recent access" + }, + "recentPlaylistInfo": "Playlist: {name}", + "@recentPlaylistInfo": { + "description": "Snackbar message when tapping playlist in recent access", "placeholders": { - "extensionName": { - "type": "String" + "name": { + "type": "String", + "description": "Playlist name" } } }, - "downloadNativeWorkerSubtitle": "Serviço Android em segundo plano para transferências de extensões", - "@downloadNativeWorkerSubtitle": { - "description": "Setting subtitle for Android native download worker" + "discographyDownload": "Baixar Discografia", + "@discographyDownload": { + "description": "Button - download artist discography" }, - "storeUpdate": "Atualizar", - "libraryFilterMetadataMissingAny": "Missing any metadata", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" + "discographyDownloadAll": "Baixar Tudo", + "@discographyDownloadAll": { + "description": "Option - download entire discography" }, - "@selectionBatchConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless batch conversion", + "discographyDownloadAllSubtitle": "{count} faixas de {albumCount} lançamentos", + "@discographyDownloadAllSubtitle": { + "description": "Subtitle showing total tracks and albums", "placeholders": { "count": { "type": "int" }, - "format": { - "type": "String" - }, - "quality": { - "type": "String" + "albumCount": { + "type": "int" } } }, - "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", - "@editMetadataAutoFillDesc": { - "description": "Description for the auto-fill section" - }, - "@lyricsProviderExtensionDesc": { - "description": "Generic description for extension-based lyrics providers" - }, - "downloadSongLinkRegion": "SongLink Region", - "@downloadSongLinkRegion": { - "description": "Setting for SongLink region used during fallback resolution" - }, - "shareSheetNoExtensions": "No other compatible services", - "@shareSheetNoExtensions": { - "description": "Empty state when no extensions can be searched for cross-service links" + "discographyAlbumsOnly": "Somente Álbuns", + "@discographyAlbumsOnly": { + "description": "Option - download only albums" }, - "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", - "@queueFlacConfirmMessage": { - "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", + "discographyAlbumsOnlySubtitle": "{count} faixas de {albumCount} álbuns", + "@discographyAlbumsOnlySubtitle": { + "description": "Subtitle showing album tracks count", "placeholders": { "count": { "type": "int" + }, + "albumCount": { + "type": "int" } } }, - "tooltipAddToPlaylist": "Add to Playlist", - "@tooltipAddToPlaylist": { - "description": "Tooltip for the Add to Playlist button" + "discographySinglesOnly": "Somente Singles e EPs", + "@discographySinglesOnly": { + "description": "Option - download only singles" }, - "@snackbarAddedToQueueGeneric": { - "description": "Snackbar when a track is added to the playback queue without naming it" + "discographySinglesOnlySubtitle": "{count} faixas de {albumCount} singles", + "@discographySinglesOnlySubtitle": { + "description": "Subtitle showing singles tracks count", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } }, - "@tutorialSettingsTip2": { - "description": "Tutorial settings tip 2" + "discographySelectAlbums": "Selecione Álbuns...", + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" }, - "extensionPermissions": "Permissões", - "releaseTypeSingle": "Single", - "aboutTelegramChannelSubtitle": "Anúncios e atualizações", - "@aboutTelegramChannelSubtitle": { - "description": "Subtitle for Telegram channel" + "discographySelectAlbumsSubtitle": "Escolher álbuns ou singles específicos", + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" }, - "@dialogDisableAndClear": { - "description": "Confirmation action to disable download history and clear existing entries" + "discographyFetchingTracks": "Buscando faixas...", + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" }, - "@homeSearchHintProvider": { - "description": "Placeholder for the main search field when a provider is selected", + "discographyFetchingAlbum": "Buscando {current} de {total}...", + "@discographyFetchingAlbum": { + "description": "Progress - fetching specific album", "placeholders": { - "providerName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "metadataProvidersTitle": "Metadata Provider Priority", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "trackAddToQueue": "Add to queue", - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" + "discographySelectedCount": "{count} selecionado(s)", + "@discographySelectedCount": { + "description": "Selection count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@editMetadataSelectEmpty": { - "description": "Button to select only fields that are currently empty" + "discographyDownloadSelected": "Baixar Selecionados", + "@discographyDownloadSelected": { + "description": "Button - download selected albums" }, - "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", - "discographyAlbumsOnlySubtitle": "{count} faixas de {albumCount} álbuns", - "@discographyAlbumsOnlySubtitle": { - "description": "Subtitle showing album tracks count", + "discographyAddedToQueue": "{count} faixas adicionadas à fila", + "@discographyAddedToQueue": { + "description": "Snackbar - tracks added from discography", "placeholders": { "count": { "type": "int" + } + } + }, + "discographySkippedDownloaded": "{added} adicionada(s), {skipped} já baixada(s)", + "@discographySkippedDownloaded": { + "description": "Snackbar - with skipped tracks count", + "placeholders": { + "added": { + "type": "int" }, - "albumCount": { + "skipped": { "type": "int" } } }, - "setupNotificationEnable": "Habilitar Notificações", - "@setupNotificationEnable": { - "description": "Button to enable notifications" - }, - "settingsAppearanceSubtitle": "Tema, cores, exibição", - "@settingsAppearanceSubtitle": { - "description": "Appearance settings description" + "discographyNoAlbums": "Nenhum álbum disponível", + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" }, - "@notifUpdateFailedBody": { - "description": "Notification body when app update download fails" + "discographyFailedToFetch": "Falha ao obter alguns álbuns", + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" }, - "@aboutOriginalCreator": { - "description": "Role description for original creator" + "sectionStorageAccess": "Storage Access", + "@sectionStorageAccess": { + "description": "Section header for storage access settings" }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", - "@libraryBuiltInPreviewPlayer": { - "description": "Setting option to use the built-in preview player" + "allFilesAccess": "All Files Access", + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "tooltipPlay": "Reproduzir", - "@tooltipPlay": { - "description": "Tooltip - play button" + "allFilesAccessEnabledSubtitle": "Can write to any folder", + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" }, - "@safMigrationMessage2": { - "description": "Second paragraph of SAF migration dialog" + "allFilesAccessDisabledSubtitle": "Limited to media folders only", + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" }, - "@extensionsSearchProvider": { - "description": "Setting - search provider selection" + "allFilesAccessDescription": "Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.", + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" }, - "libraryAboutDescription": "Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.", - "@libraryAboutDescription": { - "description": "Description of local library feature" - }, - "downloadAskBeforeDownload": "Perguntar qualidade antes de baixar", - "nowPlayingNoMetadata": "No metadata available", - "@nowPlayingNoMetadata": { - "description": "Empty state when track metadata cannot be loaded" - }, - "trackInstrumental": "Faixa de instrumentais", - "@trackInstrumental": { - "description": "Message when track is instrumental (no lyrics)" + "allFilesAccessDeniedMessage": "Permission was denied. Please enable 'All files access' manually in system settings.", + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" }, - "@collectionWishlistEmptyTitle": { - "description": "Wishlist empty state title" + "allFilesAccessDisabledMessage": "All Files Access disabled. The app will use limited storage access.", + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", - "downloadDeduplication": "Skip Duplicate Downloads", - "libraryFilterSortOldest": "Oldest", - "@libraryFilterSortOldest": { - "description": "Sort option - oldest first" + "settingsLocalLibrary": "Local Library", + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" }, - "setupSkip": "Ignorar por enquanto", - "@setupSkip": { - "description": "Skip current step button" + "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" }, - "@setupFolderDescription": { - "description": "Explanation for folder selection" + "settingsCache": "Storage & Cache", + "@settingsCache": { + "description": "Settings menu item - cache management" }, - "@settingsLogsSubtitle": { - "description": "Logs settings description" + "settingsCacheSubtitle": "View size and clear cached data", + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" }, - "storeNewRepoUrlLabel": "URL do novo repositório", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" + "libraryTitle": "Local Library", + "@libraryTitle": { + "description": "Library settings page title" }, - "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", - "@cacheClearConfirmMessage": { - "description": "Dialog message before clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "libraryScanSettings": "Scan Settings", + "@libraryScanSettings": { + "description": "Section header for scan settings" }, - "trackMetadataPlay": "Reproduzir", + "libraryEnableLocalLibrary": "Enable Local Library", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, - "optionsUpdateChannel": "Canal de Atualização", - "@optionsUpdateChannel": { - "description": "Stable vs preview releases" + "libraryEnableLocalLibrarySubtitle": "Scan and track your existing music", + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" }, - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist folder is disabled" + "libraryFolder": "Library Folder", + "@libraryFolder": { + "description": "Folder selection setting" }, - "@extensionRefreshStatus": { - "description": "Tooltip for refreshing extension service health status" + "libraryFolderHint": "Tap to select folder", + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", - "@backupRestoreRestartHint": { - "description": "Hint shown after restoring that an app restart is recommended" + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" }, - "@snackbarExtensionInstalledEnable": { - "description": "Snackbar after installing an extension from the repo tab", + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", "placeholders": { - "extensionName": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { "type": "String" } } }, - "settingsAutoExportFailedSubtitle": "Save failed downloads to TXT file automatically", - "@settingsAutoExportFailedSubtitle": { - "description": "Subtitle for auto-export setting" - }, - "searchSortArtistAZ": "Artista (A-Z)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" }, - "editMetadataFieldAlbumArtist": "Album Artist", - "@editMetadataFieldAlbumArtist": { - "description": "Chip label for album artist field in auto-fill selector" + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" }, - "@queueEmptyHistory": { - "description": "Empty state title when download history is empty" + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" }, - "@dialogDisableHistoryMessage": { - "description": "Confirmation dialog message shown before disabling download history" + "libraryShowDuplicateIndicator": "Show Duplicate Indicator", + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" }, - "queueFlacNoReliableMatches": "No reliable online matches found for the selection", - "@queueFlacNoReliableMatches": { - "description": "Snackbar when no safe FLAC redownload matches were found" + "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" }, - "trackOpenInDeezer": "Abrir no Deezer", - "@trackOpenInDeezer": { - "description": "Action - open track in Deezer app" + "libraryAutoScan": "Auto Scan", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" }, - "setupChooseFromFilesSubtitle": "Selecione o iCloud ou outro local", - "@setupChooseFromFilesSubtitle": { - "description": "Subtitle for file picker" + "libraryAutoScanSubtitle": "Escanear automaticamente sua biblioteca em busca de novos arquivos", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" }, - "artistMonthlyListeners": "{count} ouvintes mensais", - "@artistMonthlyListeners": { - "description": "Monthly listener count display", - "placeholders": { - "count": { - "type": "String", - "description": "Formatted listener count" - } - } + "libraryAutoScanOff": "Desligar", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" }, - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" + "libraryAutoScanOnOpen": "Sempre que abrir o aplicativo", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" }, - "cacheSectionStorage": "Cached Data", - "@cacheSectionStorage": { - "description": "Section header for cache entries" + "libraryAutoScanDaily": "Daily", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" }, + "libraryAutoScanWeekly": "Weekly", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "tutorialDownloadCompletedSemantics": "Download completed", - "@tutorialDownloadCompletedSemantics": { - "description": "Accessibility label for completed download state in tutorial demo" + "libraryActions": "Actions", + "@libraryActions": { + "description": "Section header for library actions" }, - "@logNoLogsYet": { - "description": "Empty state title" + "libraryScan": "Scan Library", + "@libraryScan": { + "description": "Button to start library scan" }, - "@selectionDeletePlaylistsCount": { - "description": "Button label for deleting multiple selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryScanSubtitle": "Scan for audio files", + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" }, - "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", - "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is on" + "libraryScanSelectFolderFirst": "Select a folder first", + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" }, - "setupAppDocumentsFolder": "Pasta Documentos do App", - "@setupAppDocumentsFolder": { - "description": "iOS documents folder option" + "libraryCleanupMissingFiles": "Cleanup Missing Files", + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" }, - "storeLoadError": "Falha ao carregar o repositório", - "settingsDownloadNetwork": "Download Network", - "metadataSaveFailedStorage": "Failed to write metadata back to storage", - "@logAutoScrollOff": { - "description": "Tooltip when auto-scroll is disabled on the log screen" + "libraryCleanupMissingFilesSubtitle": "Remove entries for files that no longer exist", + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" }, - "@trackConvertFormat": { - "description": "Menu item - convert audio format" + "libraryClear": "Clear Library", + "@libraryClear": { + "description": "Button to clear all library entries" }, - "optionsArtistTagModeJoined": "Valor único combinado", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" + "libraryClearSubtitle": "Remove all scanned tracks", + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" }, - "@dateYesterday": { - "description": "Relative date - yesterday" + "libraryClearConfirmTitle": "Clear Library", + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" }, - "@settingsExtensionsSubtitle": { - "description": "Extensions settings description" + "libraryClearConfirmMessage": "This will remove all scanned tracks from your library. Your actual music files will not be deleted.", + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" }, - "searchSortArtistZA": "Artista (Z-A)", - "@extensionSettings": { - "description": "Section header - extension settings" + "libraryAbout": "About Local Library", + "@libraryAbout": { + "description": "Section header for about info" }, - "@extensionOauthConnectHint": { - "description": "Hint for an OAuth login link field before connecting Spotify" + "libraryAboutDescription": "Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.", + "@libraryAboutDescription": { + "description": "Description of local library feature" }, - "@notifUpdateReady": { - "description": "Notification title when app update download is complete" + "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@regionCountryMX": { - "description": "Country name for SongLink region picker" - }, - "@nowPlayingOpenInExternalPlayer": { - "description": "Menu item to open the current track in an external player" - }, - "trackConvertDithering": "Dithering", - "@trackConvertDithering": { - "description": "Section label for lossless conversion dithering options" - }, - "settingsDownloadSubtitle": "Serviço, qualidade, alternativa", - "@settingsDownloadSubtitle": { - "description": "Download settings description" + "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } }, "libraryLastScanned": "Last scanned: {time}", "@libraryLastScanned": { @@ -2678,620 +2667,723 @@ } } }, - "setupIosEmptyFolderWarning": "Limitação do iOS: Pastas vazias não podem ser selecionadas. Escolha uma pasta com pelo menos um arquivo.", - "@setupIosEmptyFolderWarning": { - "description": "iOS folder selection warning" + "libraryLastScannedNever": "Never", + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" }, - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" + "libraryScanning": "Scanning...", + "@libraryScanning": { + "description": "Status during scan" }, - "@snackbarFailedToInstallNamed": { - "description": "Snackbar when extension install fails in the repo tab", + "libraryScanFinalizing": "Finalizing library...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, + "libraryScanProgress": "{progress}% of {total} files", + "@libraryScanProgress": { + "description": "Scan progress display", "placeholders": { - "extensionName": { + "progress": { "type": "String" + }, + "total": { + "type": "int" } } }, - "@collectionAddedTracksToPlaylist": { - "description": "Snackbar after adding multiple tracks to a playlist", + "libraryInLibrary": "In Library", + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, + "libraryRemovedMissingFiles": "Removed {count} missing files from library", + "@libraryRemovedMissingFiles": { + "description": "Snackbar after cleanup", "placeholders": { "count": { "type": "int" - }, - "playlistName": { - "type": "String" } } }, - "updateNew": "Novo", - "@updateNew": { - "description": "Label for new version" + "libraryCleared": "Library cleared", + "@libraryCleared": { + "description": "Snackbar after clearing library" }, - "settingsExtensionsSubtitle": "Gerenciar provedores de download", - "@albumFolderArtistAlbumSinglesSubtitle": { - "description": "Folder structure example" + "libraryStorageAccessRequired": "Storage Access Required", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" }, - "trackReEnrichSelectAll": "Select All", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" + "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" }, - "@extensionsUninstall": { - "description": "Uninstall extension button" + "libraryFolderNotExist": "Selected folder does not exist", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" }, - "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when track artist is used for folder names" + "librarySourceDownloaded": "Downloaded", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" }, - "@logIssueNetworkErrorLabel": { - "description": "Diagnostic badge label for generic network errors" + "librarySourceLocal": "Local", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" }, - "albumFolderArtistYearAlbumSubtitle": "Álbuns/Nome do Artista/[2005] Nome do Álbum/", - "@albumFolderArtistYearAlbumSubtitle": { - "description": "Folder structure example" + "libraryFilterAll": "All", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" }, - "itemCount": "{count} {count, plural, =1{item} other{items}}", - "@itemCount": { - "description": "Generic item count label", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterDownloaded": "Downloaded", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" }, - "discographyFetchingTracks": "Buscando faixas...", - "@discographyFetchingTracks": { - "description": "Progress - fetching album tracks" + "libraryFilterLocal": "Local", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" }, - "@libraryFolder": { - "description": "Folder selection setting" + "libraryFilterTitle": "Filters", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" }, - "queueEmptyAlbums": "No album downloads", - "@queueEmptyAlbums": { - "description": "Empty state title when no album downloads exist" + "libraryFilterReset": "Reset", + "@libraryFilterReset": { + "description": "Reset all filters button" }, - "@metadataProviderPriorityDescription": { - "description": "Metadata priority page description" + "libraryFilterApply": "Apply", + "@libraryFilterApply": { + "description": "Apply filters button" }, - "@extensionVerificationHelpTitleManual": { - "description": "Dialog title when automatic browser launch for verification fails" + "libraryFilterSource": "Source", + "@libraryFilterSource": { + "description": "Filter section - source type" }, - "extensionError": "Erro", - "@extensionError": { - "description": "Extension detail - error message" + "libraryFilterQuality": "Quality", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" }, - "@trackLyricsLoadFailed": { - "description": "Message when lyrics loading fails" + "libraryFilterQualityHiRes": "Hi-Res (24bit)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" }, - "@downloadedAlbumDeleteCount": { - "description": "Delete button text with count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterQualityCD": "CD (16bit)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" }, - "@extensionsNoHomeFeedExtensions": { - "description": "Extensions page - shown when no installed extension has home feed" + "libraryFilterQualityLossy": "Lossy", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" }, - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterFormat": "Format", + "@libraryFilterFormat": { + "description": "Filter section - file format" }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", - "@backupContentsArtists": { - "description": "Backup contents row for favorite artists count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadata": "Metadata", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" }, - "@trackRemoveFromDevice": { - "description": "Action - delete downloaded file" + "libraryFilterMetadataComplete": "Complete metadata", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" }, - "lyricsProvidersEnabledSection": "Enabled ({count})", - "@lyricsProvidersEnabledSection": { - "description": "Section header for enabled providers", + "libraryFilterMetadataMissingAny": "Missing any metadata", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Missing year", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Missing genre", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, + "libraryFilterSort": "Sort", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "Latest", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "Oldest", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" + }, + "libraryFilterSortAlbumAsc": "Album (A-Z)", + "@libraryFilterSortAlbumAsc": { + "description": "Sort option - album ascending" + }, + "libraryFilterSortAlbumDesc": "Album (Z-A)", + "@libraryFilterSortAlbumDesc": { + "description": "Sort option - album descending" + }, + "libraryFilterSortGenreAsc": "Genre (A-Z)", + "@libraryFilterSortGenreAsc": { + "description": "Sort option - genre ascending" + }, + "libraryFilterSortGenreDesc": "Genre (Z-A)", + "@libraryFilterSortGenreDesc": { + "description": "Sort option - genre descending" + }, + "timeJustNow": "Just now", + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, + "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", + "@timeMinutesAgo": { + "description": "Relative time - minutes ago", "placeholders": { "count": { "type": "int" } } }, - "@cueSplitTitle": { - "description": "Title for CUE split bottom sheet" - }, - "@downloadedAlbumSelectedCount": { - "description": "Selection count indicator", + "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", + "@timeHoursAgo": { + "description": "Relative time - hours ago", "placeholders": { "count": { "type": "int" } } }, - "@trackOptionRemoveFromWishlist": { - "description": "Bottom sheet action label - remove track from wishlist" + "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" }, - "notifDownloadingTrack": "Downloading {trackName}", - "@notifDownloadingTrack": { - "description": "Notification title while downloading a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" }, - "@discographySkippedDownloaded": { - "description": "Snackbar - with skipped tracks count", - "placeholders": { - "added": { - "type": "int" - }, - "skipped": { - "type": "int" - } - } - }, - "@tutorialSettingsTip3": { - "description": "Tutorial settings tip 3" - }, - "@announcementUnableToOpenLink": { - "description": "Snackbar shown when an announcement CTA link cannot be opened" - }, - "trackReleaseDate": "Data de lançamento", - "discographySelectedCount": "{count} selecionado(s)", - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "logIssueNetworkErrorLabel": "NETWORK ERROR", - "updateStartingDownload": "Iniciando download...", - "@updateStartingDownload": { - "description": "Update status - initializing" - }, - "trackDiscNumber": "Número do disco", - "@trackDiscNumber": { - "description": "Metadata label - disc number" + "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" }, - "optionsUsingExtension": "Usando a extensão: {extensionName}", - "@optionsUsingExtension": { - "description": "Shows active extension name", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" }, - "dialogDisableHistoryTitle": "Turn off download history?", "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, - "@collectionPlaylistEmptySubtitle": { - "description": "Playlist empty state subtitle" - }, - "@tutorialSearchHint": { - "description": "Placeholder shown in the tutorial search demo" - }, - "cleanupOrphanedDownloadsNone": "No orphaned entries found", - "discographySkippedDownloaded": "{added} adicionada(s), {skipped} já baixada(s)", - "@updateDontRemind": { - "description": "Update button - skip this version" - }, - "@snackbarLoadingCueSheet": { - "description": "Snackbar while loading a CUE sheet file" + "tutorialSearchTitle": "Finding Music", + "@tutorialSearchTitle": { + "description": "Tutorial search page title" }, - "@dialogUninstallExtension": { - "description": "Dialog title - uninstall extension" + "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "@tutorialSearchDesc": { + "description": "Tutorial search page description" }, - "lyricsProvidersTitle": "Lyrics Provider Priority", - "@dialogRemove": { - "description": "Dialog button - remove item" + "tutorialDownloadTitle": "Downloading Music", + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" }, - "snackbarError": "Error: {error}", - "@snackbarError": { - "description": "Generic error snackbar with error detail", - "placeholders": { - "error": { - "type": "String" - } - } + "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" }, - "@sectionApp": { - "description": "Settings section header" + "tutorialLibraryTitle": "Your Library", + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" }, - "@libraryPlayback": { - "description": "Section header for playback settings in library settings" + "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" }, - "@downloadPrimaryArtistOnlyOn": { - "description": "Status label when primary-artist-only folder naming is enabled" + "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" }, - "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", - "previewStop": "Parar prévia", - "@previewStop": { - "description": "Tooltip for the button that stops the playing track preview snippet" + "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" }, - "trackConvertConfirmMessageLossless": "Convert from {sourceFormat} to {targetFormat}? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.", - "discographyAlbumsOnly": "Somente Álbuns", - "@discographyAlbumsOnly": { - "description": "Option - download only albums" + "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" }, - "@editMetadataFieldCopyright": { - "description": "Chip label for copyright field in auto-fill selector" + "tutorialExtensionsTitle": "Extensions", + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" }, - "extensionsFallbackSubtitle": "Escolha quais extensões de download instaladas podem ser usadas como alternativa", - "aboutSocial": "Social", - "@aboutSocial": { - "description": "Section for social links" + "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" }, - "audioAnalysisNyquist": "Nyquist", - "trackCoverSelected": "Selected cover", - "@trackCoverSelected": { - "description": "Label for the newly selected cover preview" + "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" }, - "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" + "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" }, - "homeEmptyTitle": "Ainda não há provedores de pesquisa", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" + "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" }, - "@extensionHealthUnknown": { - "description": "Extension service health status - unknown" + "tutorialSettingsTitle": "Customize Your Experience", + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" }, - "storeInstalled": "Instalado", - "@storeInstalled": { - "description": "Already installed badge" + "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" }, - "trackReplayGainSuccess": "Etiquetas ReplayGain adicionadas", - "@trackReplayGainSuccess": { - "description": "Snackbar message after ReplayGain tags written for a single track" + "tutorialSettingsTip1": "Change download location and folder organization", + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" }, - "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", - "@collectionPlaylistRenamed": { - "description": "Snackbar after renaming playlist" + "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" }, - "@trackConvertResamplerSoxr": { - "description": "Lossless conversion SoX resampler option" + "tutorialSettingsTip3": "Customize app theme and appearance", + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" }, - "@dialogUnsavedChanges": { - "description": "Dialog message - unsaved changes" + "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "@tutorialReadyMessage": { + "description": "Tutorial completion message" }, - "dialogDownload": "Baixar", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" + "libraryForceFullScan": "Force Full Scan", + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" }, - "trackLyricsLoadFailed": "Falha ao carregar a letra", - "@backupContentsTitle": { - "description": "Header above the list summarizing what the backup contains" + "libraryForceFullScanSubtitle": "Rescan all files, ignoring cache", + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" }, - "@safMigrationTitle": { - "description": "Title of SAF migration dialog" + "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" }, - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" + "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" }, - "setupPermissionDeniedMessage": "Permissão negada. Por favor, conceda todas as permissões para continuar.", - "@setupPermissionDeniedMessage": { - "description": "Error when permission denied" + "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", + "@cleanupOrphanedDownloadsResult": { + "description": "Snackbar after orphan cleanup", + "placeholders": { + "count": { + "type": "int" + } + } }, - "settingsDownloadNetworkWifiOnly": "WiFi Only", - "@settingsDownloadNetworkWifiOnly": { - "description": "Network option - only use WiFi" + "cleanupOrphanedDownloadsNone": "No orphaned entries found", + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" }, - "@backupIncludeSecrets": { - "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" + "cacheTitle": "Storage & Cache", + "@cacheTitle": { + "description": "Cache management page title" }, - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" + "cacheSummaryTitle": "Cache overview", + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" }, - "@extensionHealthServiceUnknown": { - "description": "Tooltip for unknown extension service health" + "cacheSummarySubtitle": "Clearing cache will not remove downloaded music files.", + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" }, - "snackbarExtensionUpdated": "{extensionName} atualizada.", - "@snackbarExtensionUpdated": { - "description": "Snackbar - extension updated successfully", + "cacheEstimatedTotal": "Estimated cache usage: {size}", + "@cacheEstimatedTotal": { + "description": "Total cache size shown in summary", "placeholders": { - "extensionName": { + "size": { "type": "String" } } }, - "homeEmptySubtitle": "Instale uma extensão para continuar.", - "@settingsTitle": { - "description": "Settings screen title" + "cacheSectionStorage": "Cached Data", + "@cacheSectionStorage": { + "description": "Section header for cache entries" }, - "@libraryFilterMetadataIncorrectIsrcFormat": { - "description": "Filter option - items with an invalid ISRC format" + "cacheSectionMaintenance": "Maintenance", + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" }, - "@notifLibraryScanComplete": { - "description": "Notification title when library scan finishes" + "cacheAppDirectory": "App cache directory", + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" }, - "@logIssueIspBlockingLabel": { - "description": "Diagnostic badge label when ISP blocking is detected" + "cacheAppDirectoryDesc": "HTTP responses, WebView data, and other temporary app data.", + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" }, - "tutorialDownloadTitle": "Downloading Music", - "@tutorialDownloadTitle": { - "description": "Tutorial download page title" - }, - "unknownTitle": "Unknown title", - "@unknownTitle": { - "description": "Fallback track title when metadata is missing" - }, - "navLibrary": "Biblioteca", - "@navLibrary": { - "description": "Bottom navigation - Library tab" - }, - "@snackbarAlreadyDownloaded": { - "description": "Snackbar - track already exists", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "editMetadataSelectAll": "All", - "@editMetadataSelectAll": { - "description": "Button to select all fields for auto-fill" - }, - "storeEmptyNoExtensions": "Nenhuma extensão disponível", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" - }, - "optionsUpdateChannelWarning": "A prévia pode conter erros ou recursos incompletos", - "@optionsUpdateChannelWarning": { - "description": "Warning about preview channel" + "cacheTempDirectory": "Temporary directory", + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" }, - "@collectionPlaylistNameHint": { - "description": "Hint text for playlist name input" + "cacheTempDirectoryDesc": "Temporary files from downloads and audio conversion.", + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" }, - "notifLibraryScanComplete": "Library scan complete", - "editMetadataFieldIsrc": "ISRC", - "@editMetadataFieldIsrc": { - "description": "Chip label for ISRC field in auto-fill selector" + "cacheCoverImage": "Cache da imagem de capa", + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" }, - "@libraryFolderHint": { - "description": "Placeholder when no folder selected" + "cacheCoverImageDesc": "Downloaded album and track cover art. Will re-download when viewed.", + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" }, - "homeSearchHintDefault": "Paste supported URL or search...", - "@homeSearchHintDefault": { - "description": "Default placeholder for the main search field on Home" + "cacheLibraryCover": "Library cover cache", + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" }, - "extensionsNoExtensionsSubtitle": "Instale arquivos .spotiflac-ext para adicionar novos provedores", - "@extensionsNoExtensionsSubtitle": { - "description": "Empty state subtitle" + "cacheLibraryCoverDesc": "Cover art extracted from local music files. Will re-extract on next scan.", + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" }, - "@extensionEnterValue": { - "description": "Hint for editing an extension setting value" + "libraryPlaybackNormalization": "Volume normalization", + "@libraryPlaybackNormalization": { + "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, - "backupRestoreConfirmTitle": "Restore this backup?", - "@backupRestoreConfirmTitle": { - "description": "Confirmation dialog title before restoring a backup" + "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", + "@libraryPlaybackNormalizationSubtitle": { + "description": "Subtitle explaining playback volume normalization" }, - "@libraryScanSelectFolderFirst": { - "description": "Message when trying to scan without folder" + "cacheAudioAnalysis": "Audio analysis cache", + "@cacheAudioAnalysis": { + "description": "Cache item title for saved audio analysis results" }, - "@qualityHiResFlac": { - "description": "Quality option - high resolution FLAC" + "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", + "@cacheAudioAnalysisDesc": { + "description": "Description of what audio analysis cache contains" }, - "aboutSpecialThanks": "Agradecimentos Especiais", - "@aboutSpecialThanks": { - "description": "Section for special thanks" + "cacheExploreFeed": "Explore feed cache", + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" }, - "storeInstall": "Instalar", - "@storeInstall": { - "description": "Install extension button" + "cacheExploreFeedDesc": "Explore tab content (new releases, trending). Will refresh on next visit.", + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" }, - "@collectionWishlistEmptySubtitle": { - "description": "Wishlist empty state subtitle" + "cacheTrackLookup": "Track lookup cache", + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" }, - "historyFilterAlbums": "Álbuns", - "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", - "@extensionCustomUrlHandlingSubtitle": { - "description": "Extension detail subtitle for custom URL handling" + "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" }, - "filenameShowAdvancedTagsDescription": "Ativar etiquetas formatadas para preenchimento de faixas e padrões de data", - "@aboutReportIssue": { - "description": "Link to report bugs" + "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" }, - "@folderOrganizationByPlaylist": { - "description": "Folder option - playlist folders" + "cacheNoData": "No cached data", + "@cacheNoData": { + "description": "Label when cache category has no data" }, - "@dateWeeksAgo": { - "description": "Relative date - weeks ago", + "cacheSizeWithFiles": "{size} in {count} files", + "@cacheSizeWithFiles": { + "description": "Cache size and file count", "placeholders": { + "size": { + "type": "String" + }, "count": { "type": "int" } } }, - "logEntriesFiltered": "Entradas ({count} filtradas)", - "@logEntriesFiltered": { - "description": "Log count with filter active", + "cacheSizeOnly": "{size}", + "@cacheSizeOnly": { + "description": "Cache size only", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheEntries": "{count} entries", + "@cacheEntries": { + "description": "Track cache entry count", "placeholders": { "count": { "type": "int" } } }, - "@lyricsModeDescription": { - "description": "Lyrics mode picker description" - }, - "@setupAppDocumentsFolderSubtitle": { - "description": "Subtitle for documents folder" - }, - "storeAddRepoButton": "Adicionar repositório", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "@collectionLovedEmptyTitle": { - "description": "Loved empty state title" - }, - "aboutReportIssue": "Reportar um problema", - "snackbarFailedToWriteStorage": "Failed to write back to storage", - "@snackbarFailedToWriteStorage": { - "description": "Snackbar when writing metadata back to file fails" - }, - "errorInvalidFolderSelected": "Invalid folder selected", - "allFilesAccessDisabledMessage": "All Files Access disabled. The app will use limited storage access.", - "@allFilesAccessDisabledMessage": { - "description": "Snackbar message when user disables all files access" - }, - "downloadMusixmatchLanguageCode": "Language code", - "@downloadMusixmatchLanguageCode": { - "description": "Label for Musixmatch language input field" - }, - "dialogUnsavedChanges": "Você tem alterações não salvas. Deseja descartá-las?", - "setupChooseFromFiles": "Escolher dos Arquivos", - "@setupChooseFromFiles": { - "description": "iOS file picker option" - }, - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", - "@backupRestoreConfirmButton": { - "description": "Confirm button to proceed with restore" - }, - "@queueEmptyAlbumsSubtitle": { - "description": "Empty state subtitle for album downloads" - }, - "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", - "@collectionRemovedFromWishlist": { - "description": "Snackbar after removing track from wishlist", + "cacheClearSuccess": "Cleared: {target}", + "@cacheClearSuccess": { + "description": "Snackbar after clearing selected cache", "placeholders": { - "trackName": { + "target": { "type": "String" } } }, - "extensionsInstalledSuccess": "Extensão instalada com sucesso", - "progressReadingCsv": "Lendo CSV...", - "@progressReadingCsv": { - "description": "Progress indicator - parsing CSV file" + "cacheClearConfirmTitle": "Clear cache?", + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" }, - "artistReleases": "Releases", - "@artistReleases": { - "description": "Section header for all artist releases" + "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", + "@cacheClearConfirmMessage": { + "description": "Dialog message before clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } }, - "extensionVerificationBrowserTitle": "Verification browser", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" + "cacheClearAllConfirmTitle": "Clear all cache?", + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" }, - "optionsArtistTagModeJoinedSubtitle": "Escreva um valor ARTIST único como \"Artista A, Artista B\" para máxima compatibilidade com o ‘player’", - "downloadLossy320": "Lossy 320kbps", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" + "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" }, - "queueFlacAction": "Queue FLAC", - "@queueFlacAction": { - "description": "Action/button label for queueing FLAC redownloads for local tracks" + "cacheClearAll": "Clear all cache", + "@cacheClearAll": { + "description": "Button label to clear all caches" }, - "@setupDownloadLocationIosMessage": { - "description": "iOS-specific folder info" + "cacheCleanupUnused": "Cleanup unused data", + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" }, - "trackConvertOriginal": "Original", - "sectionLyricsProviderOptions": "Provider Options", - "nowPlayingTitle": "Now Playing", - "@nowPlayingTitle": { - "description": "Title for the now playing screen" + "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" }, - "@extensionHealthChecksConfigured": { - "description": "Extension service health check count", + "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", + "@cacheCleanupResult": { + "description": "Snackbar after unused data cleanup", "placeholders": { - "count": { + "downloadCount": { + "type": "int" + }, + "libraryCount": { "type": "int" } } }, - "@cacheClearAll": { - "description": "Button label to clear all caches" - }, - "a11yDeselectTrack": "Deselect track", - "@a11yDeselectTrack": { - "description": "Accessibility label for deselecting a track" + "cacheRefreshStats": "Refresh stats", + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" }, - "@lyricsProvidersInfoText": { - "description": "Info tip on lyrics provider priority page" + "trackSaveCoverArt": "Save Cover Art", + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" }, - "queueEmptyHistory": "No download history", - "dialogClear": "Limpar", - "@dialogClear": { - "description": "Dialog button - clear items" + "trackSaveLyrics": "Save Lyrics (.lrc)", + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" }, - "allFilesAccessDescription": "Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.", - "@allFilesAccessDescription": { - "description": "Description explaining when to enable all files access" + "trackSaveLyricsProgress": "Saving lyrics...", + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" }, - "trackConvertConfirmTitle": "Confirm Conversion", - "storeCategoryLyrics": "Lyrics", - "@storeCategoryLyrics": { - "description": "Store extension category - lyrics" + "trackReEnrich": "Re-enrich", + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" }, - "@lyricsProvidersDescription": { - "description": "Description on the lyrics provider priority page" + "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" }, - "tooltipLoveAll": "Love All", - "downloadDirectory": "Pasta de Download", - "@downloadDirectory": { - "description": "Setting - download folder" + "trackReEnrichFieldCover": "Cover Art", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" }, - "@tutorialExtensionsTip2": { - "description": "Tutorial extensions tip 2" + "trackReEnrichFieldLyrics": "Lyrics", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" }, - "libraryFolder": "Library Folder", - "@metadataProviderPriorityTitle": { - "description": "Metadata priority page title" + "trackReEnrichFieldBasicTags": "Album, Album Artist", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "@cleanupOrphanedDownloadsResult": { - "description": "Snackbar after orphan cleanup", + "trackReEnrichFieldTrackInfo": "Track & Disc Number", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Select All", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" + }, + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" + }, + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" + }, + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" + }, + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" + }, + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", "placeholders": { - "count": { + "changeCount": { + "type": "int" + }, + "trackCount": { "type": "int" } } }, - "cacheExploreFeedDesc": "Explore tab content (new releases, trending). Will refresh on next visit.", - "@cacheExploreFeedDesc": { - "description": "Description of what explore feed cache contains" + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" }, - "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", - "@a11yOpenTrackByArtist": { - "description": "Accessibility label for opening a track item", + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, + "trackEditMetadata": "Edit Metadata", + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" + }, + "trackCoverSaved": "Cover art saved to {fileName}", + "@trackCoverSaved": { + "description": "Snackbar after cover art saved", "placeholders": { - "trackName": { + "fileName": { "type": "String" - }, - "artistName": { + } + } + }, + "trackCoverNoSource": "No cover art source available", + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" + }, + "trackLyricsSaved": "Lyrics saved to {fileName}", + "@trackLyricsSaved": { + "description": "Snackbar after lyrics saved", + "placeholders": { + "fileName": { "type": "String" } } }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", - "libraryFilterSortAlbumDesc": "Album (Z-A)", - "@libraryFilterSortAlbumDesc": { - "description": "Sort option - album descending" + "trackReEnrichProgress": "Re-enriching metadata...", + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" }, - "trackConvertBitrate": "Bitrate", - "@trackConvertBitrate": { - "description": "Label for bitrate selection" + "trackReEnrichSearching": "Searching metadata online...", + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" }, - "audioAnalysisFileSize": "Size", - "extensionHealthServiceOnline": "Service online", - "@extensionHealthServiceOnline": { - "description": "Tooltip for online extension service" + "trackReEnrichSuccess": "Metadata re-enriched successfully", + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" }, - "logEntries": "Entradas ({count})", - "@logEntries": { - "description": "Total log count", + "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + }, + "queueFlacAction": "Queue FLAC", + "@queueFlacAction": { + "description": "Action/button label for queueing FLAC redownloads for local tracks" + }, + "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", + "@queueFlacConfirmMessage": { + "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { "count": { "type": "int" } } }, + "queueFlacNoReliableMatches": "No reliable online matches found for the selection", + "@queueFlacNoReliableMatches": { + "description": "Snackbar when no safe FLAC redownload matches were found" + }, + "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", + "@queueFlacQueuedWithSkipped": { + "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "placeholders": { + "addedCount": { + "type": "int" + }, + "skippedCount": { + "type": "int" + } + } + }, + "trackSaveFailed": "Failed: {error}", + "@trackSaveFailed": { + "description": "Snackbar when save operation fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "trackConvertFormat": "Convert Format", + "@trackConvertFormat": { + "description": "Menu item - convert audio format" + }, + "trackConvertTitle": "Convert Audio", + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" + }, + "trackConvertTargetFormat": "Target Format", + "@trackConvertTargetFormat": { + "description": "Label for format selection" + }, + "trackConvertBitrate": "Bitrate", + "@trackConvertBitrate": { + "description": "Label for bitrate selection" + }, + "trackConvertKeepOriginal": "Keep original file", + "@trackConvertKeepOriginal": { + "description": "Toggle to preserve the source file during conversion" + }, + "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", + "@trackConvertKeepOriginalDescription": { + "description": "Description for preserving the source file during conversion" + }, + "trackConvertConfirmTitle": "Confirm Conversion", + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" + }, "trackConvertConfirmMessage": "Convert from {sourceFormat} to {targetFormat} at {bitrate}?\n\nThe original file will be deleted after conversion.", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", @@ -3307,1570 +3399,1522 @@ } } }, - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" + "trackConvertConfirmMessageLossless": "Convert from {sourceFormat} to {targetFormat}? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.", + "@trackConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless-to-lossless conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "folderOrganizationByAlbum": "Por Album", - "@folderOrganizationByAlbum": { - "description": "Folder option - album folders" + "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", + "@trackConvertConfirmKeepOriginal": { + "description": "Confirmation message when the source file will be preserved", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "libraryPlayback": "Playback", - "@storeFilterAll": { - "description": "Repo filter - all extensions" + "trackConvertLosslessHint": "Lossless conversion — no quality loss", + "@trackConvertLosslessHint": { + "description": "Hint shown when converting between lossless formats" }, - "aboutApp": "Aplicativo", - "@aboutApp": { - "description": "Section for app info" + "trackConvertConverting": "Converting audio...", + "@trackConvertConverting": { + "description": "Snackbar while converting" }, - "optionsReplayGainSubtitleOff": "Desativado: sem etiquetas de normalização de intensidade", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" - }, - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" + "trackConvertSuccess": "Converted to {format} successfully", + "@trackConvertSuccess": { + "description": "Snackbar after successful conversion", + "placeholders": { + "format": { + "type": "String" + } + } }, - "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", - "storeFilterIntegration": "Integração", - "@storeFilterIntegration": { - "description": "Repo filter - integrations" + "trackConvertFailed": "Conversion failed", + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" }, - "@lyricsProvidersAtLeastOne": { - "description": "Snackbar when user tries to disable the last enabled provider" + "cueSplitTitle": "Split CUE Sheet", + "@cueSplitTitle": { + "description": "Title for CUE split bottom sheet" }, - "@appearanceHistoryViewGrid": { - "description": "Grid layout option" + "cueSplitAlbum": "Album: {album}", + "@cueSplitAlbum": { + "description": "Album name in CUE split sheet", + "placeholders": { + "album": { + "type": "String" + } + } }, - "trackDownloaded": "Baixado", - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", - "setupDownloadLocationIosMessage": "No iOS, downloads são salvos na pasta Documentos do aplicativo. Você pode acessá-los através do app Arquivos.", - "optionsArtistTagModeDescription": "Escolha como múltiplos artistas são escritos em etiquetas incorporadas.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" + "cueSplitArtist": "Artist: {artist}", + "@cueSplitArtist": { + "description": "Artist name in CUE split sheet", + "placeholders": { + "artist": { + "type": "String" + } + } }, - "@queueRetryAllFailed": { - "description": "Button to retry every failed download in the queue", + "cueSplitTrackCount": "{count} tracks", + "@cueSplitTrackCount": { + "description": "Number of tracks in CUE sheet", "placeholders": { "count": { "type": "int" } } }, - "@trackConvertDitherTriangularHp": { - "description": "Lossless conversion high-pass triangular dither option" - }, - "@extensionVerificationCopyLink": { - "description": "Button to copy the extension verification URL" - }, - "searchSongs": "Músicas", - "@searchSongs": { - "description": "Search result category - songs" - }, - "@appearanceHistoryView": { - "description": "Layout style for history" - }, - "sectionFileSettings": "Configurações de Arquivo", - "@sectionFileSettings": { - "description": "Settings section header" - }, - "@cancelDownloadTitle": { - "description": "Dialog title when confirming cancellation of an active download" - }, - "@cacheLibraryCover": { - "description": "Cache item title for local library cover art images" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "dialogDelete": "Apagar", - "@dialogDelete": { - "description": "Dialog button - delete item" - }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", - "@tutorialLibraryDesc": { - "description": "Tutorial library page description" + "cueSplitConfirmTitle": "Split CUE Album", + "@cueSplitConfirmTitle": { + "description": "CUE split confirmation dialog title" }, - "@queueDownloadSpeedStatus": { - "description": "Queue status while downloading with speed", + "cueSplitConfirmMessage": "Split \"{album}\" into {count} individual FLAC files?\n\nFiles will be saved to the same directory.", + "@cueSplitConfirmMessage": { + "description": "CUE split confirmation dialog message", "placeholders": { - "speed": { + "album": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", - "@cacheCleanupResult": { - "description": "Snackbar after unused data cleanup", + "cueSplitSplitting": "Splitting CUE sheet... ({current}/{total})", + "@cueSplitSplitting": { + "description": "Snackbar while splitting CUE", "placeholders": { - "downloadCount": { + "current": { "type": "int" }, - "libraryCount": { + "total": { "type": "int" } } }, - "trackConvertLosslessHint": "Lossless conversion — no quality loss", - "@trackConvertLosslessHint": { - "description": "Hint shown when converting between lossless formats" - }, - "collectionRenamePlaylist": "Rename playlist", - "@collectionRenamePlaylist": { - "description": "Action to rename playlist" - }, - "@libraryFilterTitle": { - "description": "Filter bottom sheet title" - }, - "@storageModeAppFolder": { - "description": "Storage mode option - app-managed folder" - }, - "logTotalErrors": "Total errors: {count}", - "@logTotalErrors": { - "description": "Total error count in log issue analysis", + "cueSplitSuccess": "Split into {count} tracks successfully", + "@cueSplitSuccess": { + "description": "Snackbar after successful CUE split", "placeholders": { "count": { "type": "int" } } }, - "@setupStorageRequired": { - "description": "Title when storage permission needed" + "cueSplitFailed": "CUE split failed", + "@cueSplitFailed": { + "description": "Snackbar when CUE split fails" }, - "@snackbarMetadataProviderSaved": { - "description": "Snackbar - metadata provider order saved" + "cueSplitNoAudioFile": "Audio file not found for this CUE sheet", + "@cueSplitNoAudioFile": { + "description": "Error when CUE audio file is missing" }, - "@selectionBatchConvertConfirmTitle": { - "description": "Confirmation dialog title for batch conversion" + "cueSplitButton": "Split into Tracks", + "@cueSplitButton": { + "description": "Button text to start CUE splitting" }, - "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", - "@extensionsHomeFeedAutoSubtitle": { - "description": "Extensions page - subtitle for auto home feed option" + "actionCreate": "Create", + "@actionCreate": { + "description": "Generic action button - create" }, - "setupLanguageDescription": "Selecione o idioma de sua preferência para o aplicativo. Você pode alterar isso depois em Configurações.", - "settingsBackupSubtitle": "Move your library, history and settings to a new device", - "@settingsBackupSubtitle": { - "description": "Subtitle for backup and restore settings item" + "collectionFoldersTitle": "My folders", + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" }, - "recentTypeArtist": "Artista", - "@recentTypeArtist": { - "description": "Recent access item type - artist" + "collectionWishlist": "Wishlist", + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" }, - "collectionPlaylistEmptySubtitle": "", - "artistCompilations": "Compilações", - "@artistCompilations": { - "description": "Section header for compilations" + "collectionLoved": "Loved", + "@collectionLoved": { + "description": "Custom folder for favorite tracks" }, - "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", - "@snackbarFolderPickerFailed": { - "description": "Snackbar shown when folder picker fails to open", - "placeholders": { - "error": { - "type": "String" - } - } + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" }, - "@optionsDetailedLoggingOn": { - "description": "Status when logging enabled" + "collectionPlaylist": "Playlist", + "@collectionPlaylist": { + "description": "Single playlist label" }, - "settingsSaveDownloadHistory": "Save download history", - "@settingsSaveDownloadHistory": { - "description": "Settings switch title for storing completed downloads in history" + "collectionAddToPlaylist": "Add to playlist", + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" }, - "@storeCategoryIntegration": { - "description": "Store extension category - integration" + "collectionCreatePlaylist": "Create playlist", + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" }, - "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", - "@a11yOpenItemCount": { - "description": "Accessibility label for opening a grouped item with count", + "collectionNoPlaylistsYet": "No playlists yet", + "@collectionNoPlaylistsYet": { + "description": "Empty state title when user has no playlists" + }, + "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", "placeholders": { - "title": { - "type": "String" - }, "count": { "type": "int" } } }, - "trackFileInfo": "Informações do Arquivo", - "@trackFileInfo": { - "description": "Tab title - file information" + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", - "audioAnalysisNoClipping": "No clipping", - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", - "@tutorialSettingsDesc": { - "description": "Tutorial settings page description" + "collectionAddedToPlaylist": "Added to \"{playlistName}\"", + "@collectionAddedToPlaylist": { + "description": "Snackbar after adding track to playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "lyricsModeExternalSubtitle": "Arquivo .lrc separado para reprodutores como o Samsung Music", - "@lyricsModeExternalSubtitle": { - "description": "Subtitle for external option" + "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "trackLoadLyrics": "Carregar Letras", - "@trackLoadLyrics": { - "description": "Action - fetch lyrics" + "collectionPlaylistNameHint": "Playlist name", + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", - "@extensionVerificationHelpTitleWaiting": { - "description": "Dialog title when verification is taking longer than expected" - }, - "libraryFilterReset": "Reset", - "@libraryFilterReset": { - "description": "Reset all filters button" - }, - "@downloadAlbumArtistMetadataFull": { - "description": "Status label when album-artist folder filtering uses full metadata" - }, - "storeTitle": "Repositório de extensões", - "@storeTitle": { - "description": "Repo screen title" - }, - "libraryCleared": "Library cleared", - "@libraryCleared": { - "description": "Snackbar after clearing library" + "collectionPlaylistNameRequired": "Playlist name is required", + "@collectionPlaylistNameRequired": { + "description": "Validation error for empty playlist name" }, - "queueDownloadCompleted": "Download completed", - "@queueDownloadCompleted": { - "description": "Accessibility label for completed download state in queue" + "collectionRenamePlaylist": "Rename playlist", + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" }, - "libraryTitle": "Local Library", - "@libraryTitle": { - "description": "Library settings page title" + "collectionDeletePlaylist": "Delete playlist", + "@collectionDeletePlaylist": { + "description": "Action to delete playlist" }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", - "@queueAlbumCount": { - "description": "Album count label with plural support", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionPlaylistRenamed": "Playlist renamed", + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" }, - "libraryClearConfirmTitle": "Clear Library", - "@backupExportSectionTitle": { - "description": "Section title for the export/backup card" + "collectionWishlistEmptyTitle": "Wishlist is empty", + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" }, - "dialogClearAll": "Limpar Tudo", - "@dialogClearAll": { - "description": "Dialog title - clear all items" + "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", - "@tutorialExtensionsDesc": { - "description": "Tutorial extensions page description" + "collectionLovedEmptyTitle": "Loved folder is empty", + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" }, - "libraryExternalPlayer": "External player", - "@libraryExternalPlayer": { - "description": "Setting option to use an external music player" + "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" }, - "editMetadataFieldGenre": "Genre", - "@tutorialLibraryTitle": { - "description": "Tutorial library page title" + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" }, - "folderOrganizationByPlaylist": "Por playlist", - "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" }, - "editMetadataSelectNone": "None", - "@historyFilterSingles": { - "description": "Filter chip - show singles only" + "collectionPlaylistEmptyTitle": "A lista de reprodução está vazia", + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" }, - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" + "collectionPlaylistEmptySubtitle": "", + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" }, - "trackSaveCoverArt": "Save Cover Art", - "@trackSaveCoverArt": { - "description": "Menu action - save album cover art as file" + "collectionRemoveFromPlaylist": "Remove from playlist", + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" }, - "@downloadAlbumFolderStructure": { - "description": "Setting - album folder organization" + "collectionRemoveFromFolder": "Remove from folder", + "@collectionRemoveFromFolder": { + "description": "Tooltip for removing track from wishlist/loved folder" }, - "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", - "@notifDownloadCompleteCount": { - "description": "Notification title when download is complete, with count", + "collectionAddedToLoved": "\"{trackName}\" added to Loved", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", "placeholders": { - "completed": { - "type": "int" - }, - "total": { - "type": "int" + "trackName": { + "type": "String" } } }, - "setupUseDefault": "Usar Padrão", - "@setupUseDefault": { - "description": "Button to use default folder" - }, - "logNoLogsYetSubtitle": "Os registros aparecerão aqui enquanto você usa o aplicativo", - "@logNoLogsYetSubtitle": { - "description": "Empty state subtitle" - }, - "@dateToday": { - "description": "Relative date - today" - }, - "trackSaveLyricsProgress": "Saving lyrics...", - "@trackSaveLyricsProgress": { - "description": "Snackbar while saving lyrics to file" + "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "trackCoverSaved": "Cover art saved to {fileName}", - "@trackCoverSaved": { - "description": "Snackbar after cover art saved", + "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", "placeholders": { - "fileName": { + "trackName": { "type": "String" } } }, - "trackReEnrichFieldLyrics": "Lyrics", - "@audioAnalysisRescan": { - "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" + "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is on" + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, - "dialogDisableAndClear": "Turn off and clear", - "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", - "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", - "@notifLibraryScanProgressWithTotal": { - "description": "Notification body for library scan progress when total is known", + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", "placeholders": { - "scanned": { - "type": "int" - }, - "total": { - "type": "int" - }, - "percentage": { - "type": "int" + "artistName": { + "type": "String" } } }, - "@extensionDetailsTags": { - "description": "Section title for extension tags" + "trackOptionAddToLoved": "Add to Loved", + "@trackOptionAddToLoved": { + "description": "Bottom sheet action label - add track to loved folder" }, - "@albumFolderAlbumOnlySubtitle": { - "description": "Folder structure example" + "trackOptionRemoveFromLoved": "Remove from Loved", + "@trackOptionRemoveFromLoved": { + "description": "Bottom sheet action label - remove track from loved folder" }, - "@audioAnalysisAnalyzing": { - "description": "Loading text while analyzing audio" + "trackOptionAddToWishlist": "Add to Wishlist", + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" }, - "@settingsDonate": { - "description": "Settings menu item - donate page" + "trackOptionRemoveFromWishlist": "Remove from Wishlist", + "@trackOptionRemoveFromWishlist": { + "description": "Bottom sheet action label - remove track from wishlist" }, - "@collectionPlaylistNameRequired": { - "description": "Validation error for empty playlist name" + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" }, - "@backupImportSectionDescription": { - "description": "Description for the restore action" + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" }, - "storeFilterLyrics": "Letras", - "libraryAutoScan": "Auto Scan", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" + "collectionPlaylistChangeCover": "Change cover image", + "@collectionPlaylistChangeCover": { + "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", - "@safMigrationMessage1": { - "description": "First paragraph of SAF migration dialog" + "collectionPlaylistRemoveCover": "Remove cover image", + "@collectionPlaylistRemoveCover": { + "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "setupStorageRequired": "Permissão de Armazenamento Necessária", - "@notifLibraryScanErrors": { - "description": "Library scan complete suffix - error count", + "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", "placeholders": { "count": { "type": "int" } } }, - "appearanceHistoryViewGrid": "Grade", - "trackConvertConverting": "Converting audio...", - "@trackConvertConverting": { - "description": "Snackbar while converting" - }, - "@setupUseDefaultFolder": { - "description": "Dialog title for default folder" + "selectionShareNoFiles": "No shareable files found", + "@selectionShareNoFiles": { + "description": "Snackbar when no selected files exist on disk" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Escrever uma etiqueta de artista por artista para FLAC e Opus; MP3 e M4A permanecem combinados.", - "snackbarPlayingNext": "Playing next", - "@snackbarPlayingNext": { - "description": "Snackbar when a track is inserted as the next queue item" + "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "optionsDefaultSearchTabSubtitle": "Escolha qual aba será aberta primeiro para novos resultados de pesquisa.", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" - }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", - "@sectionService": { - "description": "Settings section header" - }, - "notifUpdateProgress": "{received} / {total} MB • {percentage}%", - "@discographyDownloadSelected": { - "description": "Button - download selected albums" - }, - "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", - "@cacheClearAllConfirmMessage": { - "description": "Dialog message before clearing all caches" - }, - "extensionsHomeFeedProvider": "Home Feed Provider", - "@extensionsHomeFeedProvider": { - "description": "Extensions page - label for home feed provider selector" - }, - "@cacheExploreFeed": { - "description": "Cache item title for explore home feed cache" + "selectionConvertNoConvertible": "No convertible tracks selected", + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" }, - "@audioAnalysisDynamicRange": { - "description": "Dynamic range metric label" + "selectionBatchConvertConfirmTitle": "Batch Convert", + "@selectionBatchConvertConfirmTitle": { + "description": "Confirmation dialog title for batch conversion" }, - "unknownAlbum": "Unknown Album", - "trackCoverCurrent": "Current cover", - "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", - "downloadPrimaryArtistOnlyOff": "Primary only: Off", - "dialogDone": "Concluído", - "@dialogDone": { - "description": "Dialog button - action completed" + "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "storeRepoUrlLabel": "URL do repositório", - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", - "@logIssueRateLimitedSuggestion": { - "description": "Diagnostic badge suggestion for rate limiting" + "selectionBatchConvertConfirmMessageLossless": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "libraryScanProgress": "{progress}% of {total} files", - "@libraryScanProgress": { - "description": "Scan progress display", + "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": { + "description": "Batch conversion confirmation when source files will be preserved", "placeholders": { - "progress": { + "count": { + "type": "int" + }, + "format": { "type": "String" + } + } + }, + "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": { + "type": "int" }, "total": { "type": "int" + }, + "format": { + "type": "String" } } }, - "collectionLovedEmptyTitle": "Loved folder is empty", - "tutorialExtensionsTitle": "Extensions", - "@tutorialExtensionsTitle": { - "description": "Tutorial extensions page title" + "downloadedAlbumDownloadedCount": "{count} baixado(s)", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "searchSortDurationShort": "Duração (mais curta)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when album artist is used for folder names" }, - "trackCopyFilePath": "Copiar caminho do arquivo", - "@trackCopyFilePath": { - "description": "Action - copy file path" + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when track artist is used for folder names" }, - "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", - "@trackConvertResampler": { - "description": "Section label for lossless conversion resampler options" + "lyricsProvidersTitle": "Lyrics Provider Priority", + "@lyricsProvidersTitle": { + "description": "Settings item title for lyrics provider order" }, - "editMetadataFieldTrackNum": "Track #", - "@editMetadataFieldTrackNum": { - "description": "Chip label for track number field in auto-fill selector" + "lyricsProvidersDescription": "Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.", + "@lyricsProvidersDescription": { + "description": "Description on the lyrics provider priority page" }, - "snackbarFailedToUpdate": "Falha ao atualizar a extensão", - "@snackbarFailedToUpdate": { - "description": "Snackbar - extension update error" + "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", + "@lyricsProvidersInfoText": { + "description": "Info tip on lyrics provider priority page" }, - "notifAlreadyInLibrary": "Already in Library", - "@notifAlreadyInLibrary": { - "description": "Notification title when track is already in library" + "lyricsProvidersEnabledSection": "Enabled ({count})", + "@lyricsProvidersEnabledSection": { + "description": "Section header for enabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionPlaylistNameHint": "Playlist name", - "extensionVerificationCopyLink": "Copy link", - "@replayGainBatchAnalyzing": { - "description": "Progress dialog title while batch scanning ReplayGain" + "lyricsProvidersDisabledSection": "Disabled ({count})", + "@lyricsProvidersDisabledSection": { + "description": "Section header for disabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "setupLanguageTitle": "Escolher idioma", - "extensionId": "ID", - "@extensionId": { - "description": "Extension detail - unique ID" + "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", + "@lyricsProvidersAtLeastOne": { + "description": "Snackbar when user tries to disable the last enabled provider" }, - "regionCountryBR": "Brazil", - "@updateNewVersionReady": { - "description": "Update subtitle" + "lyricsProvidersSaved": "Lyrics provider priority saved", + "@lyricsProvidersSaved": { + "description": "Snackbar after saving lyrics provider priority" }, - "@queueDownloadedFileMissing": { - "description": "Accessibility label when a downloaded file is missing from disk" + "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", + "@lyricsProvidersDiscardContent": { + "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "@lyricsMode": { - "description": "Setting - how to save lyrics" + "lyricsProviderLrclibDesc": "Open-source synced lyrics database", + "@lyricsProviderLrclibDesc": { + "description": "Description for LRCLIB provider" }, - "@settingsAppearance": { - "description": "Settings section - visual customization" + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", + "@lyricsProviderNeteaseDesc": { + "description": "Description for Netease provider" }, - "@setupStorageAccessMessageAndroid11": { - "description": "Android 11+ specific explanation" + "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", + "@lyricsProviderMusixmatchDesc": { + "description": "Description for Musixmatch provider" }, - "@tutorialLibraryTip3": { - "description": "Tutorial library tip 3" + "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", + "@lyricsProviderAppleMusicDesc": { + "description": "Description for Apple Music provider" }, - "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person lyrics is off" + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "@lyricsProviderQqMusicDesc": { + "description": "Description for QQ Music provider" }, - "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", - "@libraryStorageAccessMessage": { - "description": "Dialog message for storage permission" + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" }, - "@tutorialLibraryTip1": { - "description": "Tutorial library tip 1" + "lyricsProviderExtensionDesc": "Extension provider", + "@lyricsProviderExtensionDesc": { + "description": "Generic description for extension-based lyrics providers" }, - "dialogRemoveExtensionMessage": "Tem certeza de que deseja remover esta extensão? Isso não pode ser desfeito.", - "@dialogRemoveExtensionMessage": { - "description": "Dialog message - uninstall confirmation" + "safMigrationTitle": "Storage Update Required", + "@safMigrationTitle": { + "description": "Title of SAF migration dialog" }, - "setupDownloadLocationTitle": "Local do Download", - "@setupDownloadLocationTitle": { - "description": "Download location dialog title" + "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", + "@safMigrationMessage1": { + "description": "First paragraph of SAF migration dialog" }, - "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", - "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is on" + "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", + "@safMigrationMessage2": { + "description": "Second paragraph of SAF migration dialog" }, - "@audioAnalysisBitDepth": { - "description": "Bit depth metric label" + "safMigrationSuccess": "Download folder updated to SAF mode", + "@safMigrationSuccess": { + "description": "Snackbar after successfully migrating to SAF" }, - "trackOptionAddToLoved": "Add to Loved", - "@trackOptionAddToLoved": { - "description": "Bottom sheet action label - add track to loved folder" + "settingsDonate": "Support Development", + "@settingsDonate": { + "description": "Settings menu item - donate page" }, - "cacheAppDirectory": "App cache directory", - "@cacheAppDirectory": { - "description": "Cache item title for app cache directory" + "settingsDonateSubtitle": "Buy the developer a coffee", + "@settingsDonateSubtitle": { + "description": "Subtitle for donate menu item" }, - "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", - "@navStore": { - "description": "Bottom navigation - Extension repo tab" + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" }, - "extensionPostProcessing": "Pós-Processamento", - "@searchTracks": { - "description": "Search filter label - tracks" + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" }, - "logCopied": "Registros copiados para área de transferência", - "@logCopied": { - "description": "Snackbar - logs copied" - }, - "@extensionHealthRequired": { - "description": "Label for a required extension service health check" + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" }, - "@previewPlay": { - "description": "Tooltip for the button that plays a short track preview snippet" + "backupExportSectionTitle": "Create backup", + "@backupExportSectionTitle": { + "description": "Section title for the export/backup card" }, - "clickableLookingUpArtist": "Looking up artist...", - "@clickableLookingUpArtist": { - "description": "Snackbar shown while clickable artist metadata is being resolved" + "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", + "@backupExportSectionDescription": { + "description": "Description of what a backup contains" }, - "@extensionVerificationBrowserSubtitleInApp": { - "description": "Subtitle when in-app browser is preferred for extension verification" + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" }, - "setupUseDefaultFolder": "Usar Pasta Padrão?", - "tutorialSearchHint": "Paste or search...", - "@logIssueTrackNotFoundLabel": { - "description": "Diagnostic badge label when a track is unavailable" + "backupImportSectionTitle": "Restore backup", + "@backupImportSectionTitle": { + "description": "Section title for the import/restore card" }, - "@storageModeAppFolderSubtitle": { - "description": "Subtitle for app folder storage mode" + "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", + "@backupImportSectionDescription": { + "description": "Description for the restore action" }, - "downloadMusixmatchLanguage": "Musixmatch Language", - "@downloadMusixmatchLanguage": { - "description": "Setting for Musixmatch lyrics translation language" + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" }, - "lyricsModeExternal": "Arquivo .lrc externo", - "@setupSelectFolder": { - "description": "Button to select folder" + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" }, - "logSearchHint": "Pesquisar registros...", + "backupCreateFailed": "Failed to create backup", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "@settingsSaveDownloadHistorySubtitle": { - "description": "Settings switch subtitle for storing completed downloads in history" - }, - "@albumFolderArtistAlbumFlat": { - "description": "Album folder option with singles directly in artist folder" - }, - "extensionHealthRequired": "required", - "actionCancel": "Cancelar", - "@actionCancel": { - "description": "Action button - cancel operation" - }, - "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", - "@optionsEmbedMetadataSubtitleOff": { - "description": "Subtitle when metadata embedding is disabled" - }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", - "@downloadAllowLocalNetworkDisabled": { - "description": "Subtitle when allow local network access is off" - }, - "@extensionsDownloadPrioritySubtitle": { - "description": "Subtitle for download priority" - }, - "downloadSingleFilenameFormat": "Formato do nome do arquivo para Singles", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "cacheSummarySubtitle": "Clearing cache will not remove downloaded music files.", - "@cacheSummarySubtitle": { - "description": "Helper text for cache summary card" - }, - "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", - "libraryFilterMetadataMissingTrackNumber": "Missing track number", - "@libraryFilterMetadataMissingTrackNumber": { - "description": "Filter option - items missing track number" - }, - "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", - "@backupIncludeSecretsDescription": { - "description": "Explanation for the include-credentials toggle" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" + "backupRestoreConfirmTitle": "Restore this backup?", + "@backupRestoreConfirmTitle": { + "description": "Confirmation dialog title before restoring a backup" }, - "@extensionServiceStatus": { - "description": "Extension detail section header for service status" + "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", + "@backupRestoreConfirmMessage": { + "description": "Confirmation dialog message before restoring a backup" }, - "queueEmptySingles": "No single downloads", - "@queueEmptySingles": { - "description": "Empty state title when no single track downloads exist" + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" }, - "@snackbarSelectedPlaylistsEmpty": { - "description": "Snackbar when selected playlists contain no tracks" + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" }, - "@errorRateLimited": { - "description": "Error title - too many requests" + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", - "@setupDownloadInFlac": { - "description": "App tagline in setup" + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" }, - "trackRemoveFromDevice": "Remover do dispositivo", - "@extensionsNoDownloadProvider": { - "description": "Empty state - no download providers" + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" }, - "@backupCreated": { - "description": "Snackbar after a backup file is created" + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" }, - "cacheSummaryTitle": "Cache overview", - "@cacheSummaryTitle": { - "description": "Heading for cache summary card" + "backupContentsSettings": "App settings", + "@backupContentsSettings": { + "description": "Backup contents row label for settings" }, - "selectionReplayGainCount": "ReplayGain ({count})", - "@selectionReplayGainCount": { - "description": "Batch selection action button label for ReplayGain", + "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "@backupContentsHistory": { + "description": "Backup contents row for history count", "placeholders": { "count": { "type": "int" } } }, - "@setupNotificationBackgroundDescription": { - "description": "Detailed notification explanation" - }, - "safMigrationTitle": "Storage Update Required", - "snackbarMetadataSaved": "Metadata saved successfully", - "@snackbarMetadataSaved": { - "description": "Snackbar after successfully saving track metadata" - }, - "@backupContentsSettings": { - "description": "Backup contents row label for settings" - }, - "logClearLogsTitle": "Limpar Registros", - "extensionsCustomSearch": "Busca personalizada", - "@extensionsCustomSearch": { - "description": "Label for custom search provider" - }, - "@downloadFrom": { - "description": "Label - download source" + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheSizeWithFiles": "{size} in {count} files", - "selectionShareNoFiles": "No shareable files found", - "@selectionShareNoFiles": { - "description": "Snackbar when no selected files exist on disk" + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "snackbarAddedTracksToQueue": "{count} faixas adicionadas à fila", - "downloadFilenameInsertTag": "Tap to insert tag:", - "@downloadFilenameInsertTag": { - "description": "Label above filename tag chips" + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", "placeholders": { - "artistName": { - "type": "String" + "count": { + "type": "int" } } }, - "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", - "backupRestoreConfirmButton": "Restore", - "@libraryCleanupMissingFiles": { - "description": "Button to remove entries for missing files" + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "backupCreateFailed": "Failed to create backup", - "notifLibraryScanFailed": "Library scan failed", - "@notifLibraryScanFailed": { - "description": "Notification title when library scan fails" + "backupIncludeSecrets": "Include extension credentials", + "@backupIncludeSecrets": { + "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, - "audioAnalysisRescan": "Re-analyze", - "@trackTrackName": { - "description": "Metadata label - track title" + "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", + "@backupIncludeSecretsDescription": { + "description": "Explanation for the include-credentials toggle" }, - "@setupPermissionRequired": { - "description": "Generic permission required title", + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { - "permissionType": { - "type": "String", - "description": "Type of permission (Storage/Notification)" + "count": { + "type": "int" } } }, - "@nowPlayingNoLyrics": { - "description": "Empty state when the playing file has no embedded lyrics" + "tooltipLoveAll": "Love All", + "@tooltipLoveAll": { + "description": "Tooltip for the Love All button on album/playlist screens" }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", + "tooltipAddToPlaylist": "Add to Playlist", + "@tooltipAddToPlaylist": { + "description": "Tooltip for the Add to Playlist button" + }, + "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", + "@snackbarRemovedTracksFromLoved": { + "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { "count": { "type": "int" } } }, - "@extensionMetadataProvider": { - "description": "Capability - provides metadata" + "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", + "@snackbarAddedTracksToLoved": { + "description": "Snackbar after adding multiple tracks to Loved folder", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@downloadFilterContributing": { - "description": "Setting to strip contributing artists from Album Artist folder name" + "dialogDownloadAllTitle": "Download All", + "@dialogDownloadAllTitle": { + "description": "Dialog title for bulk download confirmation" }, - "libraryScanSelectFolderFirst": "Select a folder first", - "@sectionDownload": { - "description": "Settings section header" + "dialogDownloadAllMessage": "Download {count} tracks?", + "@dialogDownloadAllMessage": { + "description": "Body of the Download All confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionHealthNotConfigured": "Not configured", - "queueRetryAllFailed": "Retry {count} failed", - "folderOrganizationByPlaylistSubtitle": "Pasta separada para cada playlist", - "@folderOrganizationByPlaylistSubtitle": { - "description": "Subtitle for playlist folder option" + "homeSkipAlreadyDownloaded": "Skip already downloaded songs", + "@homeSkipAlreadyDownloaded": { + "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "lyricsProviderExtensionDesc": "Extension provider", - "@libraryFilterQualityHiRes": { - "description": "Filter option - high resolution audio" + "homeGoToAlbum": "Go to Album", + "@homeGoToAlbum": { + "description": "Context menu item to navigate to the album page" }, - "trackConvertTitle": "Convert Audio", - "@trackConvertTitle": { - "description": "Title of convert bottom sheet" + "homeAlbumInfoUnavailable": "Album info not available", + "@homeAlbumInfoUnavailable": { + "description": "Snackbar when album info cannot be loaded" }, - "setupSkipForNow": "Ignorar por enquanto", - "sectionDownload": "Baixar", - "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" + "snackbarLoadingCueSheet": "Loading CUE sheet...", + "@snackbarLoadingCueSheet": { + "description": "Snackbar while loading a CUE sheet file" }, - "@trackConvertActionLabelLossless": { - "description": "Convert button label for lossless conversion with quality cap", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" - } - } + "snackbarMetadataSaved": "Metadata saved successfully", + "@snackbarMetadataSaved": { + "description": "Snackbar after successfully saving track metadata" }, - "storeRequiresVersion": "Requires v{version}+", - "@storeRequiresVersion": { - "description": "Store compatibility badge for minimum app version", + "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", + "@snackbarFailedToEmbedLyrics": { + "description": "Snackbar when lyrics embedding fails" + }, + "snackbarFailedToWriteStorage": "Failed to write back to storage", + "@snackbarFailedToWriteStorage": { + "description": "Snackbar when writing metadata back to file fails" + }, + "snackbarError": "Error: {error}", + "@snackbarError": { + "description": "Generic error snackbar with error detail", "placeholders": { - "version": { + "error": { "type": "String" } } }, - "metadataProviderPriorityDescription": "Arraste para reordenar provedores de metadados. O aplicativo tentará provedores de cima para baixo ao procurar por faixas e buscar metadados.", - "@notifUpdateFailed": { - "description": "Notification title when app update download fails" + "snackbarNoActionDefined": "No action defined for this button", + "@snackbarNoActionDefined": { + "description": "Snackbar when an extension button has no action configured" }, - "extensionsInfoTip": "Extensões podem adicionar novos metadados e baixar provedores. Somente instale extensões a partir de fontes confiáveis.", - "@extensionsInfoTip": { - "description": "Security warning about extensions" + "noTracksFoundForAlbum": "No tracks found for this album", + "@noTracksFoundForAlbum": { + "description": "Empty state message when an album has no tracks" }, - "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person lyrics is on" + "downloadLocationSubtitle": "Choose where to save your downloaded tracks", + "@downloadLocationSubtitle": { + "description": "Subtitle shown in the download location picker sheet" }, - "libraryFilterMetadataMissingYear": "Missing year", - "extensionsDownloadPriority": "Prioridade de Download", - "@extensionsDownloadPriority": { - "description": "Setting - download provider order" + "storageModeAppFolder": "App Folder (Recommended)", + "@storageModeAppFolder": { + "description": "Storage mode option - app-managed folder" }, - "@downloadAllowLocalNetworkEnabled": { - "description": "Subtitle when allow local network access is on" + "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", + "@storageModeAppFolderSubtitle": { + "description": "Subtitle for app folder storage mode" }, - "libraryScan": "Scan Library", - "@libraryScan": { - "description": "Button to start library scan" + "storageModeSaf": "", + "@storageModeSaf": { + "description": "Storage mode option - Storage Access Framework" }, - "editMetadataFieldLabel": "Label", - "@editMetadataFieldLabel": { - "description": "Chip label for label field in auto-fill selector" + "storageModeSafSubtitle": "Escolha qualquer pasta, incluindo o cartão SD", + "@storageModeSafSubtitle": { + "description": "Subtitle for SAF storage mode" }, - "updateDownloadFailed": "Download falhou", - "@updateDownloadFailed": { - "description": "Update error title" + "downloadFolderAccessLostTitle": "Download folder access lost", + "@downloadFolderAccessLostTitle": { + "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" }, - "appearanceAmoledDarkSubtitle": "Fundo preto puro", - "@appearanceAmoledDarkSubtitle": { - "description": "Subtitle for AMOLED dark" + "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", + "@downloadFolderAccessLostSubtitle": { + "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" }, - "setupIcloudNotSupported": "O iCloud Drive não é compatível. Use a pasta Documentos do aplicativo.", - "trackLyricsEmbeddedSource": "Embedded", - "@trackLyricsEmbeddedSource": { - "description": "Lyrics source label for embedded lyrics" + "downloadFolderReselect": "Re-select folder", + "@downloadFolderReselect": { + "description": "Button that reopens the folder picker to restore download folder access" }, - "@trackAlbumArtist": { - "description": "Metadata label - album artist" + "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", + "@downloadErrorSafPermissionLost": { + "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" }, - "extensionsInstallPartialSuccess": "Instaladas {installed} de {attempted} extensões", - "@extensionsInstallPartialSuccess": { - "description": "Message when installing multiple extensions partially succeeds", - "placeholders": { - "installed": { - "type": "int", - "description": "Number of successfully installed extensions" - }, - "attempted": { - "type": "int", - "description": "Number of selected extensions" - } - } + "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", + "@downloadErrorFolderAccessLost": { + "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, - "@extensionSettingsCount": { - "description": "Count of settings exposed by an extension quality option", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", + "@downloadFilenameDescription": { + "description": "Description shown in filename format editor" }, - "notifLibraryScanCancelled": "Escaneamento de biblioteca cancelado", - "@notifLibraryScanCancelled": { - "description": "Notification title when library scan is cancelled by the user" + "downloadFilenameInsertTag": "Tap to insert tag:", + "@downloadFilenameInsertTag": { + "description": "Label above filename tag chips" }, - "collectionPlaylistNameRequired": "Playlist name is required", - "libraryCleanupMissingFiles": "Cleanup Missing Files", - "storeCategoryUtility": "Utility", - "@storeCategoryUtility": { - "description": "Store extension category - utility" + "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", + "@downloadSeparateSinglesEnabled": { + "description": "Subtitle when separate singles folder is on" }, - "searchSortTitle": "Ordenar resultados", - "@extensionVerificationBrowserExternal": { - "description": "Chip label for external browser verification mode" + "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", + "@downloadSeparateSinglesDisabled": { + "description": "Subtitle when separate singles folder is off" }, - "audioAnalysisLufs": "LUFS", - "@setupAllowAccessToManageFiles": { - "description": "Instruction for file access permission" + "downloadArtistNameFilters": "Artist Name Filters", + "@downloadArtistNameFilters": { + "description": "Setting title for artist folder filter options" }, - "extensionsErrorLoading": "Erro ao carregar extensão", - "@actionPaste": { - "description": "Generic action - paste from clipboard" + "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", + "@downloadCreatePlaylistSourceFolder": { + "description": "Setting to create a subfolder per playlist source" }, - "aboutFeatureRequestSubtitle": "Sugira novos recursos para o aplicativo", - "@aboutFeatureRequestSubtitle": { - "description": "Subtitle for feature request" + "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", + "@downloadCreatePlaylistSourceFolderEnabled": { + "description": "Subtitle when playlist folder is enabled" }, - "@aboutTitle": { - "description": "About page title" + "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", + "@downloadCreatePlaylistSourceFolderDisabled": { + "description": "Subtitle when playlist folder is disabled" }, - "@downloadNeteaseIncludeTranslation": { - "description": "Setting to include translated lyrics from Netease" + "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", + "@downloadCreatePlaylistSourceFolderRedundant": { + "description": "Subtitle when folder organization is already set to playlist" }, - "@actionGo": { - "description": "Generic action button label" + "downloadSongLinkRegion": "SongLink Region", + "@downloadSongLinkRegion": { + "description": "Setting for SongLink region used during fallback resolution" }, - "regionCountryFR": "France", - "trackConvertResamplerSoxr": "SoXr", - "extensionUpdated": "Atualizado", - "@extensionUpdated": { - "description": "Extension detail - last update" + "downloadNetworkCompatibilityMode": "Network Compatibility Mode", + "@downloadNetworkCompatibilityMode": { + "description": "Setting for legacy TLS/network handling" }, - "downloadLossyFormat": "Lossy Format", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "@downloadNetworkCompatibilityModeEnabled": { + "description": "Subtitle when network compatibility mode is on" }, - "snackbarAlreadyInLibrary": "\"{trackName}\" já existe na sua biblioteca", - "@snackbarAlreadyInLibrary": { - "description": "Snackbar - track already exists in local library", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", + "@downloadNetworkCompatibilityModeDisabled": { + "description": "Subtitle when network compatibility mode is off" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", - "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", - "libraryFilterQuality": "Quality", - "@libraryFilterQuality": { - "description": "Filter section - audio quality" + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@downloadAllowLocalNetwork": { + "description": "Setting title for allowing requests to private/local network targets" }, - "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", - "@editMetadataAutoFillDone": { - "description": "Snackbar confirming how many fields were auto-filled", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", + "@downloadAllowLocalNetworkEnabled": { + "description": "Subtitle when allow local network access is on" }, - "@discographyDownload": { - "description": "Button - download artist discography" + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" }, - "aboutFeatureRequest": "Solicitação de recurso", - "downloadSingleFilenameFormatDescription": "Padrão de nome de arquivo para Singles e EPs. Utiliza as mesmas tags do formato de álbum.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" + "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "@downloadSelectServiceToEnable": { + "description": "Subtitle when quality picker is disabled due to extension service" }, - "queueClearAllMessage": "Você tem certeza que deseja limpar todos os downloads?", - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", - "extensionLastChecked": "Last checked {time}", - "@extensionLastChecked": { - "description": "Timestamp for the latest extension service health check", - "placeholders": { - "time": { - "type": "String" - } - } + "downloadEmbedLyricsDisabled": "Enable metadata embedding first", + "@downloadEmbedLyricsDisabled": { + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "homeImportCsvTooltip": "Import playlist (CSV, M3U)", - "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "downloadNeteaseIncludeTranslation": "Netease: Include Translation", + "@downloadNeteaseIncludeTranslation": { + "description": "Setting to include translated lyrics from Netease" }, - "trackConvertResamplerSwr": "SWR", - "@trackConvertResamplerSwr": { - "description": "Lossless conversion default FFmpeg swresample resampler option" + "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", + "@downloadNeteaseIncludeTranslationEnabled": { + "description": "Subtitle when Netease translation is on" }, - "@downloadFolderOrganization": { - "description": "Title of the folder organization picker bottom sheet" + "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", + "@downloadNeteaseIncludeTranslationDisabled": { + "description": "Subtitle when Netease translation is off" }, - "dialogClearHistoryTitle": "Limpar Histórico", - "@logClearSearch": { - "description": "Tooltip for clearing the log search field" + "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", + "@downloadNeteaseIncludeRomanization": { + "description": "Setting to include romanized lyrics from Netease" }, - "dialogImport": "Importar", - "@dialogImport": { - "description": "Dialog button - import data" + "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", + "@downloadNeteaseIncludeRomanizationEnabled": { + "description": "Subtitle when Netease romanization is on" }, - "@setupChangeFolderTooltip": { - "description": "Tooltip for editing the selected download folder" + "downloadNeteaseIncludeRomanizationDisabled": "No romanization", + "@downloadNeteaseIncludeRomanizationDisabled": { + "description": "Subtitle when Netease romanization is off" }, - "notifLibraryScanErrors": "{count} errors", - "@downloadNetworkCompatibilityMode": { - "description": "Setting for legacy TLS/network handling" + "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", + "@downloadAppleQqMultiPerson": { + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, - "@metadataSaveFailedFfmpeg": { - "description": "Snackbar error when FFmpeg fails to write metadata" + "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", + "@downloadAppleQqMultiPersonEnabled": { + "description": "Subtitle when multi-person lyrics is on" }, - "dialogUninstallExtension": "Desinstalar Extensão?", - "recentTypePlaylist": "Playlist", - "@recentTypePlaylist": { - "description": "Recent access item type - playlist" + "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", + "@downloadAppleQqMultiPersonDisabled": { + "description": "Subtitle when multi-person lyrics is off" }, - "trackDeleteConfirmMessage": "Isto irá excluir o arquivo baixado permanentemente e removê-lo do seu histórico.", - "@logIssueNetworkErrorDescription": { - "description": "Diagnostic badge description for generic network errors" + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "appearanceThemeSystem": "Sistema", - "@appearanceThemeSystem": { - "description": "Follow system theme" + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "albumFolderArtistAlbumSingles": "Artista / Álbum + Singles", - "@aboutTranslators": { - "description": "Section for translators" + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "shareSheetNotFound": "Not found", - "@shareSheetNotFound": { - "description": "Cross-service share sheet row subtitle when a service has no match" + "downloadMusixmatchLanguage": "Musixmatch Language", + "@downloadMusixmatchLanguage": { + "description": "Setting for Musixmatch lyrics translation language" }, - "@tutorialDownloadInProgressSemantics": { - "description": "Accessibility label for active download state in tutorial demo" + "downloadMusixmatchLanguageAuto": "Auto (original language)", + "@downloadMusixmatchLanguageAuto": { + "description": "Subtitle when no language is set" }, - "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", - "@editMetadataAutoFillNoneSelected": { - "description": "Snackbar when user taps Fetch without selecting any fields" + "downloadFilterContributing": "Filter Contributing Artists", + "@downloadFilterContributing": { + "description": "Setting to strip contributing artists from Album Artist folder name" }, - "@snackbarViewQueue": { - "description": "Snackbar action - view download queue" + "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", + "@downloadFilterContributingEnabled": { + "description": "Subtitle when contributing artist filter is on" }, - "@optionsUpdateChannelPreview": { - "description": "Include beta/preview updates" + "downloadFilterContributingDisabled": "Full Album Artist string used", + "@downloadFilterContributingDisabled": { + "description": "Subtitle when contributing artist filter is off" }, - "editMetadataFieldComposer": "Composer", - "@editMetadataFieldComposer": { - "description": "Label for composer field in the edit metadata sheet" + "downloadProvidersNoneEnabled": "No providers enabled", + "@downloadProvidersNoneEnabled": { + "description": "Shown when no lyrics providers are active" }, - "aboutSachinsenalDesc": "O criador original do projeto HiFi. Uma base para integração de fontes sem perdas.", - "@aboutSachinsenalDesc": { - "description": "Credit description for sachinsenal0x64" + "downloadMusixmatchLanguageCode": "Language code", + "@downloadMusixmatchLanguageCode": { + "description": "Label for Musixmatch language input field" }, - "backupTitle": "Backup & Restore", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" + "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "@downloadMusixmatchLanguageHint": { + "description": "Placeholder for Musixmatch language input" }, - "setupStorageAccessRequired": "Acesso ao Armazenamento Necessário", - "@setupStorageAccessRequired": { - "description": "Title when storage access needed" + "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", + "@downloadMusixmatchLanguageDesc": { + "description": "Description in Musixmatch language picker" }, - "trackMetadataDelete": "Apagar", - "@trackMetadataDelete": { - "description": "Action button - delete track" + "downloadMusixmatchAuto": "Auto", + "@downloadMusixmatchAuto": { + "description": "Button to clear Musixmatch language (use auto)" }, - "libraryFilterMetadataMissingDiscNumber": "Missing disc number", - "@libraryFilterMetadataMissingDiscNumber": { - "description": "Filter option - items missing disc number" + "downloadNetworkAnySubtitle": "Use WiFi or mobile data", + "@downloadNetworkAnySubtitle": { + "description": "Subtitle for any-network option in picker" }, - "snackbarMetadataProviderSaved": "Prioridade do provedor de metadados salva", - "setupPermissionRequired": "Permissão {permissionType} Necessária", - "@selectionConvertNoConvertible": { - "description": "Snackbar when no selected tracks support conversion" + "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "@downloadNetworkWifiOnlySubtitle": { + "description": "Subtitle for WiFi-only option in picker" }, - "extensionHealthDegraded": "Degraded", - "regionCountryKR": "South Korea", - "@regionCountryKR": { - "description": "Country name for SongLink region picker" + "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", + "@downloadSongLinkRegionDesc": { + "description": "Description in SongLink region picker" }, - "trackLyricsNotInFile": "Nenhuma letra encontrada neste arquivo", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" + "snackbarUnsupportedAudioFormat": "Unsupported audio format", + "@snackbarUnsupportedAudioFormat": { + "description": "Snackbar when the audio format is not supported for the requested operation" }, - "@downloadedAlbumTapToSelect": { - "description": "Selection hint" + "cacheRefresh": "Refresh", + "@cacheRefresh": { + "description": "Tooltip for refresh button on cache management page" }, - "downloadArtistNameFilters": "Artist Name Filters", - "@downloadArtistNameFilters": { - "description": "Setting title for artist folder filter options" + "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", + "@dialogDownloadPlaylistsMessage": { + "description": "Dialog message for bulk playlist download confirmation", + "placeholders": { + "trackCount": { + "type": "int" + }, + "playlistCount": { + "type": "int" + } + } }, - "@libraryFilterMetadataMissingArtist": { - "description": "Filter option - items missing artist" + "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", + "@bulkDownloadPlaylistsButton": { + "description": "Button label for bulk downloading selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "recentShowAllDownloads": "Show All Downloads", - "@appearanceThemeLight": { - "description": "Light theme" + "bulkDownloadSelectPlaylists": "Select playlists to download", + "@bulkDownloadSelectPlaylists": { + "description": "Button label when no playlists are selected for download" }, - "trackReEnrichFieldTrackInfo": "Track & Disc Number", - "@appearanceThemeDark": { - "description": "Dark theme" + "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", + "@snackbarSelectedPlaylistsEmpty": { + "description": "Snackbar when selected playlists contain no tracks" }, - "extensionVerificationLinkCopied": "Verification link copied", - "@extensionVerificationLinkCopied": { - "description": "Snackbar after copying the extension verification URL" + "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@playlistsCount": { + "description": "Playlist count display", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@extensionsHomeFeedDescription": { - "description": "Extensions page - description for home feed provider picker" + "editMetadataAutoFill": "Auto-fill from online", + "@editMetadataAutoFill": { + "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", - "@downloadAlbumArtistMetadataPrimaryOnly": { - "description": "Status label when album-artist folder filtering uses primary artist only" + "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", + "@editMetadataAutoFillDesc": { + "description": "Description for the auto-fill section" }, - "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", - "setupNext": "Próximo", - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", - "libraryAutoScanDaily": "Daily", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" + "editMetadataAutoFillSource": "Metadata source", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" }, - "@audioAnalysisDescription": { - "description": "Description for audio analysis tap-to-analyze prompt" + "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" }, - "nowPlayingUpNext": "Up next", - "@nowPlayingUpNext": { - "description": "Title for the playback queue sheet" + "editMetadataAutoFillFind": "Find metadata", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" }, - "nowPlayingPreviousTrack": "Previous track", - "nowPlayingNextTrack": "Next track", - "logAutoScrollOff": "Auto-scroll OFF", - "trackConvertFailed": "Conversion failed", - "@trackConvertFailed": { - "description": "Snackbar when conversion fails" + "editMetadataAutoFillPreview": "Data from {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } }, - "extensionsUninstall": "Desinstalar", - "safMigrationSuccess": "Download folder updated to SAF mode", - "optionsClearHistorySubtitle": "Remover todas as faixas baixadas do histórico", - "@optionsClearHistorySubtitle": { - "description": "Subtitle for clear history" + "editMetadataAutoFillCoverAvailable": "Cover artwork available", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" }, - "trackPlayNext": "Play next", - "extensionsNoHomeFeedExtensions": "No extensions with home feed", - "optionsUpdateChannelStable": "Somente versões estáveis", - "@optionsUpdateChannelStable": { - "description": "Only stable updates" + "editMetadataAutoFillApply": "Apply selected data", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" }, - "@discographyDownloadAllSubtitle": { - "description": "Subtitle showing total tracks and albums", + "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" }, - "albumCount": { - "type": "int" + "source": { + "type": "String" } } }, - "searchPlaylists": "Listas de reprodução", - "@searchPlaylists": { - "description": "Search result category - playlists" + "editMetadataAutoFillFetch": "Fetch & Fill", + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" }, - "downloadNetworkCompatibilityMode": "Network Compatibility Mode", - "settingsAppearance": "Aparência", - "logIssueRateLimitedLabel": "RATE LIMITED", - "@logIssueRateLimitedLabel": { - "description": "Diagnostic badge label when the service rate limits requests" + "editMetadataAutoFillSearching": "Searching online...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" }, - "logIssueSummary": "Issue Summary", - "@logIssueSummary": { - "description": "Header for log issue analysis summary" + "editMetadataAutoFillNoResults": "No matching metadata found online", + "@editMetadataAutoFillNoResults": { + "description": "Snackbar when online metadata search returns no results" }, - "appName": "SpotiFLAC Mobile", - "storeRepoDialogCurrent": "Repositório atual:", - "@optionsExtensionStoreSubtitle": { - "description": "Subtitle for extension repo toggle" + "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", + "@editMetadataAutoFillDone": { + "description": "Snackbar confirming how many fields were auto-filled", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@trackLyrics": { - "description": "Tab title - lyrics" + "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", + "@editMetadataAutoFillNoneSelected": { + "description": "Snackbar when user taps Fetch without selecting any fields" }, - "@backupImportButton": { - "description": "Button to pick a backup file to restore" + "editMetadataFieldTitle": "Title", + "@editMetadataFieldTitle": { + "description": "Chip label for title field in auto-fill selector" }, - "@setupFolderChoose": { - "description": "Button to choose folder" + "editMetadataFieldArtist": "Artist", + "@editMetadataFieldArtist": { + "description": "Chip label for artist field in auto-fill selector" }, - "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", - "@extensionsDisabled": { - "description": "Extension status - inactive" + "editMetadataFieldAlbum": "Album", + "@editMetadataFieldAlbum": { + "description": "Chip label for album field in auto-fill selector" }, - "@regionCountryAU": { - "description": "Country name for SongLink region picker" + "editMetadataFieldAlbumArtist": "Album Artist", + "@editMetadataFieldAlbumArtist": { + "description": "Chip label for album artist field in auto-fill selector" }, - "@storeCategoryMetadata": { - "description": "Store extension category - metadata" + "editMetadataFieldDate": "Date", + "@editMetadataFieldDate": { + "description": "Chip label for date field in auto-fill selector" }, - "libraryFilterApply": "Apply", - "@libraryFilterApply": { - "description": "Apply filters button" + "editMetadataFieldTrackNum": "Track #", + "@editMetadataFieldTrackNum": { + "description": "Chip label for track number field in auto-fill selector" }, - "@libraryFilterSortGenreAsc": { - "description": "Sort option - genre ascending" + "editMetadataFieldDiscNum": "Disc #", + "@editMetadataFieldDiscNum": { + "description": "Chip label for disc number field in auto-fill selector" }, - "setupAllowAccessToManageFiles": "Por favor, habilite \"Permitir acesso para gerenciar todos os arquivos\" na próxima tela.", - "@dialogSave": { - "description": "Dialog button - save changes" + "editMetadataFieldGenre": "Genre", + "@editMetadataFieldGenre": { + "description": "Chip label for genre field in auto-fill selector" }, - "trackLyrics": "Letras", - "extensionSettingNotSet": "Not set", - "@extensionSettingNotSet": { - "description": "Value shown when an extension setting has no value" + "editMetadataFieldIsrc": "ISRC", + "@editMetadataFieldIsrc": { + "description": "Chip label for ISRC field in auto-fill selector" }, - "@audioAnalysisClipping": { - "description": "Clipping metric label" + "editMetadataFieldLabel": "Label", + "@editMetadataFieldLabel": { + "description": "Chip label for label field in auto-fill selector" }, - "downloadNeteaseIncludeTranslation": "Netease: Include Translation", - "@albumFolderArtistAlbumSubtitle": { - "description": "Folder structure example" + "editMetadataFieldCopyright": "Copyright", + "@editMetadataFieldCopyright": { + "description": "Chip label for copyright field in auto-fill selector" }, - "@settingsDonateSubtitle": { - "description": "Subtitle for donate menu item" + "editMetadataFieldCover": "Cover Art", + "@editMetadataFieldCover": { + "description": "Chip label for cover art field in auto-fill selector" }, - "cueSplitSuccess": "Split into {count} tracks successfully", - "@cueSplitSuccess": { - "description": "Snackbar after successful CUE split", + "editMetadataSelectAll": "All", + "@editMetadataSelectAll": { + "description": "Button to select all fields for auto-fill" + }, + "editMetadataSelectEmpty": "Empty only", + "@editMetadataSelectEmpty": { + "description": "Button to select only fields that are currently empty" + }, + "queueDownloadingCount": "Downloading ({count})", + "@queueDownloadingCount": { + "description": "Header for active downloads section with count", "placeholders": { "count": { "type": "int" } } }, - "cueSplitArtist": "Artist: {artist}", - "@cueSplitArtist": { - "description": "Artist name in CUE split sheet", + "queueFilteringIndicator": "Filtering...", + "@queueFilteringIndicator": { + "description": "Shown while filter results are being computed" + }, + "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "@queueTrackCount": { + "description": "Track count label with plural support", "placeholders": { - "artist": { - "type": "String" + "count": { + "type": "int" } } }, - "updateSeeReleaseNotes": "See release notes for details.", - "@updateSeeReleaseNotes": { - "description": "Fallback changelog text when release notes cannot be parsed" - }, - "@trackReEnrichFfmpegFailed": { - "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "@queueAlbumCount": { + "description": "Album count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionWishlist": "Wishlist", - "@collectionWishlist": { - "description": "Custom folder for saved tracks to download later" + "queueEmptyAlbums": "No album downloads", + "@queueEmptyAlbums": { + "description": "Empty state title when no album downloads exist" }, - "editMetadataAutoFillFetch": "Fetch & Fill", - "@extensionsHomeFeedAuto": { - "description": "Label for auto-selected search provider" + "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", + "@queueEmptyAlbumsSubtitle": { + "description": "Empty state subtitle for album downloads" }, - "providerPriorityDescription": "Arraste para reordenar provedores de download. O aplicativo irá tentar provedores de cima para baixo ao baixar as faixas.", - "@providerPriorityDescription": { - "description": "Provider priority page description" + "queueEmptySingles": "No single downloads", + "@queueEmptySingles": { + "description": "Empty state title when no single track downloads exist" }, "queueEmptySinglesSubtitle": "Single track downloads will appear here", - "downloadLossyOpus128": "Opus 128kbps", - "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", - "@downloadUseAlbumArtistForFolders": { - "description": "Setting - choose whether artist folders use Album Artist or Track Artist" + "@queueEmptySinglesSubtitle": { + "description": "Empty state subtitle for single track downloads" }, - "@aboutLinks": { - "description": "Section for external links" + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadedAlbumDeleteCount": "Apagar {count} {count, plural, =1{faixa} other{faixas}}", - "updateLater": "Depois", - "@logIssueIspBlockingSuggestion": { - "description": "Diagnostic badge suggestion for ISP blocking" + "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" }, - "actionResume": "Retomar", - "optionsDetailedLoggingOff": "Habilitar para relatórios de erros", - "@searchSortDefault": { - "description": "Sort option - default API order" + "libraryDefaultView": "Default view", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" }, - "@regionCountryCA": { - "description": "Country name for SongLink region picker" + "libraryDefaultViewLastUsed": "Last used", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" }, - "@sectionStorageAccess": { - "description": "Section header for storage access settings" + "queueEmptyHistory": "No download history", + "@queueEmptyHistory": { + "description": "Empty state title when download history is empty" }, - "downloadFilterContributing": "Filter Contributing Artists", - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", - "storeSearch": "Pesquisar extensões...", - "@storeSearch": { - "description": "Repo search placeholder" + "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", + "@queueEmptyHistorySubtitle": { + "description": "Empty state subtitle for download history" }, - "aboutTelegramChat": "Comunidade do Telegram", - "lyricsModeBoth": "Ambos", - "@lyricsModeBoth": { - "description": "Lyrics mode option - embed and external" + "selectionAllPlaylistsSelected": "All playlists selected", + "@selectionAllPlaylistsSelected": { + "description": "Shown when all playlists are selected in selection mode" }, - "@permissionNotification": { - "description": "Notification permission type label" - }, - "libraryAutoScanSubtitle": "Escanear automaticamente sua biblioteca em busca de novos arquivos", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" + "selectionTapPlaylistsToSelect": "Tap playlists to select", + "@selectionTapPlaylistsToSelect": { + "description": "Hint shown in playlist selection mode" }, - "libraryEnableLocalLibrary": "Enable Local Library", - "trackConvertTargetFormat": "Target Format", - "@trackConvertTargetFormat": { - "description": "Label for format selection" + "selectionSelectPlaylistsToDelete": "Select playlists to delete", + "@selectionSelectPlaylistsToDelete": { + "description": "Hint shown when no playlists are selected for deletion" }, - "extensionSettings": "Configurações", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" + "audioAnalysisTitle": "Audio Quality Analysis", + "@audioAnalysisTitle": { + "description": "Title for audio analysis section" }, - "trackLyricsTimeout": "A solicitação expirou. Tente novamente mais tarde.", - "settingsExtensions": "Extensões", - "@settingsBackup": { - "description": "Settings menu item - backup and restore page" + "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", + "@audioAnalysisDescription": { + "description": "Description for audio analysis tap-to-analyze prompt" }, - "librarySourceDownloaded": "Downloaded", - "@librarySourceDownloaded": { - "description": "Badge for tracks downloaded via SpotiFLAC" + "audioAnalysisAnalyzing": "Analyzing audio...", + "@audioAnalysisAnalyzing": { + "description": "Loading text while analyzing audio" }, - "appearanceDynamicColor": "Cores Dinâmicas", - "@appearanceDynamicColor": { - "description": "Material You dynamic colors" + "audioAnalysisSampleRate": "Sample Rate", + "@audioAnalysisSampleRate": { + "description": "Sample rate metric label" }, - "backupImportButton": "Choose backup file", - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@optionsEmbedMetadata": { - "description": "Settings toggle title for writing metadata into downloaded files" + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" }, - "appearanceTitle": "Aparência", - "downloadNeteaseIncludeRomanizationDisabled": "No romanization", - "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is off" + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" }, - "@libraryScanCancelled": { - "description": "Library scan status when a scan was cancelled" + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" }, - "tracksCount": "{count, plural, =1{1 faixa} other{{count} faixas}}", - "@snackbarFailedToUpdateNamed": { - "description": "Snackbar when extension update fails in the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "audioAnalysisBitDepth": "Bit Depth", + "@audioAnalysisBitDepth": { + "description": "Bit depth metric label" }, - "@extensionQualityOptions": { - "description": "Capability - quality selection" + "audioAnalysisChannels": "Channels", + "@audioAnalysisChannels": { + "description": "Channels metric label" }, - "logClearSearch": "Clear search", - "trackSaveLyrics": "Save Lyrics (.lrc)", - "@trackReEnrichSearching": { - "description": "Snackbar while searching metadata from internet for local items" + "audioAnalysisDuration": "Duration", + "@audioAnalysisDuration": { + "description": "Duration metric label" }, - "@editMetadataAutoFillNoResults": { - "description": "Snackbar when online metadata search returns no results" + "audioAnalysisNyquist": "Nyquist", + "@audioAnalysisNyquist": { + "description": "Nyquist frequency metric label" }, - "notifDownloadComplete": "Download Complete", - "snackbarAlreadyDownloaded": "\"{trackName}\" já foi baixada", - "folderOrganizationByAlbumSubtitle": "Pasta separada para cada álbum", - "storeRepoUrlHint": "https://github.com/usuario/repositorio", - "trackConvertDitherTriangularHp": "Triangular HP", - "lyricsModeBothSubtitle": "Incorporar e salvar arquivo .lrc", - "trackReEnrichFieldExtra": "Genre, Label, Copyright", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" + "audioAnalysisFileSize": "Size", + "@audioAnalysisFileSize": { + "description": "File size metric label" }, - "sectionLyrics": "Letras", - "@sectionLyrics": { - "description": "Settings section header" + "audioAnalysisDynamicRange": "Dynamic Range", + "@audioAnalysisDynamicRange": { + "description": "Dynamic range metric label" }, - "extensionStrategy": "Estratégia: {strategy}", - "@extensionStrategy": { - "description": "Track matching strategy name", - "placeholders": { - "strategy": { - "type": "String" - } - } + "audioAnalysisPeak": "Peak", + "@audioAnalysisPeak": { + "description": "Peak amplitude metric label" }, - "@downloadNativeWorker": { - "description": "Setting title for Android native download worker" + "audioAnalysisRms": "RMS", + "@audioAnalysisRms": { + "description": "RMS level metric label" }, - "optionsArtistTagModeSplitVorbis": "Dividir etiquetas para FLAC/Opus", - "extensionsHomeFeedUse": "Use {extensionName} home feed", - "@cacheAppDirectoryDesc": { - "description": "Description of what app cache directory contains" + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" }, - "cancelDownloadTitle": "Cancel download?", - "updateWhatsNew": "Novidades", - "updateNewVersionReady": "Uma nova versão está pronta", - "@extensionVerificationClose": { - "description": "Button to dismiss the extension verification help dialog" + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" }, - "a11ySelectTrack": "Select track", - "libraryClearSubtitle": "Remove all scanned tracks", - "@libraryClearSubtitle": { - "description": "Subtitle for clear button" + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" }, - "@settingsDownloadNetworkSubtitle": { - "description": "Subtitle explaining network preference" + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" }, - "storeAnyVersion": "Any", - "@storeAnyVersion": { - "description": "Store detail value when any app version is accepted" + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" }, - "navStore": "Repo", - "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", - "libraryScanSettings": "Scan Settings", - "@libraryScanSettings": { - "description": "Section header for scan settings" + "audioAnalysisCutoffNotDetected": "Not detected", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" }, - "trackDuration": "Duração", - "@trackDuration": { - "description": "Metadata label - track length" + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" }, - "extensionHealthOffline": "Offline", - "@extensionHealthOffline": { - "description": "Extension service health status - offline" + "audioAnalysisSamples": "Samples", + "@audioAnalysisSamples": { + "description": "Total samples metric label" }, - "editMetadataFieldArtist": "Artist", - "@editMetadataFieldArtist": { - "description": "Chip label for artist field in auto-fill selector" + "audioAnalysisRescan": "Re-analyze", + "@audioAnalysisRescan": { + "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" }, - "libraryInLibrary": "In Library", - "pressBackAgainToExit": "Pressione voltar novamente para sair", - "@pressBackAgainToExit": { - "description": "Exit confirmation message" + "audioAnalysisRescanning": "Re-analyzing audio...", + "@audioAnalysisRescanning": { + "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "setupNotificationGranted": "Permissão de Notificações Concedida!", - "@setupNotificationGranted": { - "description": "Success message for notification permission" + "extensionsHomeFeedProvider": "Home Feed Provider", + "@extensionsHomeFeedProvider": { + "description": "Extensions page - label for home feed provider selector" }, - "settingsDonate": "Support Development", - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", - "backupContentsTitle": "Backup contents", - "updateDontRemind": "Não lembrar", - "@dialogDiscard": { - "description": "Dialog button - discard changes" + "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", + "@extensionsHomeFeedDescription": { + "description": "Extensions page - description for home feed provider picker" }, - "editMetadataAutoFillSearching": "Searching online...", - "discographyDownloadSelected": "Baixar Selecionados", - "trackConvertResampler": "Resampler", - "queueFilteringIndicator": "Filtering...", - "@queueFilteringIndicator": { - "description": "Shown while filter results are being computed" + "extensionsHomeFeedAuto": "Auto", + "@extensionsHomeFeedAuto": { + "description": "Label for auto-selected search provider" }, - "@dialogDownloadAllTitle": { - "description": "Dialog title for bulk download confirmation" + "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", + "@extensionsHomeFeedAutoSubtitle": { + "description": "Extensions page - subtitle for auto home feed option" }, - "cueSplitConfirmMessage": "Split \"{album}\" into {count} individual FLAC files?\n\nFiles will be saved to the same directory.", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when folder organization is already set to playlist" + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" }, - "regionCountryCA": "Canada", - "cacheTempDirectory": "Temporary directory", - "@cacheTempDirectory": { - "description": "Cache item title for temporary files directory" + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" }, - "libraryShowDuplicateIndicator": "Show Duplicate Indicator", - "@logFilterBySeverity": { - "description": "Filter dialog title" + "extensionsHomeFeedUse": "Use {extensionName} home feed", + "@extensionsHomeFeedUse": { + "description": "Extensions page - subtitle for a specific extension home feed option", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "homeSearchHintProvider": "Search with {providerName}...", - "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is off" + "extensionsNoHomeFeedExtensions": "No extensions with home feed", + "@extensionsNoHomeFeedExtensions": { + "description": "Extensions page - shown when no installed extension has home feed" }, - "optionsCheckUpdates": "Procurar Atualizações", - "replayGainBatchAnalyzing": "Analisando ReplayGain...", - "recentTypeAlbum": "Álbum", - "providerExtension": "Extensão", - "@providerExtension": { - "description": "Label for extension-provided providers" + "cancelDownloadTitle": "Cancel download?", + "@cancelDownloadTitle": { + "description": "Dialog title when confirming cancellation of an active download" }, - "trackCoverNoSource": "No cover art source available", - "libraryFilterMetadata": "Metadata", - "albumFolderArtistYearAlbum": "Artista / [Ano] Álbum", - "@albumFolderArtistYearAlbum": { - "description": "Album folder option with year" - }, - "audioAnalysisClipping": "Clipping", - "@a11yOpenAlbumByArtistTrackCount": { - "description": "Accessibility label for opening an album item with track count", + "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", + "@cancelDownloadContent": { + "description": "Dialog body when confirming cancellation of an active download", "placeholders": { - "albumName": { - "type": "String" - }, - "artistName": { + "trackName": { "type": "String" - }, - "trackCount": { - "type": "int" } } }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", - "@backupExtensionsRestoreFailed": { - "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "cancelDownloadKeep": "Keep", + "@cancelDownloadKeep": { + "description": "Dialog button - keep the active download (do not cancel)" + }, + "queueCancelledTitle": "Download cancelled", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, + "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", + "@metadataSaveFailedFfmpeg": { + "description": "Snackbar error when FFmpeg fails to write metadata" + }, + "metadataSaveFailedStorage": "Failed to write metadata back to storage", + "@metadataSaveFailedStorage": { + "description": "Snackbar error when writing metadata file back to storage fails" + }, + "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", + "@snackbarFolderPickerFailed": { + "description": "Snackbar shown when folder picker fails to open", "placeholders": { - "count": { - "type": "int" + "error": { + "type": "String" } } }, - "channelStable": "Estável", - "@channelStable": { - "description": "Update channel - stable releases" - }, - "tutorialSettingsTip3": "Customize app theme and appearance", - "setupAppDocumentsFolderSubtitle": "Recomendado - acessível através do aplicativo Arquivos", - "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", - "@a11yPlayTrackByArtist": { - "description": "Accessibility label for playing a local library track", + "notifDownloadingTrack": "Downloading {trackName}", + "@notifDownloadingTrack": { + "description": "Notification title while downloading a track", "placeholders": { "trackName": { "type": "String" - }, - "artistName": { - "type": "String" } } }, - "dialogRemove": "Remover", - "extensionVerificationClose": "Close", - "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", - "@bulkDownloadPlaylistsButton": { - "description": "Button label for bulk downloading selected playlists", + "notifFinalizingTrack": "Finalizing {trackName}", + "@notifFinalizingTrack": { + "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" } } }, - "optionsAutoFallbackSubtitle": "Tentar outros serviços se o download falhar", - "@optionsAutoFallbackSubtitle": { - "description": "Subtitle for auto fallback" - }, - "extensionPatternsCount": "{count} padrão(ões)", - "@libraryFilterLocal": { - "description": "Filter chip - show only local library items" - }, - "errorUrlNotRecognizedMessage": "Este link não é suportado. Verifique se a URL está correta e se uma extensão compatível está instalada.", - "@errorUrlNotRecognizedMessage": { - "description": "Error message - URL not recognized explanation" - }, - "@extensionVerificationBrowserSubtitleExternal": { - "description": "Subtitle when external browser is preferred for extension verification" - }, - "optionsArtistTagMode": "Modo de etiqueta de artista", - "libraryFilterMetadataComplete": "Complete metadata", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" + "notifEmbeddingMetadata": "Embedding metadata...", + "@notifEmbeddingMetadata": { + "description": "Notification body while embedding metadata into a downloaded track" }, - "@extensionsVersion": { - "description": "Extension version display", + "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", + "@notifAlreadyInLibraryCount": { + "description": "Notification title when track is already in library, with count", "placeholders": { - "version": { - "type": "String" + "completed": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "@downloadNetworkAnySubtitle": { - "description": "Subtitle for any-network option in picker" - }, - "optionsReplayGainSubtitleOn": "Analisar o volume e incorporar tags ReplayGain (EBU R128)", - "libraryScanning": "Scanning...", - "@libraryScanning": { - "description": "Status during scan" - }, - "cacheRefresh": "Refresh", - "@actionShuffle": { - "description": "Tooltip for shuffle playback action" - }, - "optionsEmbedLyricsSubtitle": "Salve letras sincronizadas ao lado das suas faixas baixadas", - "@optionsEmbedLyricsSubtitle": { - "description": "Subtitle for embed lyrics" - }, - "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", - "extensionEnterValue": "Enter value", - "@settingsDownloadNetworkAny": { - "description": "Network option - use any connection" + "notifAlreadyInLibrary": "Already in Library", + "@notifAlreadyInLibrary": { + "description": "Notification title when track is already in library" }, - "collectionLoved": "Loved", - "@collectionLoved": { - "description": "Custom folder for favorite tracks" + "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", + "@notifDownloadCompleteCount": { + "description": "Notification title when download is complete, with count", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } }, - "storeAddRepoTitle": "Adicionar repositório de extensões", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" + "notifDownloadComplete": "Download Complete", + "@notifDownloadComplete": { + "description": "Notification title when a single download is complete" }, - "collectionNoPlaylistsYet": "No playlists yet", - "@collectionNoPlaylistsYet": { - "description": "Empty state title when user has no playlists" + "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", + "@notifDownloadsFinished": { + "description": "Notification title when queue finishes with some failures", + "placeholders": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } }, - "libraryCleanupMissingFilesSubtitle": "Remove entries for files that no longer exist", - "@libraryCleanupMissingFilesSubtitle": { - "description": "Subtitle for cleanup button" + "notifVerificationRequiredTitle": "Verification required", + "@notifVerificationRequiredTitle": { + "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" }, - "folderOrganizationByArtist": "Por Artista", - "@folderOrganizationByArtist": { - "description": "Folder option - artist folders" + "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", + "@notifVerificationRequiredBody": { + "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, - "aboutTranslators": "Tradutores", - "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", - "editMetadataFieldTitle": "Title", - "@editMetadataFieldTitle": { - "description": "Chip label for title field in auto-fill selector" + "notifAllDownloadsComplete": "All Downloads Complete", + "@notifAllDownloadsComplete": { + "description": "Notification title when all downloads finish successfully" }, - "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", - "@downloadFilenameDescription": { - "description": "Description shown in filename format editor" + "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", + "@notifTracksDownloadedSuccess": { + "description": "Notification body for queue complete - how many tracks were downloaded", + "placeholders": { + "count": { + "type": "int" + } + } }, + "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -4882,371 +4926,430 @@ } } }, - "@libraryFolderNotExist": { - "description": "Error when folder doesn't exist" + "notifDownloadsCanceledTitle": "Downloads canceled", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" }, - "@playlistsCount": { - "description": "Playlist count display", + "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", + "@notifDownloadsCanceledBody": { + "description": "Notification body when downloads are canceled by the user", "placeholders": { "count": { "type": "int" } } }, - "@loadingSharedLink": { - "description": "Status when opening shared URL" - }, - "extensionServiceHealth": "Service health", - "@extensionServiceHealth": { - "description": "Extension capability label for service health checks" + "notifScanningLibrary": "Scanning local library", + "@notifScanningLibrary": { + "description": "Notification title while scanning local library" }, - "@collectionDeletePlaylistsMessage": { - "description": "Confirmation message for deleting selected playlists", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", + "@notifLibraryScanProgressWithTotal": { + "description": "Notification body for library scan progress when total is known", "placeholders": { - "count": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "percentage": { "type": "int" } } }, - "setupStorageDescription": "O SpotiFLAC precisa de permissão de armazenamento para salvar os seus arquivos de música baixados.", - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", - "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", - "appearanceThemeLight": "Claro", - "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", - "@queueEmptyHistorySubtitle": { - "description": "Empty state subtitle for download history" - }, - "backupRestoreFailed": "Failed to restore backup", - "@backupRestoreFailed": { - "description": "Snackbar when restore fails" - }, - "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", - "@queueFlacQueuedWithSkipped": { - "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", + "@notifLibraryScanProgressNoTotal": { + "description": "Notification body for library scan progress when total is unknown", "placeholders": { - "addedCount": { + "scanned": { "type": "int" }, - "skippedCount": { + "percentage": { "type": "int" } } }, - "@trackReplayGain": { - "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + "notifLibraryScanComplete": "Library scan complete", + "@notifLibraryScanComplete": { + "description": "Notification title when library scan finishes" }, - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", - "placeholders": { + "notifLibraryScanCompleteBody": "{count} tracks indexed", + "@notifLibraryScanCompleteBody": { + "description": "Notification body for library scan complete - number of indexed tracks", + "placeholders": { "count": { "type": "int" } } }, - "setupFolderChoose": "Escolher Pasta de Download", - "dialogDownloadAllTitle": "Download All", - "providerPriorityInfo": "Se uma faixa não estiver disponível no primeiro provedor, o aplicativo irá tentar automaticamente a próxima.", - "@providerPriorityInfo": { - "description": "Info tip about fallback behavior" - }, - "@dialogDiscardChanges": { - "description": "Dialog title - unsaved changes warning" - }, - "discographyNoAlbums": "Nenhum álbum disponível", - "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", - "cacheNoData": "No cached data", - "@cacheNoData": { - "description": "Label when cache category has no data" - }, - "tutorialStartDownloadSemantics": "Start download", - "@tutorialStartDownloadSemantics": { - "description": "Accessibility label for idle download button in tutorial demo" - }, - "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", - "aboutTitle": "Sobre", - "@cueSplitButton": { - "description": "Button text to start CUE splitting" - }, - "appearanceHistoryView": "Visualização do Histórico", - "audioAnalysisSampleRate": "Sample Rate", - "@settingsCache": { - "description": "Settings menu item - cache management" - }, - "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", - "cacheTrackLookup": "Track lookup cache", - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@downloadUsePrimaryArtistOnly": { - "description": "Setting - strip featured artists from folder name" - }, - "@regionCountryIN": { - "description": "Country name for SongLink region picker" - }, - "@libraryFilterQualityLossy": { - "description": "Filter option - lossy compressed audio" + "notifLibraryScanExcluded": "{count} excluded", + "@notifLibraryScanExcluded": { + "description": "Library scan complete suffix - excluded track count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionRefreshStatus": "Refresh status", - "notifAllDownloadsComplete": "All Downloads Complete", - "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", - "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", - "@editMetadataFieldDateHint": { - "description": "Hint text for the edit metadata date field" + "notifLibraryScanErrors": "{count} errors", + "@notifLibraryScanErrors": { + "description": "Library scan complete suffix - error count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "trackMetadataShare": "Compartilhar", - "@trackMetadataShare": { - "description": "Action button - share track" + "notifLibraryScanFailed": "Library scan failed", + "@notifLibraryScanFailed": { + "description": "Notification title when library scan fails" }, - "discographyDownloadAllSubtitle": "{count} faixas de {albumCount} lançamentos", - "settingsDonateSubtitle": "Buy the developer a coffee", - "libraryFilterDownloaded": "Downloaded", - "downloadNetworkAnySubtitle": "Use WiFi or mobile data", - "@cueSplitNoAudioFile": { - "description": "Error when CUE audio file is missing" + "notifLibraryScanCancelled": "Escaneamento de biblioteca cancelado", + "@notifLibraryScanCancelled": { + "description": "Notification title when library scan is cancelled by the user" }, "notifLibraryScanStopped": "", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", - "trackCopyLyrics": "Copiar letra", - "@trackCopyLyrics": { - "description": "Action - copy lyrics to clipboard" - }, - "regionCountryAU": "Australia", - "downloadAlbumFolderStructure": "Estrutura da Pasta de Álbum", - "downloadMusixmatchAuto": "Auto", - "actionDismiss": "Dismiss", - "storeFilterAll": "Tudo", - "extensionsDisabled": "Desabilitado", - "@logClearLogs": { - "description": "Clear button tooltip" - }, - "dialogDownloadAllMessage": "Download {count} tracks?", - "@optionsEmbedLyrics": { - "description": "Embed lyrics in audio files" - }, - "tutorialLibraryTitle": "Your Library", - "optionsCheckUpdatesSubtitle": "Notificar quando uma nova versão estiver disponível", - "@optionsCheckUpdatesSubtitle": { - "description": "Subtitle for update check" + "@notifLibraryScanStopped": { + "description": "Notification body when library scan is cancelled" }, - "collectionPlaylist": "Playlist", - "@collectionPlaylist": { - "description": "Single playlist label" + "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", + "@notifDownloadingUpdate": { + "description": "Notification title while downloading an app update", + "placeholders": { + "version": { + "type": "String" + } + } }, - "dateMonthsAgo": "{count} meses atrás", - "@dateMonthsAgo": { - "description": "Relative date - months ago", + "notifUpdateProgress": "{received} / {total} MB • {percentage}%", + "@notifUpdateProgress": { + "description": "Notification body showing update download progress", "placeholders": { - "count": { + "received": { + "type": "String" + }, + "total": { + "type": "String" + }, + "percentage": { "type": "int" } } }, - "@extensionRemoveButton": { - "description": "Button to uninstall extension" - }, - "collectionPlaylistRenamed": "Playlist renamed", - "collectionCreatePlaylist": "Create playlist", - "homeGoToAlbum": "Go to Album", - "@homeGoToAlbum": { - "description": "Context menu item to navigate to the album page" - }, - "folderOrganizationByArtistSubtitle": "Pasta separada para cada artista", - "@optionsClearHistory": { - "description": "Delete all download history" + "notifUpdateReady": "Update Ready", + "@notifUpdateReady": { + "description": "Notification title when app update download is complete" }, - "@searchAlbums": { - "description": "Search result category - albums" + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", + "@notifUpdateReadyBody": { + "description": "Notification body when app update is ready to install", + "placeholders": { + "version": { + "type": "String" + } + } }, - "@sectionDebug": { - "description": "Settings section header" + "notifUpdateFailed": "Update Failed", + "@notifUpdateFailed": { + "description": "Notification title when app update download fails" }, - "extensionsVersion": "Versão {version}", - "@navHome": { - "description": "Bottom navigation - Home tab" + "notifUpdateFailedBody": "Could not download update. Try again later.", + "@notifUpdateFailedBody": { + "description": "Notification body when app update download fails" }, - "@editMetadataFieldDate": { - "description": "Chip label for date field in auto-fill selector" + "searchTracks": "Tracks", + "@searchTracks": { + "description": "Search filter label - tracks" }, - "downloadUsePrimaryArtistOnly": "Primary artist only for folders", - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", - "@setupStorageGranted": { - "description": "Success message for storage permission" + "homeSearchHintDefault": "Paste supported URL or search...", + "@homeSearchHintDefault": { + "description": "Default placeholder for the main search field on Home" }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", - "a11ySelectAlbum": "Select album {albumName}", - "@a11ySelectAlbum": { - "description": "Accessibility label for selecting an album", + "homeSearchHintProvider": "Search with {providerName}...", + "@homeSearchHintProvider": { + "description": "Placeholder for the main search field when a provider is selected", "placeholders": { - "albumName": { + "providerName": { "type": "String" } } }, - "aboutMobileSource": "Código-fonte do app móvel", - "@aboutMobileSource": { - "description": "Link to mobile GitHub repo" + "homeImportCsvTooltip": "Import playlist (CSV, M3U)", + "@homeImportCsvTooltip": { + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, - "@extensionCustomUrlHandling": { - "description": "Extension detail section title for custom URL handling" + "homeChangeSearchProviderTooltip": "Change search provider", + "@homeChangeSearchProviderTooltip": { + "description": "Tooltip for the Home search provider picker" }, - "@downloadMusixmatchLanguageAuto": { - "description": "Subtitle when no language is set" + "actionPaste": "Paste", + "@actionPaste": { + "description": "Generic action - paste from clipboard" }, - "@cancelDownloadKeep": { - "description": "Dialog button - keep the active download (do not cancel)" + "tutorialSearchHint": "Paste or search...", + "@tutorialSearchHint": { + "description": "Placeholder shown in the tutorial search demo" }, - "libraryFilterSource": "Source", - "@libraryFilterSource": { - "description": "Filter section - source type" + "tutorialDownloadCompletedSemantics": "Download completed", + "@tutorialDownloadCompletedSemantics": { + "description": "Accessibility label for completed download state in tutorial demo" }, - "sectionStorageAccess": "Storage Access", - "logFilterBySeverity": "Filtrar registros por gravidade", - "libraryFolderNotExist": "Selected folder does not exist", - "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", - "albumFolderArtistAlbum": "Artista / Álbum", - "@albumFolderArtistAlbum": { - "description": "Album folder option" + "tutorialDownloadInProgressSemantics": "Download in progress", + "@tutorialDownloadInProgressSemantics": { + "description": "Accessibility label for active download state in tutorial demo" }, - "allFilesAccessDeniedMessage": "Permission was denied. Please enable 'All files access' manually in system settings.", - "@allFilesAccessDeniedMessage": { - "description": "Message when permission is permanently denied" + "tutorialStartDownloadSemantics": "Start download", + "@tutorialStartDownloadSemantics": { + "description": "Accessibility label for idle download button in tutorial demo" }, - "editMetadataSelectEmpty": "Empty only", - "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", - "@settingsAutoExportFailed": { - "description": "Setting toggle for auto-export" + "optionsEmbedMetadata": "Embed Metadata", + "@optionsEmbedMetadata": { + "description": "Settings toggle title for writing metadata into downloaded files" }, - "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", - "@tutorialSettingsTitle": { - "description": "Tutorial settings page title" + "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", + "@optionsEmbedMetadataSubtitleOn": { + "description": "Subtitle when metadata embedding is enabled" }, - "libraryFilterMetadataMissingGenre": "Missing genre", - "@appearanceSelectAccentColor": { - "description": "Accessibility label for picking an accent color", - "placeholders": { - "hex": { - "type": "String" - } - } + "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", + "@optionsEmbedMetadataSubtitleOff": { + "description": "Subtitle when metadata embedding is disabled" }, - "setupFolderDescription": "Selecione uma pasta onde as suas músicas baixadas serão salvas.", - "extensionDetailsTags": "Tags", - "unknownArtist": "Unknown Artist", - "trackFetchOnlineLyrics": "Buscar online", - "snackbarNoActionDefined": "No action defined for this button", - "@snackbarNoActionDefined": { - "description": "Snackbar when an extension button has no action configured" + "trackCoverNoEmbeddedArt": "No embedded album art found", + "@trackCoverNoEmbeddedArt": { + "description": "Message shown when a track file has no embedded cover art" }, - "downloadAllCount": "Baixar Todos ({count})", - "@downloadAllCount": { - "description": "Download all button with count", + "trackCoverReplace": "Replace Cover", + "@trackCoverReplace": { + "description": "Button label for replacing selected cover art" + }, + "trackCoverPick": "Pick Cover", + "@trackCoverPick": { + "description": "Button label for selecting cover art" + }, + "trackCoverClearSelected": "Clear selected cover", + "@trackCoverClearSelected": { + "description": "Tooltip for clearing the newly selected cover art" + }, + "trackCoverCurrent": "Current cover", + "@trackCoverCurrent": { + "description": "Label for the currently embedded cover preview" + }, + "trackCoverSelected": "Selected cover", + "@trackCoverSelected": { + "description": "Label for the newly selected cover preview" + }, + "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", + "@trackCoverReplaceNotice": { + "description": "Notice shown when a new cover has been selected but not saved yet" + }, + "trackCoverResolution": "Cover resolution", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" + }, + "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" + }, + "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", + "@trackCoverResizeFailed": { + "description": "Error shown when resizing cover art before saving metadata fails" + }, + "actionStop": "Stop", + "@actionStop": { + "description": "Generic action - stop" + }, + "queueFinalizingDownload": "Finalizing download", + "@queueFinalizingDownload": { + "description": "Accessibility label for a queue item that is finalizing" + }, + "queueDownloadNext": "Download next", + "@queueDownloadNext": { + "description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it" + }, + "queueMoveUp": "Move up", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" + }, + "queueMoveDown": "Move down", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" + }, + "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" + }, + "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" + }, + "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" + }, + "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" + }, + "nowPlayingRepeatOff": "Repeat off", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" + }, + "nowPlayingRepeatAll": "Repeat all", + "@nowPlayingRepeatAll": { + "description": "Repeat toggle tooltip when the whole queue repeats" + }, + "nowPlayingRepeatOne": "Repeat one", + "@nowPlayingRepeatOne": { + "description": "Repeat toggle tooltip when the current track repeats" + }, + "queueNetworkFailedOffline": "{count} downloads failed while offline", + "@queueNetworkFailedOffline": { + "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", "placeholders": { "count": { "type": "int" } } }, - "downloadedAlbumDiscHeader": "Disco {discNumber}", - "@backupInvalidFile": { - "description": "Snackbar when the chosen file is not a valid backup" + "queueDownloadedFileMissing": "Downloaded file missing", + "@queueDownloadedFileMissing": { + "description": "Accessibility label when a downloaded file is missing from disk" }, - "@extensionHooksAvailable": { - "description": "Post-processing hooks count", + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." + }, + "queueDownloadCompleted": "Download completed", + "@queueDownloadCompleted": { + "description": "Accessibility label for completed download state in queue" + }, + "queueRateLimitTitle": "Service rate limited", + "@queueRateLimitTitle": { + "description": "Title shown on a failed queue item when the download service rate limits requests" + }, + "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", + "@queueRateLimitMessage": { + "description": "Explanation shown on a failed queue item when the download service rate limits requests" + }, + "appearanceSelectAccentColor": "Select accent color {hex}", + "@appearanceSelectAccentColor": { + "description": "Accessibility label for picking an accent color", "placeholders": { - "count": { - "type": "int" + "hex": { + "type": "String" } } }, - "@logIssueTrackNotFoundSuggestion": { - "description": "Diagnostic badge suggestion when a track is unavailable" + "logAutoScrollOn": "Auto-scroll ON", + "@logAutoScrollOn": { + "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "@snackbarFileNotFound": { - "description": "Snackbar - file doesn't exist" + "logAutoScrollOff": "Auto-scroll OFF", + "@logAutoScrollOff": { + "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "extensionHealthOnline": "Online", - "@extensionHealthOnline": { - "description": "Extension service health status - online" + "logCopyLogs": "Copy logs", + "@logCopyLogs": { + "description": "Tooltip for copying logs" }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", - "trackOptionRemoveFromWishlist": "Remove from Wishlist", - "extensionsFallbackTitle": "Extensões alternativas", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" + "logClearSearch": "Clear search", + "@logClearSearch": { + "description": "Tooltip for clearing the log search field" }, - "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", - "@albumFolderAlbumOnly": { - "description": "Album folder option" + "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", + "@logIssueIspBlockingLabel": { + "description": "Diagnostic badge label when ISP blocking is detected" }, - "@albumFolderYearAlbumSubtitle": { - "description": "Folder structure example" + "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", + "@logIssueIspBlockingDescription": { + "description": "Diagnostic badge description for ISP blocking" }, - "downloadedAlbumDeleteSelected": "Apagar Selecionados", - "selectionSelectPlaylistsToDelete": "Select playlists to delete", - "@selectionSelectPlaylistsToDelete": { - "description": "Hint shown when no playlists are selected for deletion" + "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", + "@logIssueIspBlockingSuggestion": { + "description": "Diagnostic badge suggestion for ISP blocking" }, - "storeAddRepoDescription": "Insira a URL de um repositório do GitHub que contenha um arquivo registry.json para navegar e instalar extensões.", - "appearanceThemeDark": "Escuro", - "downloadedAlbumTapToSelect": "Toque nas faixas para selecionar", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } + "logIssueRateLimitedLabel": "RATE LIMITED", + "@logIssueRateLimitedLabel": { + "description": "Diagnostic badge label when the service rate limits requests" }, - "@backupRestored": { - "description": "Snackbar after a successful restore" + "logIssueRateLimitedDescription": "Too many requests to the service", + "@logIssueRateLimitedDescription": { + "description": "Diagnostic badge description for rate limiting" }, - "nowPlayingLibraryEmpty": "Your library is empty", - "@nowPlayingLibraryEmpty": { - "description": "Snackbar when shuffle library is requested but library has no tracks" + "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", + "@logIssueRateLimitedSuggestion": { + "description": "Diagnostic badge suggestion for rate limiting" }, - "editMetadataAutoFillNoResults": "No matching metadata found online", - "updateDownloading": "Baixando...", - "trackLyricsSource": "Fonte: {source}", - "logFilterLevel": "Nível", - "logNoLogsYet": "Ainda não há registros", - "cacheSizeOnly": "{size}", - "@cacheSizeOnly": { - "description": "Cache size only", - "placeholders": { - "size": { - "type": "String" - } - } + "logIssueNetworkErrorLabel": "NETWORK ERROR", + "@logIssueNetworkErrorLabel": { + "description": "Diagnostic badge label for generic network errors" }, - "trackOpenInService": "Open in {serviceName}", - "@trackOpenInService": { - "description": "Button label to open a track in a named music service", + "logIssueNetworkErrorDescription": "Connection issues detected", + "@logIssueNetworkErrorDescription": { + "description": "Diagnostic badge description for generic network errors" + }, + "logIssueNetworkErrorSuggestion": "Check your internet connection", + "@logIssueNetworkErrorSuggestion": { + "description": "Diagnostic badge suggestion for generic network errors" + }, + "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", + "@logIssueTrackNotFoundLabel": { + "description": "Diagnostic badge label when a track is unavailable" + }, + "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", + "@logIssueTrackNotFoundDescription": { + "description": "Diagnostic badge description when a track is unavailable" + }, + "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", + "@logIssueTrackNotFoundSuggestion": { + "description": "Diagnostic badge suggestion when a track is unavailable" + }, + "clickableLookingUpArtist": "Looking up artist...", + "@clickableLookingUpArtist": { + "description": "Snackbar shown while clickable artist metadata is being resolved" + }, + "clickableInformationUnavailable": "{type} information not available", + "@clickableInformationUnavailable": { + "description": "Snackbar shown when clickable metadata cannot open a destination", "placeholders": { - "serviceName": { + "type": { "type": "String" } } }, - "@cacheLibraryCoverDesc": { - "description": "Description of what library cover cache contains" + "extensionDetailsTags": "Tags", + "@extensionDetailsTags": { + "description": "Section title for extension tags" }, - "libraryClearConfirmMessage": "This will remove all scanned tracks from your library. Your actual music files will not be deleted.", - "@dialogImportPlaylistMessage": { - "description": "Dialog message - import playlist confirmation", + "extensionDetailsInformation": "Information", + "@extensionDetailsInformation": { + "description": "Section title for extension metadata information" + }, + "extensionUtilityFunctions": "Utility Functions", + "@extensionUtilityFunctions": { + "description": "Capability label for utility-only extensions" + }, + "actionDismiss": "Dismiss", + "@actionDismiss": { + "description": "Generic action - dismiss" + }, + "setupChangeFolderTooltip": "Change folder", + "@setupChangeFolderTooltip": { + "description": "Tooltip for editing the selected download folder" + }, + "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", + "@a11yOpenTrackByArtist": { + "description": "Accessibility label for opening a track item", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" } } }, - "extensionsHomeFeedAuto": "Auto", - "searchEmptyResultSubtitle": "Tente outra palavra-chave", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "dateToday": "Hoje", "a11yOpenItem": "Open {itemType} {name}", "@a11yOpenItem": { "description": "Accessibility label for opening a generic item", @@ -5259,844 +5362,1187 @@ } } }, - "audioAnalysisBitDepth": "Bit Depth", - "editMetadataFieldTrackTotal": "Track Total", - "@editMetadataFieldTrackTotal": { - "description": "Label for total tracks field in the edit metadata sheet" - }, - "@editMetadataFieldDiscTotal": { - "description": "Label for total discs field in the edit metadata sheet" - }, - "replayGainBatchConfirmMessage": "Analisar o volume e gravar etiquetas ReplayGain em {count} faixa(s)?", - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", - "@notifDownloadingUpdate": { - "description": "Notification title while downloading an app update", + "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", + "@a11yOpenItemCount": { + "description": "Accessibility label for opening a grouped item with count", "placeholders": { - "version": { + "title": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@csvImportTracks": { - "description": "Label shown in quality picker for CSV import", + "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", + "@a11yOpenAlbumByArtistTrackCount": { + "description": "Accessibility label for opening an album item with track count", "placeholders": { - "count": { + "albumName": { + "type": "String" + }, + "artistName": { + "type": "String" + }, + "trackCount": { "type": "int" } } }, - "trackEditMetadata": "Edit Metadata", - "discographyDownloadAll": "Baixar Tudo", - "@discographyDownloadAll": { - "description": "Option - download entire discography" - }, - "@editMetadataFieldAlbum": { - "description": "Chip label for album field in auto-fill selector" - }, - "albumFolderArtistAlbumSubtitle": "Álbuns/Nome do Artista/Nome do Álbum/", - "extensionHealthServiceUnknown": "Service status unknown", - "navHome": "Início", - "queueDownloadStarting": "Starting...", - "@dialogRemoveExtension": { - "description": "Dialog title - uninstall extension" - }, - "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", - "@appearanceAmoledDark": { - "description": "Theme option - pure black" - }, - "qualityHiResFlac": "FLAC de alta resolução", - "selectionSelected": "{count} selecionado(s)", - "extensionDetailsInformation": "Information", - "@extensionDetailsInformation": { - "description": "Section title for extension metadata information" - }, - "discographyDownload": "Baixar Discografia", - "editMetadataFieldCopyright": "Copyright", - "@setupOpenSettings": { - "description": "Button to open system settings" - }, - "libraryFilterSort": "Sort", - "cacheLibraryCoverDesc": "Cover art extracted from local music files. Will re-extract on next scan.", - "dialogRemoveExtension": "Remover Extensão", - "backupExportSectionTitle": "Create backup", - "downloadEmbedLyricsDisabled": "Enable metadata embedding first", - "openInOtherServices": "Open in Other Services", - "actionSelectAll": "Selecionar Tudo", - "settingsDownloadNetworkSubtitle": "Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.", - "downloadFolderOrganization": "Organização de Pastas", - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", - "@tutorialWelcomeTip2": { - "description": "Tutorial welcome tip 2" - }, - "selectionAllSelected": "Todas as faixas selecionadas", - "@selectionAllSelected": { - "description": "Status - all items selected" - }, - "settingsLogsSubtitle": "Ver logs do app para depuração", - "albumFolderYearAlbumSubtitle": "Álbuns/[2005] Nome do Álbum/", - "cancelDownloadKeep": "Keep", - "optionsDetailedLoggingOn": "Registros detalhados estão sendo gravados", - "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" + "a11yTrackByArtist": "{trackName} by {artistName}", + "@a11yTrackByArtist": { + "description": "Accessibility label for a queue or list track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "regionCountryJP": "Japan", - "notifUpdateFailed": "Update Failed", - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", - "@trackLyricsSaved": { - "description": "Snackbar after lyrics saved", + "a11ySelectAlbum": "Select album {albumName}", + "@a11ySelectAlbum": { + "description": "Accessibility label for selecting an album", "placeholders": { - "fileName": { + "albumName": { "type": "String" } } }, - "downloadLocationSubtitle": "Choose where to save your downloaded tracks", - "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", - "lyricsProvidersDisabledSection": "Disabled ({count})", - "@dateDaysAgo": { - "description": "Relative date - days ago", + "a11yOpenAlbum": "Open album {albumName}", + "@a11yOpenAlbum": { + "description": "Accessibility label for opening an album", "placeholders": { - "count": { - "type": "int" + "albumName": { + "type": "String" } } }, - "librarySourceLocal": "Local", - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", - "sectionService": "Serviço", - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", - "@lyricsProviderQqMusicDesc": { - "description": "Description for QQ Music provider" + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" }, - "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", - "selectionTapPlaylistsToSelect": "Tap playlists to select", - "notifUpdateFailedBody": "Could not download update. Try again later.", - "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", - "artistPopular": "Populares", - "extensionRemoveButton": "Remover Extensão", - "allFilesAccessEnabledSubtitle": "Can write to any folder", - "@allFilesAccessEnabledSubtitle": { - "description": "Subtitle when all files access is enabled" + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" }, - "extensionsSearchProvider": "Provedor de Pesquisa", - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", - "selectionBatchConvertConfirmTitle": "Batch Convert", - "extensionMetadataProvider": "Provedor de Metadados", - "queueDownloadedFileMissing": "Downloaded file missing", - "logClearLogs": "Limpar registros", - "@downloadAppleQqMultiPerson": { - "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", - "@tutorialWelcomeTip1": { - "description": "Tutorial welcome tip 1" + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" }, - "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", - "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", - "@regionCountryUS": { - "description": "Country name for SongLink region picker" + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" }, - "trackArtist": "Artista", - "extensionCustomUrlHandling": "Custom URL Handling", - "appearanceDynamicColorSubtitle": "Usar cores do seu papel de parede", - "@appearanceDynamicColorSubtitle": { - "description": "Subtitle for dynamic color" + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" }, - "searchSortDefault": "Padrão", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" + "settingsApp": "App", + "@settingsApp": { + "description": "Settings menu item - app settings" }, - "albumFolderStructureDescription": "Choose how album folders are structured", - "@albumFolderStructureDescription": { - "description": "Album folder structure picker description" + "settingsAppSubtitle": "Updates, data, extension repo, debug", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" }, - "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", - "@libraryBuiltInPreviewPlayerSubtitle": { - "description": "Subtitle for built-in preview player option" + "sectionMetadataProviders": "Providers", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" }, - "storageModeAppFolder": "App Folder (Recommended)", - "@actionPause": { - "description": "Action button - pause download" + "sectionDuplicates": "Duplicates", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" }, - "actionPaste": "Paste", - "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", - "downloadNativeWorker": "Native download worker", - "releaseTypeEp": "EP", - "@releaseTypeEp": { - "description": "Badge label for EP releases" + "sectionLyricsProviderOptions": "Provider Options", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", - "cacheRefreshStats": "Refresh stats", - "collectionPlaylistChangeCover": "Change cover image", - "@collectionPlaylistChangeCover": { - "description": "Bottom sheet action to pick a custom cover image for a playlist" + "metadataProvidersTitle": "Metadata Provider Priority", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" }, - "optionsClearHistory": "Limpar Histórico de Download", - "trackGenre": "Género", - "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", - "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", - "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", - "libraryFilterMetadataMissingArtist": "Missing artist", - "extensionsNoCustomSearch": "Nenhuma extensão com pesquisa personalizada", - "@extensionsTitle": { - "description": "Extensions page title" + "metadataProvidersSubtitle": "Drag to set search and metadata source order", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" }, - "extensionDownloadProvider": "Provedor de Download", - "@extensionDownloadProvider": { - "description": "Capability - provides downloads" + "downloadDeduplication": "Skip Duplicate Downloads", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" }, - "lyricsMode": "Modo de Letras", - "aboutReportIssueSubtitle": "Reporte qualquer problema que encontrar", - "@downloadSeparateSinglesFolder": { - "description": "Setting - separate folder for singles" + "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" }, - "appearanceAmoledDark": "Escuro AMOLED", - "logIssueNetworkErrorDescription": "Connection issues detected", - "folderOrganizationByArtistAlbumSubtitle": "Pastas aninhadas para artista e álbum", - "@libraryForceFullScanSubtitle": { - "description": "Subtitle for force full scan button" + "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", + "@downloadDeduplicationWithQualityVariants": { + "description": "Deduplication subtitle when separate quality versions are allowed" }, - "setupGrantPermission": "Conceder Permissão", - "lyricsProvidersDescription": "Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.", - "dateDaysAgo": "{count} dias atrás", - "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", - "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" }, - "nowPlayingDetails": "Details", - "collectionWishlistEmptyTitle": "Wishlist is empty", - "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", - "@snackbarExtensionUpdatedVersion": { - "description": "Snackbar after updating an extension from the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - }, - "version": { - "type": "String" - } - } + "downloadQualityVariants": "Allow different quality versions", + "@downloadQualityVariants": { + "description": "Setting to retain multiple quality versions of the same track" }, - "extensionHealthServiceDegraded": "Service degraded", - "selectionConvertNoConvertible": "No convertible tracks selected", - "setupStorageGranted": "Permissão de Armazenamento Concedida!", - "downloadAllowLocalNetwork": "Allow Local Network Access", - "nowPlayingNoLyrics": "No lyrics in this file", - "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", - "@selectionDeleteTracksCount": { - "description": "Button label for deleting selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", + "@downloadQualityVariantsDescription": { + "description": "Description for retaining multiple quality versions" }, - "@libraryForceFullScan": { - "description": "Button to force a complete rescan of library" + "trackOptionDownloadQualityVariant": "Download another quality", + "@trackOptionDownloadQualityVariant": { + "description": "Track menu action to download another quality version" }, - "notifLibraryScanExcluded": "{count} excluded", - "@aboutPaxsenixSubtitle": { - "description": "Subtitle for Paxsenix special thanks entry on the about page" + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" }, - "setupChangeFolderTooltip": "Change folder", - "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", - "@logIssueIspBlockingDescription": { - "description": "Diagnostic badge description for ISP blocking" + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" }, - "libraryClear": "Clear Library", - "collectionRemoveFromPlaylist": "Remove from playlist", - "@collectionRemoveFromPlaylist": { - "description": "Tooltip for removing track from playlist" + "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", + "@editMetadataFieldDateHint": { + "description": "Hint text for the edit metadata date field" }, - "backupIncludeSecrets": "Include extension credentials", - "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", - "storeCategoryMetadata": "Metadata", - "@trackLyricsEmbedded": { - "description": "Snackbar - lyrics saved to file" + "editMetadataFieldTrackTotal": "Track Total", + "@editMetadataFieldTrackTotal": { + "description": "Label for total tracks field in the edit metadata sheet" }, "editMetadataFieldDiscTotal": "Disc Total", - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" + "@editMetadataFieldDiscTotal": { + "description": "Label for total discs field in the edit metadata sheet" }, - "libraryFilterLocal": "Local", - "tutorialDownloadInProgressSemantics": "Download in progress", - "searchSortDurationLong": "Duração (mais longa)", - "@appearanceLanguage": { - "description": "Language setting title" + "editMetadataFieldComposer": "Composer", + "@editMetadataFieldComposer": { + "description": "Label for composer field in the edit metadata sheet" }, - "libraryAbout": "About Local Library", - "@libraryAbout": { - "description": "Section header for about info" + "editMetadataFieldComment": "Comment", + "@editMetadataFieldComment": { + "description": "Label for comment field in the edit metadata sheet" }, - "cueSplitNoAudioFile": "Audio file not found for this CUE sheet", - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", - "appearanceSelectAccentColor": "Select accent color {hex}", - "@homeAlbumInfoUnavailable": { - "description": "Snackbar when album info cannot be loaded" + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" }, - "trackReplayGain": "Reanalisar ReplayGain", - "downloadSeparateSinglesFolder": "Pasta de Singles Separada", - "trackAlbumArtist": "Artista do álbum", - "qualityFlacLossless": "FLAC sem perdas", - "@extensionVerificationHelpMessageWaiting": { - "description": "Dialog message when verification may need manual browser help" + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" }, - "tutorialSettingsTitle": "Customize Your Experience", - "extensionActionFailed": "Action failed", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", - "trackCoverNoEmbeddedArt": "No embedded album art found", - "@trackCoverNoEmbeddedArt": { - "description": "Message shown when a track file has no embedded cover art" + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", - "setupStorageAccessMessageAndroid11": "O Android 11+ requer a permissão \"Acesso a Todos os Arquivos\" para salvar arquivos na pasta de download escolhida.", - "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", - "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", - "optionsPrimaryProvider": "Provedor Primário", - "@optionsPrimaryProvider": { - "description": "Main search provider setting" + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" }, - "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", - "collectionAddedToLoved": "\"{trackName}\" added to Loved", - "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", - "homeAlbumInfoUnavailable": "Album info not available", - "settingsLyrics": "Lyrics", - "extensionVerificationBrowserExternal": "External", - "regionCountryIN": "India", - "extensionHealthUnknown": "Unknown", - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", - "settingsAutoExportFailed": "Auto-export failed downloads", - "logFilterSection": "Filtro", - "dialogDiscardChanges": "Descartar Alterações?", - "@qualityHiResFlacSubtitle": { - "description": "Technical spec for hi-res" + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" }, - "searchTracks": "Tracks", - "searchAlbums": "Álbuns", - "trackConvertFormat": "Convert Format", - "metadataProviderPriorityTitle": "Prioridade de Metadados", - "libraryFolderHint": "Tap to select folder", - "downloadedAlbumDeleteMessage": "Excluir {count} {count, plural, =1{faixa} other{faixas}} deste álbum?\n\nIsso também excluirá os arquivos do armazenamento.", - "@downloadedAlbumDeleteMessage": { - "description": "Delete confirmation with count", + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, + "editMetadataAdvanced": "Advanced", + "@editMetadataAdvanced": { + "description": "Expandable section label for advanced metadata fields" + }, + "libraryFilterMetadataMissingTrackNumber": "Missing track number", + "@libraryFilterMetadataMissingTrackNumber": { + "description": "Filter option - items missing track number" + }, + "libraryFilterMetadataMissingDiscNumber": "Missing disc number", + "@libraryFilterMetadataMissingDiscNumber": { + "description": "Filter option - items missing disc number" + }, + "libraryFilterMetadataMissingArtist": "Missing artist", + "@libraryFilterMetadataMissingArtist": { + "description": "Filter option - items missing artist" + }, + "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", + "@libraryFilterMetadataIncorrectIsrcFormat": { + "description": "Filter option - items with an invalid ISRC format" + }, + "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, + "libraryFilterMetadataMissingLabel": "Missing label", + "@libraryFilterMetadataMissingLabel": { + "description": "Filter option - items missing record label" + }, + "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", + "@collectionDeletePlaylistsMessage": { + "description": "Confirmation message for deleting selected playlists", "placeholders": { "count": { "type": "int" } } }, - "trackAlbum": "Álbum", - "updateAvailable": "Atualização Disponível", - "optionsEmbedLyrics": "Incorporar Letras", - "trackReEnrichProgress": "Re-enriching metadata...", - "@trackReEnrichProgress": { - "description": "Snackbar while re-enriching metadata" - }, - "audioAnalysisPeak": "Peak", - "@audioAnalysisPeak": { - "description": "Peak amplitude metric label" - }, - "optionsExtensionStoreSubtitle": "Mostrar aba de repositório na navegação", - "settingsTitle": "Configurações", - "@settingsAbout": { - "description": "Settings section - app info" + "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", + "@collectionPlaylistsDeleted": { + "description": "Snackbar after deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheExploreFeed": "Explore feed cache", - "@dialogDownloadPlaylistsMessage": { - "description": "Dialog message for bulk playlist download confirmation", + "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", + "@collectionAddedTracksToPlaylist": { + "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { - "trackCount": { + "count": { "type": "int" }, - "playlistCount": { - "type": "int" + "playlistName": { + "type": "String" } } }, - "downloadedAlbumSelectedCount": "{count} selecionado(s)", - "downloadAskQualitySubtitle": "Mostrar seletor de qualidade para cada download", - "filenameShowAdvancedTags": "Exibir etiquetas avançadas", - "@filenameShowAdvancedTags": { - "description": "Toggle label for showing advanced filename tags" - }, - "@editMetadataFieldComment": { - "description": "Label for comment field in the edit metadata sheet" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", - "cacheLibraryCover": "Library cover cache", - "actionShuffle": "Shuffle", - "backupCreated": "Backup created", - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "actionCreate": "Create", - "snackbarAddedToQueueGeneric": "Added to queue", - "downloadedAlbumDownloadedCount": "{count} baixado(s)", - "snackbarLoadingCueSheet": "Loading CUE sheet...", - "@trackCoverClearSelected": { - "description": "Tooltip for clearing the newly selected cover art" - }, - "aboutOriginalCreator": "Criador do SpotiFLAC original", - "a11yTrackByArtist": "{trackName} by {artistName}", - "audioAnalysisDynamicRange": "Dynamic Range", - "homeChangeSearchProviderTooltip": "Change search provider", - "loadingSharedLink": "Carregando link compartilhado...", - "lyricsModeEmbedSubtitle": "Letra armazenada nos metadados da FLAC", - "setupNotificationBackgroundDescription": "Seja notificado sobre o progresso e conclusão do download. Isso ajuda você a acompanhar os downloads quando o app estiver em segundo plano.", - "snackbarViewQueue": "Ver Fila", - "@audioAnalysisDuration": { - "description": "Duration metric label" - }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", - "backupRestored": "Backup restored successfully", - "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", - "@trackConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless conversion of a single file", + "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", + "@collectionAddedTracksToPlaylistWithExisting": { + "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { - "sourceFormat": { - "type": "String" + "count": { + "type": "int" }, - "targetFormat": { + "playlistName": { "type": "String" }, - "quality": { - "type": "String" + "alreadyCount": { + "type": "int" } } }, - "discographySelectAlbumsSubtitle": "Escolher álbuns ou singles específicos", - "@discographySelectAlbumsSubtitle": { - "description": "Subtitle for select albums option" - }, - "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", - "errorUrlFetchFailed": "Falha ao carregar o conteúdo deste link. Por favor, tente novamente.", - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", - "dialogSave": "Salvar", - "trackReEnrichSearching": "Searching metadata online...", - "regionCountryUS": "United States", - "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", - "downloadFilenameFormat": "Formato do Nome do Arquivo", - "cueSplitTitle": "Split CUE Sheet", - "settingsAppSubtitle": "Updates, data, extension repo, debug", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "@setupPermissionRequiredMessage": { - "description": "Generic permission required message", + "itemCount": "{count} {count, plural, =1{item} other{items}}", + "@itemCount": { + "description": "Generic item count label", "placeholders": { - "permissionType": { - "type": "String" + "count": { + "type": "int" } } }, - "errorMissingExtensionSource": "Não é possível carregar {item}: faltando a fonte da extensão", - "albumFolderAlbumOnlySubtitle": "Albums/Nome do Álbum/", - "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", - "extensionVerificationHelpTitleManual": "Open verification manually", - "dialogDiscard": "Descartar", - "storageModeSaf": "", - "errorRateLimited": "Tráfico Limitado (Rate Limited)", - "downloadSelectQuality": "Selecionar Qualidade", - "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", - "collectionFoldersTitle": "My folders", - "progressFetchingMetadata": "Buscando metadados... {current}/{total}", - "settingsDownloadNetworkAny": "WiFi + Mobile Data", - "audioAnalysisDuration": "Duration", - "audioAnalysisAnalyzing": "Analyzing audio...", - "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", - "editMetadataFieldDiscNum": "Disc #", - "@editMetadataFieldDiscNum": { - "description": "Chip label for disc number field in auto-fill selector" - }, - "@noTracksFoundForAlbum": { - "description": "Empty state message when an album has no tracks" - }, - "previewPlay": "Reproduzir prévia", - "setupPermissionRequiredMessage": "A permissão {permissionType} é necessária para a melhor experiência. Você pode alterar isso mais tarde em Configurações.", - "aboutVersion": "Versão", - "qualityHiResFlacSubtitle": "24-bit / até 96kHz", - "audioAnalysisSamples": "Samples", - "libraryFilterQualityHiRes": "Hi-Res (24bit)", - "sectionMetadataProviders": "Providers", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "trackCopyright": "Direitos Autorais", - "libraryForceFullScanSubtitle": "Rescan all files, ignoring cache", - "trackCopiedToClipboard": "Copiado para a área de transferência", - "optionsEmbedMetadata": "Embed Metadata", - "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", - "@collectionAddedTracksToPlaylistWithExisting": { - "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", + "@trackReEnrichSuccessWithFailures": { + "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", "placeholders": { - "count": { + "successCount": { "type": "int" }, - "playlistName": { - "type": "String" + "total": { + "type": "int" }, - "alreadyCount": { + "failedCount": { "type": "int" } } }, - "storeCategoryIntegration": "Integration", - "storeClearFilters": "Limpar filtros", - "navSettings": "Configurações", - "@homeRecent": { - "description": "Section header for recent searches" + "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "@selectionDeleteTracksCount": { + "description": "Button label for deleting selected tracks", + "placeholders": { + "count": { + "type": "int" + } + } }, - "sectionApp": "Aplicativo", - "@sectionLanguage": { - "description": "Settings section header for language" + "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", + "@queueDownloadSpeedStatus": { + "description": "Queue status while downloading with speed", + "placeholders": { + "speed": { + "type": "String" + } + } }, - "downloadFilterContributingDisabled": "Full Album Artist string used", - "albumFolderArtistAlbumSinglesSubtitle": "Artista/Álbum/ e Artista/Singles/", - "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", - "lyricsProvidersSaved": "Lyrics provider priority saved", - "@trackReplayGainFailed": { - "description": "Snackbar message when ReplayGain scan/write fails" + "queueDownloadStarting": "Starting...", + "queueCheckingDownloadSession": "Checking download session...", + "queueResolvingDownloadMetadata": "Resolving track metadata...", + "queueResolvingDownloadStream": "Preparing audio stream...", + "queueWaitingForVerification": "Waiting for verification...", + "queueResumingAfterVerification": "Resuming after verification...", + "@queueDownloadStarting": { + "description": "Queue status before download progress is available" }, - "trackTrackName": "Nome da faixa", - "homeRecent": "Recentes", - "recentEmpty": "No recent items yet", - "cacheClearAll": "Clear all cache", - "trackReEnrichFieldReleaseInfo": "Date & ISRC", - "regionCountryMX": "Mexico", - "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", - "editMetadataFieldAlbum": "Album", - "settingsAbout": "Sobre", - "libraryFilterTitle": "Filters", - "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", - "extensionHooksAvailable": "{count} gancho(s) disponíveis", - "backupContentsSettings": "App settings", - "trackLyricsEmbedded": "Letras incorporadas com sucesso", - "optionsUpdateChannelPreview": "Obter versões de prévia", - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "libraryForceFullScan": "Force Full Scan", - "snackbarProviderPrioritySaved": "Prioridade de provedor salva", - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", - "extensionServiceStatus": "Service Status", - "dateWeeksAgo": "{count} semanas atrás", - "historyFilterSingles": "Singles", - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", - "trackLyricsSaved": "Lyrics saved to {fileName}", - "cacheClearAllConfirmTitle": "Clear all cache?", - "noTracksFoundForAlbum": "No tracks found for this album", - "sectionLanguage": "Idioma", - "@logIssueTrackNotFoundDescription": { - "description": "Diagnostic badge description when a track is unavailable" + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." }, - "setupSelectFolder": "Seleccionar Pasta", - "dateYesterday": "Ontem", - "collectionAddToPlaylist": "Add to playlist", - "snackbarUnsupportedAudioFormat": "Unsupported audio format", - "libraryScanCancelled": "Scan cancelled", - "appearanceLanguage": "Idioma do aplicativo", - "extensionsTitle": "Extensões", - "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", - "permissionNotification": "Notification", - "notifUpdateReady": "Update Ready", - "lyricsModeDescription": "Escolha como as letras são salvas com os seus downloads", - "downloadFrom": "Baixar De", - "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", - "cueSplitSplitting": "Splitting CUE sheet... ({current}/{total})", - "trackOptionAddToWishlist": "Add to Wishlist", - "settingsBackup": "Backup & Restore", - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", - "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", - "extensionsNoDownloadProvider": "Nenhuma extensão com provedor de download", - "libraryFilterSortGenreAsc": "Genre (A-Z)", - "trackReplayGainFailed": "Falha ao adicionar etiquetas ReplayGain", - "collectionPlaylistRemoveCover": "Remove cover image", - "storeEmptyNoResults": "Nenhuma extensão encontrada", - "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", - "editMetadataFieldComment": "Comment", - "settingsMetadata": "Metadata", - "settingsCache": "Storage & Cache", - "providerPriorityFallbackExtensionsHint": "Apenas extensões ativadas com capacidade de provedor de download são listadas aqui.", - "libraryFilterAll": "All", - "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", - "extensionsProviderPrioritySection": "Prioridade de Provedor", - "storeChangeRepoTooltip": "Mudar repositório", - "snackbarFailedToInstall": "Falha ao instalar a extensão", - "libraryScanSubtitle": "Scan for audio files", - "snackbarExtensionInstalled": "{extensionName} instalada.", - "setupOpenSettings": "Abrir Configurações", - "extensionsInstalledSection": "Extensões Instaladas", - "aboutLinks": "Links", - "trackCoverClearSelected": "Clear selected cover", - "libraryAutoScanWeekly": "Weekly", - "downloadMusixmatchLanguageAuto": "Auto (original language)", - "optionsDefaultSearchTab": "Aba de pesquisa padrão", - "downloadPrimaryArtistOnlyOn": "Primary only: On", - "folderOrganizationDescription": "Organizar arquivos baixados em pastas", - "@folderOrganizationDescription": { - "description": "Folder organization sheet description" + "a11ySelectTrack": "Select track", + "@a11ySelectTrack": { + "description": "Accessibility label for selecting a track" }, - "lyricsModeEmbed": "Incorporar no arquivo", - "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", - "@extensionsSearchProviderDescription": { - "description": "Search provider setting description" + "a11yDeselectTrack": "Deselect track", + "@a11yDeselectTrack": { + "description": "Accessibility label for deselecting a track" }, - "libraryFilterQualityLossy": "Lossy", - "actionPause": "Pausar", - "csvImportTracks": "{count} faixas do CSV", - "actionGo": "Go", - "sectionDebug": "Depuração", - "editMetadataFieldDate": "Date", - "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", - "sectionPerformance": "Desempenho", - "extensionsDownloadPrioritySubtitle": "Definir ordem do serviço de download", - "cacheAppDirectoryDesc": "HTTP responses, WebView data, and other temporary app data.", - "sectionData": "Dados", - "notifFinalizingTrack": "Finalizing {trackName}", - "snackbarFileNotFound": "Arquivo não encontrado", - "extensionQualityOptions": "Opções de Qualidade", - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", - "storeRepoDialogTitle": "Repositório de extensões", - "extensionsSearchProviderDescription": "Escolha qual serviço utilizar para pesquisar faixas", - "albumFolderAlbumOnly": "Somente Álbum", - "nowPlayingOpenInExternalPlayer": "Open in external player", - "cueSplitButton": "Split into Tracks", - "updateRequiredTitle": "Update required", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" + "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", + "@a11yPlayTrackByArtist": { + "description": "Accessibility label for playing a local library track", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", + "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", + "@storeExtensionsCount": { + "description": "Store extension result count", "placeholders": { "count": { "type": "int" } } }, - "appearanceHeroAnimations": "Hero animations", - "@appearanceHeroAnimations": { - "description": "Toggle for shared-element (Hero) transitions" + "storeRequiresVersion": "Requires v{version}+", + "@storeRequiresVersion": { + "description": "Store compatibility badge for minimum app version", + "placeholders": { + "version": { + "type": "String" + } + } }, - "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", - "@appearanceHeroAnimationsSubtitle": { - "description": "Subtitle for the Hero animations toggle" + "actionGo": "Go", + "@actionGo": { + "description": "Generic action button label" + }, + "logIssueSummary": "Issue Summary", + "@logIssueSummary": { + "description": "Header for log issue analysis summary" + }, + "logTotalErrors": "Total errors: {count}", + "@logTotalErrors": { + "description": "Total error count in log issue analysis", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "logAffectedDomains": "Affected: {domains}", + "@logAffectedDomains": { + "description": "Affected domains in log issue analysis", + "placeholders": { + "domains": { + "type": "String" + } + } + }, + "libraryScanCancelled": "Scan cancelled", + "@libraryScanCancelled": { + "description": "Library scan status when a scan was cancelled" + }, + "libraryScanCancelledSubtitle": "You can retry the scan when ready.", + "@libraryScanCancelledSubtitle": { + "description": "Library scan status subtitle after cancellation" + }, + "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", + "@libraryDownloadsHistoryExcluded": { + "description": "Library count note for downloaded history items excluded from the local list", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadNativeWorker": "Native download worker", + "@downloadNativeWorker": { + "description": "Setting title for Android native download worker" + }, + "downloadNativeWorkerSubtitle": "Android background service for extension downloads", + "@downloadNativeWorkerSubtitle": { + "description": "Setting subtitle for Android native download worker" + }, + "extensionServiceStatus": "Service Status", + "@extensionServiceStatus": { + "description": "Extension detail section header for service status" + }, + "extensionServiceHealth": "Service health", + "@extensionServiceHealth": { + "description": "Extension capability label for service health checks" + }, + "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", + "@extensionHealthChecksConfigured": { + "description": "Extension service health check count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", + "@extensionOauthConnectHint": { + "description": "Hint for an OAuth login link field before connecting Spotify" + }, + "extensionLastChecked": "Last checked {time}", + "@extensionLastChecked": { + "description": "Timestamp for the latest extension service health check", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "extensionRefreshStatus": "Refresh status", + "@extensionRefreshStatus": { + "description": "Tooltip for refreshing extension service health status" + }, + "extensionCustomUrlHandling": "Custom URL Handling", + "@extensionCustomUrlHandling": { + "description": "Extension detail section title for custom URL handling" + }, + "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", + "@extensionCustomUrlHandlingSubtitle": { + "description": "Extension detail subtitle for custom URL handling" + }, + "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", + "@extensionCustomUrlHandlingShareHint": { + "description": "Extension detail hint explaining share-to-app URL handling" + }, + "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", + "@extensionSettingsCount": { + "description": "Count of settings exposed by an extension quality option", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionHealthOnline": "Online", + "@extensionHealthOnline": { + "description": "Extension service health status - online" + }, + "extensionHealthDegraded": "Degraded", + "@extensionHealthDegraded": { + "description": "Extension service health status - degraded" + }, + "extensionHealthOffline": "Offline", + "@extensionHealthOffline": { + "description": "Extension service health status - offline" + }, + "extensionHealthNotConfigured": "Not configured", + "@extensionHealthNotConfigured": { + "description": "Extension service health status - not configured" + }, + "extensionHealthUnknown": "Unknown", + "@extensionHealthUnknown": { + "description": "Extension service health status - unknown" + }, + "extensionHealthRequired": "required", + "@extensionHealthRequired": { + "description": "Label for a required extension service health check" + }, + "extensionSettingNotSet": "Not set", + "@extensionSettingNotSet": { + "description": "Value shown when an extension setting has no value" + }, + "extensionActionFailed": "Action failed", + "@extensionActionFailed": { + "description": "Fallback error when an extension action fails without details" + }, + "extensionEnterValue": "Enter value", + "@extensionEnterValue": { + "description": "Hint for editing an extension setting value" + }, + "extensionHealthServiceOnline": "Service online", + "@extensionHealthServiceOnline": { + "description": "Tooltip for online extension service" + }, + "extensionHealthServiceDegraded": "Service degraded", + "@extensionHealthServiceDegraded": { + "description": "Tooltip for degraded extension service" + }, + "extensionHealthServiceOffline": "Service offline", + "@extensionHealthServiceOffline": { + "description": "Tooltip for offline extension service" + }, + "extensionHealthServiceUnknown": "Service status unknown", + "@extensionHealthServiceUnknown": { + "description": "Tooltip for unknown extension service health" + }, + "audioAnalysisStereo": "Stereo", + "@audioAnalysisStereo": { + "description": "Audio channel layout label - stereo" + }, + "audioAnalysisMono": "Mono", + "@audioAnalysisMono": { + "description": "Audio channel layout label - mono" + }, + "trackOpenInService": "Open in {serviceName}", + "@trackOpenInService": { + "description": "Button label to open a track in a named music service", + "placeholders": { + "serviceName": { + "type": "String" + } + } + }, + "trackLyricsEmbeddedSource": "Embedded", + "@trackLyricsEmbeddedSource": { + "description": "Lyrics source label for embedded lyrics" + }, + "unknownAlbum": "Unknown Album", + "@unknownAlbum": { + "description": "Fallback album name when metadata is missing" + }, + "unknownArtist": "Unknown Artist", + "@unknownArtist": { + "description": "Fallback artist name when metadata is missing" + }, + "permissionAudio": "Audio", + "@permissionAudio": { + "description": "Audio permission type label" + }, + "permissionStorage": "Storage", + "@permissionStorage": { + "description": "Storage permission type label" + }, + "permissionNotification": "Notification", + "@permissionNotification": { + "description": "Notification permission type label" + }, + "errorInvalidFolderSelected": "Invalid folder selected", + "@errorInvalidFolderSelected": { + "description": "Error when the selected folder is invalid" + }, + "storeAnyVersion": "Any", + "@storeAnyVersion": { + "description": "Store detail value when any app version is accepted" + }, + "storeCategoryMetadata": "Metadata", + "@storeCategoryMetadata": { + "description": "Store extension category - metadata" + }, + "storeCategoryDownload": "Download", + "@storeCategoryDownload": { + "description": "Store extension category - download" + }, + "storeCategoryUtility": "Utility", + "@storeCategoryUtility": { + "description": "Store extension category - utility" + }, + "storeCategoryLyrics": "Lyrics", + "@storeCategoryLyrics": { + "description": "Store extension category - lyrics" + }, + "storeCategoryIntegration": "Integration", + "@storeCategoryIntegration": { + "description": "Store extension category - integration" + }, + "artistReleases": "Releases", + "@artistReleases": { + "description": "Section header for all artist releases" + }, + "editMetadataSelectNone": "None", + "@editMetadataSelectNone": { + "description": "Button to clear selected fields for auto-fill" + }, + "queueRetryAllFailed": "Retry {count} failed", + "@queueRetryAllFailed": { + "description": "Button to retry every failed download in the queue", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "settingsSaveDownloadHistory": "Save download history", + "@settingsSaveDownloadHistory": { + "description": "Settings switch title for storing completed downloads in history" + }, + "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "@settingsSaveDownloadHistorySubtitle": { + "description": "Settings switch subtitle for storing completed downloads in history" + }, + "dialogDisableHistoryTitle": "Turn off download history?", + "@dialogDisableHistoryTitle": { + "description": "Confirmation dialog title shown before disabling download history" + }, + "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "@dialogDisableHistoryMessage": { + "description": "Confirmation dialog message shown before disabling download history" + }, + "dialogDisableAndClear": "Turn off and clear", + "@dialogDisableAndClear": { + "description": "Confirmation action to disable download history and clear existing entries" + }, + "openInOtherServices": "Open in Other Services", + "@openInOtherServices": { + "description": "Title and tooltip for finding the current collection in other services" + }, + "shareSheetNoExtensions": "No other compatible services", + "@shareSheetNoExtensions": { + "description": "Empty state when no extensions can be searched for cross-service links" + }, + "shareSheetNotFound": "Not found", + "@shareSheetNotFound": { + "description": "Cross-service share sheet row subtitle when a service has no match" + }, + "shareSheetCopyLink": "Copy Link", + "@shareSheetCopyLink": { + "description": "Tooltip for copying a cross-service link" + }, + "shareSheetLinkCopied": "{service} link copied", + "@shareSheetLinkCopied": { + "description": "Snackbar after copying a cross-service link", + "placeholders": { + "service": {} + } + }, + "libraryPlayback": "Playback", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "External player", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Built-in preview player", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Now Playing", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Nothing is playing", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimize", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Up next", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, + "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, + "nowPlayingOpenInExternalPlayer": "Open in external player", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Player", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lyrics", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "No lyrics in this file", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Your library is empty", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Shuffle on", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Play in order", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Shuffle library", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Queue is empty", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "No metadata available", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" + }, + "snackbarPlayingNext": "Playing next", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Added to queue", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Shuffle", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" + }, + "downloadPrimaryArtistOnlyOn": "Primary only: On", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Original quality", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "trackConvertDithering": "Dithering", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "Resampler", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "None", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "Triangular HP", + "@trackConvertDitherTriangularHp": { + "description": "Lossless conversion high-pass triangular dither option" + }, + "trackConvertResamplerSwr": "SWR", + "@trackConvertResamplerSwr": { + "description": "Lossless conversion default FFmpeg swresample resampler option" + }, + "trackConvertResamplerSoxr": "SoXr", + "@trackConvertResamplerSoxr": { + "description": "Lossless conversion SoX resampler option" + }, + "updateSeeReleaseNotes": "See release notes for details.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Unknown title", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Play next", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Add to queue", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + }, + "version": { + "type": "String" + } + } + }, + "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" + }, + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" + }, + "trackCoverOnline": "Online cover", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" + }, + "regionCountryUS": "United States", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" + }, + "regionCountryGB": "United Kingdom", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" + }, + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloads": "Concurrent downloads", - "@settingsConcurrentDownloads": { - "description": "Setting title - how many tracks download at the same time" + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", - "@settingsConcurrentDownloadsSubtitle": { - "description": "Subtitle explaining the concurrent downloads picker" + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsOne": "1 track at a time", - "@concurrentDownloadsOne": { - "description": "Concurrent downloads option - sequential" + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsCount": "Up to {count} tracks at once", - "@concurrentDownloadsCount": { - "description": "Concurrent downloads option - parallel", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalization": "Volume normalization", - "@libraryPlaybackNormalization": { - "description": "Toggle title for ReplayGain playback normalization in the built-in player" + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", - "@libraryPlaybackNormalizationSubtitle": { - "description": "Subtitle explaining playback volume normalization" + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysis": "Audio analysis cache", - "@cacheAudioAnalysis": { - "description": "Cache item title for saved audio analysis results" + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", - "@cacheAudioAnalysisDesc": { - "description": "Description of what audio analysis cache contains" + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginal": "Keep original file", - "@trackConvertKeepOriginal": { - "description": "Toggle to preserve the source file during conversion" + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", - "@trackConvertKeepOriginalDescription": { - "description": "Description for preserving the source file during conversion" + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" }, - "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", - "@trackConvertConfirmKeepOriginal": { - "description": "Confirmation message when the source file will be preserved", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" }, - "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": { - "description": "Batch conversion confirmation when source files will be preserved", - "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" }, - "downloadFolderAccessLostTitle": "Download folder access lost", - "@downloadFolderAccessLostTitle": { - "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" }, - "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", - "@downloadFolderAccessLostSubtitle": { - "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" }, - "downloadFolderReselect": "Re-select folder", - "@downloadFolderReselect": { - "description": "Button that reopens the folder picker to restore download folder access" + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" }, - "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", - "@downloadErrorSafPermissionLost": { - "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" + "extensionVerificationHelpTitleManual": "Open verification manually", + "@extensionVerificationHelpTitleManual": { + "description": "Dialog title when automatic browser launch for verification fails" }, - "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", - "@downloadErrorFolderAccessLost": { - "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" + "extensionVerificationHelpTitleWaiting": "Verification still waiting", + "@extensionVerificationHelpTitleWaiting": { + "description": "Dialog title when verification is taking longer than expected" }, - "notifVerificationRequiredTitle": "Verification required", - "@notifVerificationRequiredTitle": { - "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" + "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", + "@extensionVerificationHelpMessageManual": { + "description": "Dialog message when automatic browser launch for verification fails" }, - "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", - "@notifVerificationRequiredBody": { - "description": "Notification body prompting the user to return to the app to solve a verification challenge" + "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", + "@extensionVerificationHelpMessageWaiting": { + "description": "Dialog message when verification may need manual browser help" }, - "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", - "@downloadDeduplicationWithQualityVariants": { - "description": "Deduplication subtitle when separate quality versions are allowed" + "extensionVerificationClose": "Close", + "@extensionVerificationClose": { + "description": "Button to dismiss the extension verification help dialog" }, - "downloadQualityVariants": "Allow different quality versions", - "@downloadQualityVariants": { - "description": "Setting to retain multiple quality versions of the same track" + "extensionVerificationCopyLink": "Copy link", + "@extensionVerificationCopyLink": { + "description": "Button to copy the extension verification URL" }, - "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", - "@downloadQualityVariantsDescription": { - "description": "Description for retaining multiple quality versions" + "extensionVerificationLinkCopied": "Verification link copied", + "@extensionVerificationLinkCopied": { + "description": "Snackbar after copying the extension verification URL" }, - "trackOptionDownloadQualityVariant": "Download another quality", - "@trackOptionDownloadQualityVariant": { - "description": "Track menu action to download another quality version" + "extensionVerificationOpenBrowser": "Open browser", + "@extensionVerificationOpenBrowser": { + "description": "Button to open the extension verification URL in a browser" }, - "queueCheckingDownloadSession": "Checking download session...", - "queueResolvingDownloadMetadata": "Resolving track metadata...", - "queueResolvingDownloadStream": "Preparing audio stream...", - "queueWaitingForVerification": "Waiting for verification...", - "queueResumingAfterVerification": "Resuming after verification...", "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", - "collectionExportM3u": "Export as M3U8", - "collectionExportM3uDone": "Exported {exported} of {total} tracks", - "collectionExportM3uNone": "No downloaded files to export", - "collectionExportM3uFailed": "Export failed", - "trackOpenOn": "Open on...", - "trackOpenOnNoLinks": "No platform links found for this track.", - "libraryReviewDuplicates": "Review duplicates", - "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", - "duplicatesTitle": "Duplicates", - "duplicatesEmpty": "No duplicate tracks found.", - "duplicatesKeepBest": "Keep best", - "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", - "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", - "downloadAutoConvert": "Auto-convert after download", - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "downloadAutoConvertFormat": "Output format", - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "downloadAutoConvertBitrate": "Output quality", - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "appearanceForceBlur": "Always use blur effects", - "appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "editMetadataAutoFillSource": "Metadata source", - "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", - "editMetadataAutoFillFind": "Find metadata", - "editMetadataAutoFillPreview": "Data from {source}", - "editMetadataAutoFillCoverAvailable": "Cover artwork available", - "editMetadataAutoFillApply": "Apply selected data", - "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", - "libraryDefaultView": "Default view", - "libraryDefaultViewLastUsed": "Last used", - "audioAnalysisCutoffNotDetected": "Not detected", - "queueCancelledTitle": "Download cancelled", - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", - "trackCoverResolution": "Cover resolution", - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", - "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", - "queueDownloadNext": "Download next", - "queueMoveUp": "Move up", - "queueMoveDown": "Move down", - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", - "nowPlayingRepeatOff": "Repeat off", - "nowPlayingRepeatAll": "Repeat all", - "nowPlayingRepeatOne": "Repeat one", - "queueNetworkFailedOffline": "{count} downloads failed while offline", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "libraryFilterMetadataMissingIsrc": "Missing ISRC" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From 4173332cc6ff4ce4522de6d960d0a285b6d2319a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:49 +0700 Subject: [PATCH 13/59] New translations app_en.arb (Russian) [ci skip] --- lib/l10n/arb/app_ru.arb | 9612 ++++++++++++++++++++------------------- 1 file changed, 5029 insertions(+), 4583 deletions(-) diff --git a/lib/l10n/arb/app_ru.arb b/lib/l10n/arb/app_ru.arb index 4a981021f..5570f308d 100644 --- a/lib/l10n/arb/app_ru.arb +++ b/lib/l10n/arb/app_ru.arb @@ -1,2673 +1,2662 @@ { "@@locale": "ru", "@@last_modified": "2026-04-28", - "libraryEnableLocalLibrarySubtitle": "Сканировать и отслеживать вашу существующую музыку", - "@libraryEnableLocalLibrarySubtitle": { - "description": "Subtitle for enable toggle" - }, - "@audioAnalysisCodec": { - "description": "Audio codec metric label" + "appName": "Spotify", + "@appName": { + "description": "App name - DO NOT TRANSLATE" }, - "extensionUtilityFunctions": "Utility Functions", - "@extensionUtilityFunctions": { - "description": "Capability label for utility-only extensions" + "navHome": "Главная", + "@navHome": { + "description": "Bottom navigation - Home tab" }, - "logClearLogsMessage": "Вы уверены, что хотите очистить все логи?", - "@logClearLogsMessage": { - "description": "Clear logs confirmation message" + "navLibrary": "Библиотека", + "@navLibrary": { + "description": "Bottom navigation - Library tab" }, - "@storeClearFilters": { - "description": "Button to clear all filters" + "navSettings": "Настройки", + "@navSettings": { + "description": "Bottom navigation - Settings tab" }, - "cacheCleanupUnused": "Очистка неиспользуемых данных", - "@cacheCleanupUnused": { - "description": "Action title for cleaning unused entries" + "navStore": "Репозиторий", + "@navStore": { + "description": "Bottom navigation - Extension repo tab" }, - "trackConvertDitherNone": "None", - "@trackConvertDitherNone": { - "description": "Lossless conversion dither option with no dithering applied" + "homeTitle": "Главная", + "@homeTitle": { + "description": "Home screen title" }, - "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", - "@libraryTracksUnit": { - "description": "Unit label for tracks count (without the number itself)", - "placeholders": { - "count": { - "type": "int" - } - } + "homeSubtitle": "Вставьте URL или ищите по названию", + "@homeSubtitle": { + "description": "Subtitle shown below search box" }, - "folderOrganizationNone": "Без организации", - "@folderOrganizationNone": { - "description": "Folder option - flat structure" + "homeEmptyTitle": "Нет поставщиков поиска", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" }, - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" + "homeEmptySubtitle": "Установите расширение, чтобы продолжить.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" }, - "@trackConvertConfirmTitle": { - "description": "Confirmation dialog title" + "homeSupports": "Поддерживается: Трек, Альбом, Плейлист, URL исполнителя", + "@homeSupports": { + "description": "Info text about supported URL types" }, - "@extensionPatternsCount": { - "description": "URL patterns count", - "placeholders": { - "count": { - "type": "int" - } - } + "homeRecent": "Недавние", + "@homeRecent": { + "description": "Section header for recent searches" }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" + "historyFilterAll": "Все", + "@historyFilterAll": { + "description": "Filter chip - show all items" }, - "libraryAutoScanOff": "Off", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" + "historyFilterAlbums": "Альбомы", + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" }, - "shareSheetLinkCopied": "{service} link copied", - "@shareSheetLinkCopied": { - "description": "Snackbar after copying a cross-service link", - "placeholders": { - "service": {} - } + "historyFilterSingles": "Синглы", + "@historyFilterSingles": { + "description": "Filter chip - show singles only" }, - "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" + "historySearchHint": "Поиск в истории...", + "@historySearchHint": { + "description": "Search bar placeholder in history" }, - "@replayGainBatchConfirmMessage": { - "description": "Message of the batch ReplayGain confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsTitle": "Настройки", + "@settingsTitle": { + "description": "Settings screen title" }, - "@extensionsHomeFeedUse": { - "description": "Extensions page - subtitle for a specific extension home feed option", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "settingsDownload": "Скачивание", + "@settingsDownload": { + "description": "Settings section - download options" }, - "selectionShareCount": "Отправить {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", - "@selectionShareCount": { - "description": "Share button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsAppearance": "Внешний вид", + "@settingsAppearance": { + "description": "Settings section - visual customization" }, - "@storeExtensionsCount": { - "description": "Store extension result count", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsExtensions": "Расширения", + "@settingsExtensions": { + "description": "Settings section - extension management" }, - "@logSearchHint": { - "description": "Log search placeholder" + "settingsAbout": "О программе", + "@settingsAbout": { + "description": "Settings section - app info" }, - "@audioAnalysisSamples": { - "description": "Total samples metric label" + "downloadTitle": "Скачать", + "@downloadTitle": { + "description": "Download settings page title" }, - "trackCoverReplace": "Replace Cover", - "@trackCoverReplace": { - "description": "Button label for replacing selected cover art" + "downloadAskQualitySubtitle": "Показывать выбор качества для каждого скачивания", + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" }, - "@discographyAddedToQueue": { - "description": "Snackbar - tracks added from discography", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameFormat": "Формат имени файла", + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" + "downloadSingleFilenameFormat": "Формат имени файла", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" }, - "@nowPlayingDetails": { - "description": "Menu item and section title for track metadata details" + "downloadSingleFilenameFormatDescription": "Формат имени файла для синглов и EP. Используются те же теги, что и для альбомов.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" }, - "@trackGenre": { - "description": "Metadata label - music genre" + "downloadFolderOrganization": "Организация папок", + "@downloadFolderOrganization": { + "description": "Title of the folder organization picker bottom sheet" }, - "recentTypeSong": "Песня", - "@recentTypeSong": { - "description": "Recent access item type - song/track" + "appearanceTitle": "Внешний вид", + "@appearanceTitle": { + "description": "Appearance settings page title" }, - "logShareLogs": "Поделиться логами", - "@logShareLogs": { - "description": "Share button tooltip" + "appearanceThemeSystem": "Системная", + "@appearanceThemeSystem": { + "description": "Follow system theme" }, - "@storeFilterLyrics": { - "description": "Repo filter - lyrics providers" + "appearanceThemeLight": "Светлая", + "@appearanceThemeLight": { + "description": "Light theme" }, - "extensionsInstallButton": "Установить расширение", - "@extensionsInstallButton": { - "description": "Button to install extension from file" + "appearanceThemeDark": "Тёмная", + "@appearanceThemeDark": { + "description": "Dark theme" }, - "replayGainBatchSuccess": "ReplayGain добавлен к {success} треков {total}", - "@replayGainBatchSuccess": { - "description": "Snackbar after batch ReplayGain completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "appearanceDynamicColor": "Динамический цвет", + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" }, - "nowPlayingMinimize": "Minimize", - "@nowPlayingMinimize": { - "description": "Tooltip for minimizing the now playing screen" + "appearanceDynamicColorSubtitle": "Использовать цвета из ваших обоев", + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" }, - "logIssueNetworkErrorSuggestion": "Check your internet connection", - "@logIssueNetworkErrorSuggestion": { - "description": "Diagnostic badge suggestion for generic network errors" + "appearanceHistoryView": "Отображение истории", + "@appearanceHistoryView": { + "description": "Layout style for history" }, - "extensionsNoExtensions": "Нет установленных расширений", - "@extensionsNoExtensions": { - "description": "Empty state - no extensions" + "appearanceHistoryViewList": "Список", + "@appearanceHistoryViewList": { + "description": "List layout option" }, - "@cacheRefresh": { - "description": "Tooltip for refresh button on cache management page" + "appearanceHistoryViewGrid": "Сетка", + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" }, - "@snackbarHistoryCleared": { - "description": "Snackbar - history deleted" + "optionsPrimaryProvider": "Основной провайдер", + "@optionsPrimaryProvider": { + "description": "Main search provider setting" }, - "cueSplitFailed": "Разделение CUE не удалось", - "@cueSplitFailed": { - "description": "Snackbar when CUE split fails" + "optionsPrimaryProviderSubtitle": "Сервис для поиска по названию трека или альбома", + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" }, - "trackConvertLosslessSuffix": "Lossless", - "@trackConvertLosslessSuffix": { - "description": "Suffix used in converted lossless quality labels" - }, - "homeSubtitle": "Вставьте URL или ищите по названию", - "@homeSubtitle": { - "description": "Subtitle shown below search box" - }, - "selectionBatchConvertConfirmMessageLossless": "Конвертировать {count} {count, plural, =1{track} other{tracks}} в {format}? (Без потери качества)\n\nОригинальные файлы будут удалены после конвертации.", - "@selectionBatchConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless batch conversion", + "optionsUsingExtension": "Используется расширение: {extensionName}", + "@optionsUsingExtension": { + "description": "Shows active extension name", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "extensionName": { "type": "String" } } }, - "@extensionVerificationHelpMessageManual": { - "description": "Dialog message when automatic browser launch for verification fails" - }, - "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", - "@queueRateLimitMessage": { - "description": "Explanation shown on a failed queue item when the download service rate limits requests" - }, - "searchSortDateOldest": "Дата релиза (старейшая)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "nowPlayingShuffleOn": "Shuffle on", - "@nowPlayingShuffleOn": { - "description": "Tooltip when shuffle mode is enabled" - }, - "sectionColor": "Цвет", - "@sectionColor": { - "description": "Settings section header" - }, - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "cacheCoverImage": "Кэш обложек", - "@cacheCoverImage": { - "description": "Cache item title for persistent cover images" + "optionsDefaultSearchTab": "Вкладка поиска по умолчанию", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" }, - "@navSettings": { - "description": "Bottom navigation - Settings tab" + "optionsDefaultSearchTabSubtitle": "Выберите, какая вкладка открывает новые результаты поиска.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" }, - "@trackCoverReplaceNotice": { - "description": "Notice shown when a new cover has been selected but not saved yet" + "optionsAutoFallback": "Автоматический переход", + "@optionsAutoFallback": { + "description": "Auto-retry with other services" }, - "cueSplitConfirmTitle": "Разделенный CUE-альбом", - "@cueSplitConfirmTitle": { - "description": "CUE split confirmation dialog title" + "optionsAutoFallbackSubtitle": "Попробовать другие сервисы при сбое загрузки", + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" }, - "@trackDeleteConfirmMessage": { - "description": "Delete confirmation message" + "optionsEmbedLyrics": "Вписать текст песни", + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" }, - "cacheClearSuccess": "Очищено: {target}", - "@cacheClearSuccess": { - "description": "Snackbar after clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "optionsEmbedLyricsSubtitle": "Сохранять синхронизированный текст песни рядом с загруженным треком", + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" }, - "editMetadataFieldCover": "Обложка", - "@editMetadataFieldCover": { - "description": "Chip label for cover art field in auto-fill selector" + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" }, - "snackbarSelectExtFile": "Пожалуйста, выберите .spotiflac-ext-файл", - "@snackbarSelectExtFile": { - "description": "Snackbar - wrong file type selected" + "optionsReplayGainSubtitleOn": "Сканировать громкость и вставить теги ReplayGain (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" }, - "libraryFilterFormat": "Формат", - "@libraryFilterFormat": { - "description": "Filter section - file format" + "optionsReplayGainSubtitleOff": "Выключено: нет тегов нормализации громкости", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" }, - "@downloadLossyAac": { - "description": "Lossy format option - AAC in M4A container at 320kbps" + "trackReplayGain": "Пересканировать ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "@setupNext": { - "description": "Next button text" + "trackReplayGainScanning": "Анализ громкости...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "@releaseTypeSingle": { - "description": "Badge label for single releases" + "trackReplayGainSuccess": "Добавлены теги ReplayGain", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" }, - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" + "trackReplayGainFailed": "Не удалось добавить теги ReplayGain", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", - "@trackConvertLosslessOutputWithCap": { - "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", "placeholders": { - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "bulkDownloadSelectPlaylists": "Select playlists to download", - "@bulkDownloadSelectPlaylists": { - "description": "Button label when no playlists are selected for download" - }, - "artistOptionAddToFavorites": "Добавить в избранные исполнители", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "@timeJustNow": { - "description": "Relative time - less than a minute ago" - }, - "downloadLossyOpus256": "Opus 256 кбит/с", - "@downloadLossyOpus256": { - "description": "Lossy format option - Opus 256kbps" + "replayGainBatchConfirmTitle": "Добавить ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" }, - "discographySinglesOnlySubtitle": "{count} треков из {albumCount} синглов", - "@discographySinglesOnlySubtitle": { - "description": "Subtitle showing singles tracks count", + "replayGainBatchConfirmMessage": "Проанализировать громкость и записать ReplayGain теги на {count} трек(-а)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { "count": { "type": "int" - }, - "albumCount": { - "type": "int" } } }, - "optionsExtensionStore": "Репозиторий расширения", - "@optionsExtensionStore": { - "description": "Show/hide repo tab" + "replayGainBatchAnalyzing": "Анализ ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" }, - "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", - "@libraryDownloadsHistoryExcluded": { - "description": "Library count note for downloaded history items excluded from the local list", + "replayGainBatchSuccess": "ReplayGain добавлен к {success} треков {total}", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", "placeholders": { - "count": { + "success": { + "type": "int" + }, + "total": { "type": "int" } } }, - "@errorUrlFetchFailed": { - "description": "Error message - generic URL fetch failure" - }, - "@trackOptionAddToWishlist": { - "description": "Bottom sheet action label - add track to wishlist" + "optionsArtistTagMode": "Режим тега исполнителя", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" }, - "discographySinglesOnly": "Только синглы и EP", - "@discographySinglesOnly": { - "description": "Option - download only singles" + "optionsArtistTagModeDescription": "Выберите, как несколько исполнителей записываются встроенные теги.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" }, - "@downloadSongLinkRegionDesc": { - "description": "Description in SongLink region picker" + "optionsArtistTagModeJoined": "Single joined value", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" }, - "notifEmbeddingMetadata": "Встраивание метаданных...", - "@notifEmbeddingMetadata": { - "description": "Notification body while embedding metadata into a downloaded track" + "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" }, - "@settingsLocalLibrarySubtitle": { - "description": "Subtitle for local library settings" + "optionsArtistTagModeSplitVorbis": "Разделить теги для FLAC/Opus", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "@downloadLocationSubtitle": { - "description": "Subtitle shown in the download location picker sheet" + "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", + "@optionsArtistTagModeSplitVorbisSubtitle": { + "description": "Subtitle for split Vorbis artist tag mode" }, - "trackConvertOriginalQuality": "Original quality", - "@trackConvertOriginalQuality": { - "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + "optionsExtensionStore": "Репозиторий расширения", + "@optionsExtensionStore": { + "description": "Show/hide repo tab" }, - "nowPlayingTabLyrics": "Lyrics", - "@nowPlayingTabLyrics": { - "description": "Tab label for the lyrics view" + "optionsExtensionStoreSubtitle": "Показывать вкладку репозитория в навигации", + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension repo toggle" }, - "selectionConvertCount": "Конвертировать {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", - "@selectionConvertCount": { - "description": "Convert button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsCheckUpdates": "Проверить обновления", + "@optionsCheckUpdates": { + "description": "Auto update check toggle" }, - "@extensionsInstalledSection": { - "description": "Section header - installed extensions" + "optionsCheckUpdatesSubtitle": "Уведомлять о наличии новой версии", + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" }, - "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is off" + "optionsUpdateChannel": "Канал обновлений", + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" }, - "nowPlayingShuffleLibrary": "Shuffle library", - "@nowPlayingShuffleLibrary": { - "description": "Button label to shuffle and play the entire local library" + "optionsUpdateChannelStable": "Только стабильные релизы", + "@optionsUpdateChannelStable": { + "description": "Only stable updates" }, - "trackReEnrichFieldCover": "Обложка", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" + "optionsUpdateChannelPreview": "Предварительные версии", + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", - "@tutorialExtensionsTip3": { - "description": "Tutorial extensions tip 3" + "optionsUpdateChannelWarning": "Предварительная версия может содержать ошибки или неполные функции", + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" }, - "@cacheCleanupUnusedDesc": { - "description": "Description of what cleanup unused data does" - }, - "a11yOpenAlbum": "Open album {albumName}", - "@a11yOpenAlbum": { - "description": "Accessibility label for opening an album", - "placeholders": { - "albumName": { - "type": "String" - } - } + "optionsClearHistory": "Очистить историю загрузок", + "@optionsClearHistory": { + "description": "Delete all download history" }, - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" + "optionsClearHistorySubtitle": "Удалить все скачанные треки из истории", + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" }, - "nowPlayingQueueEmpty": "Queue is empty", - "@nowPlayingQueueEmpty": { - "description": "Empty state when the playback queue has no items" + "optionsDetailedLogging": "Подробный лог", + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" }, - "@settingsDownload": { - "description": "Settings section - download options" + "optionsDetailedLoggingOn": "Ведутся подробные логи", + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", - "@notifTracksDownloadedSuccess": { - "description": "Notification body for queue complete - how many tracks were downloaded", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsDetailedLoggingOff": "Включить для отчётов об ошибках", + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" }, - "storeCategoryDownload": "Download", - "@storeCategoryDownload": { - "description": "Store extension category - download" + "extensionsTitle": "Расширения", + "@extensionsTitle": { + "description": "Extensions page title" }, - "aboutTelegramChannel": "Telegram канал", - "@aboutTelegramChannel": { - "description": "Link to Telegram channel" + "extensionsDisabled": "Выключено", + "@extensionsDisabled": { + "description": "Extension status - inactive" }, - "@downloadedAlbumDiscHeader": { - "description": "Header for disc separator in multi-disc albums", + "extensionsVersion": "Версия {version}", + "@extensionsVersion": { + "description": "Extension version display", "placeholders": { - "discNumber": { - "type": "int", - "example": "1" + "version": { + "type": "String" } } }, - "@recentEmpty": { - "description": "Empty state text for recent access list" + "extensionsUninstall": "Удалить", + "@extensionsUninstall": { + "description": "Uninstall extension button" }, - "@backupRestoreConfirmMessage": { - "description": "Confirmation dialog message before restoring a backup" + "storeTitle": "Репозиторий расширения", + "@storeTitle": { + "description": "Repo screen title" }, - "@shareSheetCopyLink": { - "description": "Tooltip for copying a cross-service link" + "storeSearch": "Поиск расширений...", + "@storeSearch": { + "description": "Repo search placeholder" }, - "regionCountryID": "Indonesia", - "@regionCountryID": { - "description": "Country name for SongLink region picker" + "storeInstall": "Установить", + "@storeInstall": { + "description": "Install extension button" }, - "@libraryInLibrary": { - "description": "Badge shown on tracks that exist in local library" + "storeInstalled": "Установлено", + "@storeInstalled": { + "description": "Already installed badge" }, - "extensionPostProcessingHooks": "Хуки постобработки", - "@extensionPostProcessingHooks": { - "description": "Capability - post-processing" + "storeUpdate": "Обновить", + "@storeUpdate": { + "description": "Update available button" }, - "@setupGrantPermission": { - "description": "Button to request permission" + "aboutTitle": "О программе", + "@aboutTitle": { + "description": "About page title" }, - "storeFilterDownload": "Скачивание", - "@storeFilterDownload": { - "description": "Repo filter - download providers" + "aboutContributors": "Участники", + "@aboutContributors": { + "description": "Section for contributors" }, - "@collectionAddToPlaylist": { - "description": "Action to add a track to user playlist" + "aboutMobileDeveloper": "Разработчик мобильной версии", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" }, - "@discographyFailedToFetch": { - "description": "Error - some albums failed to load" + "aboutOriginalCreator": "Создатель оригинального SpotiFLAC", + "@aboutOriginalCreator": { + "description": "Role description for original creator" }, - "@updateWhatsNew": { - "description": "Changelog section title" + "aboutLogoArtist": "Талантливый художник, который создал наш красивый логотип приложения!", + "@aboutLogoArtist": { + "description": "Role description for logo artist" }, - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" + "aboutTranslators": "Переводчики", + "@aboutTranslators": { + "description": "Section for translators" }, - "dialogDeleteSelectedTitle": "Удалить выбранные", - "@dialogDeleteSelectedTitle": { - "description": "Dialog title - delete selected items" + "aboutSpecialThanks": "Особая благодарность", + "@aboutSpecialThanks": { + "description": "Section for special thanks" }, - "trackCoverPick": "Pick Cover", - "@trackCoverPick": { - "description": "Button label for selecting cover art" + "aboutLinks": "Ссылки", + "@aboutLinks": { + "description": "Section for external links" }, - "@collectionCreatePlaylist": { - "description": "Action to create a new playlist" + "aboutMobileSource": "Исходный код мобильной версии", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" }, - "selectionBatchConvertSuccess": "Конвертировано {success} треков {total} в {format}", - "@selectionBatchConvertSuccess": { - "description": "Snackbar after batch conversion completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "aboutPCSource": "Исходный код ПК версии", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" }, - "qualityHiResFlacMax": "Hi-Res FLAC Макс.", - "@qualityHiResFlacMax": { - "description": "Quality option - maximum resolution FLAC" + "aboutKeepAndroidOpen": "Сохранить Android открытым", + "@aboutKeepAndroidOpen": { + "description": "Link to Keep Android Open campaign website" }, - "audioAnalysisStereo": "Stereo", - "@audioAnalysisStereo": { - "description": "Audio channel layout label - stereo" + "aboutReportIssue": "Сообщить о проблеме", + "@aboutReportIssue": { + "description": "Link to report bugs" }, - "backupExportButton": "Create backup file", - "@backupExportButton": { - "description": "Button to create and share a backup file" + "aboutReportIssueSubtitle": "Сообщите о возникших проблемах", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" }, - "settingsApp": "App", - "@settingsApp": { - "description": "Settings menu item - app settings" + "aboutFeatureRequest": "Предложить новую функцию", + "@aboutFeatureRequest": { + "description": "Link to suggest features" }, - "clickableInformationUnavailable": "{type} information not available", - "@clickableInformationUnavailable": { - "description": "Snackbar shown when clickable metadata cannot open a destination", - "placeholders": { - "type": { - "type": "String" - } - } + "aboutFeatureRequestSubtitle": "Предложить новые функции для приложения", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" }, - "@logFilterLevel": { - "description": "Filter by log level" + "aboutTelegramChannel": "Telegram канал", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" }, - "sectionTheme": "Тема", - "@sectionTheme": { - "description": "Settings section header" + "aboutTelegramChannelSubtitle": "Объявления и обновления", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" }, - "@extensionActionFailed": { - "description": "Fallback error when an extension action fails without details" + "aboutTelegramChat": "Сообщество в Telegram", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" }, - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + "aboutTelegramChatSubtitle": "Чат с другими пользователями", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" }, - "@extensionsNoCustomSearch": { - "description": "Empty state - no search providers" + "aboutSocial": "Соцсети", + "@aboutSocial": { + "description": "Section for social links" }, - "@collectionPlaylistRemoveCover": { - "description": "Bottom sheet action to remove custom cover image from a playlist" + "aboutApp": "Приложение", + "@aboutApp": { + "description": "Section for app info" }, - "@tutorialWelcomeDesc": { - "description": "Tutorial welcome page description" + "aboutVersion": "Версия", + "@aboutVersion": { + "description": "Version info label" }, - "@tutorialSearchDesc": { - "description": "Tutorial search page description" + "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" }, - "collectionAddedToWishlist": "\"{trackName}\" добавлен в список желаний", - "@collectionAddedToWishlist": { - "description": "Snackbar after adding track to wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } + "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" }, - "logAffectedDomains": "Affected: {domains}", - "@logAffectedDomains": { - "description": "Affected domains in log issue analysis", - "placeholders": { - "domains": { - "type": "String" - } - } + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" }, - "@folderOrganizationByArtistSubtitle": { - "description": "Subtitle for artist folder option" + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" }, - "errorNoTracksFound": "Треки не найдены", - "@errorNoTracksFound": { - "description": "Error - search returned no results" + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" }, - "providerPriorityTitle": "Приоритет провайдера", - "@providerPriorityTitle": { - "description": "Provider priority page title" + "aboutAppDescription": "Ищите метаданных музыки, управляйте расширениями и организуйте свою библиотеку.", + "@aboutAppDescription": { + "description": "App description in header card" }, - "@notifUpdateReadyBody": { - "description": "Notification body when app update is ready to install", + "artistAlbums": "Альбомы", + "@artistAlbums": { + "description": "Section header for artist albums" + }, + "artistSingles": "Синглы и EP", + "@artistSingles": { + "description": "Section header for singles/EPs" + }, + "artistCompilations": "Сборники", + "@artistCompilations": { + "description": "Section header for compilations" + }, + "artistPopular": "Популярное", + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, + "artistMonthlyListeners": "{count} слушателей в месяц", + "@artistMonthlyListeners": { + "description": "Monthly listener count display", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "String", + "description": "Formatted listener count" } } }, - "@settingsExtensions": { - "description": "Settings section - extension management" + "trackMetadataService": "Сервис", + "@trackMetadataService": { + "description": "Metadata field - download service used" }, - "trackDeleteConfirmTitle": "Удалить с устройства?", - "@trackDeleteConfirmTitle": { - "description": "Delete confirmation title" + "trackMetadataPlay": "Воспроизвести", + "@trackMetadataPlay": { + "description": "Action button - play track" }, - "@settingsDownloadNetwork": { - "description": "Setting for network type preference" + "trackMetadataShare": "Поделиться", + "@trackMetadataShare": { + "description": "Action button - share track" }, - "downloadProvidersNoneEnabled": "No providers enabled", - "@downloadProvidersNoneEnabled": { - "description": "Shown when no lyrics providers are active" + "trackMetadataDelete": "Удалить", + "@trackMetadataDelete": { + "description": "Action button - delete track" }, - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" + "setupGrantPermission": "Предоставить разрешение", + "@setupGrantPermission": { + "description": "Button to request permission" }, - "trackReEnrichFieldBasicTags": "Альбом, Исполнитель альбома", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + "setupSkip": "Пропустить", + "@setupSkip": { + "description": "Skip current step button" }, - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" + "setupStorageAccessRequired": "Требуется доступ к хранилищу", + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" }, - "@logClearLogsTitle": { - "description": "Clear logs dialog title" + "setupStorageAccessMessageAndroid11": "Для Android 11+ требуется разрешение \"Доступ ко всем файлам\" для сохранения файлов в выбранную вами папку загрузки.", + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" }, - "storageModeSafSubtitle": "Pick any folder, including SD card", - "@storageModeSafSubtitle": { - "description": "Subtitle for SAF storage mode" + "setupOpenSettings": "Открыть настройки", + "@setupOpenSettings": { + "description": "Button to open system settings" }, - "@notifUpdateProgress": { - "description": "Notification body showing update download progress", + "setupPermissionDeniedMessage": "В разрешении отказано. Пожалуйста, предоставьте все разрешения для продолжения.", + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, + "setupPermissionRequired": "Требуется разрешение {permissionType}", + "@setupPermissionRequired": { + "description": "Generic permission required title", "placeholders": { - "received": { - "type": "String" - }, - "total": { - "type": "String" - }, - "percentage": { - "type": "int" + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" } } }, - "downloadUsePrimaryArtistOnlyEnabled": "Список исполнителей, чьи работы были удалены из названия папки (например, Джастин Бибер, Quavo → Джастин Бибер)", - "@downloadUsePrimaryArtistOnlyEnabled": { - "description": "Subtitle when primary artist only is enabled" - }, - "notifScanningLibrary": "Сканирование локальной библиотеки", - "@notifScanningLibrary": { - "description": "Notification title while scanning local library" - }, - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "setupGetStarted": "Приступить к работе", - "@setupGetStarted": { - "description": "Final setup button" - }, - "libraryFilterQualityCD": "CD (16 бит)", - "@libraryFilterQualityCD": { - "description": "Filter option - CD quality audio" - }, - "sectionLayout": "Разметка", - "@sectionLayout": { - "description": "Settings section header" - }, - "@tooltipLoveAll": { - "description": "Tooltip for the Love All button on album/playlist screens" - }, - "queueFinalizingDownload": "Finalizing download", - "@queueFinalizingDownload": { - "description": "Accessibility label for a queue item that is finalizing" - }, - "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", - "@trackConvertActionLabelLossy": { - "description": "Convert button label for lossy conversion", + "setupPermissionRequiredMessage": "Для оптимальной работы требуется разрешение {permissionType}. Вы можете изменить это позже в настройках.", + "@setupPermissionRequiredMessage": { + "description": "Generic permission required message", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { + "permissionType": { "type": "String" } } }, - "extensionsMetadataPriority": "Приоритет метаданных", - "@extensionsMetadataPriority": { - "description": "Setting - metadata provider order" + "setupUseDefaultFolder": "Использовать папку по умолчанию?", + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" }, - "updateCurrent": "Текущая", - "@updateCurrent": { - "description": "Label for current version" + "setupNoFolderSelected": "Папка не выбрана. Хотите использовать папку Музыка по умолчанию?", + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" }, - "@aboutFeatureRequest": { - "description": "Link to suggest features" + "setupUseDefault": "По умолчанию", + "@setupUseDefault": { + "description": "Button to use default folder" }, - "@safMigrationSuccess": { - "description": "Snackbar after successfully migrating to SAF" + "setupDownloadLocationTitle": "Папка для скачивания", + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" }, - "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", - "@cleanupOrphanedDownloadsNone": { - "description": "Snackbar when no orphans found" + "setupDownloadLocationIosMessage": "В iOS загрузки сохраняются в папке Документы приложения. Вы можете получить к ним доступ через приложение Файлы.", + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (хорош для азиатских песен)", - "@lyricsProviderNeteaseDesc": { - "description": "Description for Netease provider" + "setupAppDocumentsFolder": "Папка Документы приложения", + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" }, - "libraryScanCancelledSubtitle": "You can retry the scan when ready.", - "@libraryScanCancelledSubtitle": { - "description": "Library scan status subtitle after cancellation" + "setupAppDocumentsFolderSubtitle": "Рекомендуется - доступ через Файлы", + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" }, - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" + "setupChooseFromFiles": "Выбрать из файлов", + "@setupChooseFromFiles": { + "description": "iOS file picker option" }, - "@trackAlbum": { - "description": "Metadata label - album name" + "setupChooseFromFilesSubtitle": "Выберите iCloud или другое местоположение", + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" }, - "dialogDeleteSelectedMessage": "Удалить {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}} из истории?\n\nЭто также удалит файлы из хранилища.", - "@dialogDeleteSelectedMessage": { - "description": "Dialog message - delete selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "setupIosEmptyFolderWarning": "Ограничение iOS: пустые папки не могут быть выбраны. Выберите папку, содержащую хотя бы один файл.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" }, - "trackReEnrich": "Обновить", - "@trackReEnrich": { - "description": "Menu action - re-embed metadata into audio file" + "setupIcloudNotSupported": "iCloud Drive не поддерживается. Пожалуйста, используйте папку Документы.", + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" }, - "@lyricsProvidersSaved": { - "description": "Snackbar after saving lyrics provider priority" + "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "@setupDownloadInFlac": { + "description": "App tagline in setup" }, - "@storageModeSaf": { - "description": "Storage mode option - Storage Access Framework" + "setupStorageGranted": "Доступ к хранилищу предоставлен!", + "@setupStorageGranted": { + "description": "Success message for storage permission" }, - "libraryStorageAccessRequired": "Требуется доступ к хранилищу", - "@libraryStorageAccessRequired": { - "description": "Dialog title for storage permission" + "setupStorageRequired": "Требуется доступ к хранилищу", + "@setupStorageRequired": { + "description": "Title when storage permission needed" }, - "@cacheClearAllConfirmTitle": { - "description": "Dialog title before clearing all caches" + "setupStorageDescription": "SpotiFLAC требуется разрешение на хранение для сохранения скачанных файлов.", + "@setupStorageDescription": { + "description": "Explanation for storage permission" }, - "@unknownArtist": { - "description": "Fallback artist name when metadata is missing" + "setupNotificationGranted": "Разрешение на уведомление предоставлено!", + "@setupNotificationGranted": { + "description": "Success message for notification permission" }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist folder is enabled" + "setupNotificationEnable": "Включить уведомления", + "@setupNotificationEnable": { + "description": "Button to enable notifications" }, - "dialogClearHistoryMessage": "Вы уверены, что хотите удалить всю историю загрузок? Это действие необратимо.", - "@dialogClearHistoryMessage": { - "description": "Dialog message - clear history confirmation" + "setupFolderChoose": "Выбрать папку для скачивания", + "@setupFolderChoose": { + "description": "Button to choose folder" }, - "@sectionData": { - "description": "Settings section header" + "setupFolderDescription": "Выберите папку, в которой будет сохраняться скачанная музыка.", + "@setupFolderDescription": { + "description": "Explanation for folder selection" }, - "audioAnalysisRms": "RMS", - "@audioAnalysisRms": { - "description": "RMS level metric label" + "setupSelectFolder": "Выбрать папку", + "@setupSelectFolder": { + "description": "Button to select folder" }, - "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", - "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is on" + "setupEnableNotifications": "Включить уведомления", + "@setupEnableNotifications": { + "description": "Button to enable notifications" }, - "timeJustNow": "Только что", - "@extensionCustomUrlHandlingShareHint": { - "description": "Extension detail hint explaining share-to-app URL handling" + "setupNotificationBackgroundDescription": "Получайте уведомления о ходе и завершении загрузки. Это поможет вам отслеживать загрузки, когда приложение находится в фоновом режиме.", + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" }, - "cleanupOrphanedDownloads": "Очистка отложенных скачиваний", - "@cleanupOrphanedDownloads": { - "description": "Button to remove history entries for deleted files" + "setupSkipForNow": "Пропустить", + "@setupSkipForNow": { + "description": "Skip button text" }, - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" + "setupNext": "Далее", + "@setupNext": { + "description": "Next button text" }, - "@tutorialWelcomeTitle": { - "description": "Tutorial welcome page title" + "setupGetStarted": "Приступить к работе", + "@setupGetStarted": { + "description": "Final setup button" }, - "collectionFavoriteArtists": "Избранный исполнитель", - "audioAnalysisRescanning": "Re-analyzing audio...", - "@audioAnalysisRescanning": { - "description": "Loading text while audio is being re-analyzed after an explicit refresh" + "setupAllowAccessToManageFiles": "Пожалуйста, включите \"Разрешить доступ для управления всеми файлами\" на следующем экране.", + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" }, - "logTitle": "Логи", - "@logTitle": { - "description": "Logs screen title" + "setupLanguageTitle": "Выберите язык", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" }, - "@regionCountryGB": { - "description": "Country name for SongLink region picker" + "setupLanguageDescription": "Выберите язык для приложения. Вы можете изменить его позже в настройках.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" }, - "@progressFetchingMetadata": { - "description": "Progress indicator - loading track info", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "setupLanguageSystemDefault": "Системные настройки", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" }, - "aboutLogoArtist": "Талантливый художник, который создал наш красивый логотип приложения!", - "@aboutLogoArtist": { - "description": "Role description for logo artist" + "dialogCancel": "Отмена", + "@dialogCancel": { + "description": "Dialog button - cancel action" }, - "channelPreview": "Предварительный", - "@channelPreview": { - "description": "Update channel - beta/preview releases" + "dialogSave": "Сохранить", + "@dialogSave": { + "description": "Dialog button - save changes" }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", - "@collectionPlaylistsDeleted": { - "description": "Snackbar after deleting selected playlists", + "dialogDelete": "Удалить", + "@dialogDelete": { + "description": "Dialog button - delete item" + }, + "dialogRetry": "Повторить", + "@dialogRetry": { + "description": "Dialog button - retry action" + }, + "dialogClear": "Очистить", + "@dialogClear": { + "description": "Dialog button - clear items" + }, + "dialogDone": "Готово", + "@dialogDone": { + "description": "Dialog button - action completed" + }, + "dialogImport": "Импорт", + "@dialogImport": { + "description": "Dialog button - import data" + }, + "dialogDownload": "Скачать", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, + "previewPlay": "Предпросмотр проигрывания", + "@previewPlay": { + "description": "Tooltip for the button that plays a short track preview snippet" + }, + "previewStop": "Остановить предпросмотр", + "@previewStop": { + "description": "Tooltip for the button that stops the playing track preview snippet" + }, + "previewUnavailable": "Предпросмотр недоступен", + "@previewUnavailable": { + "description": "Snackbar shown when a track preview snippet cannot be played" + }, + "dialogDiscard": "Отменить", + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, + "dialogRemove": "Убрать", + "@dialogRemove": { + "description": "Dialog button - remove item" + }, + "dialogUninstall": "Удалить", + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, + "dialogDiscardChanges": "Отменить изменения?", + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, + "dialogUnsavedChanges": "Есть несохраненные изменения. Отменить их?", + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, + "dialogClearAll": "Очистить всё", + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, + "dialogRemoveExtension": "Удалить расширение", + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogRemoveExtensionMessage": "Вы уверены, что хотите удалить это расширение? Это действие не может быть отменено.", + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, + "dialogUninstallExtension": "Удалить расширение?", + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogUninstallExtensionMessage": "Вы уверены, что хотите удалить {extensionName}?", + "@dialogUninstallExtensionMessage": { + "description": "Dialog message - uninstall specific extension", "placeholders": { - "count": { - "type": "int" + "extensionName": { + "type": "String" } } }, - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" + "dialogClearHistoryTitle": "Очистить историю", + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" }, - "homeTitle": "Главная", - "@homeTitle": { - "description": "Home screen title" + "dialogClearHistoryMessage": "Вы уверены, что хотите удалить всю историю загрузок? Это действие необратимо.", + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" }, - "extensionMinAppVersion": "Мин. версия приложения", - "@extensionMinAppVersion": { - "description": "Extension detail - minimum app version" + "dialogDeleteSelectedTitle": "Удалить выбранные", + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", - "@backupContentsLiked": { - "description": "Backup contents row for liked tracks count", + "dialogDeleteSelectedMessage": "Удалить {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}} из истории?\n\nЭто также удалит файлы из хранилища.", + "@dialogDeleteSelectedMessage": { + "description": "Dialog message - delete selected tracks", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" + "dialogImportPlaylistTitle": "Импорт плейлиста", + "@dialogImportPlaylistTitle": { + "description": "Dialog title - import CSV playlist" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", - "@notifDownloadsCanceledBody": { - "description": "Notification body when downloads are canceled by the user", + "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", + "csvImportTracks": "{count} трек(-ов) из CSV", + "@csvImportTracks": { + "description": "Label shown in quality picker for CSV import", "placeholders": { "count": { "type": "int" } } }, - "@dialogRetry": { - "description": "Dialog button - retry action" - }, - "@homeChangeSearchProviderTooltip": { - "description": "Tooltip for the Home search provider picker" - }, - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" + "collectionExportM3u": "Export as M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" }, - "@trackReEnrichSuccessWithFailures": { - "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "collectionExportM3uDone": "Exported {exported} of {total} tracks", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { - "successCount": { + "exported": { "type": "int" }, "total": { "type": "int" - }, - "failedCount": { - "type": "int" } } }, - "previewUnavailable": "Предпросмотр недоступен", - "@previewUnavailable": { - "description": "Snackbar shown when a track preview snippet cannot be played" - }, - "nowPlayingTabPlayer": "Player", - "@nowPlayingTabPlayer": { - "description": "Tab label for the player view" + "collectionExportM3uNone": "No downloaded files to export", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "@backupContentsPlaylists": { - "description": "Backup contents row for playlist count", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionExportM3uFailed": "Export failed", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "libraryLastScannedNever": "Никогда", - "@libraryLastScannedNever": { - "description": "Shown when library has never been scanned" + "trackOpenOn": "Open on...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" }, - "trackTrackNumber": "Номер трека", - "@trackTrackNumber": { - "description": "Metadata label - track number" + "trackOpenOnNoLinks": "No platform links found for this track.", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" }, - "trackReplayGainScanning": "Анализ громкости...", - "@trackReplayGainScanning": { - "description": "Snackbar/progress message while scanning ReplayGain for a single track" + "libraryReviewDuplicates": "Review duplicates", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" }, - "downloadLossyMp3": "MP3 320 кбит/с", - "@downloadLossyMp3": { - "description": "Lossy format option - MP3 320kbps" + "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" }, - "@albumFolderArtistAlbumSingles": { - "description": "Album folder option with singles inside artist" + "duplicatesTitle": "Duplicates", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" }, - "@extensionHealthNotConfigured": { - "description": "Extension service health status - not configured" + "duplicatesEmpty": "No duplicate tracks found.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" }, - "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is off" + "duplicatesKeepBest": "Keep best", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting to create a subfolder per playlist source" + "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", + "placeholders": { + "count": { + "type": "int" + }, + "trackName": { + "type": "String" + } + } }, - "@trackReleaseDate": { - "description": "Metadata label - release date" + "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "aboutContributors": "Участники", - "@aboutContributors": { - "description": "Section for contributors" + "@dialogImportPlaylistMessage": { + "description": "Dialog message - import playlist confirmation", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@audioAnalysisMono": { - "description": "Audio channel layout label - mono" + "snackbarAddedToQueue": "\"{trackName}\" добавлен в очередь", + "@snackbarAddedToQueue": { + "description": "Snackbar - track added to download queue", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@audioAnalysisNyquist": { - "description": "Nyquist frequency metric label" + "snackbarAddedTracksToQueue": "Добавлено {count} треков в очередь", + "@snackbarAddedTracksToQueue": { + "description": "Snackbar - multiple tracks added to queue", + "placeholders": { + "count": { + "type": "int" + } + } }, - "permissionStorage": "Storage", - "@permissionStorage": { - "description": "Storage permission type label" + "snackbarAlreadyDownloaded": "\"{trackName}\" уже скачан", + "@snackbarAlreadyDownloaded": { + "description": "Snackbar - track already exists", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "permissionAudio": "Audio", - "@permissionAudio": { - "description": "Audio permission type label" + "snackbarAlreadyInLibrary": "\"{trackName}\" уже есть в вашей библиотеке", + "@snackbarAlreadyInLibrary": { + "description": "Snackbar - track already exists in local library", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@libraryScanSubtitle": { - "description": "Subtitle for scan button" + "snackbarHistoryCleared": "История очищена", + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" }, - "@snackbarUnsupportedAudioFormat": { - "description": "Snackbar when the audio format is not supported for the requested operation" + "snackbarDeletedTracks": "Удалено {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", + "@snackbarDeletedTracks": { + "description": "Snackbar - tracks deleted", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@notifLibraryScanStopped": { - "description": "Notification body when library scan is cancelled" + "snackbarCannotOpenFile": "Невозможно открыть файл: {error}", + "@snackbarCannotOpenFile": { + "description": "Snackbar - file open error", + "placeholders": { + "error": { + "type": "String" + } + } }, - "@downloadMusixmatchAuto": { - "description": "Button to clear Musixmatch language (use auto)" + "snackbarViewQueue": "Просмотр очереди", + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, - "@trackLyricsTimeout": { - "description": "Message when lyrics request times out" + "snackbarUrlCopied": "{platform} ссылка скопирована в буфер обмена", + "@snackbarUrlCopied": { + "description": "Snackbar - URL copied", + "placeholders": { + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } + } }, - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" + "snackbarFileNotFound": "Файл не найден", + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" }, - "@regionCountryXK": { - "description": "Country name for SongLink region picker" + "snackbarSelectExtFile": "Пожалуйста, выберите .spotiflac-ext-файл", + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" }, - "aboutTelegramChatSubtitle": "Чат с другими пользователями", - "@aboutTelegramChatSubtitle": { - "description": "Subtitle for Telegram chat" + "snackbarProviderPrioritySaved": "Приоритет провайдера сохранён", + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" }, - "selectionAllPlaylistsSelected": "Выбраны все плейлисты", - "@selectionAllPlaylistsSelected": { - "description": "Shown when all playlists are selected in selection mode" + "snackbarMetadataProviderSaved": "Приоритет провайдера метаданных сохранён", + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" }, - "cacheTrackLookupDesc": "Поиск ID трека в Spotify/Deezer. Очистка может замедлить следующие несколько поисков.", - "@cacheTrackLookupDesc": { - "description": "Description of what track lookup cache contains" + "snackbarExtensionInstalled": "{extensionName} установлено.", + "@snackbarExtensionInstalled": { + "description": "Snackbar - extension installed successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@unknownAlbum": { - "description": "Fallback album name when metadata is missing" + "snackbarExtensionUpdated": "{extensionName} Обновлено.", + "@snackbarExtensionUpdated": { + "description": "Snackbar - extension updated successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@extensionsErrorLoading": { - "description": "Error message when extension fails to load" + "snackbarFailedToInstall": "Не удалось установить расширение", + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" }, - "@cacheTitle": { - "description": "Cache management page title" + "snackbarFailedToUpdate": "Не удалось обновить расширение", + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" }, - "@downloadFilenameFormat": { - "description": "Setting for output filename pattern" + "errorRateLimited": "Слишком много запросов", + "@errorRateLimited": { + "description": "Error title - too many requests" + }, + "errorRateLimitedMessage": "Слишком много запросов. Пожалуйста, подождите минуту перед повторным поиском.", + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" + }, + "errorNoTracksFound": "Треки не найдены", + "@errorNoTracksFound": { + "description": "Error - search returned no results" + }, + "searchEmptyResultSubtitle": "Попробуйте другое ключевое слово", + "@searchEmptyResultSubtitle": { + "description": "Subtitle shown under the empty search result state on the home screen" }, "errorUrlNotRecognized": "Ссылка не распознана", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when album artist is used for folder names" + "errorUrlNotRecognizedMessage": "Эта ссылка не поддерживается. Убедитесь, что URL-адрес указан правильно и установлено совместимое расширение.", + "@errorUrlNotRecognizedMessage": { + "description": "Error message - URL not recognized explanation" }, - "@qualityFlacLossless": { - "description": "Quality option - CD quality FLAC" + "errorUrlFetchFailed": "Не удалось загрузить контент по этой ссылке. Пожалуйста, попробуйте еще раз.", + "@errorUrlFetchFailed": { + "description": "Error message - generic URL fetch failure" }, - "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", - "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is on" + "errorMissingExtensionSource": "Невозможно загрузить {item}: отсутствует источник расширения", + "@errorMissingExtensionSource": { + "description": "Error - extension source not available", + "placeholders": { + "item": { + "type": "String" + } + } }, - "collectionLovedEmptySubtitle": "Нажмите \"любовь\" на треках, чтобы сохранить ваши избранные", - "@collectionLovedEmptySubtitle": { - "description": "Loved empty state subtitle" + "actionPause": "Пауза", + "@actionPause": { + "description": "Action button - pause download" }, - "@libraryBuiltInPlayerInfo": { - "description": "Info note explaining the built-in player is for previews only" + "actionResume": "Возобновить", + "@actionResume": { + "description": "Action button - resume download" }, - "@notifLibraryScanProgressNoTotal": { - "description": "Notification body for library scan progress when total is unknown", + "actionCancel": "Отмена", + "@actionCancel": { + "description": "Action button - cancel operation" + }, + "actionSelectAll": "Выбрать все", + "@actionSelectAll": { + "description": "Action button - select all items" + }, + "actionDeselect": "Снять выделение", + "@actionDeselect": { + "description": "Action button - deselect all" + }, + "selectionSelected": "{count} выбрано", + "@selectionSelected": { + "description": "Selection count indicator", "placeholders": { - "scanned": { - "type": "int" - }, - "percentage": { + "count": { "type": "int" } } }, - "@tutorialSearchTitle": { - "description": "Tutorial search page title" + "selectionAllSelected": "Все треки выбраны", + "@selectionAllSelected": { + "description": "Status - all items selected" }, - "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", - "@a11yTrackByArtist": { - "description": "Accessibility label for a queue or list track item", + "selectionSelectToDelete": "Выберите треки для удаления", + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "progressFetchingMetadata": "Получение метаданных... {current}/{total}", + "@progressFetchingMetadata": { + "description": "Progress indicator - loading track info", "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "libraryFilterMetadataMissingLabel": "Missing label", - "@libraryFilterMetadataMissingLabel": { - "description": "Filter option - items missing record label" - }, - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "trackMetadata": "Метаданные", - "@trackMetadata": { - "description": "Tab title - track metadata" + "progressReadingCsv": "Чтение CSV...", + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" }, - "trackOptionRemoveFromLoved": "Исключить из Любимых", - "@trackOptionRemoveFromLoved": { - "description": "Bottom sheet action label - remove track from loved folder" + "searchSongs": "Песни", + "@searchSongs": { + "description": "Search result category - songs" }, - "@aboutTelegramChat": { - "description": "Link to Telegram chat group" + "searchArtists": "Исполнители", + "@searchArtists": { + "description": "Search result category - artists" }, - "@trackCopiedToClipboard": { - "description": "Snackbar - content copied" + "searchAlbums": "Альбомы", + "@searchAlbums": { + "description": "Search result category - albums" }, - "aboutKeepAndroidOpen": "Сохранить Android открытым", - "@aboutKeepAndroidOpen": { - "description": "Link to Keep Android Open campaign website" + "searchPlaylists": "Плейлисты", + "@searchPlaylists": { + "description": "Search result category - playlists" }, - "@lyricsProvidersDisabledSection": { - "description": "Section header for disabled providers", - "placeholders": { - "count": { - "type": "int" - } - } + "searchSortTitle": "Упорядочить результаты", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" }, - "@downloadAllowLocalNetwork": { - "description": "Setting title for allowing requests to private/local network targets" + "searchSortDefault": "По умолчанию", + "@searchSortDefault": { + "description": "Sort option - default API order" }, - "@openInOtherServices": { - "description": "Title and tooltip for finding the current collection in other services" + "searchSortTitleAZ": "Название (А-Я)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" }, - "@extensionVerificationBrowserInApp": { - "description": "Chip label for in-app browser verification mode" + "searchSortTitleZA": "Название (Я-А)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" }, - "sectionSearchSource": "Поиск источника", - "@sectionSearchSource": { - "description": "Settings section header" + "searchSortArtistAZ": "Исполнитель (А-Я)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" }, - "allFilesAccess": "Доступ ко всем файлам", - "@allFilesAccess": { - "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + "searchSortArtistZA": "Исполнитель (Я-А)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } + "searchSortDurationShort": "Продолжительность (наименьшая)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" }, - "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", - "@snackbarFailedToEmbedLyrics": { - "description": "Snackbar when lyrics embedding fails" + "searchSortDurationLong": "Продолжительность (наибольшая)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" }, - "@lyricsProviderMusixmatchDesc": { - "description": "Description for Musixmatch provider" + "searchSortDateOldest": "Дата релиза (старейшая)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" }, - "queueRateLimitTitle": "Service rate limited", - "@queueRateLimitTitle": { - "description": "Title shown on a failed queue item when the download service rate limits requests" + "searchSortDateNewest": "Дата релиза (новейшая)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" }, - "@notifDownloadComplete": { - "description": "Notification title when a single download is complete" + "tooltipPlay": "Воспроизвести", + "@tooltipPlay": { + "description": "Tooltip - play button" }, - "@homeSupports": { - "description": "Info text about supported URL types" + "filenameFormat": "Формат имени файла", + "@filenameFormat": { + "description": "Setting title - filename pattern" }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" + "filenameShowAdvancedTags": "Показать расширенные теги", + "@filenameShowAdvancedTags": { + "description": "Toggle label for showing advanced filename tags" }, - "@lyricsModeEmbedSubtitle": { - "description": "Subtitle for embed option" + "filenameShowAdvancedTagsDescription": "Включить форматированные теги для отслеживания заполнения и шаблонов дат", + "@filenameShowAdvancedTagsDescription": { + "description": "Description for advanced filename tag toggle" }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" + "folderOrganizationNone": "Без организации", + "@folderOrganizationNone": { + "description": "Folder option - flat structure" }, - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" + "folderOrganizationByPlaylist": "По плейлисту", + "@folderOrganizationByPlaylist": { + "description": "Folder option - playlist folders" }, - "@trackArtist": { - "description": "Metadata label - artist name" + "folderOrganizationByPlaylistSubtitle": "Отдельная папка для каждого плейлиста", + "@folderOrganizationByPlaylistSubtitle": { + "description": "Subtitle for playlist folder option" }, - "cacheCoverImageDesc": "Скачанный альбом и трек обложки. Будет заново скачан после просмотра.", - "@cacheCoverImageDesc": { - "description": "Description of what cover image cache contains" + "folderOrganizationByArtist": "По исполнителю", + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" }, - "queueClearAll": "Очистить всё", - "@queueClearAll": { - "description": "Button - clear all queue items" + "folderOrganizationByAlbum": "По альбому", + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" }, - "downloadUsePrimaryArtistOnlyDisabled": "Полная строка исполнителя, используемая для имени папки", - "@downloadUsePrimaryArtistOnlyDisabled": { - "description": "Subtitle when primary artist only is disabled" + "folderOrganizationByArtistAlbum": "Исполнитель/Альбом", + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" }, - "backupImportSectionTitle": "Restore backup", - "@backupImportSectionTitle": { - "description": "Section title for the import/restore card" + "folderOrganizationDescription": "Сортировать скачанные файлы по папкам", + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" }, - "@downloadMusixmatchLanguageHint": { - "description": "Placeholder for Musixmatch language input" + "folderOrganizationNoneSubtitle": "Все файлы в папке загрузок", + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" }, - "collectionRemoveFromFolder": "Убрать из папки", - "@collectionRemoveFromFolder": { - "description": "Tooltip for removing track from wishlist/loved folder" + "folderOrganizationByArtistSubtitle": "Отдельная папка для каждого исполнителя", + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" }, - "storeFilterMetadata": "Метаданные", - "@storeFilterMetadata": { - "description": "Repo filter - metadata providers" + "folderOrganizationByAlbumSubtitle": "Отдельная папка для каждого альбома", + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" }, - "shareSheetCopyLink": "Copy Link", - "errorRateLimitedMessage": "Слишком много запросов. Пожалуйста, подождите минуту перед повторным поиском.", - "@errorRateLimitedMessage": { - "description": "Error message - rate limit explanation" + "folderOrganizationByArtistAlbumSubtitle": "Вложенные папки для исполнителей и альбомов", + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" }, - "libraryFilterSortGenreDesc": "Жанр (Я-А)", - "@libraryFilterSortGenreDesc": { - "description": "Sort option - genre descending" + "updateAvailable": "Доступно обновление", + "@updateAvailable": { + "description": "Update dialog title" }, - "trackFileNotFound": "Файл не найден", - "@trackFileNotFound": { - "description": "Error - file doesn't exist" + "updateLater": "Позже", + "@updateLater": { + "description": "Update button - dismiss" }, - "@queueEmptySinglesSubtitle": { - "description": "Empty state subtitle for single track downloads" + "updateStartingDownload": "Загрузка началась...", + "@updateStartingDownload": { + "description": "Update status - initializing" }, - "@queueDownloadStarting": { - "description": "Queue status before download progress is available" + "updateDownloadFailed": "Не удалось скачать", + "@updateDownloadFailed": { + "description": "Update error title" }, - "metadataProviderPriorityInfo": "Deezer не имеет ограничений по скорости и рекомендуется в качестве основного. Spotify может ограничивать скорость после большого количества запросов.", - "@metadataProviderPriorityInfo": { - "description": "Info tip about rate limits" + "updateFailedMessage": "Сбой загрузки обновления", + "@updateFailedMessage": { + "description": "Update error message" }, - "aboutPCSource": "Исходный код ПК версии", - "@aboutPCSource": { - "description": "Link to PC GitHub repo" + "updateNewVersionReady": "Доступна новая версия", + "@updateNewVersionReady": { + "description": "Update subtitle" }, - "editMetadataAutoFill": "Auto-fill from online", - "@editMetadataAutoFill": { - "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + "updateRequiredTitle": "Требуется обновление", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "snackbarDeletedTracks": "Удалено {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", - "@snackbarDeletedTracks": { - "description": "Snackbar - tracks deleted", + "updateRequiredNotice": "Эта версия {count} больше не поддерживается. Обновите, чтобы продолжить использовать приложение.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { "count": { "type": "int" } } }, - "@extensionHealthServiceDegraded": { - "description": "Tooltip for degraded extension service" + "updateCurrent": "Текущая", + "@updateCurrent": { + "description": "Label for current version" }, - "lyricsProviderLrclibDesc": "Open-source synced lyrics database", - "@lyricsProviderLrclibDesc": { - "description": "Description for LRCLIB provider" + "updateNew": "Новая", + "@updateNew": { + "description": "Label for new version" }, - "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", - "@downloadMusixmatchLanguageDesc": { - "description": "Description in Musixmatch language picker" + "updateDownloading": "Скачивание...", + "@updateDownloading": { + "description": "Update status - downloading" }, - "@optionsEmbedMetadataSubtitleOn": { - "description": "Subtitle when metadata embedding is enabled" - }, - "@setupSkipForNow": { - "description": "Skip button text" - }, - "@a11ySelectTrack": { - "description": "Accessibility label for selecting a track" - }, - "@folderOrganizationByAlbumSubtitle": { - "description": "Subtitle for album folder option" - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@extensionVerificationBrowserTitle": { - "description": "Settings option title for extension verification browser preference" + "updateWhatsNew": "Что нового", + "@updateWhatsNew": { + "description": "Changelog section title" }, - "@backupContentsExtensions": { - "description": "Backup contents row for installed extensions count", - "placeholders": { - "count": { - "type": "int" - } - } + "updateDownloadInstall": "Скачать и установить", + "@updateDownloadInstall": { + "description": "Update button - download and install" }, - "snackbarUrlCopied": "{platform} ссылка скопирована в буфер обмена", - "@snackbarUrlCopied": { - "description": "Snackbar - URL copied", - "placeholders": { - "platform": { - "type": "String", - "description": "Platform name (Spotify/Deezer)" - } - } + "updateDontRemind": "Не напоминать", + "@updateDontRemind": { + "description": "Update button - skip this version" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", - "@aboutBinimumDesc": { - "description": "Credit description for binimum" + "providerPriorityTitle": "Приоритет провайдера", + "@providerPriorityTitle": { + "description": "Provider priority page title" }, - "discographyFetchingAlbum": "Получение {current} из {total}...", - "@discographyFetchingAlbum": { - "description": "Progress - fetching specific album", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "providerPriorityDescription": "Перетаскивайте, чтобы изменить порядок провайдеров загрузки. Приложение будет пробовать провайдеров сверху вниз при загрузке треков.", + "@providerPriorityDescription": { + "description": "Provider priority page description" }, - "logAutoScrollOn": "Auto-scroll ON", - "@logAutoScrollOn": { - "description": "Tooltip when auto-scroll is enabled on the log screen" + "providerPriorityInfo": "Если трек не доступен у первого провайдера, приложение автоматически попробует следующий.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" }, - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" + "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" }, - "@regionCountryBR": { - "description": "Country name for SongLink region picker" + "providerPriorityFallbackExtensionsHint": "Здесь перечислены только включенные расширения с возможностями поставщика загрузок.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" }, - "@lyricsProvidersTitle": { - "description": "Settings item title for lyrics provider order" + "providerExtension": "Расширение", + "@providerExtension": { + "description": "Label for extension-provided providers" }, - "trackMetadataService": "Сервис", - "@trackMetadataService": { - "description": "Metadata field - download service used" + "metadataProviderPriorityTitle": "Приоритет метаданных", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" }, - "discographyAddedToQueue": "Добавлено {count} треков в очередь", - "cueSplitTrackCount": "{count} треков", - "@cueSplitTrackCount": { - "description": "Number of tracks in CUE sheet", - "placeholders": { - "count": { - "type": "int" - } - } + "metadataProviderPriorityDescription": "Перетаскивайте, чтобы изменить порядок провайдеров метаданных. Приложение будет пробовать провайдеров сверху вниз при поиске треков и извлечении метаданных.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" }, - "dialogImportPlaylistTitle": "Импорт плейлиста", - "@dialogImportPlaylistTitle": { - "description": "Dialog title - import CSV playlist" + "metadataProviderPriorityInfo": "Deezer не имеет ограничений по скорости и рекомендуется в качестве основного. Spotify может ограничивать скорость после большого количества запросов.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" }, - "@cleanupOrphanedDownloadsSubtitle": { - "description": "Subtitle for orphaned cleanup button" + "logTitle": "Логи", + "@logTitle": { + "description": "Logs screen title" }, - "settingsLocalLibrary": "Локальная библиотека", - "@settingsLocalLibrary": { - "description": "Settings menu item - local library" + "logCopied": "Логи скопированы в буфер обмена", + "@logCopied": { + "description": "Snackbar - logs copied" }, - "@metadataSaveFailedStorage": { - "description": "Snackbar error when writing metadata file back to storage fails" + "logSearchHint": "Поиск логов...", + "@logSearchHint": { + "description": "Log search placeholder" }, - "logCopyLogs": "Copy logs", - "@logCopyLogs": { - "description": "Tooltip for copying logs" + "logFilterLevel": "Уровень", + "@logFilterLevel": { + "description": "Filter by log level" }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", - "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for WiFi-only option in picker" + "logFilterSection": "Фильтр", + "@logFilterSection": { + "description": "Filter section title" }, - "@lyricsModeBothSubtitle": { - "description": "Subtitle for both option" + "logShareLogs": "Поделиться логами", + "@logShareLogs": { + "description": "Share button tooltip" }, - "@collectionAlreadyInPlaylist": { - "description": "Snackbar when track already exists in playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "logClearLogs": "Очистить логи", + "@logClearLogs": { + "description": "Clear button tooltip" }, - "@collectionFoldersTitle": { - "description": "Library section title for custom folders" + "logClearLogsTitle": "Очистить логи", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" }, - "searchSortDateNewest": "Дата релиза (новейшая)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" + "logClearLogsMessage": "Вы уверены, что хотите очистить все логи?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" + "logFilterBySeverity": "Фильтровать логи по серьезности", + "@logFilterBySeverity": { + "description": "Filter dialog title" }, - "@recentTypeAlbum": { - "description": "Recent access item type - album" + "logNoLogsYet": "Логов нет", + "@logNoLogsYet": { + "description": "Empty state title" }, - "nowPlayingPlayInOrder": "Play in order", - "@nowPlayingPlayInOrder": { - "description": "Tooltip when shuffle mode is disabled" + "logNoLogsYetSubtitle": "Логи появятся здесь по мере использования приложения", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" }, - "@cueSplitConfirmMessage": { - "description": "CUE split confirmation dialog message", + "logEntriesFiltered": "Записи ({count} фильтровано)", + "@logEntriesFiltered": { + "description": "Log count with filter active", "placeholders": { - "album": { - "type": "String" - }, "count": { "type": "int" } } }, - "@audioAnalysisFileSize": { - "description": "File size metric label" - }, - "artistSingles": "Синглы и EP", - "@artistSingles": { - "description": "Section header for singles/EPs" - }, - "@snackbarProviderPrioritySaved": { - "description": "Snackbar - provider order saved" - }, - "@recentPlaylistInfo": { - "description": "Snackbar message when tapping playlist in recent access", + "logEntries": "Записи ({count})", + "@logEntries": { + "description": "Total log count", "placeholders": { - "name": { - "type": "String", - "description": "Playlist name" + "count": { + "type": "int" } } }, - "@lyricsProviderLyricsPlusDesc": { - "description": "Description for LyricsPlus provider" + "channelStable": "Стабильный", + "@channelStable": { + "description": "Update channel - stable releases" }, - "@libraryFilterDownloaded": { - "description": "Filter chip - show only downloaded items" + "channelPreview": "Предварительный", + "@channelPreview": { + "description": "Update channel - beta/preview releases" }, - "recentPlaylistInfo": "Плейлист: {name}", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" + "sectionSearchSource": "Поиск источника", + "@sectionSearchSource": { + "description": "Settings section header" }, - "@actionCreate": { - "description": "Generic action button - create" + "sectionDownload": "Скачивание", + "@sectionDownload": { + "description": "Settings section header" }, - "@downloadSelectQuality": { - "description": "Dialog title - choose audio quality" + "sectionPerformance": "Производительность", + "@sectionPerformance": { + "description": "Settings section header" }, - "cueSplitAlbum": "Альбом: {album}", - "@cueSplitAlbum": { - "description": "Album name in CUE split sheet", - "placeholders": { - "album": { - "type": "String" - } - } + "sectionApp": "Приложение", + "@sectionApp": { + "description": "Settings section header" }, - "@trackCoverNoSource": { - "description": "Snackbar when no cover art URL or embedded cover" + "sectionData": "Данные", + "@sectionData": { + "description": "Settings section header" }, - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" + "sectionDebug": "Отладка", + "@sectionDebug": { + "description": "Settings section header" }, - "@notifLibraryScanCompleteBody": { - "description": "Notification body for library scan complete - number of indexed tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "sectionService": "Сервис", + "@sectionService": { + "description": "Settings section header" }, - "optionsDetailedLogging": "Подробный лог", - "@optionsDetailedLogging": { - "description": "Enable verbose logs for debugging" + "sectionAudioQuality": "Качество аудио", + "@sectionAudioQuality": { + "description": "Settings section header" }, - "@lyricsProvidersDiscardContent": { - "description": "Body text of the discard-changes dialog on lyrics provider page" + "sectionFileSettings": "Настройки файла", + "@sectionFileSettings": { + "description": "Settings section header" }, - "@dialogDisableHistoryTitle": { - "description": "Confirmation dialog title shown before disabling download history" + "sectionLyrics": "Тексты песен", + "@sectionLyrics": { + "description": "Settings section header" }, - "downloadLossyOpus128Subtitle": "Минимальный размер, ~4 Мб на трек", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" + "lyricsMode": "Режим текстов песен", + "@lyricsMode": { + "description": "Setting - how to save lyrics" }, - "@appName": { - "description": "App name - DO NOT TRANSLATE" + "lyricsModeDescription": "Выберите как сохранить тексты песен при скачивании", + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" }, - "libraryActions": "Действия", - "@libraryActions": { - "description": "Section header for library actions" + "lyricsModeEmbed": "Вписать в файл", + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" }, - "setupNoFolderSelected": "Папка не выбрана. Хотите использовать папку Музыка по умолчанию?", - "@setupNoFolderSelected": { - "description": "Prompt when no folder selected" + "lyricsModeEmbedSubtitle": "Встроить текст в метаданные FLAC", + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", - "trackSaveFailed": "Ошибка: {error}", - "@trackSaveFailed": { - "description": "Snackbar when save operation fails", - "placeholders": { - "error": { - "type": "String" - } - } + "lyricsModeExternal": "Внешний файл .lrc", + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" }, - "replayGainBatchConfirmTitle": "Добавить ReplayGain", - "@replayGainBatchConfirmTitle": { - "description": "Title of the batch ReplayGain confirmation dialog" + "lyricsModeExternalSubtitle": "Отдельный файл .lrc для плееров, таких, как Samsung Music", + "@lyricsModeExternalSubtitle": { + "description": "Subtitle for external option" }, - "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", - "@tutorialExtensionsTip1": { - "description": "Tutorial extensions tip 1" + "lyricsModeBoth": "Оба варианта", + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" }, - "@trackAddToQueue": { - "description": "Menu action to add a track to the playback queue" + "lyricsModeBothSubtitle": "Вписать и сохранить .lrc файл", + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" }, - "@cacheTrackLookup": { - "description": "Cache item title for track ID lookup cache" + "sectionColor": "Цвет", + "@sectionColor": { + "description": "Settings section header" }, - "@discographyNoAlbums": { - "description": "Error - no albums found for artist" + "sectionTheme": "Тема", + "@sectionTheme": { + "description": "Settings section header" }, - "@updateLater": { - "description": "Update button - dismiss" + "sectionLayout": "Разметка", + "@sectionLayout": { + "description": "Settings section header" }, - "@snackbarFailedToInstall": { - "description": "Snackbar - extension install error" + "sectionLanguage": "Язык", + "@sectionLanguage": { + "description": "Settings section header for language" }, - "@albumFolderArtistAlbumFlatSubtitle": { - "description": "Folder structure example for flat singles" + "appearanceLanguage": "Язык приложения", + "@appearanceLanguage": { + "description": "Language setting title" }, - "@errorMissingExtensionSource": { - "description": "Error - extension source not available", - "placeholders": { - "item": { - "type": "String" - } - } + "settingsAppearanceSubtitle": "Тема, цвета, дисплей", + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" }, - "libraryFilterSortAlbumAsc": "Альбом (А-Я)", - "@libraryFilterSortAlbumAsc": { - "description": "Sort option - album ascending" + "settingsDownloadSubtitle": "Сервис, качество, откат", + "@settingsDownloadSubtitle": { + "description": "Download settings description" }, - "@queueTrackCount": { - "description": "Track count label with plural support", + "settingsExtensionsSubtitle": "Управление провайдерами скачивания", + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" + }, + "settingsLogsSubtitle": "Просмотреть логи для отладки", + "@settingsLogsSubtitle": { + "description": "Logs settings description" + }, + "loadingSharedLink": "Загрузка общедоступной ссылки...", + "@loadingSharedLink": { + "description": "Status when opening shared URL" + }, + "pressBackAgainToExit": "Нажмите «Назад» ещё раз, чтобы выйти", + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, + "downloadAllCount": "Скачать все ({count})", + "@downloadAllCount": { + "description": "Download all button with count", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisMono": "Mono", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", + "tracksCount": "{count, plural, one {{count} трек} few {{count} трека} many {{count} треков} =1 {1 трек} other {{count} треков}}", + "@tracksCount": { + "description": "Track count display", "placeholders": { - "source": { - "type": "String" + "count": { + "type": "int" } } }, - "@lyricsModeEmbed": { - "description": "Lyrics mode option - embed in audio file" + "trackCopyFilePath": "Скопировать путь к файлу", + "@trackCopyFilePath": { + "description": "Action - copy file path" }, - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" + "trackRemoveFromDevice": "Удалить с устройства", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" }, - "@cacheRefreshStats": { - "description": "Button label to refresh cache statistics" + "trackLoadLyrics": "Загрузить текст песни", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" }, - "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", - "@lyricsProviderAppleMusicDesc": { - "description": "Description for Apple Music provider" + "trackMetadata": "Метаданные", + "@trackMetadata": { + "description": "Tab title - track metadata" }, - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" + "trackFileInfo": "Информация о файле", + "@trackFileInfo": { + "description": "Tab title - file information" }, - "updateFailedMessage": "Сбой загрузки обновления", - "@updateFailedMessage": { - "description": "Update error message" + "trackLyrics": "Текст песни", + "@trackLyrics": { + "description": "Tab title - lyrics" }, - "cacheEstimatedTotal": "Приблизительное использование кэша: {size}", - "@cacheEstimatedTotal": { - "description": "Total cache size shown in summary", - "placeholders": { - "size": { - "type": "String" - } - } + "trackFileNotFound": "Файл не найден", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" }, - "@aboutVersion": { - "description": "Version info label" + "trackOpenInDeezer": "Открыть в Deezer", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" }, - "dialogRetry": "Повторить", - "@cueSplitSplitting": { - "description": "Snackbar while splitting CUE", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "trackOpenInSpotify": "Открыть в Spotify", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" }, - "@searchSortTitleZA": { - "description": "Sort option - title descending" + "trackTrackName": "Название", + "@trackTrackName": { + "description": "Metadata label - track title" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", - "@tutorialLibraryTip2": { - "description": "Tutorial library tip 2" + "trackArtist": "Исполнитель", + "@trackArtist": { + "description": "Metadata label - artist name" }, - "extensionHealthServiceOffline": "Service offline", - "@extensionHealthServiceOffline": { - "description": "Tooltip for offline extension service" + "trackAlbumArtist": "Исполнитель альбома", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" }, - "actionDeselect": "Снять выделение", - "@actionDeselect": { - "description": "Action button - deselect all" + "trackAlbum": "Альбом", + "@trackAlbum": { + "description": "Metadata label - album name" }, - "@trackConvertOriginal": { - "description": "Label for keeping original bit depth or sample rate during conversion" + "trackTrackNumber": "Номер трека", + "@trackTrackNumber": { + "description": "Metadata label - track number" }, - "@libraryClearConfirmTitle": { - "description": "Dialog title for clear confirmation" + "trackDiscNumber": "Номер диска", + "@trackDiscNumber": { + "description": "Metadata label - disc number" }, - "@dialogDownloadAllMessage": { - "description": "Body of the Download All confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDuration": "Продолжительность", + "@trackDuration": { + "description": "Metadata label - track length" }, - "homeSupports": "Поддерживается: Трек, Альбом, Плейлист, URL исполнителя", - "@downloadedAlbumDeleteSelected": { - "description": "Button - delete selected tracks" + "trackAudioQuality": "Качество записи", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" }, - "@recentShowAllDownloads": { - "description": "Button label to unhide hidden downloads in recent access" + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" }, - "artistOptionRemoveFromFavorites": "Удалить из избранных исполнителей", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" + "trackReleaseDate": "Дата выхода", + "@trackReleaseDate": { + "description": "Metadata label - release date" }, - "collectionPlaylistEmptyTitle": "Плейлист пуст", - "@collectionPlaylistEmptyTitle": { - "description": "Playlist empty state title" + "trackGenre": "Жанр", + "@trackGenre": { + "description": "Metadata label - music genre" }, - "libraryFilterSortLatest": "Последние", - "@libraryFilterSortLatest": { - "description": "Sort option - newest first" + "trackLabel": "Заголовок", + "@trackLabel": { + "description": "Metadata label - record label" }, - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" + "trackCopyright": "Авторские права", + "@trackCopyright": { + "description": "Metadata label - copyright information" }, - "@selectionSelected": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDownloaded": "Скачано", + "@trackDownloaded": { + "description": "Metadata label - download date" }, - "@tracksCount": { - "description": "Track count display", + "trackCopyLyrics": "Копировать текст", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsSource": "Источник: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", "placeholders": { - "count": { - "type": "int" + "source": { + "type": "String" } } }, - "@optionsCheckUpdates": { - "description": "Auto update check toggle" - }, - "@qualityHiResFlacMaxSubtitle": { - "description": "Technical spec for hi-res max" - }, - "actionStop": "Stop", - "@actionStop": { - "description": "Generic action - stop" - }, - "@selectionSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "folderOrganizationNoneSubtitle": "Все файлы в папке загрузок", - "@folderOrganizationNoneSubtitle": { - "description": "Subtitle for no organization option" - }, - "@updateDownloading": { - "description": "Update status - downloading" + "trackLyricsNotAvailable": "Текст песни недоступен для этого трека", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" }, - "artistAlbums": "Альбомы", - "@artistAlbums": { - "description": "Section header for artist albums" + "trackLyricsNotInFile": "В этом файле не найдено текстов песен", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" }, - "trackConvertDitherTriangular": "TPDF", - "@trackConvertDitherTriangular": { - "description": "Lossless conversion triangular probability density function dither option" + "trackFetchOnlineLyrics": "Поиск в сети", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", - "@nowPlayingShuffleLibraryFailed": { - "description": "Snackbar when shuffling the library fails", - "placeholders": { - "error": { - "type": "String" - } - } + "trackLyricsTimeout": "Время ожидания запроса истекло. Повторите попытку позже.", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" }, - "@setupIcloudNotSupported": { - "description": "Error when user selects iCloud Drive on iOS" + "trackLyricsLoadFailed": "Не удалось загрузить текст песни", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" }, - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + "trackEmbedLyrics": "Вписать текст песни", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" }, - "@extensionsProviderPrioritySection": { - "description": "Section header - provider priority" + "trackLyricsEmbedded": "Текст успешно добавлен", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" }, - "@libraryShowDuplicateIndicatorSubtitle": { - "description": "Subtitle for duplicate indicator toggle" + "trackInstrumental": "Инструментальный трек", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" }, - "sectionDuplicates": "Duplicates", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" + "trackCopiedToClipboard": "Скопировано в буфер обмена", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" }, - "@backupTitle": { - "description": "App bar title for the backup and restore page" + "trackDeleteConfirmTitle": "Удалить с устройства?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" }, - "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", - "cacheSectionMaintenance": "Обслуживание", - "@cacheSectionMaintenance": { - "description": "Section header for cleanup actions" + "trackDeleteConfirmMessage": "Это приведет к окончательному удалению загруженного файла и его удалению из истории.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" }, - "@editMetadataFieldGenre": { - "description": "Chip label for genre field in auto-fill selector" + "dateToday": "Сегодня", + "@dateToday": { + "description": "Relative date - today" }, - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" + "dateYesterday": "Вчера", + "@dateYesterday": { + "description": "Relative date - yesterday" }, - "selectionBatchConvertConfirmMessage": "Преобразовать {count} {count, plural, =1{track} other{tracks}} в {format} с {bitrate}?", - "@selectionBatchConvertConfirmMessage": { - "description": "Confirmation dialog message for batch conversion", + "dateDaysAgo": "{count} дней назад", + "@dateDaysAgo": { + "description": "Relative date - days ago", "placeholders": { "count": { "type": "int" - }, - "format": { - "type": "String" - }, - "bitrate": { - "type": "String" } } }, - "@selectionTapPlaylistsToSelect": { - "description": "Hint shown in playlist selection mode" - }, - "qualityHiResFlacMaxSubtitle": "24-бит / до 192кГц", - "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", - "@snackbarRemovedTracksFromLoved": { - "description": "Snackbar after removing multiple tracks from Loved folder", + "dateWeeksAgo": "{count} недель назад", + "@dateWeeksAgo": { + "description": "Relative date - weeks ago", "placeholders": { "count": { "type": "int" } } }, - "folderOrganizationByArtistAlbum": "Исполнитель/Альбом", - "@folderOrganizationByArtistAlbum": { - "description": "Folder option - nested folders" - }, - "snackbarCannotOpenFile": "Невозможно открыть файл: {error}", - "@snackbarCannotOpenFile": { - "description": "Snackbar - file open error", + "dateMonthsAgo": "{count} месяцев назад", + "@dateMonthsAgo": { + "description": "Relative date - months ago", "placeholders": { - "error": { - "type": "String" + "count": { + "type": "int" } } }, - "@optionsDetailedLoggingOff": { - "description": "Status when logging disabled" - }, - "@setupStorageDescription": { - "description": "Explanation for storage permission" - }, - "audioAnalysisCodec": "Codec", - "@regionCountryFR": { - "description": "Country name for SongLink region picker" - }, - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" + "storeFilterAll": "Все", + "@storeFilterAll": { + "description": "Repo filter - all extensions" }, - "@libraryClearConfirmMessage": { - "description": "Dialog message for clear confirmation" + "storeFilterMetadata": "Метаданные", + "@storeFilterMetadata": { + "description": "Repo filter - metadata providers" }, - "trackLyricsNotAvailable": "Текст песни недоступен для этого трека", - "@trackLyricsNotAvailable": { - "description": "Message when lyrics not found" + "storeFilterDownload": "Скачивание", + "@storeFilterDownload": { + "description": "Repo filter - download providers" }, "storeFilterUtility": "Утилиты", "@storeFilterUtility": { "description": "Repo filter - utility extensions" }, - "collectionAddedToPlaylist": "Добавлено в \"{playlistName}\"", - "@collectionAddedToPlaylist": { - "description": "Snackbar after adding track to playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "storeFilterLyrics": "Тексты песен", + "@storeFilterLyrics": { + "description": "Repo filter - lyrics providers" }, - "cacheClearConfirmTitle": "Очистить кэш?", - "@cacheClearConfirmTitle": { - "description": "Dialog title before clearing one cache category" + "storeFilterIntegration": "Интеграция", + "@storeFilterIntegration": { + "description": "Repo filter - integrations" }, - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" + "storeClearFilters": "Очистить фильтры", + "@storeClearFilters": { + "description": "Button to clear all filters" }, - "@aboutMobileDeveloper": { - "description": "Role description for mobile dev" + "storeAddRepoTitle": "Добавить репозиторий расширения", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" }, - "albumFolderYearAlbum": "[Год] Альбом", - "@albumFolderYearAlbum": { - "description": "Album folder option with year" + "storeAddRepoDescription": "Введите URL-адрес репозитория GitHub, который содержит файл registry.json для просмотра и установки расширений.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" }, - "cacheTitle": "Хранилище и кэш", - "@extensionPostProcessing": { - "description": "Capability - post-download processing" + "storeRepoUrlLabel": "Ссылка на репозиторий", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" }, - "extensionsNoMetadataProvider": "Нет расширений с провайдером метаданных", - "@extensionsNoMetadataProvider": { - "description": "Empty state - no metadata providers" + "storeRepoUrlHint": "https://github.com/user/repo", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" }, - "searchSortTitleZA": "Название (Я-А)", - "@queueClearAllMessage": { - "description": "Clear queue confirmation" + "storeAddRepoButton": "Добавить репозиторий", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" }, - "audioAnalysisTitle": "Audio Quality Analysis", - "@audioAnalysisTitle": { - "description": "Title for audio analysis section" - }, - "@aboutReportIssueSubtitle": { - "description": "Subtitle for report issue" + "storeChangeRepoTooltip": "Изменить репозиторий", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" }, - "@audioAnalysisSampleRate": { - "description": "Sample rate metric label" + "storeRepoDialogTitle": "Репозиторий расширения", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" }, - "@discographySelectedCount": { - "description": "Selection count badge", - "placeholders": { - "count": { - "type": "int" - } - } + "storeRepoDialogCurrent": "Текущий репозиторий:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" }, - "qualityFlacLosslessSubtitle": "16-бит / 44.1 кГц", - "@qualityFlacLosslessSubtitle": { - "description": "Technical spec for lossless" + "storeNewRepoUrlLabel": "Новый URL репозитория", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" }, - "libraryScanFinalizing": "Завершение работы с библиотекой...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" + "storeLoadError": "Failed to load repository", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" }, - "@trackEditMetadata": { - "description": "Menu action - edit embedded metadata" + "storeEmptyNoExtensions": "No extensions available", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" }, - "@downloadNeteaseIncludeRomanization": { - "description": "Setting to include romanized lyrics from Netease" + "storeEmptyNoResults": "Расширения не найдены", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" }, - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" + "extensionId": "ID", + "@extensionId": { + "description": "Extension detail - unique ID" }, - "regionCountryDE": "Germany", - "@regionCountryDE": { - "description": "Country name for SongLink region picker" + "extensionError": "Ошибка", + "@extensionError": { + "description": "Extension detail - error message" }, - "optionsAutoFallback": "Автоматический переход", - "@optionsAutoFallback": { - "description": "Auto-retry with other services" + "extensionCapabilities": "Возможности", + "@extensionCapabilities": { + "description": "Section header - extension features" }, - "@trackMetadataPlay": { - "description": "Action button - play track" + "extensionMetadataProvider": "Провайдер метаданных", + "@extensionMetadataProvider": { + "description": "Capability - provides metadata" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" + "extensionDownloadProvider": "Провайдер скачивания", + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" }, - "aboutMobileDeveloper": "Разработчик мобильной версии", - "@trackDownloaded": { - "description": "Metadata label - download date" + "extensionLyricsProvider": "Провайдер текстов", + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" }, - "homeSkipAlreadyDownloaded": "Skip already downloaded songs", - "@homeSkipAlreadyDownloaded": { - "description": "Checkbox label in import dialog to skip already-downloaded songs" + "extensionUrlHandler": "URL-обработчик", + "@extensionUrlHandler": { + "description": "Capability - handles URLs" }, - "dialogUninstall": "Удалить", - "@dialogUninstall": { - "description": "Dialog button - uninstall extension" + "extensionQualityOptions": "Параметры качества", + "@extensionQualityOptions": { + "description": "Capability - quality selection" }, - "collectionDeletePlaylist": "Удалить плейлист", - "@collectionDeletePlaylist": { - "description": "Action to delete playlist" + "extensionPostProcessingHooks": "Хуки постобработки", + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" }, - "trackCoverOnline": "Online cover", - "@trackCoverOnline": { - "description": "Label shown when metadata autofill downloaded cover art from the internet" + "extensionPermissions": "Разрешения", + "@extensionPermissions": { + "description": "Section header - required permissions" }, - "downloadTitle": "Скачать", - "@downloadTitle": { - "description": "Download settings page title" + "extensionSettings": "Настройки", + "@extensionSettings": { + "description": "Section header - extension settings" }, - "searchArtists": "Исполнители", - "@searchArtists": { - "description": "Search result category - artists" + "extensionRemoveButton": "Удалить расширение", + "@extensionRemoveButton": { + "description": "Button to uninstall extension" }, - "extensionUrlHandler": "URL-обработчик", - "@extensionUrlHandler": { - "description": "Capability - handles URLs" + "extensionUpdated": "Обновлено", + "@extensionUpdated": { + "description": "Extension detail - last update" }, - "@timeHoursAgo": { - "description": "Relative time - hours ago", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionMinAppVersion": "Мин. версия приложения", + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" }, - "editMetadataAdvanced": "Advanced", - "@editMetadataAdvanced": { - "description": "Expandable section label for advanced metadata fields" + "extensionCustomTrackMatching": "Соответствие пользовательских треков", + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" }, - "@actionSelectAll": { - "description": "Action button - select all items" + "extensionPostProcessing": "Постобработка", + "@extensionPostProcessing": { + "description": "Capability - post-download processing" }, - "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", - "@timeMinutesAgo": { - "description": "Relative time - minutes ago", + "extensionHooksAvailable": "Доступно {count} хуков(ов)", + "@extensionHooksAvailable": { + "description": "Post-processing hooks count", "placeholders": { "count": { "type": "int" } } }, - "regionCountryXK": "Kosovo", - "@downloadAskQualitySubtitle": { - "description": "Subtitle for ask quality toggle" - }, - "setupLanguageSystemDefault": "Системные настройки", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "@updateAvailable": { - "description": "Update dialog title" - }, - "cacheEntries": "{count} записей", - "@cacheEntries": { - "description": "Track cache entry count", + "extensionPatternsCount": "{count} шаблон(ов)", + "@extensionPatternsCount": { + "description": "URL patterns count", "placeholders": { "count": { "type": "int" } } }, - "@notifLibraryScanExcluded": { - "description": "Library scan complete suffix - excluded track count", + "extensionStrategy": "Стратегия: {strategy}", + "@extensionStrategy": { + "description": "Track matching strategy name", "placeholders": { - "count": { - "type": "int" + "strategy": { + "type": "String" } } }, - "extensionsMetadataPrioritySubtitle": "Установка порядка поиска и источника метаданных", - "@extensionsMetadataPrioritySubtitle": { - "description": "Subtitle for metadata priority" + "extensionsProviderPrioritySection": "Приоритет провайдера", + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" }, - "downloadedAlbumSelectToDelete": "Выберите треки для удаления", - "@downloadedAlbumSelectToDelete": { - "description": "Placeholder when nothing selected" + "extensionsInstalledSection": "Установленные расширения", + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" }, - "@dialogClearHistoryTitle": { - "description": "Dialog title - clear download history" + "extensionsNoExtensions": "Нет установленных расширений", + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" }, - "tutorialSettingsTip1": "Изменить местоположение и организацию папок для скачивания", - "@tutorialSettingsTip1": { - "description": "Tutorial settings tip 1" + "extensionsNoExtensionsSubtitle": "Установите .spotiflac-ext файлы для добавления новых провайдеров", + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, + "extensionsInstallButton": "Установить расширение", + "@extensionsInstallButton": { + "description": "Button to install extension from file" }, + "extensionsInfoTip": "Расширения могут добавлять новые метаданные и провайдеров загрузки. Устанавливайте только расширения из надежных источников.", + "@extensionsInfoTip": { + "description": "Security warning about extensions" + }, + "extensionsInstalledSuccess": "Расширение успешно установлено", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "allFilesAccessDisabledSubtitle": "Ограничено только папками медиа", - "@allFilesAccessDisabledSubtitle": { - "description": "Subtitle when all files access is disabled" - }, - "@appearanceHistoryViewList": { - "description": "List layout option" + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } }, - "@notifAlreadyInLibraryCount": { - "description": "Notification title when track is already in library, with count", + "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", + "@extensionsInstallPartialSuccess": { + "description": "Message when installing multiple extensions partially succeeds", "placeholders": { - "completed": { - "type": "int" + "installed": { + "type": "int", + "description": "Number of successfully installed extensions" }, - "total": { - "type": "int" + "attempted": { + "type": "int", + "description": "Number of selected extensions" } } }, - "@libraryFilterAll": { - "description": "Filter chip - show all library items" - }, - "settingsDownload": "Скачивание", - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" + "extensionsDownloadPriority": "Приоритет скачивания", + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" }, - "@libraryFilterSort": { - "description": "Filter section - sort order" + "extensionsDownloadPrioritySubtitle": "Установка порядок сервисов скачивания", + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" }, - "metadataProvidersSubtitle": "Drag to set search and metadata source order", - "@extensionPermissions": { - "description": "Section header - required permissions" + "extensionsFallbackTitle": "Fallback Extensions", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "selectionSelectToDelete": "Выберите треки для удаления", - "@libraryExternalPlayerSubtitle": { - "description": "Subtitle for external player option" + "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" }, - "extensionVerificationOpenBrowser": "Open browser", - "@extensionVerificationOpenBrowser": { - "description": "Button to open the extension verification URL in a browser" + "extensionsNoDownloadProvider": "Нет расширений с провайдером загрузки", + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" }, - "@trackConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless-to-lossless conversion", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionsMetadataPriority": "Приоритет метаданных", + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" }, - "@snackbarAddedTracksToQueue": { - "description": "Snackbar - multiple tracks added to queue", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsMetadataPrioritySubtitle": "Установка порядка поиска и источника метаданных", + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" }, - "@backupContentsWishlist": { - "description": "Backup contents row for wishlist tracks count", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsNoMetadataProvider": "Нет расширений с провайдером метаданных", + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" }, - "@cacheCleanupUnusedSubtitle": { - "description": "Subtitle for cleanup unused data action" + "extensionsSearchProvider": "Провайдер поиска", + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" }, - "trackLabel": "Заголовок", - "@trackLabel": { - "description": "Metadata label - record label" + "extensionsNoCustomSearch": "Нет расширений с пользовательским поиском", + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" }, - "@collectionAddedToLoved": { - "description": "Snackbar after adding track to loved folder", - "placeholders": { - "trackName": { - "type": "String" - } - } + "extensionsSearchProviderDescription": "Выберите, какой сервис использовать для поиска треков", + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" }, - "regionCountryGB": "United Kingdom", - "dialogCancel": "Отмена", - "@dialogCancel": { - "description": "Dialog button - cancel action" + "extensionsCustomSearch": "Пользовательский поиск", + "@extensionsCustomSearch": { + "description": "Label for custom search provider" }, - "@folderOrganizationByArtistAlbumSubtitle": { - "description": "Subtitle for nested folder option" + "extensionsErrorLoading": "Ошибка загрузки расширения", + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" }, - "@notifAllDownloadsComplete": { - "description": "Notification title when all downloads finish successfully" + "qualityFlacLossless": "FLAC Lossless", + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" }, - "setupEnableNotifications": "Включить уведомления", - "@setupEnableNotifications": { - "description": "Button to enable notifications" + "qualityFlacLosslessSubtitle": "16-бит / 44.1 кГц", + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" }, - "@notifFinalizingTrack": { - "description": "Notification title while finalizing (embedding metadata) a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "qualityHiResFlac": "Hi-Res FLAC", + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" }, - "@downloadLossy320FormatDesc": { - "description": "Description in the lossy format picker" + "qualityHiResFlacSubtitle": "24-бит / до 96кГц", + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" }, - "filenameFormat": "Формат имени файла", - "@filenameFormat": { - "description": "Setting title - filename pattern" + "qualityHiResFlacMax": "Hi-Res FLAC Макс.", + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" }, - "historySearchHint": "Поиск в истории...", - "@historySearchHint": { - "description": "Search bar placeholder in history" + "qualityHiResFlacMaxSubtitle": "24-бит / до 192кГц", + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" }, - "@tutorialReadyMessage": { - "description": "Tutorial completion message" + "downloadLossy320": "С потерями 320 кбит/с", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" }, - "cacheTempDirectoryDesc": "Временные файлы из загрузок и аудио конвертации.", - "@cacheTempDirectoryDesc": { - "description": "Description of what temporary directory contains" + "downloadLossyFormat": "Формат с потерями", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" }, - "@trackSaveLyrics": { - "description": "Menu action - save lyrics as .lrc file" + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" }, - "@notifDownloadsFinished": { - "description": "Notification title when queue finishes with some failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" }, - "@historyFilterAlbums": { - "description": "Filter chip - show albums only" + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" }, - "trackEmbedLyrics": "Вписать текст песни", - "@trackEmbedLyrics": { - "description": "Action - embed lyrics into audio file" + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" }, - "@downloadPrimaryArtistOnlyOff": { - "description": "Status label when primary-artist-only folder naming is disabled" + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" }, - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" }, - "snackbarHistoryCleared": "История очищена", - "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", - "@artistPopular": { - "description": "Section header for popular/top tracks" + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" }, - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" }, - "extensionLyricsProvider": "Провайдер текстов", - "@extensionLyricsProvider": { - "description": "Capability - provides lyrics" + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" }, - "historyFilterAll": "Все", - "@historyFilterAll": { - "description": "Filter chip - show all items" + "downloadLossy320Format": "Формат с потерями 320 кбит/с", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" }, - "tutorialSearchTitle": "Поиск музыки", - "@lyricsModeExternal": { - "description": "Lyrics mode option - separate LRC file" + "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "@downloadLossy320FormatDesc": { + "description": "Description in the lossy format picker" }, - "@actionDismiss": { - "description": "Generic action - dismiss" + "downloadLossyMp3": "MP3 320 кбит/с", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" }, - "trackOpenInSpotify": "Открыть в Spotify", - "@trackOpenInSpotify": { - "description": "Action - open track in Spotify app" + "downloadLossyMp3Subtitle": "Наилучшая совместимость, ~10 Мб на трек", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" }, - "@libraryClear": { - "description": "Button to clear all library entries" + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "discographyFailedToFetch": "Не удалось получить некоторые альбомы", - "@filenameShowAdvancedTagsDescription": { - "description": "Description for advanced filename tag toggle" + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" }, - "@storeUpdate": { - "description": "Update available button" + "downloadLossyOpus256": "Opus 256 кбит/с", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" }, - "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", - "@collectionPlaylistTracks": { - "description": "Track count label for custom playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" }, - "optionsPrimaryProviderSubtitle": "Сервис для поиска по названию трека или альбома", - "@optionsPrimaryProviderSubtitle": { - "description": "Subtitle for primary provider" + "downloadLossyOpus128": "Opus 128 кбит/с", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" }, - "@downloadEmbedLyricsDisabled": { - "description": "Subtitle when lyrics embedding is blocked by metadata toggle" + "downloadLossyOpus128Subtitle": "Минимальный размер, ~4 Мб на трек", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" }, - "@librarySourceLocal": { - "description": "Badge for tracks from local library scan" + "downloadAskBeforeDownload": "Спрашивать перед скачиванием", + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" }, - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" + "downloadDirectory": "Папка для скачивания", + "@downloadDirectory": { + "description": "Setting - download folder" }, - "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is off" + "downloadSeparateSinglesFolder": "Отдельная папка для синглов", + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" }, - "queueDownloadingCount": "Скачивание ({count})", - "@queueDownloadingCount": { - "description": "Header for active downloads section with count", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAlbumFolderStructure": "Структура папок альбома", + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" }, - "extensionVerificationBrowserInApp": "In-app", - "trackAudioQuality": "Качество записи", - "@trackAudioQuality": { - "description": "Metadata label - audio quality" - }, - "libraryRemovedMissingFiles": "Удалено {count} {count, plural, one{отсутствующий файл} few{трека} many{отсутствующих файлов} other{отсутствующих файлов}} в библиотеке", - "@libraryRemovedMissingFiles": { - "description": "Snackbar after cleanup", - "placeholders": { - "count": { - "type": "int" - } - } + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" }, - "collectionFavoriteArtistsEmptyTitle": "Нет избранных исполнителей", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" + "downloadUseAlbumArtistForFolders": "Использовать исполнителя альбома для папок", + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "@errorInvalidFolderSelected": { - "description": "Error when the selected folder is invalid" + "downloadUsePrimaryArtistOnly": "Основной исполнитель только для папок", + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" }, - "@searchSortArtistZA": { - "description": "Sort option - artist descending" + "downloadUsePrimaryArtistOnlyEnabled": "Список исполнителей, чьи работы были удалены из названия папки (например, Джастин Бибер, Quavo → Джастин Бибер)", + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" }, - "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", - "@snackbarAddedTracksToLoved": { - "description": "Snackbar after adding multiple tracks to Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadUsePrimaryArtistOnlyDisabled": "Полная строка исполнителя, используемая для имени папки", + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" }, - "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", - "@cancelDownloadContent": { - "description": "Dialog body when confirming cancellation of an active download", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadSelectQuality": "Выбор качества", + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" }, - "settingsCacheSubtitle": "Просмотреть размер и очистить кэш", - "@settingsCacheSubtitle": { - "description": "Subtitle for cache management menu" + "downloadFrom": "Скачивать из", + "@downloadFrom": { + "description": "Label - download source" }, - "notifLibraryScanCompleteBody": "{count} треков индексировано", - "@cacheSizeWithFiles": { - "description": "Cache size and file count", - "placeholders": { - "size": { - "type": "String" - }, - "count": { - "type": "int" - } - } + "appearanceAmoledDark": "AMOLED", + "@appearanceAmoledDark": { + "description": "Theme option - pure black" }, - "@downloadAskBeforeDownload": { - "description": "Setting - show quality picker" + "appearanceAmoledDarkSubtitle": "Глубокий чёрный фон", + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" }, - "@extensionHealthDegraded": { - "description": "Extension service health status - degraded" + "appearanceHeroAnimations": "Hero animations", + "@appearanceHeroAnimations": { + "description": "Toggle for shared-element (Hero) transitions" }, - "@sectionPerformance": { - "description": "Settings section header" + "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", + "@appearanceHeroAnimationsSubtitle": { + "description": "Subtitle for the Hero animations toggle" }, - "@trackCoverCurrent": { - "description": "Label for the currently embedded cover preview" + "appearanceForceBlur": "Always use blur effects", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" }, - "discographySelectAlbums": "Выбрать альбомы...", - "@discographySelectAlbums": { - "description": "Option - manually select albums to download" + "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" }, - "aboutAppDescription": "Ищите метаданных музыки, управляйте расширениями и организуйте свою библиотеку.", - "@aboutAppDescription": { - "description": "App description in header card" + "queueClearAll": "Очистить всё", + "@queueClearAll": { + "description": "Button - clear all queue items" }, - "extensionCustomTrackMatching": "Соответствие пользовательских треков", - "@extensionCustomTrackMatching": { - "description": "Capability - custom track matching algorithm" + "queueClearAllMessage": "Вы уверены, что хотите очистить все загрузки?", + "@queueClearAllMessage": { + "description": "Clear queue confirmation" }, - "@editMetadataSelectNone": { - "description": "Button to clear selected fields for auto-fill" + "settingsAutoExportFailed": "Автоэкспорт неудачных загрузок", + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" }, - "@trackPlayNext": { - "description": "Menu action to play a track as the next queue item" + "settingsAutoExportFailedSubtitle": "Автоматическое сохранение неудачных загрузок в TXT файл", + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" }, - "extensionCapabilities": "Возможности", - "@extensionCapabilities": { - "description": "Section header - extension features" + "settingsDownloadNetwork": "Сеть для скачивания", + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" }, - "@downloadSelectServiceToEnable": { - "description": "Subtitle when quality picker is disabled due to extension service" + "settingsDownloadNetworkAny": "WiFi и Мобильная сеть", + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" }, - "logIssueRateLimitedDescription": "Too many requests to the service", - "@logIssueRateLimitedDescription": { - "description": "Diagnostic badge description for rate limiting" + "settingsDownloadNetworkWifiOnly": "Только WiFi", + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" }, - "@actionResume": { - "description": "Action button - resume download" + "settingsDownloadNetworkSubtitle": "Выберите, какую сеть использовать для скачивания. Когда установлено значение только WiFi — скачивания через мобильную сеть будут приостановлены.", + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" }, - "@updateDownloadInstall": { - "description": "Update button - download and install" + "settingsConcurrentDownloads": "Concurrent downloads", + "@settingsConcurrentDownloads": { + "description": "Setting title - how many tracks download at the same time" }, - "downloadLossy320Format": "Формат с потерями 320 кбит/с", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" + "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", + "@settingsConcurrentDownloadsSubtitle": { + "description": "Subtitle explaining the concurrent downloads picker" }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@trackCopyright": { - "description": "Metadata label - copyright information" + "concurrentDownloadsOne": "1 track at a time", + "@concurrentDownloadsOne": { + "description": "Concurrent downloads option - sequential" }, - "@snackbarExtensionInstalled": { - "description": "Snackbar - extension installed successfully", + "concurrentDownloadsCount": "Up to {count} tracks at once", + "@concurrentDownloadsCount": { + "description": "Concurrent downloads option - parallel", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "@regionCountryJP": { - "description": "Country name for SongLink region picker" + "albumFolderArtistAlbum": "Исполнитель / Альбом", + "@albumFolderArtistAlbum": { + "description": "Album folder option" }, - "trackReEnrichOnlineSubtitle": "Поиск в сети метаданных и встраивание в файл", - "@trackReEnrichOnlineSubtitle": { - "description": "Subtitle for re-enrich metadata action for local items" + "albumFolderArtistAlbumSubtitle": "Альбомы/Исполнитель/Название Альбома/", + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" }, - "nowPlayingNothingPlaying": "Nothing is playing", - "@nowPlayingNothingPlaying": { - "description": "Empty state when no track is currently playing" + "albumFolderArtistYearAlbum": "Исполнитель / [Год] Альбом", + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", - "@tutorialDownloadDesc": { - "description": "Tutorial download page description" + "albumFolderArtistYearAlbumSubtitle": "Альбомы/Исполнитель/[2005] Название Альбома/", + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" }, - "@appearanceTitle": { - "description": "Appearance settings page title" + "albumFolderAlbumOnly": "Только альбом", + "@albumFolderAlbumOnly": { + "description": "Album folder option" }, - "@backupExportSectionDescription": { - "description": "Description of what a backup contains" + "albumFolderAlbumOnlySubtitle": "Альбомы/Название Альбома/", + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" }, - "@downloadLossyOpus128": { - "description": "Lossy format option - Opus 128kbps" + "albumFolderYearAlbum": "[Год] Альбом", + "@albumFolderYearAlbum": { + "description": "Album folder option with year" }, - "@logFilterSection": { - "description": "Filter section title" + "albumFolderYearAlbumSubtitle": "Альбомы/[2005] Название Альбома /", + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" }, - "trackReEnrichSuccess": "Метаданные успешно обновлены", - "@trackReEnrichSuccess": { - "description": "Snackbar after successful re-enrichment" + "albumFolderArtistAlbumSingles": "Исполнитель / Альбом + Синглы", + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", - "@backupContentsHistory": { - "description": "Backup contents row for history count", + "albumFolderArtistAlbumSinglesSubtitle": "Исполнитель/Альбом и Исполнитель/Сингл/", + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", + "@albumFolderArtistAlbumFlat": { + "description": "Album folder option with singles directly in artist folder" + }, + "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", + "@albumFolderArtistAlbumFlatSubtitle": { + "description": "Folder structure example for flat singles" + }, + "downloadedAlbumDeleteSelected": "Удалить выбранные", + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" + }, + "downloadedAlbumDeleteMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from this album?\n\nThis will also delete the files from storage.", + "@downloadedAlbumDeleteMessage": { + "description": "Delete confirmation with count", "placeholders": { "count": { "type": "int" } } }, - "snackbarAddedToQueue": "\"{trackName}\" добавлен в очередь", - "@snackbarAddedToQueue": { - "description": "Snackbar - track added to download queue", + "downloadedAlbumSelectedCount": "{count} выбрано", + "@downloadedAlbumSelectedCount": { + "description": "Selection count indicator", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "libraryAutoScanOnOpen": "Каждое открытие приложения", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "audioAnalysisChannels": "Каналы", - "@audioAnalysisChannels": { - "description": "Channels metric label" + "downloadedAlbumTapToSelect": "Нажмите на треки для выбора", + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" }, - "appearanceHistoryViewList": "Список", - "updateDownloadInstall": "Скачать и установить", - "@libraryShowDuplicateIndicator": { - "description": "Toggle for duplicate indicator in search" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "searchSortTitleAZ": "Название (А-Я)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "collectionRemovedFromLoved": "\"{trackName}\" удалено из Любимых", - "@collectionRemovedFromLoved": { - "description": "Snackbar after removing track from loved folder", + "downloadedAlbumDeleteCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "@downloadedAlbumDeleteCount": { + "description": "Delete button text with count", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "sectionAudioQuality": "Качество аудио", - "@sectionAudioQuality": { - "description": "Settings section header" + "downloadedAlbumSelectToDelete": "Выберите треки для удаления", + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" }, - "trackConvertSuccess": "Успешно конвертировано в {format}", - "@trackConvertSuccess": { - "description": "Snackbar after successful conversion", + "downloadedAlbumDiscHeader": "Диск {discNumber}", + "@downloadedAlbumDiscHeader": { + "description": "Header for disc separator in multi-disc albums", "placeholders": { - "format": { - "type": "String" + "discNumber": { + "type": "int", + "example": "1" } } }, - "dialogUninstallExtensionMessage": "Вы уверены, что хотите удалить {extensionName}?", - "@dialogUninstallExtensionMessage": { - "description": "Dialog message - uninstall specific extension", + "recentTypeArtist": "Исполнитель", + "@recentTypeArtist": { + "description": "Recent access item type - artist" + }, + "recentTypeAlbum": "Альбом", + "@recentTypeAlbum": { + "description": "Recent access item type - album" + }, + "recentTypeSong": "Песня", + "@recentTypeSong": { + "description": "Recent access item type - song/track" + }, + "recentTypePlaylist": "Плейлист", + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" + }, + "recentEmpty": "Нет недавних элементов", + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, + "recentShowAllDownloads": "Показать все загрузки", + "@recentShowAllDownloads": { + "description": "Button label to unhide hidden downloads in recent access" + }, + "recentPlaylistInfo": "Плейлист: {name}", + "@recentPlaylistInfo": { + "description": "Snackbar message when tapping playlist in recent access", "placeholders": { - "extensionName": { - "type": "String" + "name": { + "type": "String", + "description": "Playlist name" } } }, - "downloadNativeWorkerSubtitle": "Фоновая служба Android для загрузок через расширения", - "@downloadNativeWorkerSubtitle": { - "description": "Setting subtitle for Android native download worker" + "discographyDownload": "Скачать дискографию", + "@discographyDownload": { + "description": "Button - download artist discography" }, - "storeUpdate": "Обновить", - "libraryFilterMetadataMissingAny": "Не хватает метаданных", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" + "discographyDownloadAll": "Скачать всё", + "@discographyDownloadAll": { + "description": "Option - download entire discography" }, - "@selectionBatchConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless batch conversion", + "discographyDownloadAllSubtitle": "{count} треков из {albumCount} релизов", + "@discographyDownloadAllSubtitle": { + "description": "Subtitle showing total tracks and albums", "placeholders": { "count": { "type": "int" }, - "format": { - "type": "String" - }, - "quality": { - "type": "String" + "albumCount": { + "type": "int" } } }, - "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", - "@editMetadataAutoFillDesc": { - "description": "Description for the auto-fill section" - }, - "@lyricsProviderExtensionDesc": { - "description": "Generic description for extension-based lyrics providers" - }, - "downloadSongLinkRegion": "Регион SongLink", - "@downloadSongLinkRegion": { - "description": "Setting for SongLink region used during fallback resolution" - }, - "shareSheetNoExtensions": "No other compatible services", - "@shareSheetNoExtensions": { - "description": "Empty state when no extensions can be searched for cross-service links" + "discographyAlbumsOnly": "Только альбомы", + "@discographyAlbumsOnly": { + "description": "Option - download only albums" }, - "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", - "@queueFlacConfirmMessage": { - "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", + "discographyAlbumsOnlySubtitle": "{count} треков из {albumCount} альбомов", + "@discographyAlbumsOnlySubtitle": { + "description": "Subtitle showing album tracks count", "placeholders": { "count": { "type": "int" + }, + "albumCount": { + "type": "int" } } }, - "tooltipAddToPlaylist": "Добавить в плейлист", - "@tooltipAddToPlaylist": { - "description": "Tooltip for the Add to Playlist button" + "discographySinglesOnly": "Только синглы и EP", + "@discographySinglesOnly": { + "description": "Option - download only singles" }, - "@snackbarAddedToQueueGeneric": { - "description": "Snackbar when a track is added to the playback queue without naming it" + "discographySinglesOnlySubtitle": "{count} треков из {albumCount} синглов", + "@discographySinglesOnlySubtitle": { + "description": "Subtitle showing singles tracks count", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } }, - "@tutorialSettingsTip2": { - "description": "Tutorial settings tip 2" + "discographySelectAlbums": "Выбрать альбомы...", + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" }, - "extensionPermissions": "Разрешения", - "releaseTypeSingle": "Single", - "aboutTelegramChannelSubtitle": "Объявления и обновления", - "@aboutTelegramChannelSubtitle": { - "description": "Subtitle for Telegram channel" + "discographySelectAlbumsSubtitle": "Выберите конкретные альбомы или синглы", + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" }, - "@dialogDisableAndClear": { - "description": "Confirmation action to disable download history and clear existing entries" + "discographyFetchingTracks": "Получение треков...", + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" }, - "@homeSearchHintProvider": { - "description": "Placeholder for the main search field when a provider is selected", + "discographyFetchingAlbum": "Получение {current} из {total}...", + "@discographyFetchingAlbum": { + "description": "Progress - fetching specific album", "placeholders": { - "providerName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "metadataProvidersTitle": "Metadata Provider Priority", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "trackAddToQueue": "Add to queue", - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" + "discographySelectedCount": "{count} выбрано", + "@discographySelectedCount": { + "description": "Selection count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@editMetadataSelectEmpty": { - "description": "Button to select only fields that are currently empty" + "discographyDownloadSelected": "Скачать выбранное", + "@discographyDownloadSelected": { + "description": "Button - download selected albums" }, - "collectionAlreadyInPlaylist": "Уже в \"{playlistName}\"", - "discographyAlbumsOnlySubtitle": "{count} треков из {albumCount} альбомов", - "@discographyAlbumsOnlySubtitle": { - "description": "Subtitle showing album tracks count", + "discographyAddedToQueue": "Добавлено {count} треков в очередь", + "@discographyAddedToQueue": { + "description": "Snackbar - tracks added from discography", "placeholders": { "count": { "type": "int" + } + } + }, + "discographySkippedDownloaded": "{added} добавлено, {skipped} уже скачано", + "@discographySkippedDownloaded": { + "description": "Snackbar - with skipped tracks count", + "placeholders": { + "added": { + "type": "int" }, - "albumCount": { + "skipped": { "type": "int" } } }, - "setupNotificationEnable": "Включить уведомления", - "@setupNotificationEnable": { - "description": "Button to enable notifications" - }, - "settingsAppearanceSubtitle": "Тема, цвета, дисплей", - "@settingsAppearanceSubtitle": { - "description": "Appearance settings description" + "discographyNoAlbums": "Нет доступных альбомов", + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" }, - "@notifUpdateFailedBody": { - "description": "Notification body when app update download fails" + "discographyFailedToFetch": "Не удалось получить некоторые альбомы", + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" }, - "@aboutOriginalCreator": { - "description": "Role description for original creator" + "sectionStorageAccess": "Доступ к хранилищу", + "@sectionStorageAccess": { + "description": "Section header for storage access settings" }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", - "@libraryBuiltInPreviewPlayer": { - "description": "Setting option to use the built-in preview player" + "allFilesAccess": "Доступ ко всем файлам", + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "tooltipPlay": "Воспроизвести", - "@tooltipPlay": { - "description": "Tooltip - play button" + "allFilesAccessEnabledSubtitle": "Можно записать в любую папку", + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" }, - "@safMigrationMessage2": { - "description": "Second paragraph of SAF migration dialog" + "allFilesAccessDisabledSubtitle": "Ограничено только папками медиа", + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" }, - "@extensionsSearchProvider": { - "description": "Setting - search provider selection" + "allFilesAccessDescription": "Включите, если вы сталкиваетесь с ошибками записи при сохранении в пользовательские папки. Android 13+ по умолчанию ограничивает доступ к определенным папкам.", + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" }, - "libraryAboutDescription": "Сканирует существующую коллекцию музыки для обнаружения дубликатов при загрузке. Поддерживает форматы FLAC, M4A, MP3, Opus и OGG. Метаданные читаются из тегов файлов, если доступны.", - "@libraryAboutDescription": { - "description": "Description of local library feature" - }, - "downloadAskBeforeDownload": "Спрашивать перед скачиванием", - "nowPlayingNoMetadata": "No metadata available", - "@nowPlayingNoMetadata": { - "description": "Empty state when track metadata cannot be loaded" - }, - "trackInstrumental": "Инструментальный трек", - "@trackInstrumental": { - "description": "Message when track is instrumental (no lyrics)" + "allFilesAccessDeniedMessage": "В разрешении отказано. Пожалуйста, включите функцию «Доступ ко всем файлам» в настройках системы.", + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" }, - "@collectionWishlistEmptyTitle": { - "description": "Wishlist empty state title" + "allFilesAccessDisabledMessage": "Доступ ко всем файлам отключен. Приложение будет использовать ограниченный доступ к хранилищу.", + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", - "downloadDeduplication": "Skip Duplicate Downloads", - "libraryFilterSortOldest": "Старые", - "@libraryFilterSortOldest": { - "description": "Sort option - oldest first" + "settingsLocalLibrary": "Локальная библиотека", + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" }, - "setupSkip": "Пропустить", - "@setupSkip": { - "description": "Skip current step button" + "settingsLocalLibrarySubtitle": "Сканировать и обнаружить дубликаты", + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" }, - "@setupFolderDescription": { - "description": "Explanation for folder selection" + "settingsCache": "Хранилище и кэш", + "@settingsCache": { + "description": "Settings menu item - cache management" }, - "@settingsLogsSubtitle": { - "description": "Logs settings description" + "settingsCacheSubtitle": "Просмотреть размер и очистить кэш", + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" }, - "storeNewRepoUrlLabel": "Новый URL репозитория", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" + "libraryTitle": "Локальная библиотека", + "@libraryTitle": { + "description": "Library settings page title" }, - "cacheClearConfirmMessage": "Это очистит кэш для {target}. Загруженные музыкальные файлы не будут удалены.", - "@cacheClearConfirmMessage": { - "description": "Dialog message before clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "libraryScanSettings": "Настройки сканирования", + "@libraryScanSettings": { + "description": "Section header for scan settings" }, - "trackMetadataPlay": "Воспроизвести", + "libraryEnableLocalLibrary": "Включить локальную библиотеку", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, - "optionsUpdateChannel": "Канал обновлений", - "@optionsUpdateChannel": { - "description": "Stable vs preview releases" + "libraryEnableLocalLibrarySubtitle": "Сканировать и отслеживать вашу существующую музыку", + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" }, - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist folder is disabled" + "libraryFolder": "Папка библиотеки", + "@libraryFolder": { + "description": "Folder selection setting" }, - "@extensionRefreshStatus": { - "description": "Tooltip for refreshing extension service health status" + "libraryFolderHint": "Нажмите, чтобы выбрать папку", + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", - "@backupRestoreRestartHint": { - "description": "Hint shown after restoring that an app restart is recommended" + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" }, - "@snackbarExtensionInstalledEnable": { - "description": "Snackbar after installing an extension from the repo tab", + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", "placeholders": { - "extensionName": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { "type": "String" } } }, - "settingsAutoExportFailedSubtitle": "Автоматическое сохранение неудачных загрузок в TXT файл", - "@settingsAutoExportFailedSubtitle": { - "description": "Subtitle for auto-export setting" - }, - "searchSortArtistAZ": "Исполнитель (А-Я)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" }, - "editMetadataFieldAlbumArtist": "Исполнитель альбома", - "@editMetadataFieldAlbumArtist": { - "description": "Chip label for album artist field in auto-fill selector" + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" }, - "@queueEmptyHistory": { - "description": "Empty state title when download history is empty" + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" }, - "@dialogDisableHistoryMessage": { - "description": "Confirmation dialog message shown before disabling download history" + "libraryShowDuplicateIndicator": "Показать индикатор дубликатов", + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" }, - "queueFlacNoReliableMatches": "No reliable online matches found for the selection", - "@queueFlacNoReliableMatches": { - "description": "Snackbar when no safe FLAC redownload matches were found" + "libraryShowDuplicateIndicatorSubtitle": "Показать при поиске существующих треков", + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" }, - "trackOpenInDeezer": "Открыть в Deezer", - "@trackOpenInDeezer": { - "description": "Action - open track in Deezer app" + "libraryAutoScan": "Автосканирование", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" }, - "setupChooseFromFilesSubtitle": "Выберите iCloud или другое местоположение", - "@setupChooseFromFilesSubtitle": { - "description": "Subtitle for file picker" + "libraryAutoScanSubtitle": "Automatically scan your library for new files", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" }, - "artistMonthlyListeners": "{count} слушателей в месяц", - "@artistMonthlyListeners": { - "description": "Monthly listener count display", - "placeholders": { - "count": { - "type": "String", - "description": "Formatted listener count" - } - } + "libraryAutoScanOff": "Off", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" }, - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" + "libraryAutoScanOnOpen": "Каждое открытие приложения", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" }, - "cacheSectionStorage": "Кэшированные данные", - "@cacheSectionStorage": { - "description": "Section header for cache entries" + "libraryAutoScanDaily": "Ежедневно", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" }, + "libraryAutoScanWeekly": "Еженедельно", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "tutorialDownloadCompletedSemantics": "Download completed", - "@tutorialDownloadCompletedSemantics": { - "description": "Accessibility label for completed download state in tutorial demo" + "libraryActions": "Действия", + "@libraryActions": { + "description": "Section header for library actions" }, - "@logNoLogsYet": { - "description": "Empty state title" + "libraryScan": "Сканировать библиотеку", + "@libraryScan": { + "description": "Button to start library scan" }, - "@selectionDeletePlaylistsCount": { - "description": "Button label for deleting multiple selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryScanSubtitle": "Сканировать аудио файлы", + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" }, - "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", - "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is on" + "libraryScanSelectFolderFirst": "Сначала выберите папку", + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" }, - "setupAppDocumentsFolder": "Папка Документы приложения", - "@setupAppDocumentsFolder": { - "description": "iOS documents folder option" + "libraryCleanupMissingFiles": "Очистка отсутствующих файлов", + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" }, - "storeLoadError": "Failed to load repository", - "settingsDownloadNetwork": "Сеть для скачивания", - "metadataSaveFailedStorage": "Не удалось записать метаданные обратно в хранилище", - "@logAutoScrollOff": { - "description": "Tooltip when auto-scroll is disabled on the log screen" + "libraryCleanupMissingFilesSubtitle": "Удалить записи для файлов, которых больше не существует", + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" }, - "@trackConvertFormat": { - "description": "Menu item - convert audio format" + "libraryClear": "Очистить библиотеку", + "@libraryClear": { + "description": "Button to clear all library entries" }, - "optionsArtistTagModeJoined": "Single joined value", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" + "libraryClearSubtitle": "Удалить все сканированные треки", + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" }, - "@dateYesterday": { - "description": "Relative date - yesterday" + "libraryClearConfirmTitle": "Очистить библиотеку", + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" }, - "@settingsExtensionsSubtitle": { - "description": "Extensions settings description" + "libraryClearConfirmMessage": "Это удалит все сканированные треки из вашей библиотеки. Ваши фактические файлы не будут удалены.", + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" }, - "searchSortArtistZA": "Исполнитель (Я-А)", - "@extensionSettings": { - "description": "Section header - extension settings" + "libraryAbout": "О локальной библиотеке", + "@libraryAbout": { + "description": "Section header for about info" }, - "@extensionOauthConnectHint": { - "description": "Hint for an OAuth login link field before connecting Spotify" + "libraryAboutDescription": "Сканирует существующую коллекцию музыки для обнаружения дубликатов при загрузке. Поддерживает форматы FLAC, M4A, MP3, Opus и OGG. Метаданные читаются из тегов файлов, если доступны.", + "@libraryAboutDescription": { + "description": "Description of local library feature" }, - "@notifUpdateReady": { - "description": "Notification title when app update download is complete" + "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@regionCountryMX": { - "description": "Country name for SongLink region picker" - }, - "@nowPlayingOpenInExternalPlayer": { - "description": "Menu item to open the current track in an external player" - }, - "trackConvertDithering": "Dithering", - "@trackConvertDithering": { - "description": "Section label for lossless conversion dithering options" - }, - "settingsDownloadSubtitle": "Сервис, качество, откат", - "@settingsDownloadSubtitle": { - "description": "Download settings description" + "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } }, "libraryLastScanned": "Последнее сканирование: {time}", "@libraryLastScanned": { @@ -2678,620 +2667,723 @@ } } }, - "setupIosEmptyFolderWarning": "Ограничение iOS: пустые папки не могут быть выбраны. Выберите папку, содержащую хотя бы один файл.", - "@setupIosEmptyFolderWarning": { - "description": "iOS folder selection warning" + "libraryLastScannedNever": "Никогда", + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" }, - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" + "libraryScanning": "Сканирование...", + "@libraryScanning": { + "description": "Status during scan" }, - "@snackbarFailedToInstallNamed": { - "description": "Snackbar when extension install fails in the repo tab", + "libraryScanFinalizing": "Завершение работы с библиотекой...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, + "libraryScanProgress": "{progress}% из {total} файлов", + "@libraryScanProgress": { + "description": "Scan progress display", "placeholders": { - "extensionName": { + "progress": { "type": "String" + }, + "total": { + "type": "int" } } }, - "@collectionAddedTracksToPlaylist": { - "description": "Snackbar after adding multiple tracks to a playlist", + "libraryInLibrary": "В библиотеке", + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, + "libraryRemovedMissingFiles": "Удалено {count} {count, plural, one{отсутствующий файл} few{трека} many{отсутствующих файлов} other{отсутствующих файлов}} в библиотеке", + "@libraryRemovedMissingFiles": { + "description": "Snackbar after cleanup", "placeholders": { "count": { "type": "int" - }, - "playlistName": { - "type": "String" } } }, - "updateNew": "Новая", - "@updateNew": { - "description": "Label for new version" + "libraryCleared": "Библиотека очищена", + "@libraryCleared": { + "description": "Snackbar after clearing library" }, - "settingsExtensionsSubtitle": "Управление провайдерами скачивания", - "@albumFolderArtistAlbumSinglesSubtitle": { - "description": "Folder structure example" + "libraryStorageAccessRequired": "Требуется доступ к хранилищу", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" }, - "trackReEnrichSelectAll": "Выбрать всё", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" + "libraryStorageAccessMessage": "SpotiFLAC требуется доступ к хранилищу для сканирования вашей библиотеки музыки. Пожалуйста, предоставьте разрешение в настройках.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" }, - "@extensionsUninstall": { - "description": "Uninstall extension button" + "libraryFolderNotExist": "Выбранной папки не существует", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" }, - "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when track artist is used for folder names" + "librarySourceDownloaded": "Скачанные", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" }, - "@logIssueNetworkErrorLabel": { - "description": "Diagnostic badge label for generic network errors" + "librarySourceLocal": "Локальные", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" }, - "albumFolderArtistYearAlbumSubtitle": "Альбомы/Исполнитель/[2005] Название Альбома/", - "@albumFolderArtistYearAlbumSubtitle": { - "description": "Folder structure example" + "libraryFilterAll": "Все", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" }, - "itemCount": "{count} {count, plural, =1{item} other{items}}", - "@itemCount": { - "description": "Generic item count label", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterDownloaded": "Скачанные", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" }, - "discographyFetchingTracks": "Получение треков...", - "@discographyFetchingTracks": { - "description": "Progress - fetching album tracks" + "libraryFilterLocal": "Локальные", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" }, - "@libraryFolder": { - "description": "Folder selection setting" + "libraryFilterTitle": "Фильтры", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" }, - "queueEmptyAlbums": "No album downloads", - "@queueEmptyAlbums": { - "description": "Empty state title when no album downloads exist" + "libraryFilterReset": "Сброс", + "@libraryFilterReset": { + "description": "Reset all filters button" }, - "@metadataProviderPriorityDescription": { - "description": "Metadata priority page description" + "libraryFilterApply": "Применить", + "@libraryFilterApply": { + "description": "Apply filters button" }, - "@extensionVerificationHelpTitleManual": { - "description": "Dialog title when automatic browser launch for verification fails" + "libraryFilterSource": "Источник", + "@libraryFilterSource": { + "description": "Filter section - source type" }, - "extensionError": "Ошибка", - "@extensionError": { - "description": "Extension detail - error message" + "libraryFilterQuality": "Качество", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" }, - "@trackLyricsLoadFailed": { - "description": "Message when lyrics loading fails" + "libraryFilterQualityHiRes": "Hi-Res (24 бит)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" }, - "@downloadedAlbumDeleteCount": { - "description": "Delete button text with count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterQualityCD": "CD (16 бит)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" }, - "@extensionsNoHomeFeedExtensions": { - "description": "Extensions page - shown when no installed extension has home feed" + "libraryFilterQualityLossy": "С потерями", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" }, - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterFormat": "Формат", + "@libraryFilterFormat": { + "description": "Filter section - file format" }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", - "@backupContentsArtists": { - "description": "Backup contents row for favorite artists count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadata": "Метаданные", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" }, - "@trackRemoveFromDevice": { - "description": "Action - delete downloaded file" + "libraryFilterMetadataComplete": "Complete metadata", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" }, - "lyricsProvidersEnabledSection": "Включено ({count})", - "@lyricsProvidersEnabledSection": { - "description": "Section header for enabled providers", + "libraryFilterMetadataMissingAny": "Не хватает метаданных", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Отсутствует год", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Отсутствует жанр", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, + "libraryFilterSort": "Сортировка", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "Последние", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "Старые", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" + }, + "libraryFilterSortAlbumAsc": "Альбом (А-Я)", + "@libraryFilterSortAlbumAsc": { + "description": "Sort option - album ascending" + }, + "libraryFilterSortAlbumDesc": "Альбом (Я-А)", + "@libraryFilterSortAlbumDesc": { + "description": "Sort option - album descending" + }, + "libraryFilterSortGenreAsc": "Жанр (А-Я)", + "@libraryFilterSortGenreAsc": { + "description": "Sort option - genre ascending" + }, + "libraryFilterSortGenreDesc": "Жанр (Я-А)", + "@libraryFilterSortGenreDesc": { + "description": "Sort option - genre descending" + }, + "timeJustNow": "Только что", + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, + "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", + "@timeMinutesAgo": { + "description": "Relative time - minutes ago", "placeholders": { "count": { "type": "int" } } }, - "@cueSplitTitle": { - "description": "Title for CUE split bottom sheet" - }, - "@downloadedAlbumSelectedCount": { - "description": "Selection count indicator", + "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", + "@timeHoursAgo": { + "description": "Relative time - hours ago", "placeholders": { "count": { "type": "int" } } }, - "@trackOptionRemoveFromWishlist": { - "description": "Bottom sheet action label - remove track from wishlist" + "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" }, - "notifDownloadingTrack": "Downloading {trackName}", - "@notifDownloadingTrack": { - "description": "Notification title while downloading a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" }, - "@discographySkippedDownloaded": { - "description": "Snackbar - with skipped tracks count", - "placeholders": { - "added": { - "type": "int" - }, - "skipped": { - "type": "int" - } - } - }, - "@tutorialSettingsTip3": { - "description": "Tutorial settings tip 3" - }, - "@announcementUnableToOpenLink": { - "description": "Snackbar shown when an announcement CTA link cannot be opened" - }, - "trackReleaseDate": "Дата выхода", - "discographySelectedCount": "{count} выбрано", - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "logIssueNetworkErrorLabel": "NETWORK ERROR", - "updateStartingDownload": "Загрузка началась...", - "@updateStartingDownload": { - "description": "Update status - initializing" - }, - "trackDiscNumber": "Номер диска", - "@trackDiscNumber": { - "description": "Metadata label - disc number" + "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" }, - "optionsUsingExtension": "Используется расширение: {extensionName}", - "@optionsUsingExtension": { - "description": "Shows active extension name", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" }, - "dialogDisableHistoryTitle": "Turn off download history?", "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, - "@collectionPlaylistEmptySubtitle": { - "description": "Playlist empty state subtitle" - }, - "@tutorialSearchHint": { - "description": "Placeholder shown in the tutorial search demo" - }, - "cleanupOrphanedDownloadsNone": "Записей без описания не найдено", - "discographySkippedDownloaded": "{added} добавлено, {skipped} уже скачано", - "@updateDontRemind": { - "description": "Update button - skip this version" - }, - "@snackbarLoadingCueSheet": { - "description": "Snackbar while loading a CUE sheet file" + "tutorialSearchTitle": "Поиск музыки", + "@tutorialSearchTitle": { + "description": "Tutorial search page title" }, - "@dialogUninstallExtension": { - "description": "Dialog title - uninstall extension" + "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "@tutorialSearchDesc": { + "description": "Tutorial search page description" }, - "lyricsProvidersTitle": "Приоритет к поставщику текста песни", - "@dialogRemove": { - "description": "Dialog button - remove item" + "tutorialDownloadTitle": "Скачивание музыки", + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" }, - "snackbarError": "Ошибка: {error}", - "@snackbarError": { - "description": "Generic error snackbar with error detail", - "placeholders": { - "error": { - "type": "String" - } - } + "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" }, - "@sectionApp": { - "description": "Settings section header" + "tutorialLibraryTitle": "Ваша библиотека", + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" }, - "@libraryPlayback": { - "description": "Section header for playback settings in library settings" + "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" }, - "@downloadPrimaryArtistOnlyOn": { - "description": "Status label when primary-artist-only folder naming is enabled" + "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" }, - "lyricsProvidersDiscardContent": "У вас есть несохранённые изменения, которые будут потеряны.", - "previewStop": "Остановить предпросмотр", - "@previewStop": { - "description": "Tooltip for the button that stops the playing track preview snippet" + "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" }, - "trackConvertConfirmMessageLossless": "Конвертировать {sourceFormat} в {targetFormat}? (Lossless — Без потери качества)\n\nОригинальные файлы будут удалены после конвертации.", - "discographyAlbumsOnly": "Только альбомы", - "@discographyAlbumsOnly": { - "description": "Option - download only albums" + "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" }, - "@editMetadataFieldCopyright": { - "description": "Chip label for copyright field in auto-fill selector" + "tutorialExtensionsTitle": "Расширения", + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" }, - "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", - "aboutSocial": "Соцсети", - "@aboutSocial": { - "description": "Section for social links" + "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" }, - "audioAnalysisNyquist": "Nyquist", - "trackCoverSelected": "Selected cover", - "@trackCoverSelected": { - "description": "Label for the newly selected cover preview" + "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" }, - "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" + "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" }, - "homeEmptyTitle": "Нет поставщиков поиска", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" + "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" }, - "@extensionHealthUnknown": { - "description": "Extension service health status - unknown" + "tutorialSettingsTitle": "Настройте приложение под себя", + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" }, - "storeInstalled": "Установлено", - "@storeInstalled": { - "description": "Already installed badge" + "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" }, - "trackReplayGainSuccess": "Добавлены теги ReplayGain", - "@trackReplayGainSuccess": { - "description": "Snackbar message after ReplayGain tags written for a single track" + "tutorialSettingsTip1": "Изменить местоположение и организацию папок для скачивания", + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" }, - "libraryShowDuplicateIndicatorSubtitle": "Показать при поиске существующих треков", - "@collectionPlaylistRenamed": { - "description": "Snackbar after renaming playlist" + "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" }, - "@trackConvertResamplerSoxr": { - "description": "Lossless conversion SoX resampler option" + "tutorialSettingsTip3": "Настроить тему и внешний вид приложения", + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" }, - "@dialogUnsavedChanges": { - "description": "Dialog message - unsaved changes" + "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "@tutorialReadyMessage": { + "description": "Tutorial completion message" }, - "dialogDownload": "Скачать", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" + "libraryForceFullScan": "Полное сканирование", + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" }, - "trackLyricsLoadFailed": "Не удалось загрузить текст песни", - "@backupContentsTitle": { - "description": "Header above the list summarizing what the backup contains" + "libraryForceFullScanSubtitle": "Пересканировать все файлы, игнорировать кэш", + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" }, - "@safMigrationTitle": { - "description": "Title of SAF migration dialog" + "cleanupOrphanedDownloads": "Очистка отложенных скачиваний", + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" }, - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" + "cleanupOrphanedDownloadsSubtitle": "Удалить историю записи для файлов, которых больше не существует", + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" }, - "setupPermissionDeniedMessage": "В разрешении отказано. Пожалуйста, предоставьте все разрешения для продолжения.", - "@setupPermissionDeniedMessage": { - "description": "Error when permission denied" + "cleanupOrphanedDownloadsResult": "Удалено {count} утерянных записей из истории", + "@cleanupOrphanedDownloadsResult": { + "description": "Snackbar after orphan cleanup", + "placeholders": { + "count": { + "type": "int" + } + } }, - "settingsDownloadNetworkWifiOnly": "Только WiFi", - "@settingsDownloadNetworkWifiOnly": { - "description": "Network option - only use WiFi" + "cleanupOrphanedDownloadsNone": "Записей без описания не найдено", + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" }, - "@backupIncludeSecrets": { - "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" + "cacheTitle": "Хранилище и кэш", + "@cacheTitle": { + "description": "Cache management page title" }, - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" + "cacheSummaryTitle": "Просмотр кэша", + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" }, - "@extensionHealthServiceUnknown": { - "description": "Tooltip for unknown extension service health" + "cacheSummarySubtitle": "Очистка кэша не приведет к удалению загруженных музыкальных файлов.", + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" }, - "snackbarExtensionUpdated": "{extensionName} Обновлено.", - "@snackbarExtensionUpdated": { - "description": "Snackbar - extension updated successfully", + "cacheEstimatedTotal": "Приблизительное использование кэша: {size}", + "@cacheEstimatedTotal": { + "description": "Total cache size shown in summary", "placeholders": { - "extensionName": { + "size": { "type": "String" } } }, - "homeEmptySubtitle": "Установите расширение, чтобы продолжить.", - "@settingsTitle": { - "description": "Settings screen title" + "cacheSectionStorage": "Кэшированные данные", + "@cacheSectionStorage": { + "description": "Section header for cache entries" }, - "@libraryFilterMetadataIncorrectIsrcFormat": { - "description": "Filter option - items with an invalid ISRC format" + "cacheSectionMaintenance": "Обслуживание", + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" }, - "@notifLibraryScanComplete": { - "description": "Notification title when library scan finishes" + "cacheAppDirectory": "Папка кэша приложения", + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" }, - "@logIssueIspBlockingLabel": { - "description": "Diagnostic badge label when ISP blocking is detected" + "cacheAppDirectoryDesc": "HTTP-ответы, данные WebView и другие временные данные приложения.", + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" }, - "tutorialDownloadTitle": "Скачивание музыки", - "@tutorialDownloadTitle": { - "description": "Tutorial download page title" - }, - "unknownTitle": "Unknown title", - "@unknownTitle": { - "description": "Fallback track title when metadata is missing" - }, - "navLibrary": "Библиотека", - "@navLibrary": { - "description": "Bottom navigation - Library tab" - }, - "@snackbarAlreadyDownloaded": { - "description": "Snackbar - track already exists", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "editMetadataSelectAll": "Все", - "@editMetadataSelectAll": { - "description": "Button to select all fields for auto-fill" - }, - "storeEmptyNoExtensions": "No extensions available", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" - }, - "optionsUpdateChannelWarning": "Предварительная версия может содержать ошибки или неполные функции", - "@optionsUpdateChannelWarning": { - "description": "Warning about preview channel" + "cacheTempDirectory": "Временная директория", + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" }, - "@collectionPlaylistNameHint": { - "description": "Hint text for playlist name input" + "cacheTempDirectoryDesc": "Временные файлы из загрузок и аудио конвертации.", + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" }, - "notifLibraryScanComplete": "Сканирование библиотеки завершено", - "editMetadataFieldIsrc": "ISRC", - "@editMetadataFieldIsrc": { - "description": "Chip label for ISRC field in auto-fill selector" + "cacheCoverImage": "Кэш обложек", + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" }, - "@libraryFolderHint": { - "description": "Placeholder when no folder selected" + "cacheCoverImageDesc": "Скачанный альбом и трек обложки. Будет заново скачан после просмотра.", + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" }, - "homeSearchHintDefault": "Paste supported URL or search...", - "@homeSearchHintDefault": { - "description": "Default placeholder for the main search field on Home" + "cacheLibraryCover": "Кэш обложек библиотеки", + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" }, - "extensionsNoExtensionsSubtitle": "Установите .spotiflac-ext файлы для добавления новых провайдеров", - "@extensionsNoExtensionsSubtitle": { - "description": "Empty state subtitle" + "cacheLibraryCoverDesc": "Обложка извлечена из локальных музыкальных файлов. Будет повторно извлечено при следующем сканировании.", + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" }, - "@extensionEnterValue": { - "description": "Hint for editing an extension setting value" + "libraryPlaybackNormalization": "Volume normalization", + "@libraryPlaybackNormalization": { + "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, - "backupRestoreConfirmTitle": "Restore this backup?", - "@backupRestoreConfirmTitle": { - "description": "Confirmation dialog title before restoring a backup" + "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", + "@libraryPlaybackNormalizationSubtitle": { + "description": "Subtitle explaining playback volume normalization" }, - "@libraryScanSelectFolderFirst": { - "description": "Message when trying to scan without folder" + "cacheAudioAnalysis": "Audio analysis cache", + "@cacheAudioAnalysis": { + "description": "Cache item title for saved audio analysis results" }, - "@qualityHiResFlac": { - "description": "Quality option - high resolution FLAC" + "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", + "@cacheAudioAnalysisDesc": { + "description": "Description of what audio analysis cache contains" }, - "aboutSpecialThanks": "Особая благодарность", - "@aboutSpecialThanks": { - "description": "Section for special thanks" + "cacheExploreFeed": "Просмотреть кэш ленты", + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" }, - "storeInstall": "Установить", - "@storeInstall": { - "description": "Install extension button" + "cacheExploreFeedDesc": "Изучите содержимое вкладки (новые релизы, тренды). Они обновятся при следующем посещении.", + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" }, - "@collectionWishlistEmptySubtitle": { - "description": "Wishlist empty state subtitle" + "cacheTrackLookup": "Отслеживать кэш поиска", + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" }, - "historyFilterAlbums": "Альбомы", - "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", - "@extensionCustomUrlHandlingSubtitle": { - "description": "Extension detail subtitle for custom URL handling" + "cacheTrackLookupDesc": "Поиск ID трека в Spotify/Deezer. Очистка может замедлить следующие несколько поисков.", + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" }, - "filenameShowAdvancedTagsDescription": "Включить форматированные теги для отслеживания заполнения и шаблонов дат", - "@aboutReportIssue": { - "description": "Link to report bugs" + "cacheCleanupUnusedDesc": "Удалить записи из истории загрузок и библиотеки, которые остались без файлов.", + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" }, - "@folderOrganizationByPlaylist": { - "description": "Folder option - playlist folders" + "cacheNoData": "Нет кэшированных данных", + "@cacheNoData": { + "description": "Label when cache category has no data" }, - "@dateWeeksAgo": { - "description": "Relative date - weeks ago", + "cacheSizeWithFiles": "{size} в {count} файлах", + "@cacheSizeWithFiles": { + "description": "Cache size and file count", "placeholders": { + "size": { + "type": "String" + }, "count": { "type": "int" } } }, - "logEntriesFiltered": "Записи ({count} фильтровано)", - "@logEntriesFiltered": { - "description": "Log count with filter active", + "cacheSizeOnly": "{size}", + "@cacheSizeOnly": { + "description": "Cache size only", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheEntries": "{count} записей", + "@cacheEntries": { + "description": "Track cache entry count", "placeholders": { "count": { "type": "int" } } }, - "@lyricsModeDescription": { - "description": "Lyrics mode picker description" - }, - "@setupAppDocumentsFolderSubtitle": { - "description": "Subtitle for documents folder" - }, - "storeAddRepoButton": "Добавить репозиторий", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "@collectionLovedEmptyTitle": { - "description": "Loved empty state title" - }, - "aboutReportIssue": "Сообщить о проблеме", - "snackbarFailedToWriteStorage": "Failed to write back to storage", - "@snackbarFailedToWriteStorage": { - "description": "Snackbar when writing metadata back to file fails" - }, - "errorInvalidFolderSelected": "Invalid folder selected", - "allFilesAccessDisabledMessage": "Доступ ко всем файлам отключен. Приложение будет использовать ограниченный доступ к хранилищу.", - "@allFilesAccessDisabledMessage": { - "description": "Snackbar message when user disables all files access" - }, - "downloadMusixmatchLanguageCode": "Код языка", - "@downloadMusixmatchLanguageCode": { - "description": "Label for Musixmatch language input field" - }, - "dialogUnsavedChanges": "Есть несохраненные изменения. Отменить их?", - "setupChooseFromFiles": "Выбрать из файлов", - "@setupChooseFromFiles": { - "description": "iOS file picker option" - }, - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", - "@backupRestoreConfirmButton": { - "description": "Confirm button to proceed with restore" - }, - "@queueEmptyAlbumsSubtitle": { - "description": "Empty state subtitle for album downloads" - }, - "collectionRemovedFromWishlist": "\"{trackName}\" удалён из списка желаний", - "@collectionRemovedFromWishlist": { - "description": "Snackbar after removing track from wishlist", + "cacheClearSuccess": "Очищено: {target}", + "@cacheClearSuccess": { + "description": "Snackbar after clearing selected cache", "placeholders": { - "trackName": { + "target": { "type": "String" } } }, - "extensionsInstalledSuccess": "Расширение успешно установлено", - "progressReadingCsv": "Чтение CSV...", - "@progressReadingCsv": { - "description": "Progress indicator - parsing CSV file" + "cacheClearConfirmTitle": "Очистить кэш?", + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" }, - "artistReleases": "Releases", - "@artistReleases": { - "description": "Section header for all artist releases" + "cacheClearConfirmMessage": "Это очистит кэш для {target}. Загруженные музыкальные файлы не будут удалены.", + "@cacheClearConfirmMessage": { + "description": "Dialog message before clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } }, - "extensionVerificationBrowserTitle": "Verification browser", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" + "cacheClearAllConfirmTitle": "Очистить весь кэш?", + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" }, - "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", - "downloadLossy320": "С потерями 320 кбит/с", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" + "cacheClearAllConfirmMessage": "Это очистит все категории кэша на этой странице. Скачанные музыкальные файлы не будут удалены.", + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" }, - "queueFlacAction": "Очередь FLAC", - "@queueFlacAction": { - "description": "Action/button label for queueing FLAC redownloads for local tracks" + "cacheClearAll": "Очистить весь кэш", + "@cacheClearAll": { + "description": "Button label to clear all caches" }, - "@setupDownloadLocationIosMessage": { - "description": "iOS-specific folder info" + "cacheCleanupUnused": "Очистка неиспользуемых данных", + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" }, - "trackConvertOriginal": "Original", - "sectionLyricsProviderOptions": "Provider Options", - "nowPlayingTitle": "Now Playing", - "@nowPlayingTitle": { - "description": "Title for the now playing screen" + "cacheCleanupUnusedSubtitle": "Удалить историю загрузок, оставшихся без просмотра, и отсутствующие записи в библиотеке", + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" }, - "@extensionHealthChecksConfigured": { - "description": "Extension service health check count", + "cacheCleanupResult": "Очистка завершена: {downloadCount} потерянных загрузок, {libraryCount} отсутствующих записей в библиотеке", + "@cacheCleanupResult": { + "description": "Snackbar after unused data cleanup", "placeholders": { - "count": { + "downloadCount": { + "type": "int" + }, + "libraryCount": { "type": "int" } } }, - "@cacheClearAll": { - "description": "Button label to clear all caches" - }, - "a11yDeselectTrack": "Deselect track", - "@a11yDeselectTrack": { - "description": "Accessibility label for deselecting a track" + "cacheRefreshStats": "Обновить статистику", + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" }, - "@lyricsProvidersInfoText": { - "description": "Info tip on lyrics provider priority page" + "trackSaveCoverArt": "Сохранить обложку", + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" }, - "queueEmptyHistory": "Нет истории скачиваний", - "dialogClear": "Очистить", - "@dialogClear": { - "description": "Dialog button - clear items" + "trackSaveLyrics": "Сохранить текст (.lrc)", + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" }, - "allFilesAccessDescription": "Включите, если вы сталкиваетесь с ошибками записи при сохранении в пользовательские папки. Android 13+ по умолчанию ограничивает доступ к определенным папкам.", - "@allFilesAccessDescription": { - "description": "Description explaining when to enable all files access" + "trackSaveLyricsProgress": "Сохранение текста...", + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" }, - "trackConvertConfirmTitle": "Подтвердить конвертацию", - "storeCategoryLyrics": "Lyrics", - "@storeCategoryLyrics": { - "description": "Store extension category - lyrics" + "trackReEnrich": "Обновить", + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" }, - "@lyricsProvidersDescription": { - "description": "Description on the lyrics provider priority page" + "trackReEnrichOnlineSubtitle": "Поиск в сети метаданных и встраивание в файл", + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" }, - "tooltipLoveAll": "Love All", - "downloadDirectory": "Папка для скачивания", - "@downloadDirectory": { - "description": "Setting - download folder" + "trackReEnrichFieldCover": "Обложка", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" }, - "@tutorialExtensionsTip2": { - "description": "Tutorial extensions tip 2" + "trackReEnrichFieldLyrics": "Текст песни", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" }, - "libraryFolder": "Папка библиотеки", - "@metadataProviderPriorityTitle": { - "description": "Metadata priority page title" + "trackReEnrichFieldBasicTags": "Альбом, Исполнитель альбома", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "@cleanupOrphanedDownloadsResult": { - "description": "Snackbar after orphan cleanup", + "trackReEnrichFieldTrackInfo": "Номер трека и диска", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Дата и ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Жанр, Название, Авторские права", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Выбрать всё", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" + }, + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" + }, + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" + }, + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" + }, + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" + }, + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", "placeholders": { - "count": { + "changeCount": { + "type": "int" + }, + "trackCount": { "type": "int" } } }, - "cacheExploreFeedDesc": "Изучите содержимое вкладки (новые релизы, тренды). Они обновятся при следующем посещении.", - "@cacheExploreFeedDesc": { - "description": "Description of what explore feed cache contains" + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" }, - "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", - "@a11yOpenTrackByArtist": { - "description": "Accessibility label for opening a track item", + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, + "trackEditMetadata": "Редактировать метаданные", + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" + }, + "trackCoverSaved": "Обложка сохранена в {fileName}", + "@trackCoverSaved": { + "description": "Snackbar after cover art saved", "placeholders": { - "trackName": { + "fileName": { "type": "String" - }, - "artistName": { + } + } + }, + "trackCoverNoSource": "Нет доступных источников обложки", + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" + }, + "trackLyricsSaved": "Текст песни сохранен в {fileName}", + "@trackLyricsSaved": { + "description": "Snackbar after lyrics saved", + "placeholders": { + "fileName": { "type": "String" } } }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", - "libraryFilterSortAlbumDesc": "Альбом (Я-А)", - "@libraryFilterSortAlbumDesc": { - "description": "Sort option - album descending" + "trackReEnrichProgress": "Обновление метаданных...", + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" }, - "trackConvertBitrate": "Битрейт", - "@trackConvertBitrate": { - "description": "Label for bitrate selection" + "trackReEnrichSearching": "Поиск метаданных в сети...", + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" }, - "audioAnalysisFileSize": "Размер", - "extensionHealthServiceOnline": "Service online", - "@extensionHealthServiceOnline": { - "description": "Tooltip for online extension service" + "trackReEnrichSuccess": "Метаданные успешно обновлены", + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" }, - "logEntries": "Записи ({count})", - "@logEntries": { - "description": "Total log count", + "trackReEnrichFfmpegFailed": "Ошибка встраивания метаданных FFmpeg", + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + }, + "queueFlacAction": "Очередь FLAC", + "@queueFlacAction": { + "description": "Action/button label for queueing FLAC redownloads for local tracks" + }, + "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", + "@queueFlacConfirmMessage": { + "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { "count": { "type": "int" } } }, + "queueFlacNoReliableMatches": "No reliable online matches found for the selection", + "@queueFlacNoReliableMatches": { + "description": "Snackbar when no safe FLAC redownload matches were found" + }, + "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", + "@queueFlacQueuedWithSkipped": { + "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "placeholders": { + "addedCount": { + "type": "int" + }, + "skippedCount": { + "type": "int" + } + } + }, + "trackSaveFailed": "Ошибка: {error}", + "@trackSaveFailed": { + "description": "Snackbar when save operation fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "trackConvertFormat": "Переконвертировать формат", + "@trackConvertFormat": { + "description": "Menu item - convert audio format" + }, + "trackConvertTitle": "Конвертировать аудио", + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" + }, + "trackConvertTargetFormat": "Целевой формат", + "@trackConvertTargetFormat": { + "description": "Label for format selection" + }, + "trackConvertBitrate": "Битрейт", + "@trackConvertBitrate": { + "description": "Label for bitrate selection" + }, + "trackConvertKeepOriginal": "Keep original file", + "@trackConvertKeepOriginal": { + "description": "Toggle to preserve the source file during conversion" + }, + "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", + "@trackConvertKeepOriginalDescription": { + "description": "Description for preserving the source file during conversion" + }, + "trackConvertConfirmTitle": "Подтвердить конвертацию", + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" + }, "trackConvertConfirmMessage": "Конвертировать из {sourceFormat} в {targetFormat} {bitrate}?\n\nОригинальный файл будет удален после конвертации.", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", @@ -3307,1570 +3399,1522 @@ } } }, - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" + "trackConvertConfirmMessageLossless": "Конвертировать {sourceFormat} в {targetFormat}? (Lossless — Без потери качества)\n\nОригинальные файлы будут удалены после конвертации.", + "@trackConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless-to-lossless conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "folderOrganizationByAlbum": "По альбому", - "@folderOrganizationByAlbum": { - "description": "Folder option - album folders" + "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", + "@trackConvertConfirmKeepOriginal": { + "description": "Confirmation message when the source file will be preserved", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "libraryPlayback": "Playback", - "@storeFilterAll": { - "description": "Repo filter - all extensions" + "trackConvertLosslessHint": "Конвертация без потери качества", + "@trackConvertLosslessHint": { + "description": "Hint shown when converting between lossless formats" }, - "aboutApp": "Приложение", - "@aboutApp": { - "description": "Section for app info" + "trackConvertConverting": "Конвертация аудио...", + "@trackConvertConverting": { + "description": "Snackbar while converting" }, - "optionsReplayGainSubtitleOff": "Выключено: нет тегов нормализации громкости", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" - }, - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" + "trackConvertSuccess": "Успешно конвертировано в {format}", + "@trackConvertSuccess": { + "description": "Snackbar after successful conversion", + "placeholders": { + "format": { + "type": "String" + } + } }, - "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", - "storeFilterIntegration": "Интеграция", - "@storeFilterIntegration": { - "description": "Repo filter - integrations" + "trackConvertFailed": "Ошибка конвертации", + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" }, - "@lyricsProvidersAtLeastOne": { - "description": "Snackbar when user tries to disable the last enabled provider" + "cueSplitTitle": "Разделить CUE Sheet", + "@cueSplitTitle": { + "description": "Title for CUE split bottom sheet" }, - "@appearanceHistoryViewGrid": { - "description": "Grid layout option" + "cueSplitAlbum": "Альбом: {album}", + "@cueSplitAlbum": { + "description": "Album name in CUE split sheet", + "placeholders": { + "album": { + "type": "String" + } + } }, - "trackDownloaded": "Скачано", - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", - "setupDownloadLocationIosMessage": "В iOS загрузки сохраняются в папке Документы приложения. Вы можете получить к ним доступ через приложение Файлы.", - "optionsArtistTagModeDescription": "Выберите, как несколько исполнителей записываются встроенные теги.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" + "cueSplitArtist": "Артист: {artist}", + "@cueSplitArtist": { + "description": "Artist name in CUE split sheet", + "placeholders": { + "artist": { + "type": "String" + } + } }, - "@queueRetryAllFailed": { - "description": "Button to retry every failed download in the queue", + "cueSplitTrackCount": "{count} треков", + "@cueSplitTrackCount": { + "description": "Number of tracks in CUE sheet", "placeholders": { "count": { "type": "int" } } }, - "@trackConvertDitherTriangularHp": { - "description": "Lossless conversion high-pass triangular dither option" - }, - "@extensionVerificationCopyLink": { - "description": "Button to copy the extension verification URL" - }, - "searchSongs": "Песни", - "@searchSongs": { - "description": "Search result category - songs" - }, - "@appearanceHistoryView": { - "description": "Layout style for history" - }, - "sectionFileSettings": "Настройки файла", - "@sectionFileSettings": { - "description": "Settings section header" - }, - "@cancelDownloadTitle": { - "description": "Dialog title when confirming cancellation of an active download" - }, - "@cacheLibraryCover": { - "description": "Cache item title for local library cover art images" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "dialogDelete": "Удалить", - "@dialogDelete": { - "description": "Dialog button - delete item" - }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", - "@tutorialLibraryDesc": { - "description": "Tutorial library page description" + "cueSplitConfirmTitle": "Разделенный CUE-альбом", + "@cueSplitConfirmTitle": { + "description": "CUE split confirmation dialog title" }, - "@queueDownloadSpeedStatus": { - "description": "Queue status while downloading with speed", + "cueSplitConfirmMessage": "Разбить \"{album}\" на {count} отдельных FLAC-файлов?", + "@cueSplitConfirmMessage": { + "description": "CUE split confirmation dialog message", "placeholders": { - "speed": { + "album": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "cacheCleanupResult": "Очистка завершена: {downloadCount} потерянных загрузок, {libraryCount} отсутствующих записей в библиотеке", - "@cacheCleanupResult": { - "description": "Snackbar after unused data cleanup", + "cueSplitSplitting": "Разделение CUE sheet... ({current}/{total})", + "@cueSplitSplitting": { + "description": "Snackbar while splitting CUE", "placeholders": { - "downloadCount": { + "current": { "type": "int" }, - "libraryCount": { + "total": { "type": "int" } } }, - "trackConvertLosslessHint": "Конвертация без потери качества", - "@trackConvertLosslessHint": { - "description": "Hint shown when converting between lossless formats" - }, - "collectionRenamePlaylist": "Переименовать плейлист", - "@collectionRenamePlaylist": { - "description": "Action to rename playlist" - }, - "@libraryFilterTitle": { - "description": "Filter bottom sheet title" - }, - "@storageModeAppFolder": { - "description": "Storage mode option - app-managed folder" - }, - "logTotalErrors": "Total errors: {count}", - "@logTotalErrors": { - "description": "Total error count in log issue analysis", + "cueSplitSuccess": "Успешно разделено на {count} треков", + "@cueSplitSuccess": { + "description": "Snackbar after successful CUE split", "placeholders": { "count": { "type": "int" } } }, - "@setupStorageRequired": { - "description": "Title when storage permission needed" + "cueSplitFailed": "Разделение CUE не удалось", + "@cueSplitFailed": { + "description": "Snackbar when CUE split fails" }, - "@snackbarMetadataProviderSaved": { - "description": "Snackbar - metadata provider order saved" + "cueSplitNoAudioFile": "Аудиофайл для этого CUE sheet не найден", + "@cueSplitNoAudioFile": { + "description": "Error when CUE audio file is missing" }, - "@selectionBatchConvertConfirmTitle": { - "description": "Confirmation dialog title for batch conversion" + "cueSplitButton": "Разделить на Треки", + "@cueSplitButton": { + "description": "Button text to start CUE splitting" }, - "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", - "@extensionsHomeFeedAutoSubtitle": { - "description": "Extensions page - subtitle for auto home feed option" + "actionCreate": "Создать", + "@actionCreate": { + "description": "Generic action button - create" }, - "setupLanguageDescription": "Выберите язык для приложения. Вы можете изменить его позже в настройках.", - "settingsBackupSubtitle": "Move your library, history and settings to a new device", - "@settingsBackupSubtitle": { - "description": "Subtitle for backup and restore settings item" + "collectionFoldersTitle": "Мои папки", + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" }, - "recentTypeArtist": "Исполнитель", - "@recentTypeArtist": { - "description": "Recent access item type - artist" + "collectionWishlist": "Список желаемого", + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" }, - "collectionPlaylistEmptySubtitle": "Удерживайте + на любом треке, чтобы добавить его сюда", - "artistCompilations": "Сборники", - "@artistCompilations": { - "description": "Section header for compilations" + "collectionLoved": "Любимые", + "@collectionLoved": { + "description": "Custom folder for favorite tracks" }, - "snackbarFolderPickerFailed": "Не удалось открыть выбор папок: {error}", - "@snackbarFolderPickerFailed": { - "description": "Snackbar shown when folder picker fails to open", - "placeholders": { - "error": { - "type": "String" - } - } + "collectionFavoriteArtists": "Избранный исполнитель", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" }, - "@optionsDetailedLoggingOn": { - "description": "Status when logging enabled" + "collectionPlaylist": "Плейлист", + "@collectionPlaylist": { + "description": "Single playlist label" }, - "settingsSaveDownloadHistory": "Save download history", - "@settingsSaveDownloadHistory": { - "description": "Settings switch title for storing completed downloads in history" + "collectionAddToPlaylist": "Добавить в плейлист", + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" }, - "@storeCategoryIntegration": { - "description": "Store extension category - integration" + "collectionCreatePlaylist": "Создать плейлист", + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" }, - "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", - "@a11yOpenItemCount": { - "description": "Accessibility label for opening a grouped item with count", + "collectionNoPlaylistsYet": "Плейлисты отсутствуют", + "@collectionNoPlaylistsYet": { + "description": "Empty state title when user has no playlists" + }, + "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", "placeholders": { - "title": { - "type": "String" - }, "count": { "type": "int" } } }, - "trackFileInfo": "Информация о файле", - "@trackFileInfo": { - "description": "Tab title - file information" + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", - "audioAnalysisNoClipping": "No clipping", - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", - "@tutorialSettingsDesc": { - "description": "Tutorial settings page description" + "collectionAddedToPlaylist": "Добавлено в \"{playlistName}\"", + "@collectionAddedToPlaylist": { + "description": "Snackbar after adding track to playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "lyricsModeExternalSubtitle": "Отдельный файл .lrc для плееров, таких, как Samsung Music", - "@lyricsModeExternalSubtitle": { - "description": "Subtitle for external option" + "collectionAlreadyInPlaylist": "Уже в \"{playlistName}\"", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "trackLoadLyrics": "Загрузить текст песни", - "@trackLoadLyrics": { - "description": "Action - fetch lyrics" + "collectionPlaylistNameHint": "Название плейлиста", + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", - "@extensionVerificationHelpTitleWaiting": { - "description": "Dialog title when verification is taking longer than expected" - }, - "libraryFilterReset": "Сброс", - "@libraryFilterReset": { - "description": "Reset all filters button" - }, - "@downloadAlbumArtistMetadataFull": { - "description": "Status label when album-artist folder filtering uses full metadata" - }, - "storeTitle": "Репозиторий расширения", - "@storeTitle": { - "description": "Repo screen title" - }, - "libraryCleared": "Библиотека очищена", - "@libraryCleared": { - "description": "Snackbar after clearing library" + "collectionPlaylistNameRequired": "Имя плейлиста обязательно", + "@collectionPlaylistNameRequired": { + "description": "Validation error for empty playlist name" }, - "queueDownloadCompleted": "Download completed", - "@queueDownloadCompleted": { - "description": "Accessibility label for completed download state in queue" + "collectionRenamePlaylist": "Переименовать плейлист", + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" }, - "libraryTitle": "Локальная библиотека", - "@libraryTitle": { - "description": "Library settings page title" + "collectionDeletePlaylist": "Удалить плейлист", + "@collectionDeletePlaylist": { + "description": "Action to delete playlist" }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", - "@queueAlbumCount": { - "description": "Album count label with plural support", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionPlaylistRenamed": "Плейлист переименован", + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" }, - "libraryClearConfirmTitle": "Очистить библиотеку", - "@backupExportSectionTitle": { - "description": "Section title for the export/backup card" + "collectionWishlistEmptyTitle": "Список желаний пуст", + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" }, - "dialogClearAll": "Очистить всё", - "@dialogClearAll": { - "description": "Dialog title - clear all items" + "collectionWishlistEmptySubtitle": "Нажмите + на треках, чтобы сохранить то, что вы хотите скачать позже", + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", - "@tutorialExtensionsDesc": { - "description": "Tutorial extensions page description" + "collectionLovedEmptyTitle": "Папка Любимые пуста", + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" }, - "libraryExternalPlayer": "External player", - "@libraryExternalPlayer": { - "description": "Setting option to use an external music player" + "collectionLovedEmptySubtitle": "Нажмите \"любовь\" на треках, чтобы сохранить ваши избранные", + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" }, - "editMetadataFieldGenre": "Жанр", - "@tutorialLibraryTitle": { - "description": "Tutorial library page title" + "collectionFavoriteArtistsEmptyTitle": "Нет избранных исполнителей", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" }, - "folderOrganizationByPlaylist": "По плейлисту", - "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" + "collectionFavoriteArtistsEmptySubtitle": "Нажмите на сердце на странице исполнителя, чтобы сохранить его здесь", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" }, - "editMetadataSelectNone": "None", - "@historyFilterSingles": { - "description": "Filter chip - show singles only" + "collectionPlaylistEmptyTitle": "Плейлист пуст", + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" }, - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" + "collectionPlaylistEmptySubtitle": "Удерживайте + на любом треке, чтобы добавить его сюда", + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" }, - "trackSaveCoverArt": "Сохранить обложку", - "@trackSaveCoverArt": { - "description": "Menu action - save album cover art as file" + "collectionRemoveFromPlaylist": "Удалить из плейлиста", + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" }, - "@downloadAlbumFolderStructure": { - "description": "Setting - album folder organization" + "collectionRemoveFromFolder": "Убрать из папки", + "@collectionRemoveFromFolder": { + "description": "Tooltip for removing track from wishlist/loved folder" }, - "lyricsProvidersAtLeastOne": "По крайней мере один провайдер должен оставаться включенным", - "@notifDownloadCompleteCount": { - "description": "Notification title when download is complete, with count", + "collectionAddedToLoved": "\"{trackName}\" добавлен в Любимые", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", "placeholders": { - "completed": { - "type": "int" - }, - "total": { - "type": "int" + "trackName": { + "type": "String" } } }, - "setupUseDefault": "По умолчанию", - "@setupUseDefault": { - "description": "Button to use default folder" - }, - "logNoLogsYetSubtitle": "Логи появятся здесь по мере использования приложения", - "@logNoLogsYetSubtitle": { - "description": "Empty state subtitle" - }, - "@dateToday": { - "description": "Relative date - today" - }, - "trackSaveLyricsProgress": "Сохранение текста...", - "@trackSaveLyricsProgress": { - "description": "Snackbar while saving lyrics to file" + "collectionRemovedFromLoved": "\"{trackName}\" удалено из Любимых", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "trackCoverSaved": "Обложка сохранена в {fileName}", - "@trackCoverSaved": { - "description": "Snackbar after cover art saved", + "collectionAddedToWishlist": "\"{trackName}\" добавлен в список желаний", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", "placeholders": { - "fileName": { + "trackName": { "type": "String" } } }, - "trackReEnrichFieldLyrics": "Текст песни", - "@audioAnalysisRescan": { - "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" + "collectionRemovedFromWishlist": "\"{trackName}\" удалён из списка желаний", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is on" + "collectionAddedToFavoriteArtists": "\"{artistName}\" добавлен в избранные исполнители", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, - "dialogDisableAndClear": "Turn off and clear", - "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", - "cleanupOrphanedDownloadsSubtitle": "Удалить историю записи для файлов, которых больше не существует", - "@notifLibraryScanProgressWithTotal": { - "description": "Notification body for library scan progress when total is known", + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" удалено из избранных исполнителей", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", "placeholders": { - "scanned": { - "type": "int" - }, - "total": { - "type": "int" - }, - "percentage": { - "type": "int" + "artistName": { + "type": "String" } } }, - "@extensionDetailsTags": { - "description": "Section title for extension tags" + "trackOptionAddToLoved": "Добавить в Любимое", + "@trackOptionAddToLoved": { + "description": "Bottom sheet action label - add track to loved folder" }, - "@albumFolderAlbumOnlySubtitle": { - "description": "Folder structure example" + "trackOptionRemoveFromLoved": "Исключить из Любимых", + "@trackOptionRemoveFromLoved": { + "description": "Bottom sheet action label - remove track from loved folder" }, - "@audioAnalysisAnalyzing": { - "description": "Loading text while analyzing audio" + "trackOptionAddToWishlist": "Добавить в список желаний", + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" }, - "@settingsDonate": { - "description": "Settings menu item - donate page" + "trackOptionRemoveFromWishlist": "Удалить из списка желаний", + "@trackOptionRemoveFromWishlist": { + "description": "Bottom sheet action label - remove track from wishlist" }, - "@collectionPlaylistNameRequired": { - "description": "Validation error for empty playlist name" + "artistOptionAddToFavorites": "Добавить в избранные исполнители", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" }, - "@backupImportSectionDescription": { - "description": "Description for the restore action" + "artistOptionRemoveFromFavorites": "Удалить из избранных исполнителей", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" }, - "storeFilterLyrics": "Тексты песен", - "libraryAutoScan": "Автосканирование", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" + "collectionPlaylistChangeCover": "Изменить обложку", + "@collectionPlaylistChangeCover": { + "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", - "@safMigrationMessage1": { - "description": "First paragraph of SAF migration dialog" + "collectionPlaylistRemoveCover": "Удалить обложку", + "@collectionPlaylistRemoveCover": { + "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "setupStorageRequired": "Требуется доступ к хранилищу", - "@notifLibraryScanErrors": { - "description": "Library scan complete suffix - error count", + "selectionShareCount": "Отправить {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", "placeholders": { "count": { "type": "int" } } }, - "appearanceHistoryViewGrid": "Сетка", - "trackConvertConverting": "Конвертация аудио...", - "@trackConvertConverting": { - "description": "Snackbar while converting" - }, - "@setupUseDefaultFolder": { - "description": "Dialog title for default folder" + "selectionShareNoFiles": "Файлы, доступные для совместного доступа, не найдены", + "@selectionShareNoFiles": { + "description": "Snackbar when no selected files exist on disk" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", - "snackbarPlayingNext": "Playing next", - "@snackbarPlayingNext": { - "description": "Snackbar when a track is inserted as the next queue item" + "selectionConvertCount": "Конвертировать {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "optionsDefaultSearchTabSubtitle": "Выберите, какая вкладка открывает новые результаты поиска.", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" - }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", - "@sectionService": { - "description": "Settings section header" - }, - "notifUpdateProgress": "{received} / {total} МБ • {percentage}%", - "@discographyDownloadSelected": { - "description": "Button - download selected albums" - }, - "cacheClearAllConfirmMessage": "Это очистит все категории кэша на этой странице. Скачанные музыкальные файлы не будут удалены.", - "@cacheClearAllConfirmMessage": { - "description": "Dialog message before clearing all caches" - }, - "extensionsHomeFeedProvider": "Home Feed Provider", - "@extensionsHomeFeedProvider": { - "description": "Extensions page - label for home feed provider selector" - }, - "@cacheExploreFeed": { - "description": "Cache item title for explore home feed cache" + "selectionConvertNoConvertible": "Не выбраны конвертируемые треки", + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" }, - "@audioAnalysisDynamicRange": { - "description": "Dynamic range metric label" + "selectionBatchConvertConfirmTitle": "Пакетная конвертация", + "@selectionBatchConvertConfirmTitle": { + "description": "Confirmation dialog title for batch conversion" }, - "unknownAlbum": "Unknown Album", - "trackCoverCurrent": "Current cover", - "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", - "downloadPrimaryArtistOnlyOff": "Primary only: Off", - "dialogDone": "Готово", - "@dialogDone": { - "description": "Dialog button - action completed" + "selectionBatchConvertConfirmMessage": "Преобразовать {count} {count, plural, =1{track} other{tracks}} в {format} с {bitrate}?", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "storeRepoUrlLabel": "Ссылка на репозиторий", - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", - "@logIssueRateLimitedSuggestion": { - "description": "Diagnostic badge suggestion for rate limiting" + "selectionBatchConvertConfirmMessageLossless": "Конвертировать {count} {count, plural, =1{track} other{tracks}} в {format}? (Без потери качества)\n\nОригинальные файлы будут удалены после конвертации.", + "@selectionBatchConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "libraryScanProgress": "{progress}% из {total} файлов", - "@libraryScanProgress": { - "description": "Scan progress display", + "selectionBatchConvertConfirmKeepOriginal": "Конвертировать {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}} в {format}?\n\nОригинальные файлы будут храниться и преобразовываться как отдельные элементы библиотеки.", + "@selectionBatchConvertConfirmKeepOriginal": { + "description": "Batch conversion confirmation when source files will be preserved", "placeholders": { - "progress": { + "count": { + "type": "int" + }, + "format": { "type": "String" + } + } + }, + "selectionBatchConvertSuccess": "Конвертировано {success} треков {total} в {format}", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": { + "type": "int" }, "total": { "type": "int" + }, + "format": { + "type": "String" } } }, - "collectionLovedEmptyTitle": "Папка Любимые пуста", - "tutorialExtensionsTitle": "Расширения", - "@tutorialExtensionsTitle": { - "description": "Tutorial extensions page title" + "downloadedAlbumDownloadedCount": "{count} скачано", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "searchSortDurationShort": "Продолжительность (наименьшая)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Папка названная в честь тега Альбома Артиста", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when album artist is used for folder names" }, - "trackCopyFilePath": "Скопировать путь к файлу", - "@trackCopyFilePath": { - "description": "Action - copy file path" + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Папка названная в честь тега Трека Артиста", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when track artist is used for folder names" }, - "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", - "@trackConvertResampler": { - "description": "Section label for lossless conversion resampler options" + "lyricsProvidersTitle": "Приоритет к поставщику текста песни", + "@lyricsProvidersTitle": { + "description": "Settings item title for lyrics provider order" }, - "editMetadataFieldTrackNum": "Трек #", - "@editMetadataFieldTrackNum": { - "description": "Chip label for track number field in auto-fill selector" + "lyricsProvidersDescription": "Включайте, выключайте, переупорядочивайте источники текстов. Поставщики связаны сверху вниз пока проводится поиск текста.", + "@lyricsProvidersDescription": { + "description": "Description on the lyrics provider priority page" }, - "snackbarFailedToUpdate": "Не удалось обновить расширение", - "@snackbarFailedToUpdate": { - "description": "Snackbar - extension update error" + "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", + "@lyricsProvidersInfoText": { + "description": "Info tip on lyrics provider priority page" }, - "notifAlreadyInLibrary": "Уже в библиотеке", - "@notifAlreadyInLibrary": { - "description": "Notification title when track is already in library" + "lyricsProvidersEnabledSection": "Включено ({count})", + "@lyricsProvidersEnabledSection": { + "description": "Section header for enabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionPlaylistNameHint": "Название плейлиста", - "extensionVerificationCopyLink": "Copy link", - "@replayGainBatchAnalyzing": { - "description": "Progress dialog title while batch scanning ReplayGain" + "lyricsProvidersDisabledSection": "Выключено ({count})", + "@lyricsProvidersDisabledSection": { + "description": "Section header for disabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "setupLanguageTitle": "Выберите язык", - "extensionId": "ID", - "@extensionId": { - "description": "Extension detail - unique ID" + "lyricsProvidersAtLeastOne": "По крайней мере один провайдер должен оставаться включенным", + "@lyricsProvidersAtLeastOne": { + "description": "Snackbar when user tries to disable the last enabled provider" }, - "regionCountryBR": "Brazil", - "@updateNewVersionReady": { - "description": "Update subtitle" + "lyricsProvidersSaved": "Приоритетный провайдер текстов песен сохранен", + "@lyricsProvidersSaved": { + "description": "Snackbar after saving lyrics provider priority" }, - "@queueDownloadedFileMissing": { - "description": "Accessibility label when a downloaded file is missing from disk" + "lyricsProvidersDiscardContent": "У вас есть несохранённые изменения, которые будут потеряны.", + "@lyricsProvidersDiscardContent": { + "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "@lyricsMode": { - "description": "Setting - how to save lyrics" + "lyricsProviderLrclibDesc": "Open-source synced lyrics database", + "@lyricsProviderLrclibDesc": { + "description": "Description for LRCLIB provider" }, - "@settingsAppearance": { - "description": "Settings section - visual customization" + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (хорош для азиатских песен)", + "@lyricsProviderNeteaseDesc": { + "description": "Description for Netease provider" }, - "@setupStorageAccessMessageAndroid11": { - "description": "Android 11+ specific explanation" + "lyricsProviderMusixmatchDesc": "Крупнейшая база данных текстов песен (мультиязычная)", + "@lyricsProviderMusixmatchDesc": { + "description": "Description for Musixmatch provider" }, - "@tutorialLibraryTip3": { - "description": "Tutorial library tip 3" + "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", + "@lyricsProviderAppleMusicDesc": { + "description": "Description for Apple Music provider" }, - "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person lyrics is off" + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "@lyricsProviderQqMusicDesc": { + "description": "Description for QQ Music provider" }, - "libraryStorageAccessMessage": "SpotiFLAC требуется доступ к хранилищу для сканирования вашей библиотеки музыки. Пожалуйста, предоставьте разрешение в настройках.", - "@libraryStorageAccessMessage": { - "description": "Dialog message for storage permission" + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" }, - "@tutorialLibraryTip1": { - "description": "Tutorial library tip 1" + "lyricsProviderExtensionDesc": "Поставщик расширений", + "@lyricsProviderExtensionDesc": { + "description": "Generic description for extension-based lyrics providers" }, - "dialogRemoveExtensionMessage": "Вы уверены, что хотите удалить это расширение? Это действие не может быть отменено.", - "@dialogRemoveExtensionMessage": { - "description": "Dialog message - uninstall confirmation" + "safMigrationTitle": "Storage Update Required", + "@safMigrationTitle": { + "description": "Title of SAF migration dialog" }, - "setupDownloadLocationTitle": "Папка для скачивания", - "@setupDownloadLocationTitle": { - "description": "Download location dialog title" + "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", + "@safMigrationMessage1": { + "description": "First paragraph of SAF migration dialog" }, - "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", - "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is on" + "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", + "@safMigrationMessage2": { + "description": "Second paragraph of SAF migration dialog" }, - "@audioAnalysisBitDepth": { - "description": "Bit depth metric label" + "safMigrationSuccess": "Download folder updated to SAF mode", + "@safMigrationSuccess": { + "description": "Snackbar after successfully migrating to SAF" }, - "trackOptionAddToLoved": "Добавить в Любимое", - "@trackOptionAddToLoved": { - "description": "Bottom sheet action label - add track to loved folder" + "settingsDonate": "Support Development", + "@settingsDonate": { + "description": "Settings menu item - donate page" }, - "cacheAppDirectory": "Папка кэша приложения", - "@cacheAppDirectory": { - "description": "Cache item title for app cache directory" + "settingsDonateSubtitle": "Buy the developer a coffee", + "@settingsDonateSubtitle": { + "description": "Subtitle for donate menu item" }, - "lyricsProviderMusixmatchDesc": "Крупнейшая база данных текстов песен (мультиязычная)", - "@navStore": { - "description": "Bottom navigation - Extension repo tab" + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" }, - "extensionPostProcessing": "Постобработка", - "@searchTracks": { - "description": "Search filter label - tracks" + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" }, - "logCopied": "Логи скопированы в буфер обмена", - "@logCopied": { - "description": "Snackbar - logs copied" - }, - "@extensionHealthRequired": { - "description": "Label for a required extension service health check" + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" }, - "@previewPlay": { - "description": "Tooltip for the button that plays a short track preview snippet" + "backupExportSectionTitle": "Create backup", + "@backupExportSectionTitle": { + "description": "Section title for the export/backup card" }, - "clickableLookingUpArtist": "Looking up artist...", - "@clickableLookingUpArtist": { - "description": "Snackbar shown while clickable artist metadata is being resolved" + "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", + "@backupExportSectionDescription": { + "description": "Description of what a backup contains" }, - "@extensionVerificationBrowserSubtitleInApp": { - "description": "Subtitle when in-app browser is preferred for extension verification" + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" }, - "setupUseDefaultFolder": "Использовать папку по умолчанию?", - "tutorialSearchHint": "Paste or search...", - "@logIssueTrackNotFoundLabel": { - "description": "Diagnostic badge label when a track is unavailable" + "backupImportSectionTitle": "Restore backup", + "@backupImportSectionTitle": { + "description": "Section title for the import/restore card" }, - "@storageModeAppFolderSubtitle": { - "description": "Subtitle for app folder storage mode" + "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", + "@backupImportSectionDescription": { + "description": "Description for the restore action" }, - "downloadMusixmatchLanguage": "Язык Musixmatch", - "@downloadMusixmatchLanguage": { - "description": "Setting for Musixmatch lyrics translation language" + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" }, - "lyricsModeExternal": "Внешний файл .lrc", - "@setupSelectFolder": { - "description": "Button to select folder" + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" }, - "logSearchHint": "Поиск логов...", + "backupCreateFailed": "Failed to create backup", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "@settingsSaveDownloadHistorySubtitle": { - "description": "Settings switch subtitle for storing completed downloads in history" - }, - "@albumFolderArtistAlbumFlat": { - "description": "Album folder option with singles directly in artist folder" - }, - "extensionHealthRequired": "required", - "actionCancel": "Отмена", - "@actionCancel": { - "description": "Action button - cancel operation" - }, - "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", - "@optionsEmbedMetadataSubtitleOff": { - "description": "Subtitle when metadata embedding is disabled" - }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", - "@downloadAllowLocalNetworkDisabled": { - "description": "Subtitle when allow local network access is off" - }, - "@extensionsDownloadPrioritySubtitle": { - "description": "Subtitle for download priority" - }, - "downloadSingleFilenameFormat": "Формат имени файла", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "cacheSummarySubtitle": "Очистка кэша не приведет к удалению загруженных музыкальных файлов.", - "@cacheSummarySubtitle": { - "description": "Helper text for cache summary card" - }, - "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", - "libraryFilterMetadataMissingTrackNumber": "Missing track number", - "@libraryFilterMetadataMissingTrackNumber": { - "description": "Filter option - items missing track number" - }, - "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", - "@backupIncludeSecretsDescription": { - "description": "Explanation for the include-credentials toggle" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" + "backupRestoreConfirmTitle": "Restore this backup?", + "@backupRestoreConfirmTitle": { + "description": "Confirmation dialog title before restoring a backup" }, - "@extensionServiceStatus": { - "description": "Extension detail section header for service status" + "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", + "@backupRestoreConfirmMessage": { + "description": "Confirmation dialog message before restoring a backup" }, - "queueEmptySingles": "No single downloads", - "@queueEmptySingles": { - "description": "Empty state title when no single track downloads exist" + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" }, - "@snackbarSelectedPlaylistsEmpty": { - "description": "Snackbar when selected playlists contain no tracks" + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" }, - "@errorRateLimited": { - "description": "Error title - too many requests" + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", - "@setupDownloadInFlac": { - "description": "App tagline in setup" + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" }, - "trackRemoveFromDevice": "Удалить с устройства", - "@extensionsNoDownloadProvider": { - "description": "Empty state - no download providers" + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" }, - "@backupCreated": { - "description": "Snackbar after a backup file is created" + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" }, - "cacheSummaryTitle": "Просмотр кэша", - "@cacheSummaryTitle": { - "description": "Heading for cache summary card" + "backupContentsSettings": "App settings", + "@backupContentsSettings": { + "description": "Backup contents row label for settings" }, - "selectionReplayGainCount": "ReplayGain ({count})", - "@selectionReplayGainCount": { - "description": "Batch selection action button label for ReplayGain", + "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "@backupContentsHistory": { + "description": "Backup contents row for history count", "placeholders": { "count": { "type": "int" } } }, - "@setupNotificationBackgroundDescription": { - "description": "Detailed notification explanation" - }, - "safMigrationTitle": "Storage Update Required", - "snackbarMetadataSaved": "Метаданные успешно сохранены", - "@snackbarMetadataSaved": { - "description": "Snackbar after successfully saving track metadata" - }, - "@backupContentsSettings": { - "description": "Backup contents row label for settings" - }, - "logClearLogsTitle": "Очистить логи", - "extensionsCustomSearch": "Пользовательский поиск", - "@extensionsCustomSearch": { - "description": "Label for custom search provider" - }, - "@downloadFrom": { - "description": "Label - download source" + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheSizeWithFiles": "{size} в {count} файлах", - "selectionShareNoFiles": "Файлы, доступные для совместного доступа, не найдены", - "@selectionShareNoFiles": { - "description": "Snackbar when no selected files exist on disk" + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "snackbarAddedTracksToQueue": "Добавлено {count} треков в очередь", - "downloadFilenameInsertTag": "Нажмите для вставки тега:", - "@downloadFilenameInsertTag": { - "description": "Label above filename tag chips" + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" удалено из избранных исполнителей", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", "placeholders": { - "artistName": { - "type": "String" + "count": { + "type": "int" } } }, - "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", - "backupRestoreConfirmButton": "Restore", - "@libraryCleanupMissingFiles": { - "description": "Button to remove entries for missing files" + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "backupCreateFailed": "Failed to create backup", - "notifLibraryScanFailed": "Ошибка сканирования библиотеки", - "@notifLibraryScanFailed": { - "description": "Notification title when library scan fails" + "backupIncludeSecrets": "Include extension credentials", + "@backupIncludeSecrets": { + "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, - "audioAnalysisRescan": "Re-analyze", - "@trackTrackName": { - "description": "Metadata label - track title" + "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", + "@backupIncludeSecretsDescription": { + "description": "Explanation for the include-credentials toggle" }, - "@setupPermissionRequired": { - "description": "Generic permission required title", + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { - "permissionType": { - "type": "String", - "description": "Type of permission (Storage/Notification)" + "count": { + "type": "int" } } }, - "@nowPlayingNoLyrics": { - "description": "Empty state when the playing file has no embedded lyrics" + "tooltipLoveAll": "Love All", + "@tooltipLoveAll": { + "description": "Tooltip for the Love All button on album/playlist screens" }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", + "tooltipAddToPlaylist": "Добавить в плейлист", + "@tooltipAddToPlaylist": { + "description": "Tooltip for the Add to Playlist button" + }, + "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", + "@snackbarRemovedTracksFromLoved": { + "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { "count": { "type": "int" } } }, - "@extensionMetadataProvider": { - "description": "Capability - provides metadata" + "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", + "@snackbarAddedTracksToLoved": { + "description": "Snackbar after adding multiple tracks to Loved folder", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@downloadFilterContributing": { - "description": "Setting to strip contributing artists from Album Artist folder name" + "dialogDownloadAllTitle": "Скачать всё", + "@dialogDownloadAllTitle": { + "description": "Dialog title for bulk download confirmation" }, - "libraryScanSelectFolderFirst": "Сначала выберите папку", - "@sectionDownload": { - "description": "Settings section header" + "dialogDownloadAllMessage": "Download {count} tracks?", + "@dialogDownloadAllMessage": { + "description": "Body of the Download All confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionHealthNotConfigured": "Not configured", - "queueRetryAllFailed": "Retry {count} failed", - "folderOrganizationByPlaylistSubtitle": "Отдельная папка для каждого плейлиста", - "@folderOrganizationByPlaylistSubtitle": { - "description": "Subtitle for playlist folder option" + "homeSkipAlreadyDownloaded": "Skip already downloaded songs", + "@homeSkipAlreadyDownloaded": { + "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "lyricsProviderExtensionDesc": "Поставщик расширений", - "@libraryFilterQualityHiRes": { - "description": "Filter option - high resolution audio" + "homeGoToAlbum": "Перейти к альбому", + "@homeGoToAlbum": { + "description": "Context menu item to navigate to the album page" }, - "trackConvertTitle": "Конвертировать аудио", - "@trackConvertTitle": { - "description": "Title of convert bottom sheet" + "homeAlbumInfoUnavailable": "Album info not available", + "@homeAlbumInfoUnavailable": { + "description": "Snackbar when album info cannot be loaded" }, - "setupSkipForNow": "Пропустить", - "sectionDownload": "Скачивание", - "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" + "snackbarLoadingCueSheet": "Загрузка CUE разметки...", + "@snackbarLoadingCueSheet": { + "description": "Snackbar while loading a CUE sheet file" }, - "@trackConvertActionLabelLossless": { - "description": "Convert button label for lossless conversion with quality cap", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" - } - } + "snackbarMetadataSaved": "Метаданные успешно сохранены", + "@snackbarMetadataSaved": { + "description": "Snackbar after successfully saving track metadata" }, - "storeRequiresVersion": "Requires v{version}+", - "@storeRequiresVersion": { - "description": "Store compatibility badge for minimum app version", + "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", + "@snackbarFailedToEmbedLyrics": { + "description": "Snackbar when lyrics embedding fails" + }, + "snackbarFailedToWriteStorage": "Failed to write back to storage", + "@snackbarFailedToWriteStorage": { + "description": "Snackbar when writing metadata back to file fails" + }, + "snackbarError": "Ошибка: {error}", + "@snackbarError": { + "description": "Generic error snackbar with error detail", "placeholders": { - "version": { + "error": { "type": "String" } } }, - "metadataProviderPriorityDescription": "Перетаскивайте, чтобы изменить порядок провайдеров метаданных. Приложение будет пробовать провайдеров сверху вниз при поиске треков и извлечении метаданных.", - "@notifUpdateFailed": { - "description": "Notification title when app update download fails" + "snackbarNoActionDefined": "No action defined for this button", + "@snackbarNoActionDefined": { + "description": "Snackbar when an extension button has no action configured" }, - "extensionsInfoTip": "Расширения могут добавлять новые метаданные и провайдеров загрузки. Устанавливайте только расширения из надежных источников.", - "@extensionsInfoTip": { - "description": "Security warning about extensions" + "noTracksFoundForAlbum": "No tracks found for this album", + "@noTracksFoundForAlbum": { + "description": "Empty state message when an album has no tracks" }, - "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person lyrics is on" + "downloadLocationSubtitle": "Choose where to save your downloaded tracks", + "@downloadLocationSubtitle": { + "description": "Subtitle shown in the download location picker sheet" }, - "libraryFilterMetadataMissingYear": "Отсутствует год", - "extensionsDownloadPriority": "Приоритет скачивания", - "@extensionsDownloadPriority": { - "description": "Setting - download provider order" + "storageModeAppFolder": "App Folder (Recommended)", + "@storageModeAppFolder": { + "description": "Storage mode option - app-managed folder" }, - "@downloadAllowLocalNetworkEnabled": { - "description": "Subtitle when allow local network access is on" + "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", + "@storageModeAppFolderSubtitle": { + "description": "Subtitle for app folder storage mode" }, - "libraryScan": "Сканировать библиотеку", - "@libraryScan": { - "description": "Button to start library scan" + "storageModeSaf": "Custom Folder (SAF)", + "@storageModeSaf": { + "description": "Storage mode option - Storage Access Framework" }, - "editMetadataFieldLabel": "Заголовок", - "@editMetadataFieldLabel": { - "description": "Chip label for label field in auto-fill selector" + "storageModeSafSubtitle": "Pick any folder, including SD card", + "@storageModeSafSubtitle": { + "description": "Subtitle for SAF storage mode" }, - "updateDownloadFailed": "Не удалось скачать", - "@updateDownloadFailed": { - "description": "Update error title" + "downloadFolderAccessLostTitle": "Download folder access lost", + "@downloadFolderAccessLostTitle": { + "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" }, - "appearanceAmoledDarkSubtitle": "Глубокий чёрный фон", - "@appearanceAmoledDarkSubtitle": { - "description": "Subtitle for AMOLED dark" + "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", + "@downloadFolderAccessLostSubtitle": { + "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" }, - "setupIcloudNotSupported": "iCloud Drive не поддерживается. Пожалуйста, используйте папку Документы.", - "trackLyricsEmbeddedSource": "Embedded", - "@trackLyricsEmbeddedSource": { - "description": "Lyrics source label for embedded lyrics" + "downloadFolderReselect": "Re-select folder", + "@downloadFolderReselect": { + "description": "Button that reopens the folder picker to restore download folder access" }, - "@trackAlbumArtist": { - "description": "Metadata label - album artist" + "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", + "@downloadErrorSafPermissionLost": { + "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" }, - "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", - "@extensionsInstallPartialSuccess": { - "description": "Message when installing multiple extensions partially succeeds", - "placeholders": { - "installed": { - "type": "int", - "description": "Number of successfully installed extensions" - }, - "attempted": { - "type": "int", - "description": "Number of selected extensions" - } - } + "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", + "@downloadErrorFolderAccessLost": { + "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, - "@extensionSettingsCount": { - "description": "Count of settings exposed by an extension quality option", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", + "@downloadFilenameDescription": { + "description": "Description shown in filename format editor" }, - "notifLibraryScanCancelled": "Сканирование библиотеки отменено", - "@notifLibraryScanCancelled": { - "description": "Notification title when library scan is cancelled by the user" + "downloadFilenameInsertTag": "Нажмите для вставки тега:", + "@downloadFilenameInsertTag": { + "description": "Label above filename tag chips" }, - "collectionPlaylistNameRequired": "Имя плейлиста обязательно", - "libraryCleanupMissingFiles": "Очистка отсутствующих файлов", - "storeCategoryUtility": "Utility", - "@storeCategoryUtility": { - "description": "Store extension category - utility" + "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", + "@downloadSeparateSinglesEnabled": { + "description": "Subtitle when separate singles folder is on" }, - "searchSortTitle": "Упорядочить результаты", - "@extensionVerificationBrowserExternal": { - "description": "Chip label for external browser verification mode" + "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", + "@downloadSeparateSinglesDisabled": { + "description": "Subtitle when separate singles folder is off" }, - "audioAnalysisLufs": "LUFS", - "@setupAllowAccessToManageFiles": { - "description": "Instruction for file access permission" + "downloadArtistNameFilters": "Artist Name Filters", + "@downloadArtistNameFilters": { + "description": "Setting title for artist folder filter options" }, - "extensionsErrorLoading": "Ошибка загрузки расширения", - "@actionPaste": { - "description": "Generic action - paste from clipboard" + "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", + "@downloadCreatePlaylistSourceFolder": { + "description": "Setting to create a subfolder per playlist source" }, - "aboutFeatureRequestSubtitle": "Предложить новые функции для приложения", - "@aboutFeatureRequestSubtitle": { - "description": "Subtitle for feature request" + "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", + "@downloadCreatePlaylistSourceFolderEnabled": { + "description": "Subtitle when playlist folder is enabled" }, - "@aboutTitle": { - "description": "About page title" + "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", + "@downloadCreatePlaylistSourceFolderDisabled": { + "description": "Subtitle when playlist folder is disabled" }, - "@downloadNeteaseIncludeTranslation": { - "description": "Setting to include translated lyrics from Netease" + "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", + "@downloadCreatePlaylistSourceFolderRedundant": { + "description": "Subtitle when folder organization is already set to playlist" }, - "@actionGo": { - "description": "Generic action button label" + "downloadSongLinkRegion": "Регион SongLink", + "@downloadSongLinkRegion": { + "description": "Setting for SongLink region used during fallback resolution" }, - "regionCountryFR": "France", - "trackConvertResamplerSoxr": "SoXr", - "extensionUpdated": "Обновлено", - "@extensionUpdated": { - "description": "Extension detail - last update" + "downloadNetworkCompatibilityMode": "Network Compatibility Mode", + "@downloadNetworkCompatibilityMode": { + "description": "Setting for legacy TLS/network handling" }, - "downloadLossyFormat": "Формат с потерями", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "@downloadNetworkCompatibilityModeEnabled": { + "description": "Subtitle when network compatibility mode is on" }, - "snackbarAlreadyInLibrary": "\"{trackName}\" уже есть в вашей библиотеке", - "@snackbarAlreadyInLibrary": { - "description": "Snackbar - track already exists in local library", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", + "@downloadNetworkCompatibilityModeDisabled": { + "description": "Subtitle when network compatibility mode is off" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", - "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", - "libraryFilterQuality": "Качество", - "@libraryFilterQuality": { - "description": "Filter section - audio quality" + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@downloadAllowLocalNetwork": { + "description": "Setting title for allowing requests to private/local network targets" }, - "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", - "@editMetadataAutoFillDone": { - "description": "Snackbar confirming how many fields were auto-filled", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", + "@downloadAllowLocalNetworkEnabled": { + "description": "Subtitle when allow local network access is on" }, - "@discographyDownload": { - "description": "Button - download artist discography" + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" }, - "aboutFeatureRequest": "Предложить новую функцию", - "downloadSingleFilenameFormatDescription": "Формат имени файла для синглов и EP. Используются те же теги, что и для альбомов.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" + "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "@downloadSelectServiceToEnable": { + "description": "Subtitle when quality picker is disabled due to extension service" }, - "queueClearAllMessage": "Вы уверены, что хотите очистить все загрузки?", - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", - "extensionLastChecked": "Last checked {time}", - "@extensionLastChecked": { - "description": "Timestamp for the latest extension service health check", - "placeholders": { - "time": { - "type": "String" - } - } + "downloadEmbedLyricsDisabled": "Enable metadata embedding first", + "@downloadEmbedLyricsDisabled": { + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "homeImportCsvTooltip": "Import playlist (CSV, M3U)", - "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "downloadNeteaseIncludeTranslation": "Netease: включение перевода", + "@downloadNeteaseIncludeTranslation": { + "description": "Setting to include translated lyrics from Netease" }, - "trackConvertResamplerSwr": "SWR", - "@trackConvertResamplerSwr": { - "description": "Lossless conversion default FFmpeg swresample resampler option" + "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", + "@downloadNeteaseIncludeTranslationEnabled": { + "description": "Subtitle when Netease translation is on" }, - "@downloadFolderOrganization": { - "description": "Title of the folder organization picker bottom sheet" + "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", + "@downloadNeteaseIncludeTranslationDisabled": { + "description": "Subtitle when Netease translation is off" }, - "dialogClearHistoryTitle": "Очистить историю", - "@logClearSearch": { - "description": "Tooltip for clearing the log search field" + "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", + "@downloadNeteaseIncludeRomanization": { + "description": "Setting to include romanized lyrics from Netease" }, - "dialogImport": "Импорт", - "@dialogImport": { - "description": "Dialog button - import data" + "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", + "@downloadNeteaseIncludeRomanizationEnabled": { + "description": "Subtitle when Netease romanization is on" }, - "@setupChangeFolderTooltip": { - "description": "Tooltip for editing the selected download folder" + "downloadNeteaseIncludeRomanizationDisabled": "No romanization", + "@downloadNeteaseIncludeRomanizationDisabled": { + "description": "Subtitle when Netease romanization is off" }, - "notifLibraryScanErrors": "{count} ошибок", - "@downloadNetworkCompatibilityMode": { - "description": "Setting for legacy TLS/network handling" + "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", + "@downloadAppleQqMultiPerson": { + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, - "@metadataSaveFailedFfmpeg": { - "description": "Snackbar error when FFmpeg fails to write metadata" + "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", + "@downloadAppleQqMultiPersonEnabled": { + "description": "Subtitle when multi-person lyrics is on" }, - "dialogUninstallExtension": "Удалить расширение?", - "recentTypePlaylist": "Плейлист", - "@recentTypePlaylist": { - "description": "Recent access item type - playlist" + "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", + "@downloadAppleQqMultiPersonDisabled": { + "description": "Subtitle when multi-person lyrics is off" }, - "trackDeleteConfirmMessage": "Это приведет к окончательному удалению загруженного файла и его удалению из истории.", - "@logIssueNetworkErrorDescription": { - "description": "Diagnostic badge description for generic network errors" + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "appearanceThemeSystem": "Системная", - "@appearanceThemeSystem": { - "description": "Follow system theme" + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "albumFolderArtistAlbumSingles": "Исполнитель / Альбом + Синглы", - "@aboutTranslators": { - "description": "Section for translators" + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "shareSheetNotFound": "Not found", - "@shareSheetNotFound": { - "description": "Cross-service share sheet row subtitle when a service has no match" + "downloadMusixmatchLanguage": "Язык Musixmatch", + "@downloadMusixmatchLanguage": { + "description": "Setting for Musixmatch lyrics translation language" }, - "@tutorialDownloadInProgressSemantics": { - "description": "Accessibility label for active download state in tutorial demo" + "downloadMusixmatchLanguageAuto": "Auto (original language)", + "@downloadMusixmatchLanguageAuto": { + "description": "Subtitle when no language is set" }, - "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", - "@editMetadataAutoFillNoneSelected": { - "description": "Snackbar when user taps Fetch without selecting any fields" + "downloadFilterContributing": "Filter Contributing Artists", + "@downloadFilterContributing": { + "description": "Setting to strip contributing artists from Album Artist folder name" }, - "@snackbarViewQueue": { - "description": "Snackbar action - view download queue" + "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", + "@downloadFilterContributingEnabled": { + "description": "Subtitle when contributing artist filter is on" }, - "@optionsUpdateChannelPreview": { - "description": "Include beta/preview updates" + "downloadFilterContributingDisabled": "Full Album Artist string used", + "@downloadFilterContributingDisabled": { + "description": "Subtitle when contributing artist filter is off" }, - "editMetadataFieldComposer": "Composer", - "@editMetadataFieldComposer": { - "description": "Label for composer field in the edit metadata sheet" + "downloadProvidersNoneEnabled": "No providers enabled", + "@downloadProvidersNoneEnabled": { + "description": "Shown when no lyrics providers are active" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", - "@aboutSachinsenalDesc": { - "description": "Credit description for sachinsenal0x64" + "downloadMusixmatchLanguageCode": "Код языка", + "@downloadMusixmatchLanguageCode": { + "description": "Label for Musixmatch language input field" }, - "backupTitle": "Backup & Restore", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" + "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "@downloadMusixmatchLanguageHint": { + "description": "Placeholder for Musixmatch language input" }, - "setupStorageAccessRequired": "Требуется доступ к хранилищу", - "@setupStorageAccessRequired": { - "description": "Title when storage access needed" + "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", + "@downloadMusixmatchLanguageDesc": { + "description": "Description in Musixmatch language picker" }, - "trackMetadataDelete": "Удалить", - "@trackMetadataDelete": { - "description": "Action button - delete track" + "downloadMusixmatchAuto": "Авто", + "@downloadMusixmatchAuto": { + "description": "Button to clear Musixmatch language (use auto)" }, - "libraryFilterMetadataMissingDiscNumber": "Missing disc number", - "@libraryFilterMetadataMissingDiscNumber": { - "description": "Filter option - items missing disc number" + "downloadNetworkAnySubtitle": "Use WiFi or mobile data", + "@downloadNetworkAnySubtitle": { + "description": "Subtitle for any-network option in picker" }, - "snackbarMetadataProviderSaved": "Приоритет провайдера метаданных сохранён", - "setupPermissionRequired": "Требуется разрешение {permissionType}", - "@selectionConvertNoConvertible": { - "description": "Snackbar when no selected tracks support conversion" + "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "@downloadNetworkWifiOnlySubtitle": { + "description": "Subtitle for WiFi-only option in picker" }, - "extensionHealthDegraded": "Degraded", - "regionCountryKR": "South Korea", - "@regionCountryKR": { - "description": "Country name for SongLink region picker" + "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", + "@downloadSongLinkRegionDesc": { + "description": "Description in SongLink region picker" }, - "trackLyricsNotInFile": "В этом файле не найдено текстов песен", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" + "snackbarUnsupportedAudioFormat": "Неподдерживаемый аудио формат", + "@snackbarUnsupportedAudioFormat": { + "description": "Snackbar when the audio format is not supported for the requested operation" }, - "@downloadedAlbumTapToSelect": { - "description": "Selection hint" + "cacheRefresh": "Обновить", + "@cacheRefresh": { + "description": "Tooltip for refresh button on cache management page" }, - "downloadArtistNameFilters": "Artist Name Filters", - "@downloadArtistNameFilters": { - "description": "Setting title for artist folder filter options" + "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", + "@dialogDownloadPlaylistsMessage": { + "description": "Dialog message for bulk playlist download confirmation", + "placeholders": { + "trackCount": { + "type": "int" + }, + "playlistCount": { + "type": "int" + } + } }, - "@libraryFilterMetadataMissingArtist": { - "description": "Filter option - items missing artist" + "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", + "@bulkDownloadPlaylistsButton": { + "description": "Button label for bulk downloading selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "recentShowAllDownloads": "Показать все загрузки", - "@appearanceThemeLight": { - "description": "Light theme" + "bulkDownloadSelectPlaylists": "Select playlists to download", + "@bulkDownloadSelectPlaylists": { + "description": "Button label when no playlists are selected for download" }, - "trackReEnrichFieldTrackInfo": "Номер трека и диска", - "@appearanceThemeDark": { - "description": "Dark theme" + "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", + "@snackbarSelectedPlaylistsEmpty": { + "description": "Snackbar when selected playlists contain no tracks" }, - "extensionVerificationLinkCopied": "Verification link copied", - "@extensionVerificationLinkCopied": { - "description": "Snackbar after copying the extension verification URL" + "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@playlistsCount": { + "description": "Playlist count display", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@extensionsHomeFeedDescription": { - "description": "Extensions page - description for home feed provider picker" + "editMetadataAutoFill": "Auto-fill from online", + "@editMetadataAutoFill": { + "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", - "@downloadAlbumArtistMetadataPrimaryOnly": { - "description": "Status label when album-artist folder filtering uses primary artist only" + "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", + "@editMetadataAutoFillDesc": { + "description": "Description for the auto-fill section" }, - "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", - "setupNext": "Далее", - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", - "libraryAutoScanDaily": "Ежедневно", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" + "editMetadataAutoFillSource": "Metadata source", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" }, - "@audioAnalysisDescription": { - "description": "Description for audio analysis tap-to-analyze prompt" + "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" }, - "nowPlayingUpNext": "Up next", - "@nowPlayingUpNext": { - "description": "Title for the playback queue sheet" + "editMetadataAutoFillFind": "Find metadata", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" }, - "nowPlayingPreviousTrack": "Previous track", - "nowPlayingNextTrack": "Next track", - "logAutoScrollOff": "Auto-scroll OFF", - "trackConvertFailed": "Ошибка конвертации", - "@trackConvertFailed": { - "description": "Snackbar when conversion fails" + "editMetadataAutoFillPreview": "Data from {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } }, - "extensionsUninstall": "Удалить", - "safMigrationSuccess": "Download folder updated to SAF mode", - "optionsClearHistorySubtitle": "Удалить все скачанные треки из истории", - "@optionsClearHistorySubtitle": { - "description": "Subtitle for clear history" + "editMetadataAutoFillCoverAvailable": "Cover artwork available", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" }, - "trackPlayNext": "Play next", - "extensionsNoHomeFeedExtensions": "No extensions with home feed", - "optionsUpdateChannelStable": "Только стабильные релизы", - "@optionsUpdateChannelStable": { - "description": "Only stable updates" + "editMetadataAutoFillApply": "Apply selected data", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" }, - "@discographyDownloadAllSubtitle": { - "description": "Subtitle showing total tracks and albums", + "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" }, - "albumCount": { - "type": "int" + "source": { + "type": "String" } } }, - "searchPlaylists": "Плейлисты", - "@searchPlaylists": { - "description": "Search result category - playlists" + "editMetadataAutoFillFetch": "Получить и заполнить", + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" }, - "downloadNetworkCompatibilityMode": "Network Compatibility Mode", - "settingsAppearance": "Внешний вид", - "logIssueRateLimitedLabel": "RATE LIMITED", - "@logIssueRateLimitedLabel": { - "description": "Diagnostic badge label when the service rate limits requests" + "editMetadataAutoFillSearching": "Поиск в сети...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" }, - "logIssueSummary": "Issue Summary", - "@logIssueSummary": { - "description": "Header for log issue analysis summary" + "editMetadataAutoFillNoResults": "No matching metadata found online", + "@editMetadataAutoFillNoResults": { + "description": "Snackbar when online metadata search returns no results" }, - "appName": "Spotify", - "storeRepoDialogCurrent": "Текущий репозиторий:", - "@optionsExtensionStoreSubtitle": { - "description": "Subtitle for extension repo toggle" + "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", + "@editMetadataAutoFillDone": { + "description": "Snackbar confirming how many fields were auto-filled", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@trackLyrics": { - "description": "Tab title - lyrics" + "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", + "@editMetadataAutoFillNoneSelected": { + "description": "Snackbar when user taps Fetch without selecting any fields" }, - "@backupImportButton": { - "description": "Button to pick a backup file to restore" + "editMetadataFieldTitle": "Название", + "@editMetadataFieldTitle": { + "description": "Chip label for title field in auto-fill selector" }, - "@setupFolderChoose": { - "description": "Button to choose folder" + "editMetadataFieldArtist": "Исполнитель", + "@editMetadataFieldArtist": { + "description": "Chip label for artist field in auto-fill selector" }, - "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", - "@extensionsDisabled": { - "description": "Extension status - inactive" + "editMetadataFieldAlbum": "Альбом", + "@editMetadataFieldAlbum": { + "description": "Chip label for album field in auto-fill selector" }, - "@regionCountryAU": { - "description": "Country name for SongLink region picker" + "editMetadataFieldAlbumArtist": "Исполнитель альбома", + "@editMetadataFieldAlbumArtist": { + "description": "Chip label for album artist field in auto-fill selector" }, - "@storeCategoryMetadata": { - "description": "Store extension category - metadata" + "editMetadataFieldDate": "Дата", + "@editMetadataFieldDate": { + "description": "Chip label for date field in auto-fill selector" }, - "libraryFilterApply": "Применить", - "@libraryFilterApply": { - "description": "Apply filters button" + "editMetadataFieldTrackNum": "Трек #", + "@editMetadataFieldTrackNum": { + "description": "Chip label for track number field in auto-fill selector" }, - "@libraryFilterSortGenreAsc": { - "description": "Sort option - genre ascending" + "editMetadataFieldDiscNum": "Диск #", + "@editMetadataFieldDiscNum": { + "description": "Chip label for disc number field in auto-fill selector" }, - "setupAllowAccessToManageFiles": "Пожалуйста, включите \"Разрешить доступ для управления всеми файлами\" на следующем экране.", - "@dialogSave": { - "description": "Dialog button - save changes" + "editMetadataFieldGenre": "Жанр", + "@editMetadataFieldGenre": { + "description": "Chip label for genre field in auto-fill selector" }, - "trackLyrics": "Текст песни", - "extensionSettingNotSet": "Not set", - "@extensionSettingNotSet": { - "description": "Value shown when an extension setting has no value" + "editMetadataFieldIsrc": "ISRC", + "@editMetadataFieldIsrc": { + "description": "Chip label for ISRC field in auto-fill selector" }, - "@audioAnalysisClipping": { - "description": "Clipping metric label" + "editMetadataFieldLabel": "Заголовок", + "@editMetadataFieldLabel": { + "description": "Chip label for label field in auto-fill selector" }, - "downloadNeteaseIncludeTranslation": "Netease: включение перевода", - "@albumFolderArtistAlbumSubtitle": { - "description": "Folder structure example" + "editMetadataFieldCopyright": "Авторские права", + "@editMetadataFieldCopyright": { + "description": "Chip label for copyright field in auto-fill selector" }, - "@settingsDonateSubtitle": { - "description": "Subtitle for donate menu item" + "editMetadataFieldCover": "Обложка", + "@editMetadataFieldCover": { + "description": "Chip label for cover art field in auto-fill selector" }, - "cueSplitSuccess": "Успешно разделено на {count} треков", - "@cueSplitSuccess": { - "description": "Snackbar after successful CUE split", + "editMetadataSelectAll": "Все", + "@editMetadataSelectAll": { + "description": "Button to select all fields for auto-fill" + }, + "editMetadataSelectEmpty": "Только пустые", + "@editMetadataSelectEmpty": { + "description": "Button to select only fields that are currently empty" + }, + "queueDownloadingCount": "Скачивание ({count})", + "@queueDownloadingCount": { + "description": "Header for active downloads section with count", "placeholders": { "count": { "type": "int" } } }, - "cueSplitArtist": "Артист: {artist}", - "@cueSplitArtist": { - "description": "Artist name in CUE split sheet", + "queueFilteringIndicator": "Фильтрация...", + "@queueFilteringIndicator": { + "description": "Shown while filter results are being computed" + }, + "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "@queueTrackCount": { + "description": "Track count label with plural support", "placeholders": { - "artist": { - "type": "String" + "count": { + "type": "int" } } }, - "updateSeeReleaseNotes": "See release notes for details.", - "@updateSeeReleaseNotes": { - "description": "Fallback changelog text when release notes cannot be parsed" - }, - "@trackReEnrichFfmpegFailed": { - "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "@queueAlbumCount": { + "description": "Album count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionWishlist": "Список желаемого", - "@collectionWishlist": { - "description": "Custom folder for saved tracks to download later" + "queueEmptyAlbums": "No album downloads", + "@queueEmptyAlbums": { + "description": "Empty state title when no album downloads exist" }, - "editMetadataAutoFillFetch": "Получить и заполнить", - "@extensionsHomeFeedAuto": { - "description": "Label for auto-selected search provider" + "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", + "@queueEmptyAlbumsSubtitle": { + "description": "Empty state subtitle for album downloads" }, - "providerPriorityDescription": "Перетаскивайте, чтобы изменить порядок провайдеров загрузки. Приложение будет пробовать провайдеров сверху вниз при загрузке треков.", - "@providerPriorityDescription": { - "description": "Provider priority page description" + "queueEmptySingles": "No single downloads", + "@queueEmptySingles": { + "description": "Empty state title when no single track downloads exist" }, "queueEmptySinglesSubtitle": "Single track downloads will appear here", - "downloadLossyOpus128": "Opus 128 кбит/с", - "downloadUseAlbumArtistForFolders": "Использовать исполнителя альбома для папок", - "@downloadUseAlbumArtistForFolders": { - "description": "Setting - choose whether artist folders use Album Artist or Track Artist" + "@queueEmptySinglesSubtitle": { + "description": "Empty state subtitle for single track downloads" }, - "@aboutLinks": { - "description": "Section for external links" + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadedAlbumDeleteCount": "Delete {count} {count, plural, =1{track} other{tracks}}", - "updateLater": "Позже", - "@logIssueIspBlockingSuggestion": { - "description": "Diagnostic badge suggestion for ISP blocking" + "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" }, - "actionResume": "Возобновить", - "optionsDetailedLoggingOff": "Включить для отчётов об ошибках", - "@searchSortDefault": { - "description": "Sort option - default API order" + "libraryDefaultView": "Default view", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" }, - "@regionCountryCA": { - "description": "Country name for SongLink region picker" + "libraryDefaultViewLastUsed": "Last used", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" }, - "@sectionStorageAccess": { - "description": "Section header for storage access settings" + "queueEmptyHistory": "Нет истории скачиваний", + "@queueEmptyHistory": { + "description": "Empty state title when download history is empty" }, - "downloadFilterContributing": "Filter Contributing Artists", - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Папка названная в честь тега Трека Артиста", - "storeSearch": "Поиск расширений...", - "@storeSearch": { - "description": "Repo search placeholder" + "queueEmptyHistorySubtitle": "Скачанные треки появятся здесь", + "@queueEmptyHistorySubtitle": { + "description": "Empty state subtitle for download history" }, - "aboutTelegramChat": "Сообщество в Telegram", - "lyricsModeBoth": "Оба варианта", - "@lyricsModeBoth": { - "description": "Lyrics mode option - embed and external" + "selectionAllPlaylistsSelected": "Выбраны все плейлисты", + "@selectionAllPlaylistsSelected": { + "description": "Shown when all playlists are selected in selection mode" }, - "@permissionNotification": { - "description": "Notification permission type label" - }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" + "selectionTapPlaylistsToSelect": "Tap playlists to select", + "@selectionTapPlaylistsToSelect": { + "description": "Hint shown in playlist selection mode" }, - "libraryEnableLocalLibrary": "Включить локальную библиотеку", - "trackConvertTargetFormat": "Целевой формат", - "@trackConvertTargetFormat": { - "description": "Label for format selection" + "selectionSelectPlaylistsToDelete": "Select playlists to delete", + "@selectionSelectPlaylistsToDelete": { + "description": "Hint shown when no playlists are selected for deletion" }, - "extensionSettings": "Настройки", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" + "audioAnalysisTitle": "Audio Quality Analysis", + "@audioAnalysisTitle": { + "description": "Title for audio analysis section" }, - "trackLyricsTimeout": "Время ожидания запроса истекло. Повторите попытку позже.", - "settingsExtensions": "Расширения", - "@settingsBackup": { - "description": "Settings menu item - backup and restore page" + "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", + "@audioAnalysisDescription": { + "description": "Description for audio analysis tap-to-analyze prompt" }, - "librarySourceDownloaded": "Скачанные", - "@librarySourceDownloaded": { - "description": "Badge for tracks downloaded via SpotiFLAC" + "audioAnalysisAnalyzing": "Analyzing audio...", + "@audioAnalysisAnalyzing": { + "description": "Loading text while analyzing audio" }, - "appearanceDynamicColor": "Динамический цвет", - "@appearanceDynamicColor": { - "description": "Material You dynamic colors" + "audioAnalysisSampleRate": "Частота дискретизации", + "@audioAnalysisSampleRate": { + "description": "Sample rate metric label" }, - "backupImportButton": "Choose backup file", - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@optionsEmbedMetadata": { - "description": "Settings toggle title for writing metadata into downloaded files" + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" }, - "appearanceTitle": "Внешний вид", - "downloadNeteaseIncludeRomanizationDisabled": "No romanization", - "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is off" + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" }, - "@libraryScanCancelled": { - "description": "Library scan status when a scan was cancelled" + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" }, - "tracksCount": "{count, plural, one {{count} трек} few {{count} трека} many {{count} треков} =1 {1 трек} other {{count} треков}}", - "@snackbarFailedToUpdateNamed": { - "description": "Snackbar when extension update fails in the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "audioAnalysisBitDepth": "Разрядность", + "@audioAnalysisBitDepth": { + "description": "Bit depth metric label" }, - "@extensionQualityOptions": { - "description": "Capability - quality selection" + "audioAnalysisChannels": "Каналы", + "@audioAnalysisChannels": { + "description": "Channels metric label" }, - "logClearSearch": "Clear search", - "trackSaveLyrics": "Сохранить текст (.lrc)", - "@trackReEnrichSearching": { - "description": "Snackbar while searching metadata from internet for local items" + "audioAnalysisDuration": "Продолжительность", + "@audioAnalysisDuration": { + "description": "Duration metric label" }, - "@editMetadataAutoFillNoResults": { - "description": "Snackbar when online metadata search returns no results" + "audioAnalysisNyquist": "Nyquist", + "@audioAnalysisNyquist": { + "description": "Nyquist frequency metric label" }, - "notifDownloadComplete": "Скачивание завершено", - "snackbarAlreadyDownloaded": "\"{trackName}\" уже скачан", - "folderOrganizationByAlbumSubtitle": "Отдельная папка для каждого альбома", - "storeRepoUrlHint": "https://github.com/user/repo", - "trackConvertDitherTriangularHp": "Triangular HP", - "lyricsModeBothSubtitle": "Вписать и сохранить .lrc файл", - "trackReEnrichFieldExtra": "Жанр, Название, Авторские права", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" + "audioAnalysisFileSize": "Размер", + "@audioAnalysisFileSize": { + "description": "File size metric label" }, - "sectionLyrics": "Тексты песен", - "@sectionLyrics": { - "description": "Settings section header" + "audioAnalysisDynamicRange": "Динамический диапазон", + "@audioAnalysisDynamicRange": { + "description": "Dynamic range metric label" }, - "extensionStrategy": "Стратегия: {strategy}", - "@extensionStrategy": { - "description": "Track matching strategy name", - "placeholders": { - "strategy": { - "type": "String" - } - } + "audioAnalysisPeak": "Peak", + "@audioAnalysisPeak": { + "description": "Peak amplitude metric label" }, - "@downloadNativeWorker": { - "description": "Setting title for Android native download worker" + "audioAnalysisRms": "RMS", + "@audioAnalysisRms": { + "description": "RMS level metric label" }, - "optionsArtistTagModeSplitVorbis": "Разделить теги для FLAC/Opus", - "extensionsHomeFeedUse": "Use {extensionName} home feed", - "@cacheAppDirectoryDesc": { - "description": "Description of what app cache directory contains" + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" }, - "cancelDownloadTitle": "Отменить скачивание?", - "updateWhatsNew": "Что нового", - "updateNewVersionReady": "Доступна новая версия", - "@extensionVerificationClose": { - "description": "Button to dismiss the extension verification help dialog" + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" }, - "a11ySelectTrack": "Select track", - "libraryClearSubtitle": "Удалить все сканированные треки", - "@libraryClearSubtitle": { - "description": "Subtitle for clear button" + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" }, - "@settingsDownloadNetworkSubtitle": { - "description": "Subtitle explaining network preference" + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" }, - "storeAnyVersion": "Any", - "@storeAnyVersion": { - "description": "Store detail value when any app version is accepted" + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" }, - "navStore": "Репозиторий", - "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", - "libraryScanSettings": "Настройки сканирования", - "@libraryScanSettings": { - "description": "Section header for scan settings" + "audioAnalysisCutoffNotDetected": "Not detected", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" }, - "trackDuration": "Продолжительность", - "@trackDuration": { - "description": "Metadata label - track length" + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" }, - "extensionHealthOffline": "Offline", - "@extensionHealthOffline": { - "description": "Extension service health status - offline" + "audioAnalysisSamples": "Сэмплы", + "@audioAnalysisSamples": { + "description": "Total samples metric label" }, - "editMetadataFieldArtist": "Исполнитель", - "@editMetadataFieldArtist": { - "description": "Chip label for artist field in auto-fill selector" + "audioAnalysisRescan": "Re-analyze", + "@audioAnalysisRescan": { + "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" }, - "libraryInLibrary": "В библиотеке", - "pressBackAgainToExit": "Нажмите «Назад» ещё раз, чтобы выйти", - "@pressBackAgainToExit": { - "description": "Exit confirmation message" + "audioAnalysisRescanning": "Re-analyzing audio...", + "@audioAnalysisRescanning": { + "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "setupNotificationGranted": "Разрешение на уведомление предоставлено!", - "@setupNotificationGranted": { - "description": "Success message for notification permission" + "extensionsHomeFeedProvider": "Home Feed Provider", + "@extensionsHomeFeedProvider": { + "description": "Extensions page - label for home feed provider selector" }, - "settingsDonate": "Support Development", - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", - "backupContentsTitle": "Backup contents", - "updateDontRemind": "Не напоминать", - "@dialogDiscard": { - "description": "Dialog button - discard changes" + "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", + "@extensionsHomeFeedDescription": { + "description": "Extensions page - description for home feed provider picker" }, - "editMetadataAutoFillSearching": "Поиск в сети...", - "discographyDownloadSelected": "Скачать выбранное", - "trackConvertResampler": "Resampler", - "queueFilteringIndicator": "Фильтрация...", - "@queueFilteringIndicator": { - "description": "Shown while filter results are being computed" + "extensionsHomeFeedAuto": "Авто", + "@extensionsHomeFeedAuto": { + "description": "Label for auto-selected search provider" }, - "@dialogDownloadAllTitle": { - "description": "Dialog title for bulk download confirmation" + "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", + "@extensionsHomeFeedAutoSubtitle": { + "description": "Extensions page - subtitle for auto home feed option" }, - "cueSplitConfirmMessage": "Разбить \"{album}\" на {count} отдельных FLAC-файлов?", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when folder organization is already set to playlist" + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" }, - "regionCountryCA": "Canada", - "cacheTempDirectory": "Временная директория", - "@cacheTempDirectory": { - "description": "Cache item title for temporary files directory" + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" }, - "libraryShowDuplicateIndicator": "Показать индикатор дубликатов", - "@logFilterBySeverity": { - "description": "Filter dialog title" + "extensionsHomeFeedUse": "Use {extensionName} home feed", + "@extensionsHomeFeedUse": { + "description": "Extensions page - subtitle for a specific extension home feed option", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "homeSearchHintProvider": "Search with {providerName}...", - "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is off" + "extensionsNoHomeFeedExtensions": "No extensions with home feed", + "@extensionsNoHomeFeedExtensions": { + "description": "Extensions page - shown when no installed extension has home feed" }, - "optionsCheckUpdates": "Проверить обновления", - "replayGainBatchAnalyzing": "Анализ ReplayGain...", - "recentTypeAlbum": "Альбом", - "providerExtension": "Расширение", - "@providerExtension": { - "description": "Label for extension-provided providers" + "cancelDownloadTitle": "Отменить скачивание?", + "@cancelDownloadTitle": { + "description": "Dialog title when confirming cancellation of an active download" }, - "trackCoverNoSource": "Нет доступных источников обложки", - "libraryFilterMetadata": "Метаданные", - "albumFolderArtistYearAlbum": "Исполнитель / [Год] Альбом", - "@albumFolderArtistYearAlbum": { - "description": "Album folder option with year" - }, - "audioAnalysisClipping": "Clipping", - "@a11yOpenAlbumByArtistTrackCount": { - "description": "Accessibility label for opening an album item with track count", + "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", + "@cancelDownloadContent": { + "description": "Dialog body when confirming cancellation of an active download", "placeholders": { - "albumName": { - "type": "String" - }, - "artistName": { + "trackName": { "type": "String" - }, - "trackCount": { - "type": "int" } } }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", - "@backupExtensionsRestoreFailed": { - "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "cancelDownloadKeep": "Удерживать", + "@cancelDownloadKeep": { + "description": "Dialog button - keep the active download (do not cancel)" + }, + "queueCancelledTitle": "Download cancelled", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, + "metadataSaveFailedFfmpeg": "Не удалось сохранить метаданные через FFmpeg", + "@metadataSaveFailedFfmpeg": { + "description": "Snackbar error when FFmpeg fails to write metadata" + }, + "metadataSaveFailedStorage": "Не удалось записать метаданные обратно в хранилище", + "@metadataSaveFailedStorage": { + "description": "Snackbar error when writing metadata file back to storage fails" + }, + "snackbarFolderPickerFailed": "Не удалось открыть выбор папок: {error}", + "@snackbarFolderPickerFailed": { + "description": "Snackbar shown when folder picker fails to open", "placeholders": { - "count": { - "type": "int" + "error": { + "type": "String" } } }, - "channelStable": "Стабильный", - "@channelStable": { - "description": "Update channel - stable releases" - }, - "tutorialSettingsTip3": "Настроить тему и внешний вид приложения", - "setupAppDocumentsFolderSubtitle": "Рекомендуется - доступ через Файлы", - "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", - "@a11yPlayTrackByArtist": { - "description": "Accessibility label for playing a local library track", + "notifDownloadingTrack": "Downloading {trackName}", + "@notifDownloadingTrack": { + "description": "Notification title while downloading a track", "placeholders": { "trackName": { "type": "String" - }, - "artistName": { - "type": "String" } } }, - "dialogRemove": "Убрать", - "extensionVerificationClose": "Close", - "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", - "@bulkDownloadPlaylistsButton": { - "description": "Button label for bulk downloading selected playlists", + "notifFinalizingTrack": "Finalizing {trackName}", + "@notifFinalizingTrack": { + "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" } } }, - "optionsAutoFallbackSubtitle": "Попробовать другие сервисы при сбое загрузки", - "@optionsAutoFallbackSubtitle": { - "description": "Subtitle for auto fallback" - }, - "extensionPatternsCount": "{count} шаблон(ов)", - "@libraryFilterLocal": { - "description": "Filter chip - show only local library items" - }, - "errorUrlNotRecognizedMessage": "Эта ссылка не поддерживается. Убедитесь, что URL-адрес указан правильно и установлено совместимое расширение.", - "@errorUrlNotRecognizedMessage": { - "description": "Error message - URL not recognized explanation" - }, - "@extensionVerificationBrowserSubtitleExternal": { - "description": "Subtitle when external browser is preferred for extension verification" - }, - "optionsArtistTagMode": "Режим тега исполнителя", - "libraryFilterMetadataComplete": "Complete metadata", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" + "notifEmbeddingMetadata": "Встраивание метаданных...", + "@notifEmbeddingMetadata": { + "description": "Notification body while embedding metadata into a downloaded track" }, - "@extensionsVersion": { - "description": "Extension version display", + "notifAlreadyInLibraryCount": "Уже в библиотеке ({completed}/{total})", + "@notifAlreadyInLibraryCount": { + "description": "Notification title when track is already in library, with count", "placeholders": { - "version": { - "type": "String" + "completed": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "@downloadNetworkAnySubtitle": { - "description": "Subtitle for any-network option in picker" - }, - "optionsReplayGainSubtitleOn": "Сканировать громкость и вставить теги ReplayGain (EBU R128)", - "libraryScanning": "Сканирование...", - "@libraryScanning": { - "description": "Status during scan" - }, - "cacheRefresh": "Обновить", - "@actionShuffle": { - "description": "Tooltip for shuffle playback action" - }, - "optionsEmbedLyricsSubtitle": "Сохранять синхронизированный текст песни рядом с загруженным треком", - "@optionsEmbedLyricsSubtitle": { - "description": "Subtitle for embed lyrics" - }, - "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", - "extensionEnterValue": "Enter value", - "@settingsDownloadNetworkAny": { - "description": "Network option - use any connection" + "notifAlreadyInLibrary": "Уже в библиотеке", + "@notifAlreadyInLibrary": { + "description": "Notification title when track is already in library" }, - "collectionLoved": "Любимые", - "@collectionLoved": { - "description": "Custom folder for favorite tracks" + "notifDownloadCompleteCount": "Загрузка завершена ({completed}/{total})", + "@notifDownloadCompleteCount": { + "description": "Notification title when download is complete, with count", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } }, - "storeAddRepoTitle": "Добавить репозиторий расширения", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" + "notifDownloadComplete": "Скачивание завершено", + "@notifDownloadComplete": { + "description": "Notification title when a single download is complete" }, - "collectionNoPlaylistsYet": "Плейлисты отсутствуют", - "@collectionNoPlaylistsYet": { - "description": "Empty state title when user has no playlists" + "notifDownloadsFinished": "Загрузка завершена ({completed} завершено, {failed} не удалось)", + "@notifDownloadsFinished": { + "description": "Notification title when queue finishes with some failures", + "placeholders": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } }, - "libraryCleanupMissingFilesSubtitle": "Удалить записи для файлов, которых больше не существует", - "@libraryCleanupMissingFilesSubtitle": { - "description": "Subtitle for cleanup button" + "notifVerificationRequiredTitle": "Verification required", + "@notifVerificationRequiredTitle": { + "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" }, - "folderOrganizationByArtist": "По исполнителю", - "@folderOrganizationByArtist": { - "description": "Folder option - artist folders" + "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", + "@notifVerificationRequiredBody": { + "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, - "aboutTranslators": "Переводчики", - "notifAlreadyInLibraryCount": "Уже в библиотеке ({completed}/{total})", - "editMetadataFieldTitle": "Название", - "@editMetadataFieldTitle": { - "description": "Chip label for title field in auto-fill selector" + "notifAllDownloadsComplete": "Все загрузки завершены", + "@notifAllDownloadsComplete": { + "description": "Notification title when all downloads finish successfully" }, - "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", - "@downloadFilenameDescription": { - "description": "Description shown in filename format editor" + "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", + "@notifTracksDownloadedSuccess": { + "description": "Notification body for queue complete - how many tracks were downloaded", + "placeholders": { + "count": { + "type": "int" + } + } }, + "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -4882,371 +4926,430 @@ } } }, - "@libraryFolderNotExist": { - "description": "Error when folder doesn't exist" + "notifDownloadsCanceledTitle": "Downloads canceled", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" }, - "@playlistsCount": { - "description": "Playlist count display", + "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", + "@notifDownloadsCanceledBody": { + "description": "Notification body when downloads are canceled by the user", "placeholders": { "count": { "type": "int" } } }, - "@loadingSharedLink": { - "description": "Status when opening shared URL" - }, - "extensionServiceHealth": "Service health", - "@extensionServiceHealth": { - "description": "Extension capability label for service health checks" + "notifScanningLibrary": "Сканирование локальной библиотеки", + "@notifScanningLibrary": { + "description": "Notification title while scanning local library" }, - "@collectionDeletePlaylistsMessage": { - "description": "Confirmation message for deleting selected playlists", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", + "@notifLibraryScanProgressWithTotal": { + "description": "Notification body for library scan progress when total is known", "placeholders": { - "count": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "percentage": { "type": "int" } } }, - "setupStorageDescription": "SpotiFLAC требуется разрешение на хранение для сохранения скачанных файлов.", - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", - "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", - "appearanceThemeLight": "Светлая", - "queueEmptyHistorySubtitle": "Скачанные треки появятся здесь", - "@queueEmptyHistorySubtitle": { - "description": "Empty state subtitle for download history" - }, - "backupRestoreFailed": "Failed to restore backup", - "@backupRestoreFailed": { - "description": "Snackbar when restore fails" - }, - "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", - "@queueFlacQueuedWithSkipped": { - "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", + "@notifLibraryScanProgressNoTotal": { + "description": "Notification body for library scan progress when total is unknown", "placeholders": { - "addedCount": { + "scanned": { "type": "int" }, - "skippedCount": { + "percentage": { "type": "int" } } }, - "@trackReplayGain": { - "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + "notifLibraryScanComplete": "Сканирование библиотеки завершено", + "@notifLibraryScanComplete": { + "description": "Notification title when library scan finishes" }, - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", - "placeholders": { + "notifLibraryScanCompleteBody": "{count} треков индексировано", + "@notifLibraryScanCompleteBody": { + "description": "Notification body for library scan complete - number of indexed tracks", + "placeholders": { "count": { "type": "int" } } }, - "setupFolderChoose": "Выбрать папку для скачивания", - "dialogDownloadAllTitle": "Скачать всё", - "providerPriorityInfo": "Если трек не доступен у первого провайдера, приложение автоматически попробует следующий.", - "@providerPriorityInfo": { - "description": "Info tip about fallback behavior" - }, - "@dialogDiscardChanges": { - "description": "Dialog title - unsaved changes warning" - }, - "discographyNoAlbums": "Нет доступных альбомов", - "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", - "cacheNoData": "Нет кэшированных данных", - "@cacheNoData": { - "description": "Label when cache category has no data" - }, - "tutorialStartDownloadSemantics": "Start download", - "@tutorialStartDownloadSemantics": { - "description": "Accessibility label for idle download button in tutorial demo" - }, - "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", - "aboutTitle": "О программе", - "@cueSplitButton": { - "description": "Button text to start CUE splitting" - }, - "appearanceHistoryView": "Отображение истории", - "audioAnalysisSampleRate": "Частота дискретизации", - "@settingsCache": { - "description": "Settings menu item - cache management" - }, - "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", - "cacheTrackLookup": "Отслеживать кэш поиска", - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@downloadUsePrimaryArtistOnly": { - "description": "Setting - strip featured artists from folder name" - }, - "@regionCountryIN": { - "description": "Country name for SongLink region picker" - }, - "@libraryFilterQualityLossy": { - "description": "Filter option - lossy compressed audio" + "notifLibraryScanExcluded": "{count} исключено", + "@notifLibraryScanExcluded": { + "description": "Library scan complete suffix - excluded track count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionRefreshStatus": "Refresh status", - "notifAllDownloadsComplete": "Все загрузки завершены", - "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", - "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", - "@editMetadataFieldDateHint": { - "description": "Hint text for the edit metadata date field" + "notifLibraryScanErrors": "{count} ошибок", + "@notifLibraryScanErrors": { + "description": "Library scan complete suffix - error count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "trackMetadataShare": "Поделиться", - "@trackMetadataShare": { - "description": "Action button - share track" + "notifLibraryScanFailed": "Ошибка сканирования библиотеки", + "@notifLibraryScanFailed": { + "description": "Notification title when library scan fails" }, - "discographyDownloadAllSubtitle": "{count} треков из {albumCount} релизов", - "settingsDonateSubtitle": "Buy the developer a coffee", - "libraryFilterDownloaded": "Скачанные", - "downloadNetworkAnySubtitle": "Use WiFi or mobile data", - "@cueSplitNoAudioFile": { - "description": "Error when CUE audio file is missing" + "notifLibraryScanCancelled": "Сканирование библиотеки отменено", + "@notifLibraryScanCancelled": { + "description": "Notification title when library scan is cancelled by the user" }, "notifLibraryScanStopped": "Сканирование остановлено перед завершением.", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", - "trackCopyLyrics": "Копировать текст", - "@trackCopyLyrics": { - "description": "Action - copy lyrics to clipboard" - }, - "regionCountryAU": "Australia", - "downloadAlbumFolderStructure": "Структура папок альбома", - "downloadMusixmatchAuto": "Авто", - "actionDismiss": "Dismiss", - "storeFilterAll": "Все", - "extensionsDisabled": "Выключено", - "@logClearLogs": { - "description": "Clear button tooltip" - }, - "dialogDownloadAllMessage": "Download {count} tracks?", - "@optionsEmbedLyrics": { - "description": "Embed lyrics in audio files" - }, - "tutorialLibraryTitle": "Ваша библиотека", - "optionsCheckUpdatesSubtitle": "Уведомлять о наличии новой версии", - "@optionsCheckUpdatesSubtitle": { - "description": "Subtitle for update check" + "@notifLibraryScanStopped": { + "description": "Notification body when library scan is cancelled" }, - "collectionPlaylist": "Плейлист", - "@collectionPlaylist": { - "description": "Single playlist label" + "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", + "@notifDownloadingUpdate": { + "description": "Notification title while downloading an app update", + "placeholders": { + "version": { + "type": "String" + } + } }, - "dateMonthsAgo": "{count} месяцев назад", - "@dateMonthsAgo": { - "description": "Relative date - months ago", + "notifUpdateProgress": "{received} / {total} МБ • {percentage}%", + "@notifUpdateProgress": { + "description": "Notification body showing update download progress", "placeholders": { - "count": { + "received": { + "type": "String" + }, + "total": { + "type": "String" + }, + "percentage": { "type": "int" } } }, - "@extensionRemoveButton": { - "description": "Button to uninstall extension" - }, - "collectionPlaylistRenamed": "Плейлист переименован", - "collectionCreatePlaylist": "Создать плейлист", - "homeGoToAlbum": "Перейти к альбому", - "@homeGoToAlbum": { - "description": "Context menu item to navigate to the album page" - }, - "folderOrganizationByArtistSubtitle": "Отдельная папка для каждого исполнителя", - "@optionsClearHistory": { - "description": "Delete all download history" + "notifUpdateReady": "Обновление готово", + "@notifUpdateReady": { + "description": "Notification title when app update download is complete" }, - "@searchAlbums": { - "description": "Search result category - albums" + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", + "@notifUpdateReadyBody": { + "description": "Notification body when app update is ready to install", + "placeholders": { + "version": { + "type": "String" + } + } }, - "@sectionDebug": { - "description": "Settings section header" + "notifUpdateFailed": "Ошибка обновления", + "@notifUpdateFailed": { + "description": "Notification title when app update download fails" }, - "extensionsVersion": "Версия {version}", - "@navHome": { - "description": "Bottom navigation - Home tab" + "notifUpdateFailedBody": "Не удалось скачать обновление. Попробуйте позже.", + "@notifUpdateFailedBody": { + "description": "Notification body when app update download fails" }, - "@editMetadataFieldDate": { - "description": "Chip label for date field in auto-fill selector" + "searchTracks": "Tracks", + "@searchTracks": { + "description": "Search filter label - tracks" }, - "downloadUsePrimaryArtistOnly": "Основной исполнитель только для папок", - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", - "@setupStorageGranted": { - "description": "Success message for storage permission" + "homeSearchHintDefault": "Paste supported URL or search...", + "@homeSearchHintDefault": { + "description": "Default placeholder for the main search field on Home" }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", - "a11ySelectAlbum": "Select album {albumName}", - "@a11ySelectAlbum": { - "description": "Accessibility label for selecting an album", + "homeSearchHintProvider": "Search with {providerName}...", + "@homeSearchHintProvider": { + "description": "Placeholder for the main search field when a provider is selected", "placeholders": { - "albumName": { + "providerName": { "type": "String" } } }, - "aboutMobileSource": "Исходный код мобильной версии", - "@aboutMobileSource": { - "description": "Link to mobile GitHub repo" + "homeImportCsvTooltip": "Import playlist (CSV, M3U)", + "@homeImportCsvTooltip": { + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, - "@extensionCustomUrlHandling": { - "description": "Extension detail section title for custom URL handling" + "homeChangeSearchProviderTooltip": "Change search provider", + "@homeChangeSearchProviderTooltip": { + "description": "Tooltip for the Home search provider picker" }, - "@downloadMusixmatchLanguageAuto": { - "description": "Subtitle when no language is set" + "actionPaste": "Paste", + "@actionPaste": { + "description": "Generic action - paste from clipboard" }, - "@cancelDownloadKeep": { - "description": "Dialog button - keep the active download (do not cancel)" + "tutorialSearchHint": "Paste or search...", + "@tutorialSearchHint": { + "description": "Placeholder shown in the tutorial search demo" }, - "libraryFilterSource": "Источник", - "@libraryFilterSource": { - "description": "Filter section - source type" + "tutorialDownloadCompletedSemantics": "Download completed", + "@tutorialDownloadCompletedSemantics": { + "description": "Accessibility label for completed download state in tutorial demo" }, - "sectionStorageAccess": "Доступ к хранилищу", - "logFilterBySeverity": "Фильтровать логи по серьезности", - "libraryFolderNotExist": "Выбранной папки не существует", - "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", - "albumFolderArtistAlbum": "Исполнитель / Альбом", - "@albumFolderArtistAlbum": { - "description": "Album folder option" + "tutorialDownloadInProgressSemantics": "Download in progress", + "@tutorialDownloadInProgressSemantics": { + "description": "Accessibility label for active download state in tutorial demo" }, - "allFilesAccessDeniedMessage": "В разрешении отказано. Пожалуйста, включите функцию «Доступ ко всем файлам» в настройках системы.", - "@allFilesAccessDeniedMessage": { - "description": "Message when permission is permanently denied" + "tutorialStartDownloadSemantics": "Start download", + "@tutorialStartDownloadSemantics": { + "description": "Accessibility label for idle download button in tutorial demo" }, - "editMetadataSelectEmpty": "Только пустые", - "settingsLocalLibrarySubtitle": "Сканировать и обнаружить дубликаты", - "@settingsAutoExportFailed": { - "description": "Setting toggle for auto-export" + "optionsEmbedMetadata": "Embed Metadata", + "@optionsEmbedMetadata": { + "description": "Settings toggle title for writing metadata into downloaded files" }, - "cacheCleanupUnusedSubtitle": "Удалить историю загрузок, оставшихся без просмотра, и отсутствующие записи в библиотеке", - "@tutorialSettingsTitle": { - "description": "Tutorial settings page title" + "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", + "@optionsEmbedMetadataSubtitleOn": { + "description": "Subtitle when metadata embedding is enabled" }, - "libraryFilterMetadataMissingGenre": "Отсутствует жанр", - "@appearanceSelectAccentColor": { - "description": "Accessibility label for picking an accent color", - "placeholders": { - "hex": { - "type": "String" - } - } + "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", + "@optionsEmbedMetadataSubtitleOff": { + "description": "Subtitle when metadata embedding is disabled" }, - "setupFolderDescription": "Выберите папку, в которой будет сохраняться скачанная музыка.", - "extensionDetailsTags": "Tags", - "unknownArtist": "Unknown Artist", - "trackFetchOnlineLyrics": "Поиск в сети", - "snackbarNoActionDefined": "No action defined for this button", - "@snackbarNoActionDefined": { - "description": "Snackbar when an extension button has no action configured" + "trackCoverNoEmbeddedArt": "No embedded album art found", + "@trackCoverNoEmbeddedArt": { + "description": "Message shown when a track file has no embedded cover art" }, - "downloadAllCount": "Скачать все ({count})", - "@downloadAllCount": { - "description": "Download all button with count", + "trackCoverReplace": "Replace Cover", + "@trackCoverReplace": { + "description": "Button label for replacing selected cover art" + }, + "trackCoverPick": "Pick Cover", + "@trackCoverPick": { + "description": "Button label for selecting cover art" + }, + "trackCoverClearSelected": "Clear selected cover", + "@trackCoverClearSelected": { + "description": "Tooltip for clearing the newly selected cover art" + }, + "trackCoverCurrent": "Current cover", + "@trackCoverCurrent": { + "description": "Label for the currently embedded cover preview" + }, + "trackCoverSelected": "Selected cover", + "@trackCoverSelected": { + "description": "Label for the newly selected cover preview" + }, + "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", + "@trackCoverReplaceNotice": { + "description": "Notice shown when a new cover has been selected but not saved yet" + }, + "trackCoverResolution": "Cover resolution", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" + }, + "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" + }, + "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", + "@trackCoverResizeFailed": { + "description": "Error shown when resizing cover art before saving metadata fails" + }, + "actionStop": "Stop", + "@actionStop": { + "description": "Generic action - stop" + }, + "queueFinalizingDownload": "Finalizing download", + "@queueFinalizingDownload": { + "description": "Accessibility label for a queue item that is finalizing" + }, + "queueDownloadNext": "Download next", + "@queueDownloadNext": { + "description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it" + }, + "queueMoveUp": "Move up", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" + }, + "queueMoveDown": "Move down", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" + }, + "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" + }, + "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" + }, + "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" + }, + "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" + }, + "nowPlayingRepeatOff": "Repeat off", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" + }, + "nowPlayingRepeatAll": "Repeat all", + "@nowPlayingRepeatAll": { + "description": "Repeat toggle tooltip when the whole queue repeats" + }, + "nowPlayingRepeatOne": "Repeat one", + "@nowPlayingRepeatOne": { + "description": "Repeat toggle tooltip when the current track repeats" + }, + "queueNetworkFailedOffline": "{count} downloads failed while offline", + "@queueNetworkFailedOffline": { + "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", "placeholders": { "count": { "type": "int" } } }, - "downloadedAlbumDiscHeader": "Диск {discNumber}", - "@backupInvalidFile": { - "description": "Snackbar when the chosen file is not a valid backup" + "queueDownloadedFileMissing": "Downloaded file missing", + "@queueDownloadedFileMissing": { + "description": "Accessibility label when a downloaded file is missing from disk" }, - "@extensionHooksAvailable": { - "description": "Post-processing hooks count", + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." + }, + "queueDownloadCompleted": "Download completed", + "@queueDownloadCompleted": { + "description": "Accessibility label for completed download state in queue" + }, + "queueRateLimitTitle": "Service rate limited", + "@queueRateLimitTitle": { + "description": "Title shown on a failed queue item when the download service rate limits requests" + }, + "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", + "@queueRateLimitMessage": { + "description": "Explanation shown on a failed queue item when the download service rate limits requests" + }, + "appearanceSelectAccentColor": "Select accent color {hex}", + "@appearanceSelectAccentColor": { + "description": "Accessibility label for picking an accent color", "placeholders": { - "count": { - "type": "int" + "hex": { + "type": "String" } } }, - "@logIssueTrackNotFoundSuggestion": { - "description": "Diagnostic badge suggestion when a track is unavailable" + "logAutoScrollOn": "Auto-scroll ON", + "@logAutoScrollOn": { + "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "@snackbarFileNotFound": { - "description": "Snackbar - file doesn't exist" + "logAutoScrollOff": "Auto-scroll OFF", + "@logAutoScrollOff": { + "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "extensionHealthOnline": "Online", - "@extensionHealthOnline": { - "description": "Extension service health status - online" + "logCopyLogs": "Copy logs", + "@logCopyLogs": { + "description": "Tooltip for copying logs" }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", - "trackOptionRemoveFromWishlist": "Удалить из списка желаний", - "extensionsFallbackTitle": "Fallback Extensions", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" + "logClearSearch": "Clear search", + "@logClearSearch": { + "description": "Tooltip for clearing the log search field" }, - "metadataSaveFailedFfmpeg": "Не удалось сохранить метаданные через FFmpeg", - "@albumFolderAlbumOnly": { - "description": "Album folder option" + "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", + "@logIssueIspBlockingLabel": { + "description": "Diagnostic badge label when ISP blocking is detected" }, - "@albumFolderYearAlbumSubtitle": { - "description": "Folder structure example" + "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", + "@logIssueIspBlockingDescription": { + "description": "Diagnostic badge description for ISP blocking" }, - "downloadedAlbumDeleteSelected": "Удалить выбранные", - "selectionSelectPlaylistsToDelete": "Select playlists to delete", - "@selectionSelectPlaylistsToDelete": { - "description": "Hint shown when no playlists are selected for deletion" + "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", + "@logIssueIspBlockingSuggestion": { + "description": "Diagnostic badge suggestion for ISP blocking" }, - "storeAddRepoDescription": "Введите URL-адрес репозитория GitHub, который содержит файл registry.json для просмотра и установки расширений.", - "appearanceThemeDark": "Тёмная", - "downloadedAlbumTapToSelect": "Нажмите на треки для выбора", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } + "logIssueRateLimitedLabel": "RATE LIMITED", + "@logIssueRateLimitedLabel": { + "description": "Diagnostic badge label when the service rate limits requests" }, - "@backupRestored": { - "description": "Snackbar after a successful restore" + "logIssueRateLimitedDescription": "Too many requests to the service", + "@logIssueRateLimitedDescription": { + "description": "Diagnostic badge description for rate limiting" }, - "nowPlayingLibraryEmpty": "Your library is empty", - "@nowPlayingLibraryEmpty": { - "description": "Snackbar when shuffle library is requested but library has no tracks" + "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", + "@logIssueRateLimitedSuggestion": { + "description": "Diagnostic badge suggestion for rate limiting" }, - "editMetadataAutoFillNoResults": "No matching metadata found online", - "updateDownloading": "Скачивание...", - "trackLyricsSource": "Источник: {source}", - "logFilterLevel": "Уровень", - "logNoLogsYet": "Логов нет", - "cacheSizeOnly": "{size}", - "@cacheSizeOnly": { - "description": "Cache size only", - "placeholders": { - "size": { - "type": "String" - } - } + "logIssueNetworkErrorLabel": "NETWORK ERROR", + "@logIssueNetworkErrorLabel": { + "description": "Diagnostic badge label for generic network errors" }, - "trackOpenInService": "Open in {serviceName}", - "@trackOpenInService": { - "description": "Button label to open a track in a named music service", + "logIssueNetworkErrorDescription": "Connection issues detected", + "@logIssueNetworkErrorDescription": { + "description": "Diagnostic badge description for generic network errors" + }, + "logIssueNetworkErrorSuggestion": "Check your internet connection", + "@logIssueNetworkErrorSuggestion": { + "description": "Diagnostic badge suggestion for generic network errors" + }, + "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", + "@logIssueTrackNotFoundLabel": { + "description": "Diagnostic badge label when a track is unavailable" + }, + "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", + "@logIssueTrackNotFoundDescription": { + "description": "Diagnostic badge description when a track is unavailable" + }, + "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", + "@logIssueTrackNotFoundSuggestion": { + "description": "Diagnostic badge suggestion when a track is unavailable" + }, + "clickableLookingUpArtist": "Looking up artist...", + "@clickableLookingUpArtist": { + "description": "Snackbar shown while clickable artist metadata is being resolved" + }, + "clickableInformationUnavailable": "{type} information not available", + "@clickableInformationUnavailable": { + "description": "Snackbar shown when clickable metadata cannot open a destination", "placeholders": { - "serviceName": { + "type": { "type": "String" } } }, - "@cacheLibraryCoverDesc": { - "description": "Description of what library cover cache contains" + "extensionDetailsTags": "Tags", + "@extensionDetailsTags": { + "description": "Section title for extension tags" }, - "libraryClearConfirmMessage": "Это удалит все сканированные треки из вашей библиотеки. Ваши фактические файлы не будут удалены.", - "@dialogImportPlaylistMessage": { - "description": "Dialog message - import playlist confirmation", + "extensionDetailsInformation": "Information", + "@extensionDetailsInformation": { + "description": "Section title for extension metadata information" + }, + "extensionUtilityFunctions": "Utility Functions", + "@extensionUtilityFunctions": { + "description": "Capability label for utility-only extensions" + }, + "actionDismiss": "Dismiss", + "@actionDismiss": { + "description": "Generic action - dismiss" + }, + "setupChangeFolderTooltip": "Change folder", + "@setupChangeFolderTooltip": { + "description": "Tooltip for editing the selected download folder" + }, + "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", + "@a11yOpenTrackByArtist": { + "description": "Accessibility label for opening a track item", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" } } }, - "extensionsHomeFeedAuto": "Авто", - "searchEmptyResultSubtitle": "Попробуйте другое ключевое слово", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "dateToday": "Сегодня", "a11yOpenItem": "Open {itemType} {name}", "@a11yOpenItem": { "description": "Accessibility label for opening a generic item", @@ -5259,844 +5362,1187 @@ } } }, - "audioAnalysisBitDepth": "Разрядность", - "editMetadataFieldTrackTotal": "Track Total", - "@editMetadataFieldTrackTotal": { - "description": "Label for total tracks field in the edit metadata sheet" - }, - "@editMetadataFieldDiscTotal": { - "description": "Label for total discs field in the edit metadata sheet" - }, - "replayGainBatchConfirmMessage": "Проанализировать громкость и записать ReplayGain теги на {count} трек(-а)?", - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Папка названная в честь тега Альбома Артиста", - "@notifDownloadingUpdate": { - "description": "Notification title while downloading an app update", + "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", + "@a11yOpenItemCount": { + "description": "Accessibility label for opening a grouped item with count", "placeholders": { - "version": { + "title": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@csvImportTracks": { - "description": "Label shown in quality picker for CSV import", + "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", + "@a11yOpenAlbumByArtistTrackCount": { + "description": "Accessibility label for opening an album item with track count", "placeholders": { - "count": { + "albumName": { + "type": "String" + }, + "artistName": { + "type": "String" + }, + "trackCount": { "type": "int" } } }, - "trackEditMetadata": "Редактировать метаданные", - "discographyDownloadAll": "Скачать всё", - "@discographyDownloadAll": { - "description": "Option - download entire discography" - }, - "@editMetadataFieldAlbum": { - "description": "Chip label for album field in auto-fill selector" - }, - "albumFolderArtistAlbumSubtitle": "Альбомы/Исполнитель/Название Альбома/", - "extensionHealthServiceUnknown": "Service status unknown", - "navHome": "Главная", - "queueDownloadStarting": "Starting...", - "@dialogRemoveExtension": { - "description": "Dialog title - uninstall extension" - }, - "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", - "@appearanceAmoledDark": { - "description": "Theme option - pure black" - }, - "qualityHiResFlac": "Hi-Res FLAC", - "selectionSelected": "{count} выбрано", - "extensionDetailsInformation": "Information", - "@extensionDetailsInformation": { - "description": "Section title for extension metadata information" - }, - "discographyDownload": "Скачать дискографию", - "editMetadataFieldCopyright": "Авторские права", - "@setupOpenSettings": { - "description": "Button to open system settings" - }, - "libraryFilterSort": "Сортировка", - "cacheLibraryCoverDesc": "Обложка извлечена из локальных музыкальных файлов. Будет повторно извлечено при следующем сканировании.", - "dialogRemoveExtension": "Удалить расширение", - "backupExportSectionTitle": "Create backup", - "downloadEmbedLyricsDisabled": "Enable metadata embedding first", - "openInOtherServices": "Open in Other Services", - "actionSelectAll": "Выбрать все", - "settingsDownloadNetworkSubtitle": "Выберите, какую сеть использовать для скачивания. Когда установлено значение только WiFi — скачивания через мобильную сеть будут приостановлены.", - "downloadFolderOrganization": "Организация папок", - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", - "@tutorialWelcomeTip2": { - "description": "Tutorial welcome tip 2" - }, - "selectionAllSelected": "Все треки выбраны", - "@selectionAllSelected": { - "description": "Status - all items selected" - }, - "settingsLogsSubtitle": "Просмотреть логи для отладки", - "albumFolderYearAlbumSubtitle": "Альбомы/[2005] Название Альбома /", - "cancelDownloadKeep": "Удерживать", - "optionsDetailedLoggingOn": "Ведутся подробные логи", - "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" + "a11yTrackByArtist": "{trackName} by {artistName}", + "@a11yTrackByArtist": { + "description": "Accessibility label for a queue or list track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "regionCountryJP": "Japan", - "notifUpdateFailed": "Ошибка обновления", - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", - "@trackLyricsSaved": { - "description": "Snackbar after lyrics saved", + "a11ySelectAlbum": "Select album {albumName}", + "@a11ySelectAlbum": { + "description": "Accessibility label for selecting an album", "placeholders": { - "fileName": { + "albumName": { "type": "String" } } }, - "downloadLocationSubtitle": "Choose where to save your downloaded tracks", - "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", - "lyricsProvidersDisabledSection": "Выключено ({count})", - "@dateDaysAgo": { - "description": "Relative date - days ago", + "a11yOpenAlbum": "Open album {albumName}", + "@a11yOpenAlbum": { + "description": "Accessibility label for opening an album", "placeholders": { - "count": { - "type": "int" + "albumName": { + "type": "String" } } }, - "librarySourceLocal": "Локальные", - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", - "sectionService": "Сервис", - "lyricsProviderQqMusicDesc": "QQ Музыка (хорошо подходит для китайских песен, через прокси)", - "@lyricsProviderQqMusicDesc": { - "description": "Description for QQ Music provider" + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" }, - "cacheCleanupUnusedDesc": "Удалить записи из истории загрузок и библиотеки, которые остались без файлов.", - "selectionTapPlaylistsToSelect": "Tap playlists to select", - "notifUpdateFailedBody": "Не удалось скачать обновление. Попробуйте позже.", - "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", - "artistPopular": "Популярное", - "extensionRemoveButton": "Удалить расширение", - "allFilesAccessEnabledSubtitle": "Можно записать в любую папку", - "@allFilesAccessEnabledSubtitle": { - "description": "Subtitle when all files access is enabled" + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" }, - "extensionsSearchProvider": "Провайдер поиска", - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", - "selectionBatchConvertConfirmTitle": "Пакетная конвертация", - "extensionMetadataProvider": "Провайдер метаданных", - "queueDownloadedFileMissing": "Downloaded file missing", - "logClearLogs": "Очистить логи", - "@downloadAppleQqMultiPerson": { - "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", - "@tutorialWelcomeTip1": { - "description": "Tutorial welcome tip 1" + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" }, - "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", - "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", - "@regionCountryUS": { - "description": "Country name for SongLink region picker" + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" }, - "trackArtist": "Исполнитель", - "extensionCustomUrlHandling": "Custom URL Handling", - "appearanceDynamicColorSubtitle": "Использовать цвета из ваших обоев", - "@appearanceDynamicColorSubtitle": { - "description": "Subtitle for dynamic color" + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" }, - "searchSortDefault": "По умолчанию", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" + "settingsApp": "App", + "@settingsApp": { + "description": "Settings menu item - app settings" }, - "albumFolderStructureDescription": "Choose how album folders are structured", - "@albumFolderStructureDescription": { - "description": "Album folder structure picker description" + "settingsAppSubtitle": "Updates, data, extension repo, debug", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" }, - "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", - "@libraryBuiltInPreviewPlayerSubtitle": { - "description": "Subtitle for built-in preview player option" + "sectionMetadataProviders": "Providers", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" }, - "storageModeAppFolder": "App Folder (Recommended)", - "@actionPause": { - "description": "Action button - pause download" + "sectionDuplicates": "Duplicates", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" }, - "actionPaste": "Paste", - "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", - "downloadNativeWorker": "Native download worker", - "releaseTypeEp": "EP", - "@releaseTypeEp": { - "description": "Badge label for EP releases" + "sectionLyricsProviderOptions": "Provider Options", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", - "cacheRefreshStats": "Обновить статистику", - "collectionPlaylistChangeCover": "Изменить обложку", - "@collectionPlaylistChangeCover": { - "description": "Bottom sheet action to pick a custom cover image for a playlist" + "metadataProvidersTitle": "Metadata Provider Priority", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" }, - "optionsClearHistory": "Очистить историю загрузок", - "trackGenre": "Жанр", - "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", - "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", - "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", - "libraryFilterMetadataMissingArtist": "Missing artist", - "extensionsNoCustomSearch": "Нет расширений с пользовательским поиском", - "@extensionsTitle": { - "description": "Extensions page title" + "metadataProvidersSubtitle": "Drag to set search and metadata source order", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" }, - "extensionDownloadProvider": "Провайдер скачивания", - "@extensionDownloadProvider": { - "description": "Capability - provides downloads" + "downloadDeduplication": "Skip Duplicate Downloads", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" }, - "lyricsMode": "Режим текстов песен", - "aboutReportIssueSubtitle": "Сообщите о возникших проблемах", - "@downloadSeparateSinglesFolder": { - "description": "Setting - separate folder for singles" + "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" }, - "appearanceAmoledDark": "AMOLED", - "logIssueNetworkErrorDescription": "Connection issues detected", - "folderOrganizationByArtistAlbumSubtitle": "Вложенные папки для исполнителей и альбомов", - "@libraryForceFullScanSubtitle": { - "description": "Subtitle for force full scan button" + "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", + "@downloadDeduplicationWithQualityVariants": { + "description": "Deduplication subtitle when separate quality versions are allowed" }, - "setupGrantPermission": "Предоставить разрешение", - "lyricsProvidersDescription": "Включайте, выключайте, переупорядочивайте источники текстов. Поставщики связаны сверху вниз пока проводится поиск текста.", - "dateDaysAgo": "{count} дней назад", - "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", - "downloadLossyMp3Subtitle": "Наилучшая совместимость, ~10 Мб на трек", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" }, - "nowPlayingDetails": "Details", - "collectionWishlistEmptyTitle": "Список желаний пуст", - "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", - "@snackbarExtensionUpdatedVersion": { - "description": "Snackbar after updating an extension from the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - }, - "version": { - "type": "String" - } - } + "downloadQualityVariants": "Allow different quality versions", + "@downloadQualityVariants": { + "description": "Setting to retain multiple quality versions of the same track" }, - "extensionHealthServiceDegraded": "Service degraded", - "selectionConvertNoConvertible": "Не выбраны конвертируемые треки", - "setupStorageGranted": "Доступ к хранилищу предоставлен!", - "downloadAllowLocalNetwork": "Allow Local Network Access", - "nowPlayingNoLyrics": "No lyrics in this file", - "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", - "@selectionDeleteTracksCount": { - "description": "Button label for deleting selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", + "@downloadQualityVariantsDescription": { + "description": "Description for retaining multiple quality versions" }, - "@libraryForceFullScan": { - "description": "Button to force a complete rescan of library" + "trackOptionDownloadQualityVariant": "Download another quality", + "@trackOptionDownloadQualityVariant": { + "description": "Track menu action to download another quality version" }, - "notifLibraryScanExcluded": "{count} исключено", - "@aboutPaxsenixSubtitle": { - "description": "Subtitle for Paxsenix special thanks entry on the about page" + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" }, - "setupChangeFolderTooltip": "Change folder", - "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", - "@logIssueIspBlockingDescription": { - "description": "Diagnostic badge description for ISP blocking" + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" }, - "libraryClear": "Очистить библиотеку", - "collectionRemoveFromPlaylist": "Удалить из плейлиста", - "@collectionRemoveFromPlaylist": { - "description": "Tooltip for removing track from playlist" + "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", + "@editMetadataFieldDateHint": { + "description": "Hint text for the edit metadata date field" }, - "backupIncludeSecrets": "Include extension credentials", - "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", - "storeCategoryMetadata": "Metadata", - "@trackLyricsEmbedded": { - "description": "Snackbar - lyrics saved to file" + "editMetadataFieldTrackTotal": "Track Total", + "@editMetadataFieldTrackTotal": { + "description": "Label for total tracks field in the edit metadata sheet" }, "editMetadataFieldDiscTotal": "Disc Total", - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" + "@editMetadataFieldDiscTotal": { + "description": "Label for total discs field in the edit metadata sheet" }, - "libraryFilterLocal": "Локальные", - "tutorialDownloadInProgressSemantics": "Download in progress", - "searchSortDurationLong": "Продолжительность (наибольшая)", - "@appearanceLanguage": { - "description": "Language setting title" + "editMetadataFieldComposer": "Composer", + "@editMetadataFieldComposer": { + "description": "Label for composer field in the edit metadata sheet" }, - "libraryAbout": "О локальной библиотеке", - "@libraryAbout": { - "description": "Section header for about info" + "editMetadataFieldComment": "Comment", + "@editMetadataFieldComment": { + "description": "Label for comment field in the edit metadata sheet" }, - "cueSplitNoAudioFile": "Аудиофайл для этого CUE sheet не найден", - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", - "appearanceSelectAccentColor": "Select accent color {hex}", - "@homeAlbumInfoUnavailable": { - "description": "Snackbar when album info cannot be loaded" + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" }, - "trackReplayGain": "Пересканировать ReplayGain", - "downloadSeparateSinglesFolder": "Отдельная папка для синглов", - "trackAlbumArtist": "Исполнитель альбома", - "qualityFlacLossless": "FLAC Lossless", - "@extensionVerificationHelpMessageWaiting": { - "description": "Dialog message when verification may need manual browser help" + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" }, - "tutorialSettingsTitle": "Настройте приложение под себя", - "extensionActionFailed": "Action failed", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", - "trackCoverNoEmbeddedArt": "No embedded album art found", - "@trackCoverNoEmbeddedArt": { - "description": "Message shown when a track file has no embedded cover art" + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", - "setupStorageAccessMessageAndroid11": "Для Android 11+ требуется разрешение \"Доступ ко всем файлам\" для сохранения файлов в выбранную вами папку загрузки.", - "notifDownloadsFinished": "Загрузка завершена ({completed} завершено, {failed} не удалось)", - "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", - "optionsPrimaryProvider": "Основной провайдер", - "@optionsPrimaryProvider": { - "description": "Main search provider setting" + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" }, - "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", - "collectionAddedToLoved": "\"{trackName}\" добавлен в Любимые", - "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", - "homeAlbumInfoUnavailable": "Album info not available", - "settingsLyrics": "Lyrics", - "extensionVerificationBrowserExternal": "External", - "regionCountryIN": "India", - "extensionHealthUnknown": "Unknown", - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", - "settingsAutoExportFailed": "Автоэкспорт неудачных загрузок", - "logFilterSection": "Фильтр", - "dialogDiscardChanges": "Отменить изменения?", - "@qualityHiResFlacSubtitle": { - "description": "Technical spec for hi-res" + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" }, - "searchTracks": "Tracks", - "searchAlbums": "Альбомы", - "trackConvertFormat": "Переконвертировать формат", - "metadataProviderPriorityTitle": "Приоритет метаданных", - "libraryFolderHint": "Нажмите, чтобы выбрать папку", - "downloadedAlbumDeleteMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from this album?\n\nThis will also delete the files from storage.", - "@downloadedAlbumDeleteMessage": { - "description": "Delete confirmation with count", + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, + "editMetadataAdvanced": "Advanced", + "@editMetadataAdvanced": { + "description": "Expandable section label for advanced metadata fields" + }, + "libraryFilterMetadataMissingTrackNumber": "Missing track number", + "@libraryFilterMetadataMissingTrackNumber": { + "description": "Filter option - items missing track number" + }, + "libraryFilterMetadataMissingDiscNumber": "Missing disc number", + "@libraryFilterMetadataMissingDiscNumber": { + "description": "Filter option - items missing disc number" + }, + "libraryFilterMetadataMissingArtist": "Missing artist", + "@libraryFilterMetadataMissingArtist": { + "description": "Filter option - items missing artist" + }, + "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", + "@libraryFilterMetadataIncorrectIsrcFormat": { + "description": "Filter option - items with an invalid ISRC format" + }, + "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, + "libraryFilterMetadataMissingLabel": "Missing label", + "@libraryFilterMetadataMissingLabel": { + "description": "Filter option - items missing record label" + }, + "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", + "@collectionDeletePlaylistsMessage": { + "description": "Confirmation message for deleting selected playlists", "placeholders": { "count": { "type": "int" } } }, - "trackAlbum": "Альбом", - "updateAvailable": "Доступно обновление", - "optionsEmbedLyrics": "Вписать текст песни", - "trackReEnrichProgress": "Обновление метаданных...", - "@trackReEnrichProgress": { - "description": "Snackbar while re-enriching metadata" - }, - "audioAnalysisPeak": "Peak", - "@audioAnalysisPeak": { - "description": "Peak amplitude metric label" - }, - "optionsExtensionStoreSubtitle": "Показывать вкладку репозитория в навигации", - "settingsTitle": "Настройки", - "@settingsAbout": { - "description": "Settings section - app info" + "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", + "@collectionPlaylistsDeleted": { + "description": "Snackbar after deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheExploreFeed": "Просмотреть кэш ленты", - "@dialogDownloadPlaylistsMessage": { - "description": "Dialog message for bulk playlist download confirmation", + "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", + "@collectionAddedTracksToPlaylist": { + "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { - "trackCount": { + "count": { "type": "int" }, - "playlistCount": { - "type": "int" + "playlistName": { + "type": "String" } } }, - "downloadedAlbumSelectedCount": "{count} выбрано", - "downloadAskQualitySubtitle": "Показывать выбор качества для каждого скачивания", - "filenameShowAdvancedTags": "Показать расширенные теги", - "@filenameShowAdvancedTags": { - "description": "Toggle label for showing advanced filename tags" - }, - "@editMetadataFieldComment": { - "description": "Label for comment field in the edit metadata sheet" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", - "cacheLibraryCover": "Кэш обложек библиотеки", - "actionShuffle": "Shuffle", - "backupCreated": "Backup created", - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "actionCreate": "Создать", - "snackbarAddedToQueueGeneric": "Added to queue", - "downloadedAlbumDownloadedCount": "{count} скачано", - "snackbarLoadingCueSheet": "Загрузка CUE разметки...", - "@trackCoverClearSelected": { - "description": "Tooltip for clearing the newly selected cover art" - }, - "aboutOriginalCreator": "Создатель оригинального SpotiFLAC", - "a11yTrackByArtist": "{trackName} by {artistName}", - "audioAnalysisDynamicRange": "Динамический диапазон", - "homeChangeSearchProviderTooltip": "Change search provider", - "loadingSharedLink": "Загрузка общедоступной ссылки...", - "lyricsModeEmbedSubtitle": "Встроить текст в метаданные FLAC", - "setupNotificationBackgroundDescription": "Получайте уведомления о ходе и завершении загрузки. Это поможет вам отслеживать загрузки, когда приложение находится в фоновом режиме.", - "snackbarViewQueue": "Просмотр очереди", - "@audioAnalysisDuration": { - "description": "Duration metric label" - }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", - "backupRestored": "Backup restored successfully", - "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", - "@trackConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless conversion of a single file", + "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", + "@collectionAddedTracksToPlaylistWithExisting": { + "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { - "sourceFormat": { - "type": "String" + "count": { + "type": "int" }, - "targetFormat": { + "playlistName": { "type": "String" }, - "quality": { - "type": "String" + "alreadyCount": { + "type": "int" } } }, - "discographySelectAlbumsSubtitle": "Выберите конкретные альбомы или синглы", - "@discographySelectAlbumsSubtitle": { - "description": "Subtitle for select albums option" - }, - "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", - "errorUrlFetchFailed": "Не удалось загрузить контент по этой ссылке. Пожалуйста, попробуйте еще раз.", - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", - "dialogSave": "Сохранить", - "trackReEnrichSearching": "Поиск метаданных в сети...", - "regionCountryUS": "United States", - "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", - "downloadFilenameFormat": "Формат имени файла", - "cueSplitTitle": "Разделить CUE Sheet", - "settingsAppSubtitle": "Updates, data, extension repo, debug", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "@setupPermissionRequiredMessage": { - "description": "Generic permission required message", + "itemCount": "{count} {count, plural, =1{item} other{items}}", + "@itemCount": { + "description": "Generic item count label", "placeholders": { - "permissionType": { - "type": "String" + "count": { + "type": "int" } } }, - "errorMissingExtensionSource": "Невозможно загрузить {item}: отсутствует источник расширения", - "albumFolderAlbumOnlySubtitle": "Альбомы/Название Альбома/", - "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", - "extensionVerificationHelpTitleManual": "Open verification manually", - "dialogDiscard": "Отменить", - "storageModeSaf": "Custom Folder (SAF)", - "errorRateLimited": "Слишком много запросов", - "downloadSelectQuality": "Выбор качества", - "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", - "collectionFoldersTitle": "Мои папки", - "progressFetchingMetadata": "Получение метаданных... {current}/{total}", - "settingsDownloadNetworkAny": "WiFi и Мобильная сеть", - "audioAnalysisDuration": "Продолжительность", - "audioAnalysisAnalyzing": "Analyzing audio...", - "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", - "editMetadataFieldDiscNum": "Диск #", - "@editMetadataFieldDiscNum": { - "description": "Chip label for disc number field in auto-fill selector" - }, - "@noTracksFoundForAlbum": { - "description": "Empty state message when an album has no tracks" - }, - "previewPlay": "Предпросмотр проигрывания", - "setupPermissionRequiredMessage": "Для оптимальной работы требуется разрешение {permissionType}. Вы можете изменить это позже в настройках.", - "aboutVersion": "Версия", - "qualityHiResFlacSubtitle": "24-бит / до 96кГц", - "audioAnalysisSamples": "Сэмплы", - "libraryFilterQualityHiRes": "Hi-Res (24 бит)", - "sectionMetadataProviders": "Providers", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "trackCopyright": "Авторские права", - "libraryForceFullScanSubtitle": "Пересканировать все файлы, игнорировать кэш", - "trackCopiedToClipboard": "Скопировано в буфер обмена", - "optionsEmbedMetadata": "Embed Metadata", - "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", - "@collectionAddedTracksToPlaylistWithExisting": { - "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", + "@trackReEnrichSuccessWithFailures": { + "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", "placeholders": { - "count": { + "successCount": { "type": "int" }, - "playlistName": { - "type": "String" + "total": { + "type": "int" }, - "alreadyCount": { + "failedCount": { "type": "int" } } }, - "storeCategoryIntegration": "Integration", - "storeClearFilters": "Очистить фильтры", - "navSettings": "Настройки", - "@homeRecent": { - "description": "Section header for recent searches" + "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "@selectionDeleteTracksCount": { + "description": "Button label for deleting selected tracks", + "placeholders": { + "count": { + "type": "int" + } + } }, - "sectionApp": "Приложение", - "@sectionLanguage": { - "description": "Settings section header for language" + "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", + "@queueDownloadSpeedStatus": { + "description": "Queue status while downloading with speed", + "placeholders": { + "speed": { + "type": "String" + } + } }, - "downloadFilterContributingDisabled": "Full Album Artist string used", - "albumFolderArtistAlbumSinglesSubtitle": "Исполнитель/Альбом и Исполнитель/Сингл/", - "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", - "lyricsProvidersSaved": "Приоритетный провайдер текстов песен сохранен", - "@trackReplayGainFailed": { - "description": "Snackbar message when ReplayGain scan/write fails" + "queueDownloadStarting": "Starting...", + "queueCheckingDownloadSession": "Checking download session...", + "queueResolvingDownloadMetadata": "Resolving track metadata...", + "queueResolvingDownloadStream": "Preparing audio stream...", + "queueWaitingForVerification": "Waiting for verification...", + "queueResumingAfterVerification": "Resuming after verification...", + "@queueDownloadStarting": { + "description": "Queue status before download progress is available" }, - "trackTrackName": "Название", - "homeRecent": "Недавние", - "recentEmpty": "Нет недавних элементов", - "cacheClearAll": "Очистить весь кэш", - "trackReEnrichFieldReleaseInfo": "Дата и ISRC", - "regionCountryMX": "Mexico", - "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", - "editMetadataFieldAlbum": "Альбом", - "settingsAbout": "О программе", - "libraryFilterTitle": "Фильтры", - "cleanupOrphanedDownloadsResult": "Удалено {count} утерянных записей из истории", - "extensionHooksAvailable": "Доступно {count} хуков(ов)", - "backupContentsSettings": "App settings", - "trackLyricsEmbedded": "Текст успешно добавлен", - "optionsUpdateChannelPreview": "Предварительные версии", - "collectionAddedToFavoriteArtists": "\"{artistName}\" добавлен в избранные исполнители", - "libraryForceFullScan": "Полное сканирование", - "snackbarProviderPrioritySaved": "Приоритет провайдера сохранён", - "collectionFavoriteArtistsEmptySubtitle": "Нажмите на сердце на странице исполнителя, чтобы сохранить его здесь", - "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", - "extensionServiceStatus": "Service Status", - "dateWeeksAgo": "{count} недель назад", - "historyFilterSingles": "Синглы", - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", - "trackLyricsSaved": "Текст песни сохранен в {fileName}", - "cacheClearAllConfirmTitle": "Очистить весь кэш?", - "noTracksFoundForAlbum": "No tracks found for this album", - "sectionLanguage": "Язык", - "@logIssueTrackNotFoundDescription": { - "description": "Diagnostic badge description when a track is unavailable" + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." }, - "setupSelectFolder": "Выбрать папку", - "dateYesterday": "Вчера", - "collectionAddToPlaylist": "Добавить в плейлист", - "snackbarUnsupportedAudioFormat": "Неподдерживаемый аудио формат", - "libraryScanCancelled": "Scan cancelled", - "appearanceLanguage": "Язык приложения", - "extensionsTitle": "Расширения", - "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", - "permissionNotification": "Notification", - "notifUpdateReady": "Обновление готово", - "lyricsModeDescription": "Выберите как сохранить тексты песен при скачивании", - "downloadFrom": "Скачивать из", - "collectionWishlistEmptySubtitle": "Нажмите + на треках, чтобы сохранить то, что вы хотите скачать позже", - "cueSplitSplitting": "Разделение CUE sheet... ({current}/{total})", - "trackOptionAddToWishlist": "Добавить в список желаний", - "settingsBackup": "Backup & Restore", - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", - "notifDownloadCompleteCount": "Загрузка завершена ({completed}/{total})", - "extensionsNoDownloadProvider": "Нет расширений с провайдером загрузки", - "libraryFilterSortGenreAsc": "Жанр (А-Я)", - "trackReplayGainFailed": "Не удалось добавить теги ReplayGain", - "collectionPlaylistRemoveCover": "Удалить обложку", - "storeEmptyNoResults": "Расширения не найдены", - "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", - "editMetadataFieldComment": "Comment", - "settingsMetadata": "Metadata", - "settingsCache": "Хранилище и кэш", - "providerPriorityFallbackExtensionsHint": "Здесь перечислены только включенные расширения с возможностями поставщика загрузок.", - "libraryFilterAll": "Все", - "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", - "extensionsProviderPrioritySection": "Приоритет провайдера", - "storeChangeRepoTooltip": "Изменить репозиторий", - "snackbarFailedToInstall": "Не удалось установить расширение", - "libraryScanSubtitle": "Сканировать аудио файлы", - "snackbarExtensionInstalled": "{extensionName} установлено.", - "setupOpenSettings": "Открыть настройки", - "extensionsInstalledSection": "Установленные расширения", - "aboutLinks": "Ссылки", - "trackCoverClearSelected": "Clear selected cover", - "libraryAutoScanWeekly": "Еженедельно", - "downloadMusixmatchLanguageAuto": "Auto (original language)", - "optionsDefaultSearchTab": "Вкладка поиска по умолчанию", - "downloadPrimaryArtistOnlyOn": "Primary only: On", - "folderOrganizationDescription": "Сортировать скачанные файлы по папкам", - "@folderOrganizationDescription": { - "description": "Folder organization sheet description" + "a11ySelectTrack": "Select track", + "@a11ySelectTrack": { + "description": "Accessibility label for selecting a track" }, - "lyricsModeEmbed": "Вписать в файл", - "trackReEnrichFfmpegFailed": "Ошибка встраивания метаданных FFmpeg", - "@extensionsSearchProviderDescription": { - "description": "Search provider setting description" + "a11yDeselectTrack": "Deselect track", + "@a11yDeselectTrack": { + "description": "Accessibility label for deselecting a track" }, - "libraryFilterQualityLossy": "С потерями", - "actionPause": "Пауза", - "csvImportTracks": "{count} трек(-ов) из CSV", - "actionGo": "Go", - "sectionDebug": "Отладка", - "editMetadataFieldDate": "Дата", - "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", - "sectionPerformance": "Производительность", - "extensionsDownloadPrioritySubtitle": "Установка порядок сервисов скачивания", - "cacheAppDirectoryDesc": "HTTP-ответы, данные WebView и другие временные данные приложения.", - "sectionData": "Данные", - "notifFinalizingTrack": "Finalizing {trackName}", - "snackbarFileNotFound": "Файл не найден", - "extensionQualityOptions": "Параметры качества", - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", - "storeRepoDialogTitle": "Репозиторий расширения", - "extensionsSearchProviderDescription": "Выберите, какой сервис использовать для поиска треков", - "albumFolderAlbumOnly": "Только альбом", - "nowPlayingOpenInExternalPlayer": "Open in external player", - "cueSplitButton": "Разделить на Треки", - "updateRequiredTitle": "Требуется обновление", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" + "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", + "@a11yPlayTrackByArtist": { + "description": "Accessibility label for playing a local library track", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "updateRequiredNotice": "Эта версия {count} больше не поддерживается. Обновите, чтобы продолжить использовать приложение.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", + "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", + "@storeExtensionsCount": { + "description": "Store extension result count", "placeholders": { "count": { "type": "int" } } }, - "appearanceHeroAnimations": "Hero animations", - "@appearanceHeroAnimations": { - "description": "Toggle for shared-element (Hero) transitions" + "storeRequiresVersion": "Requires v{version}+", + "@storeRequiresVersion": { + "description": "Store compatibility badge for minimum app version", + "placeholders": { + "version": { + "type": "String" + } + } }, - "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", - "@appearanceHeroAnimationsSubtitle": { - "description": "Subtitle for the Hero animations toggle" + "actionGo": "Go", + "@actionGo": { + "description": "Generic action button label" + }, + "logIssueSummary": "Issue Summary", + "@logIssueSummary": { + "description": "Header for log issue analysis summary" + }, + "logTotalErrors": "Total errors: {count}", + "@logTotalErrors": { + "description": "Total error count in log issue analysis", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "logAffectedDomains": "Affected: {domains}", + "@logAffectedDomains": { + "description": "Affected domains in log issue analysis", + "placeholders": { + "domains": { + "type": "String" + } + } + }, + "libraryScanCancelled": "Scan cancelled", + "@libraryScanCancelled": { + "description": "Library scan status when a scan was cancelled" + }, + "libraryScanCancelledSubtitle": "You can retry the scan when ready.", + "@libraryScanCancelledSubtitle": { + "description": "Library scan status subtitle after cancellation" + }, + "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", + "@libraryDownloadsHistoryExcluded": { + "description": "Library count note for downloaded history items excluded from the local list", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadNativeWorker": "Native download worker", + "@downloadNativeWorker": { + "description": "Setting title for Android native download worker" + }, + "downloadNativeWorkerSubtitle": "Android background service for extension downloads", + "@downloadNativeWorkerSubtitle": { + "description": "Setting subtitle for Android native download worker" + }, + "extensionServiceStatus": "Service Status", + "@extensionServiceStatus": { + "description": "Extension detail section header for service status" + }, + "extensionServiceHealth": "Service health", + "@extensionServiceHealth": { + "description": "Extension capability label for service health checks" + }, + "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", + "@extensionHealthChecksConfigured": { + "description": "Extension service health check count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", + "@extensionOauthConnectHint": { + "description": "Hint for an OAuth login link field before connecting Spotify" + }, + "extensionLastChecked": "Last checked {time}", + "@extensionLastChecked": { + "description": "Timestamp for the latest extension service health check", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "extensionRefreshStatus": "Refresh status", + "@extensionRefreshStatus": { + "description": "Tooltip for refreshing extension service health status" + }, + "extensionCustomUrlHandling": "Custom URL Handling", + "@extensionCustomUrlHandling": { + "description": "Extension detail section title for custom URL handling" + }, + "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", + "@extensionCustomUrlHandlingSubtitle": { + "description": "Extension detail subtitle for custom URL handling" + }, + "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", + "@extensionCustomUrlHandlingShareHint": { + "description": "Extension detail hint explaining share-to-app URL handling" + }, + "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", + "@extensionSettingsCount": { + "description": "Count of settings exposed by an extension quality option", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionHealthOnline": "Online", + "@extensionHealthOnline": { + "description": "Extension service health status - online" + }, + "extensionHealthDegraded": "Degraded", + "@extensionHealthDegraded": { + "description": "Extension service health status - degraded" + }, + "extensionHealthOffline": "Offline", + "@extensionHealthOffline": { + "description": "Extension service health status - offline" + }, + "extensionHealthNotConfigured": "Not configured", + "@extensionHealthNotConfigured": { + "description": "Extension service health status - not configured" + }, + "extensionHealthUnknown": "Unknown", + "@extensionHealthUnknown": { + "description": "Extension service health status - unknown" + }, + "extensionHealthRequired": "required", + "@extensionHealthRequired": { + "description": "Label for a required extension service health check" + }, + "extensionSettingNotSet": "Not set", + "@extensionSettingNotSet": { + "description": "Value shown when an extension setting has no value" + }, + "extensionActionFailed": "Action failed", + "@extensionActionFailed": { + "description": "Fallback error when an extension action fails without details" + }, + "extensionEnterValue": "Enter value", + "@extensionEnterValue": { + "description": "Hint for editing an extension setting value" + }, + "extensionHealthServiceOnline": "Service online", + "@extensionHealthServiceOnline": { + "description": "Tooltip for online extension service" + }, + "extensionHealthServiceDegraded": "Service degraded", + "@extensionHealthServiceDegraded": { + "description": "Tooltip for degraded extension service" + }, + "extensionHealthServiceOffline": "Service offline", + "@extensionHealthServiceOffline": { + "description": "Tooltip for offline extension service" + }, + "extensionHealthServiceUnknown": "Service status unknown", + "@extensionHealthServiceUnknown": { + "description": "Tooltip for unknown extension service health" + }, + "audioAnalysisStereo": "Stereo", + "@audioAnalysisStereo": { + "description": "Audio channel layout label - stereo" + }, + "audioAnalysisMono": "Mono", + "@audioAnalysisMono": { + "description": "Audio channel layout label - mono" + }, + "trackOpenInService": "Open in {serviceName}", + "@trackOpenInService": { + "description": "Button label to open a track in a named music service", + "placeholders": { + "serviceName": { + "type": "String" + } + } + }, + "trackLyricsEmbeddedSource": "Embedded", + "@trackLyricsEmbeddedSource": { + "description": "Lyrics source label for embedded lyrics" + }, + "unknownAlbum": "Unknown Album", + "@unknownAlbum": { + "description": "Fallback album name when metadata is missing" + }, + "unknownArtist": "Unknown Artist", + "@unknownArtist": { + "description": "Fallback artist name when metadata is missing" + }, + "permissionAudio": "Audio", + "@permissionAudio": { + "description": "Audio permission type label" + }, + "permissionStorage": "Storage", + "@permissionStorage": { + "description": "Storage permission type label" + }, + "permissionNotification": "Notification", + "@permissionNotification": { + "description": "Notification permission type label" + }, + "errorInvalidFolderSelected": "Invalid folder selected", + "@errorInvalidFolderSelected": { + "description": "Error when the selected folder is invalid" + }, + "storeAnyVersion": "Any", + "@storeAnyVersion": { + "description": "Store detail value when any app version is accepted" + }, + "storeCategoryMetadata": "Metadata", + "@storeCategoryMetadata": { + "description": "Store extension category - metadata" + }, + "storeCategoryDownload": "Download", + "@storeCategoryDownload": { + "description": "Store extension category - download" + }, + "storeCategoryUtility": "Utility", + "@storeCategoryUtility": { + "description": "Store extension category - utility" + }, + "storeCategoryLyrics": "Lyrics", + "@storeCategoryLyrics": { + "description": "Store extension category - lyrics" + }, + "storeCategoryIntegration": "Integration", + "@storeCategoryIntegration": { + "description": "Store extension category - integration" + }, + "artistReleases": "Releases", + "@artistReleases": { + "description": "Section header for all artist releases" + }, + "editMetadataSelectNone": "None", + "@editMetadataSelectNone": { + "description": "Button to clear selected fields for auto-fill" + }, + "queueRetryAllFailed": "Retry {count} failed", + "@queueRetryAllFailed": { + "description": "Button to retry every failed download in the queue", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "settingsSaveDownloadHistory": "Save download history", + "@settingsSaveDownloadHistory": { + "description": "Settings switch title for storing completed downloads in history" + }, + "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "@settingsSaveDownloadHistorySubtitle": { + "description": "Settings switch subtitle for storing completed downloads in history" + }, + "dialogDisableHistoryTitle": "Turn off download history?", + "@dialogDisableHistoryTitle": { + "description": "Confirmation dialog title shown before disabling download history" + }, + "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "@dialogDisableHistoryMessage": { + "description": "Confirmation dialog message shown before disabling download history" + }, + "dialogDisableAndClear": "Turn off and clear", + "@dialogDisableAndClear": { + "description": "Confirmation action to disable download history and clear existing entries" + }, + "openInOtherServices": "Open in Other Services", + "@openInOtherServices": { + "description": "Title and tooltip for finding the current collection in other services" + }, + "shareSheetNoExtensions": "No other compatible services", + "@shareSheetNoExtensions": { + "description": "Empty state when no extensions can be searched for cross-service links" + }, + "shareSheetNotFound": "Not found", + "@shareSheetNotFound": { + "description": "Cross-service share sheet row subtitle when a service has no match" + }, + "shareSheetCopyLink": "Copy Link", + "@shareSheetCopyLink": { + "description": "Tooltip for copying a cross-service link" + }, + "shareSheetLinkCopied": "{service} link copied", + "@shareSheetLinkCopied": { + "description": "Snackbar after copying a cross-service link", + "placeholders": { + "service": {} + } + }, + "libraryPlayback": "Playback", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "External player", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Built-in preview player", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Now Playing", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Nothing is playing", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimize", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Up next", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, + "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, + "nowPlayingOpenInExternalPlayer": "Open in external player", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Player", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lyrics", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "No lyrics in this file", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Your library is empty", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Shuffle on", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Play in order", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Shuffle library", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Queue is empty", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "No metadata available", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" + }, + "snackbarPlayingNext": "Playing next", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Added to queue", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Shuffle", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" + }, + "downloadPrimaryArtistOnlyOn": "Primary only: On", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Original quality", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "trackConvertDithering": "Dithering", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "Resampler", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "None", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "Triangular HP", + "@trackConvertDitherTriangularHp": { + "description": "Lossless conversion high-pass triangular dither option" + }, + "trackConvertResamplerSwr": "SWR", + "@trackConvertResamplerSwr": { + "description": "Lossless conversion default FFmpeg swresample resampler option" + }, + "trackConvertResamplerSoxr": "SoXr", + "@trackConvertResamplerSoxr": { + "description": "Lossless conversion SoX resampler option" + }, + "updateSeeReleaseNotes": "See release notes for details.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Unknown title", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Play next", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Add to queue", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + }, + "version": { + "type": "String" + } + } + }, + "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" + }, + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" + }, + "trackCoverOnline": "Online cover", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" + }, + "regionCountryUS": "United States", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" + }, + "regionCountryGB": "United Kingdom", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" + }, + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloads": "Concurrent downloads", - "@settingsConcurrentDownloads": { - "description": "Setting title - how many tracks download at the same time" + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", - "@settingsConcurrentDownloadsSubtitle": { - "description": "Subtitle explaining the concurrent downloads picker" + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsOne": "1 track at a time", - "@concurrentDownloadsOne": { - "description": "Concurrent downloads option - sequential" + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsCount": "Up to {count} tracks at once", - "@concurrentDownloadsCount": { - "description": "Concurrent downloads option - parallel", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalization": "Volume normalization", - "@libraryPlaybackNormalization": { - "description": "Toggle title for ReplayGain playback normalization in the built-in player" + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", - "@libraryPlaybackNormalizationSubtitle": { - "description": "Subtitle explaining playback volume normalization" + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysis": "Audio analysis cache", - "@cacheAudioAnalysis": { - "description": "Cache item title for saved audio analysis results" + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", - "@cacheAudioAnalysisDesc": { - "description": "Description of what audio analysis cache contains" + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginal": "Keep original file", - "@trackConvertKeepOriginal": { - "description": "Toggle to preserve the source file during conversion" + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", - "@trackConvertKeepOriginalDescription": { - "description": "Description for preserving the source file during conversion" + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" }, - "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", - "@trackConvertConfirmKeepOriginal": { - "description": "Confirmation message when the source file will be preserved", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" }, - "selectionBatchConvertConfirmKeepOriginal": "Конвертировать {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}} в {format}?\n\nОригинальные файлы будут храниться и преобразовываться как отдельные элементы библиотеки.", - "@selectionBatchConvertConfirmKeepOriginal": { - "description": "Batch conversion confirmation when source files will be preserved", - "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" }, - "downloadFolderAccessLostTitle": "Download folder access lost", - "@downloadFolderAccessLostTitle": { - "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" }, - "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", - "@downloadFolderAccessLostSubtitle": { - "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" }, - "downloadFolderReselect": "Re-select folder", - "@downloadFolderReselect": { - "description": "Button that reopens the folder picker to restore download folder access" + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" }, - "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", - "@downloadErrorSafPermissionLost": { - "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" + "extensionVerificationHelpTitleManual": "Open verification manually", + "@extensionVerificationHelpTitleManual": { + "description": "Dialog title when automatic browser launch for verification fails" }, - "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", - "@downloadErrorFolderAccessLost": { - "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" + "extensionVerificationHelpTitleWaiting": "Verification still waiting", + "@extensionVerificationHelpTitleWaiting": { + "description": "Dialog title when verification is taking longer than expected" }, - "notifVerificationRequiredTitle": "Verification required", - "@notifVerificationRequiredTitle": { - "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" + "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", + "@extensionVerificationHelpMessageManual": { + "description": "Dialog message when automatic browser launch for verification fails" }, - "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", - "@notifVerificationRequiredBody": { - "description": "Notification body prompting the user to return to the app to solve a verification challenge" + "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", + "@extensionVerificationHelpMessageWaiting": { + "description": "Dialog message when verification may need manual browser help" }, - "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", - "@downloadDeduplicationWithQualityVariants": { - "description": "Deduplication subtitle when separate quality versions are allowed" + "extensionVerificationClose": "Close", + "@extensionVerificationClose": { + "description": "Button to dismiss the extension verification help dialog" }, - "downloadQualityVariants": "Allow different quality versions", - "@downloadQualityVariants": { - "description": "Setting to retain multiple quality versions of the same track" + "extensionVerificationCopyLink": "Copy link", + "@extensionVerificationCopyLink": { + "description": "Button to copy the extension verification URL" }, - "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", - "@downloadQualityVariantsDescription": { - "description": "Description for retaining multiple quality versions" + "extensionVerificationLinkCopied": "Verification link copied", + "@extensionVerificationLinkCopied": { + "description": "Snackbar after copying the extension verification URL" }, - "trackOptionDownloadQualityVariant": "Download another quality", - "@trackOptionDownloadQualityVariant": { - "description": "Track menu action to download another quality version" + "extensionVerificationOpenBrowser": "Open browser", + "@extensionVerificationOpenBrowser": { + "description": "Button to open the extension verification URL in a browser" }, - "queueCheckingDownloadSession": "Checking download session...", - "queueResolvingDownloadMetadata": "Resolving track metadata...", - "queueResolvingDownloadStream": "Preparing audio stream...", - "queueWaitingForVerification": "Waiting for verification...", - "queueResumingAfterVerification": "Resuming after verification...", "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", - "collectionExportM3u": "Export as M3U8", - "collectionExportM3uDone": "Exported {exported} of {total} tracks", - "collectionExportM3uNone": "No downloaded files to export", - "collectionExportM3uFailed": "Export failed", - "trackOpenOn": "Open on...", - "trackOpenOnNoLinks": "No platform links found for this track.", - "libraryReviewDuplicates": "Review duplicates", - "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", - "duplicatesTitle": "Duplicates", - "duplicatesEmpty": "No duplicate tracks found.", - "duplicatesKeepBest": "Keep best", - "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", - "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", - "downloadAutoConvert": "Auto-convert after download", - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "downloadAutoConvertFormat": "Output format", - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "downloadAutoConvertBitrate": "Output quality", - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "appearanceForceBlur": "Always use blur effects", - "appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "editMetadataAutoFillSource": "Metadata source", - "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", - "editMetadataAutoFillFind": "Find metadata", - "editMetadataAutoFillPreview": "Data from {source}", - "editMetadataAutoFillCoverAvailable": "Cover artwork available", - "editMetadataAutoFillApply": "Apply selected data", - "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", - "libraryDefaultView": "Default view", - "libraryDefaultViewLastUsed": "Last used", - "audioAnalysisCutoffNotDetected": "Not detected", - "queueCancelledTitle": "Download cancelled", - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", - "trackCoverResolution": "Cover resolution", - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", - "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", - "queueDownloadNext": "Download next", - "queueMoveUp": "Move up", - "queueMoveDown": "Move down", - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", - "nowPlayingRepeatOff": "Repeat off", - "nowPlayingRepeatAll": "Repeat all", - "nowPlayingRepeatOne": "Repeat one", - "queueNetworkFailedOffline": "{count} downloads failed while offline", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "libraryFilterMetadataMissingIsrc": "Missing ISRC" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From 604b91c8ff47a61c2f7b856930a77c7af7d72e77 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:51 +0700 Subject: [PATCH 14/59] New translations app_en.arb (Turkish) [ci skip] --- lib/l10n/arb/app_tr.arb | 9612 ++++++++++++++++++++------------------- 1 file changed, 5029 insertions(+), 4583 deletions(-) diff --git a/lib/l10n/arb/app_tr.arb b/lib/l10n/arb/app_tr.arb index 6b5ffd065..41fc4868e 100644 --- a/lib/l10n/arb/app_tr.arb +++ b/lib/l10n/arb/app_tr.arb @@ -1,2673 +1,2662 @@ { "@@locale": "tr", "@@last_modified": "2026-04-28", - "libraryEnableLocalLibrarySubtitle": "Mevcut müziğinizi tarayın ve takip edin", - "@libraryEnableLocalLibrarySubtitle": { - "description": "Subtitle for enable toggle" - }, - "@audioAnalysisCodec": { - "description": "Audio codec metric label" + "appName": "SpotiFLAC Mobile", + "@appName": { + "description": "App name - DO NOT TRANSLATE" }, - "extensionUtilityFunctions": "Utility Functions", - "@extensionUtilityFunctions": { - "description": "Capability label for utility-only extensions" + "navHome": "Ana sayfa", + "@navHome": { + "description": "Bottom navigation - Home tab" }, - "logClearLogsMessage": "Tüm kayıtları temizlemek istediğinize emin misiniz?", - "@logClearLogsMessage": { - "description": "Clear logs confirmation message" + "navLibrary": "Kitaplığın", + "@navLibrary": { + "description": "Bottom navigation - Library tab" }, - "@storeClearFilters": { - "description": "Button to clear all filters" + "navSettings": "Ayarlar", + "@navSettings": { + "description": "Bottom navigation - Settings tab" }, - "cacheCleanupUnused": "Cleanup unused data", - "@cacheCleanupUnused": { - "description": "Action title for cleaning unused entries" + "navStore": "Depo", + "@navStore": { + "description": "Bottom navigation - Extension repo tab" }, - "trackConvertDitherNone": "None", - "@trackConvertDitherNone": { - "description": "Lossless conversion dither option with no dithering applied" + "homeTitle": "Ana sayfa", + "@homeTitle": { + "description": "Home screen title" }, - "libraryTracksUnit": "{count, plural, =1{parça} other{parçalar}}", - "@libraryTracksUnit": { - "description": "Unit label for tracks count (without the number itself)", - "placeholders": { - "count": { - "type": "int" - } - } + "homeSubtitle": "Desteklenen bir URL yapıştırın veya isme göre arayın", + "@homeSubtitle": { + "description": "Subtitle shown below search box" }, - "folderOrganizationNone": "Organizasyon yok", - "@folderOrganizationNone": { - "description": "Folder option - flat structure" + "homeEmptyTitle": "Henüz arama sağlayıcısı yok", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" }, - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" + "homeEmptySubtitle": "Devam etmek için bir eklenti yükleyin.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" }, - "@trackConvertConfirmTitle": { - "description": "Confirmation dialog title" + "homeSupports": "Desteklenen linkler: Şarkı, Albüm, Çalma Listesi, Sanatçı linkleri", + "@homeSupports": { + "description": "Info text about supported URL types" }, - "@extensionPatternsCount": { - "description": "URL patterns count", - "placeholders": { - "count": { - "type": "int" - } - } + "homeRecent": "En son", + "@homeRecent": { + "description": "Section header for recent searches" }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" + "historyFilterAll": "Tümü", + "@historyFilterAll": { + "description": "Filter chip - show all items" }, - "libraryAutoScanOff": "Kapalı", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" + "historyFilterAlbums": "Albümler", + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" }, - "shareSheetLinkCopied": "{service} link copied", - "@shareSheetLinkCopied": { - "description": "Snackbar after copying a cross-service link", - "placeholders": { - "service": {} - } + "historyFilterSingles": "Single'lar", + "@historyFilterSingles": { + "description": "Filter chip - show singles only" }, - "providerPriorityFallbackExtensionsDescription": "Otomatik geri dönüş sırasında hangi yüklü indirme uzantılarının kullanılabileceğini seçin.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" + "historySearchHint": "Arama geçmişi...", + "@historySearchHint": { + "description": "Search bar placeholder in history" }, - "@replayGainBatchConfirmMessage": { - "description": "Message of the batch ReplayGain confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsTitle": "Ayarlar", + "@settingsTitle": { + "description": "Settings screen title" }, - "@extensionsHomeFeedUse": { - "description": "Extensions page - subtitle for a specific extension home feed option", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "settingsDownload": "İndirme", + "@settingsDownload": { + "description": "Settings section - download options" }, - "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", - "@selectionShareCount": { - "description": "Share button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsAppearance": "Görünüm", + "@settingsAppearance": { + "description": "Settings section - visual customization" }, - "@storeExtensionsCount": { - "description": "Store extension result count", - "placeholders": { - "count": { - "type": "int" - } - } + "settingsExtensions": "Eklentiler", + "@settingsExtensions": { + "description": "Settings section - extension management" }, - "@logSearchHint": { - "description": "Log search placeholder" + "settingsAbout": "Hakkında", + "@settingsAbout": { + "description": "Settings section - app info" }, - "@audioAnalysisSamples": { - "description": "Total samples metric label" + "downloadTitle": "İndirme", + "@downloadTitle": { + "description": "Download settings page title" }, - "trackCoverReplace": "Replace Cover", - "@trackCoverReplace": { - "description": "Button label for replacing selected cover art" + "downloadAskQualitySubtitle": "Her indirmeden önce kalite seçim ekranını göster", + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" }, - "@discographyAddedToQueue": { - "description": "Snackbar - tracks added from discography", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameFormat": "Dosya adı formatı", + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" + "downloadSingleFilenameFormat": "Single Dosya Adı Formatı", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" }, - "@nowPlayingDetails": { - "description": "Menu item and section title for track metadata details" + "downloadSingleFilenameFormatDescription": "Single ve EP'ler için dosya adı örneği. Albüm formatıyla aynı etiketleri kullanır.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" }, - "@trackGenre": { - "description": "Metadata label - music genre" + "downloadFolderOrganization": "Dosya Organizasyonu", + "@downloadFolderOrganization": { + "description": "Title of the folder organization picker bottom sheet" }, - "recentTypeSong": "Şarkı", - "@recentTypeSong": { - "description": "Recent access item type - song/track" + "appearanceTitle": "Görünüm", + "@appearanceTitle": { + "description": "Appearance settings page title" }, - "logShareLogs": "Kayıtları paylaş", - "@logShareLogs": { - "description": "Share button tooltip" + "appearanceThemeSystem": "Sistem", + "@appearanceThemeSystem": { + "description": "Follow system theme" }, - "@storeFilterLyrics": { - "description": "Repo filter - lyrics providers" + "appearanceThemeLight": "Açık", + "@appearanceThemeLight": { + "description": "Light theme" }, - "extensionsInstallButton": "Uzantı Yükle", - "@extensionsInstallButton": { - "description": "Button to install extension from file" + "appearanceThemeDark": "Koyu", + "@appearanceThemeDark": { + "description": "Dark theme" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", - "@replayGainBatchSuccess": { - "description": "Snackbar after batch ReplayGain completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "appearanceDynamicColor": "Dinamik Renk", + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" }, - "nowPlayingMinimize": "Minimize", - "@nowPlayingMinimize": { - "description": "Tooltip for minimizing the now playing screen" + "appearanceDynamicColorSubtitle": "Duvar kağıdının renklerini kullan", + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" }, - "logIssueNetworkErrorSuggestion": "Check your internet connection", - "@logIssueNetworkErrorSuggestion": { - "description": "Diagnostic badge suggestion for generic network errors" + "appearanceHistoryView": "Geçmiş Düzeni", + "@appearanceHistoryView": { + "description": "Layout style for history" }, - "extensionsNoExtensions": "Hiçbir eklenti kurulmamış", - "@extensionsNoExtensions": { - "description": "Empty state - no extensions" + "appearanceHistoryViewList": "Liste", + "@appearanceHistoryViewList": { + "description": "List layout option" }, - "@cacheRefresh": { - "description": "Tooltip for refresh button on cache management page" + "appearanceHistoryViewGrid": "Izgara", + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" }, - "@snackbarHistoryCleared": { - "description": "Snackbar - history deleted" + "optionsPrimaryProvider": "Ana Kaynek", + "@optionsPrimaryProvider": { + "description": "Main search provider setting" }, - "cueSplitFailed": "CUE bölme işlemi başarısız oldu", - "@cueSplitFailed": { - "description": "Snackbar when CUE split fails" + "optionsPrimaryProviderSubtitle": "Parça veya albüm adına göre arama yapmak için kullanılan hizmet", + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" }, - "trackConvertLosslessSuffix": "Lossless", - "@trackConvertLosslessSuffix": { - "description": "Suffix used in converted lossless quality labels" - }, - "homeSubtitle": "Desteklenen bir URL yapıştırın veya isme göre arayın", - "@homeSubtitle": { - "description": "Subtitle shown below search box" - }, - "selectionBatchConvertConfirmMessageLossless": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.", - "@selectionBatchConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless batch conversion", + "optionsUsingExtension": "Kullanılan eklenti: {extensionName}", + "@optionsUsingExtension": { + "description": "Shows active extension name", "placeholders": { - "count": { - "type": "int" - }, - "format": { + "extensionName": { "type": "String" } } }, - "@extensionVerificationHelpMessageManual": { - "description": "Dialog message when automatic browser launch for verification fails" - }, - "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", - "@queueRateLimitMessage": { - "description": "Explanation shown on a failed queue item when the download service rate limits requests" - }, - "searchSortDateOldest": "Yayın Tarihi (En eski)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "nowPlayingShuffleOn": "Shuffle on", - "@nowPlayingShuffleOn": { - "description": "Tooltip when shuffle mode is enabled" - }, - "sectionColor": "Renk", - "@sectionColor": { - "description": "Settings section header" - }, - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "cacheCoverImage": "Kapak resmi önbelleği", - "@cacheCoverImage": { - "description": "Cache item title for persistent cover images" + "optionsDefaultSearchTab": "Varsayılan Arama Sekmesi", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" }, - "@navSettings": { - "description": "Bottom navigation - Settings tab" + "optionsDefaultSearchTabSubtitle": "Yeni arama sonuçları için hangi sekmenin önce açılacağını seçin.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" }, - "@trackCoverReplaceNotice": { - "description": "Notice shown when a new cover has been selected but not saved yet" + "optionsAutoFallback": "Diğerlerini dene", + "@optionsAutoFallback": { + "description": "Auto-retry with other services" }, - "cueSplitConfirmTitle": "Bölünmüş CUE Albümü", - "@cueSplitConfirmTitle": { - "description": "CUE split confirmation dialog title" + "optionsAutoFallbackSubtitle": "İndirme başarısız olursa diğer hizmetleri dene", + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" }, - "@trackDeleteConfirmMessage": { - "description": "Delete confirmation message" + "optionsEmbedLyrics": "Şarkı Sözlerini Göm", + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" }, - "cacheClearSuccess": "Cleared: {target}", - "@cacheClearSuccess": { - "description": "Snackbar after clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "optionsEmbedLyricsSubtitle": "İndirdiğiniz parçaların yanına senkronize edilmiş şarkı sözlerini kaydedin", + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" }, - "editMetadataFieldCover": "Cover Art", - "@editMetadataFieldCover": { - "description": "Chip label for cover art field in auto-fill selector" + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" }, - "snackbarSelectExtFile": "Lütfen .spotiflac-ext dosyasını seçin", - "@snackbarSelectExtFile": { - "description": "Snackbar - wrong file type selected" + "optionsReplayGainSubtitleOn": "Ses yüksekliğini tara ve ReplayGain etiketlerini göm (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" }, - "libraryFilterFormat": "Format", - "@libraryFilterFormat": { - "description": "Filter section - file format" + "optionsReplayGainSubtitleOff": "Devre dışı: Ses normalleştirme etiketi yok", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" }, - "@downloadLossyAac": { - "description": "Lossy format option - AAC in M4A container at 320kbps" + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "@setupNext": { - "description": "Next button text" + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "@releaseTypeSingle": { - "description": "Badge label for single releases" + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" }, - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", - "@trackConvertLosslessOutputWithCap": { - "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", "placeholders": { - "quality": { - "type": "String" + "count": { + "type": "int" } } }, - "bulkDownloadSelectPlaylists": "Select playlists to download", - "@bulkDownloadSelectPlaylists": { - "description": "Button label when no playlists are selected for download" - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "@timeJustNow": { - "description": "Relative time - less than a minute ago" - }, - "downloadLossyOpus256": "Opus 256kbps", - "@downloadLossyOpus256": { - "description": "Lossy format option - Opus 256kbps" + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" }, - "discographySinglesOnlySubtitle": "{albumCount} tekliden {count} parça", - "@discographySinglesOnlySubtitle": { - "description": "Subtitle showing singles tracks count", + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { "count": { "type": "int" - }, - "albumCount": { - "type": "int" } } }, - "optionsExtensionStore": "Eklenti Deposu", - "@optionsExtensionStore": { - "description": "Show/hide repo tab" + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" }, - "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", - "@libraryDownloadsHistoryExcluded": { - "description": "Library count note for downloaded history items excluded from the local list", + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", "placeholders": { - "count": { + "success": { + "type": "int" + }, + "total": { "type": "int" } } }, - "@errorUrlFetchFailed": { - "description": "Error message - generic URL fetch failure" - }, - "@trackOptionAddToWishlist": { - "description": "Bottom sheet action label - add track to wishlist" + "optionsArtistTagMode": "Sanatçı Etiketi Modu", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" }, - "discographySinglesOnly": "Yalnızca Single'lar ve EP'ler", - "@discographySinglesOnly": { - "description": "Option - download only singles" + "optionsArtistTagModeDescription": "Birden fazla sanatçının gömülü etiketlere nasıl yazılacağını seçin.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" }, - "@downloadSongLinkRegionDesc": { - "description": "Description in SongLink region picker" + "optionsArtistTagModeJoined": "Birleşik tek değer", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" }, - "notifEmbeddingMetadata": "Embedding metadata...", - "@notifEmbeddingMetadata": { - "description": "Notification body while embedding metadata into a downloaded track" + "optionsArtistTagModeJoinedSubtitle": "Maksimum oynatıcı uyumluluğu için 'Sanatçı A, Sanatçı B' şeklinde tek bir SANATÇI değeri yazın.", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" }, - "@settingsLocalLibrarySubtitle": { - "description": "Subtitle for local library settings" + "optionsArtistTagModeSplitVorbis": "FLAC/Opus için ayrılmış etiketler", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "@downloadLocationSubtitle": { - "description": "Subtitle shown in the download location picker sheet" + "optionsArtistTagModeSplitVorbisSubtitle": "FLAC ve Opus için her sanatçıya ayrı bir etiket yazın; MP3 ve M4A birleşik kalır.", + "@optionsArtistTagModeSplitVorbisSubtitle": { + "description": "Subtitle for split Vorbis artist tag mode" }, - "trackConvertOriginalQuality": "Original quality", - "@trackConvertOriginalQuality": { - "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + "optionsExtensionStore": "Eklenti Deposu", + "@optionsExtensionStore": { + "description": "Show/hide repo tab" }, - "nowPlayingTabLyrics": "Lyrics", - "@nowPlayingTabLyrics": { - "description": "Tab label for the lyrics view" + "optionsExtensionStoreSubtitle": "Gezinme menüsünde Depo sekmesini göster", + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension repo toggle" }, - "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", - "@selectionConvertCount": { - "description": "Convert button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsCheckUpdates": "Güncelleştirmeleri Denetle", + "@optionsCheckUpdates": { + "description": "Auto update check toggle" }, - "@extensionsInstalledSection": { - "description": "Section header - installed extensions" + "optionsCheckUpdatesSubtitle": "Yeni sürüm çıktığında bildir", + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" }, - "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is off" + "optionsUpdateChannel": "Güncelleme Kanalı", + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" }, - "nowPlayingShuffleLibrary": "Shuffle library", - "@nowPlayingShuffleLibrary": { - "description": "Button label to shuffle and play the entire local library" + "optionsUpdateChannelStable": "Sadece stabil sürümler", + "@optionsUpdateChannelStable": { + "description": "Only stable updates" }, - "trackReEnrichFieldCover": "Cover Art", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" + "optionsUpdateChannelPreview": "Önizleme sürümlerini al", + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", - "@tutorialExtensionsTip3": { - "description": "Tutorial extensions tip 3" + "optionsUpdateChannelWarning": "Önizleme sürümleri hatalar veya tamamlanmamış özellikler içerebilir", + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" }, - "@cacheCleanupUnusedDesc": { - "description": "Description of what cleanup unused data does" - }, - "a11yOpenAlbum": "Open album {albumName}", - "@a11yOpenAlbum": { - "description": "Accessibility label for opening an album", - "placeholders": { - "albumName": { - "type": "String" - } - } + "optionsClearHistory": "İndirme Geçmişini Temizle", + "@optionsClearHistory": { + "description": "Delete all download history" }, - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" + "optionsClearHistorySubtitle": "İndirilen bütün şarkıları geçmişten temizle", + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" }, - "nowPlayingQueueEmpty": "Queue is empty", - "@nowPlayingQueueEmpty": { - "description": "Empty state when the playback queue has no items" + "optionsDetailedLogging": "Detaylı Günlükleme", + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" }, - "@settingsDownload": { - "description": "Settings section - download options" + "optionsDetailedLoggingOn": "Detaylı günlük kayıt ediliyor", + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", - "@notifTracksDownloadedSuccess": { - "description": "Notification body for queue complete - how many tracks were downloaded", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsDetailedLoggingOff": "Hata bildirmek için aç", + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" }, - "storeCategoryDownload": "Download", - "@storeCategoryDownload": { - "description": "Store extension category - download" + "extensionsTitle": "Eklentiler", + "@extensionsTitle": { + "description": "Extensions page title" }, - "aboutTelegramChannel": "Telegram Kanalı", - "@aboutTelegramChannel": { - "description": "Link to Telegram channel" + "extensionsDisabled": "Devre Dışı", + "@extensionsDisabled": { + "description": "Extension status - inactive" }, - "@downloadedAlbumDiscHeader": { - "description": "Header for disc separator in multi-disc albums", + "extensionsVersion": "Versiyon {version}", + "@extensionsVersion": { + "description": "Extension version display", "placeholders": { - "discNumber": { - "type": "int", - "example": "1" + "version": { + "type": "String" } } }, - "@recentEmpty": { - "description": "Empty state text for recent access list" + "extensionsUninstall": "Kaldır", + "@extensionsUninstall": { + "description": "Uninstall extension button" }, - "@backupRestoreConfirmMessage": { - "description": "Confirmation dialog message before restoring a backup" + "storeTitle": "Uzantı Deposu", + "@storeTitle": { + "description": "Repo screen title" }, - "@shareSheetCopyLink": { - "description": "Tooltip for copying a cross-service link" + "storeSearch": "Eklenti ara...", + "@storeSearch": { + "description": "Repo search placeholder" }, - "regionCountryID": "Indonesia", - "@regionCountryID": { - "description": "Country name for SongLink region picker" + "storeInstall": "Kur", + "@storeInstall": { + "description": "Install extension button" }, - "@libraryInLibrary": { - "description": "Badge shown on tracks that exist in local library" + "storeInstalled": "Kuruldu", + "@storeInstalled": { + "description": "Already installed badge" }, - "extensionPostProcessingHooks": "Son İşlem Kancaları", - "@extensionPostProcessingHooks": { - "description": "Capability - post-processing" + "storeUpdate": "Güncelle", + "@storeUpdate": { + "description": "Update available button" }, - "@setupGrantPermission": { - "description": "Button to request permission" + "aboutTitle": "Hakkında", + "@aboutTitle": { + "description": "About page title" }, - "storeFilterDownload": "İndir", - "@storeFilterDownload": { - "description": "Repo filter - download providers" + "aboutContributors": "Katkıda Bulunanlar", + "@aboutContributors": { + "description": "Section for contributors" }, - "@collectionAddToPlaylist": { - "description": "Action to add a track to user playlist" + "aboutMobileDeveloper": "Mobil versiyon geliştiricisi", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" }, - "@discographyFailedToFetch": { - "description": "Error - some albums failed to load" + "aboutOriginalCreator": "Orijinal SpotiFLAC'ın kurucusu", + "@aboutOriginalCreator": { + "description": "Role description for original creator" }, - "@updateWhatsNew": { - "description": "Changelog section title" + "aboutLogoArtist": "Uygulama logomuzu yaratmış yetenekli sanatçımız!", + "@aboutLogoArtist": { + "description": "Role description for logo artist" }, - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" + "aboutTranslators": "Çevirmenler", + "@aboutTranslators": { + "description": "Section for translators" }, - "dialogDeleteSelectedTitle": "Seçileni Sil", - "@dialogDeleteSelectedTitle": { - "description": "Dialog title - delete selected items" + "aboutSpecialThanks": "Özel teşekkür", + "@aboutSpecialThanks": { + "description": "Section for special thanks" }, - "trackCoverPick": "Kapak Seç", - "@trackCoverPick": { - "description": "Button label for selecting cover art" + "aboutLinks": "Linkler", + "@aboutLinks": { + "description": "Section for external links" }, - "@collectionCreatePlaylist": { - "description": "Action to create a new playlist" + "aboutMobileSource": "Mobil kaynak kodu", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" }, - "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", - "@selectionBatchConvertSuccess": { - "description": "Snackbar after batch conversion completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "aboutPCSource": "PC kaynak kodu", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" }, - "qualityHiResFlacMax": "Hi-Res FLAC Max", - "@qualityHiResFlacMax": { - "description": "Quality option - maximum resolution FLAC" + "aboutKeepAndroidOpen": "Android'i Açık Tutun", + "@aboutKeepAndroidOpen": { + "description": "Link to Keep Android Open campaign website" }, - "audioAnalysisStereo": "Stereo", - "@audioAnalysisStereo": { - "description": "Audio channel layout label - stereo" + "aboutReportIssue": "Sorun bildir", + "@aboutReportIssue": { + "description": "Link to report bugs" }, - "backupExportButton": "Create backup file", - "@backupExportButton": { - "description": "Button to create and share a backup file" + "aboutReportIssueSubtitle": "Karşılaştığın herhangi bir problemi bildir", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" }, - "settingsApp": "Uygulama", - "@settingsApp": { - "description": "Settings menu item - app settings" + "aboutFeatureRequest": "Özellik isteği", + "@aboutFeatureRequest": { + "description": "Link to suggest features" }, - "clickableInformationUnavailable": "{type} information not available", - "@clickableInformationUnavailable": { - "description": "Snackbar shown when clickable metadata cannot open a destination", - "placeholders": { - "type": { - "type": "String" - } - } + "aboutFeatureRequestSubtitle": "Uygulama için yeni özellikler isteyin", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" }, - "@logFilterLevel": { - "description": "Filter by log level" + "aboutTelegramChannel": "Telegram Kanalı", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" }, - "sectionTheme": "Tema", - "@sectionTheme": { - "description": "Settings section header" + "aboutTelegramChannelSubtitle": "Duyurular ve güncellemeler", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" }, - "@extensionActionFailed": { - "description": "Fallback error when an extension action fails without details" + "aboutTelegramChat": "Telegram Grubu", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" }, - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + "aboutTelegramChatSubtitle": "Diğer kullanıcılarla sohbet et", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" }, - "@extensionsNoCustomSearch": { - "description": "Empty state - no search providers" + "aboutSocial": "Sosyal ağlar", + "@aboutSocial": { + "description": "Section for social links" }, - "@collectionPlaylistRemoveCover": { - "description": "Bottom sheet action to remove custom cover image from a playlist" + "aboutApp": "Uygulama", + "@aboutApp": { + "description": "Section for app info" }, - "@tutorialWelcomeDesc": { - "description": "Tutorial welcome page description" + "aboutVersion": "Versiyon", + "@aboutVersion": { + "description": "Version info label" }, - "@tutorialSearchDesc": { - "description": "Tutorial search page description" + "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" }, - "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", - "@collectionAddedToWishlist": { - "description": "Snackbar after adding track to wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } + "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" }, - "logAffectedDomains": "Affected: {domains}", - "@logAffectedDomains": { - "description": "Affected domains in log issue analysis", - "placeholders": { - "domains": { - "type": "String" - } - } + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" }, - "@folderOrganizationByArtistSubtitle": { - "description": "Subtitle for artist folder option" + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" }, - "errorNoTracksFound": "Parça bulunamadı", - "@errorNoTracksFound": { - "description": "Error - search returned no results" + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" }, - "providerPriorityTitle": "İndirme hizmetleri öncelik sırası", - "@providerPriorityTitle": { - "description": "Provider priority page title" + "aboutAppDescription": "Müzik meta verilerini arayın, uzantıları yönetin ve kütüphanenizi düzenleyin.", + "@aboutAppDescription": { + "description": "App description in header card" }, - "@notifUpdateReadyBody": { - "description": "Notification body when app update is ready to install", + "artistAlbums": "Albümler", + "@artistAlbums": { + "description": "Section header for artist albums" + }, + "artistSingles": "Single'lar ve EP'ler", + "@artistSingles": { + "description": "Section header for singles/EPs" + }, + "artistCompilations": "Derlemeler", + "@artistCompilations": { + "description": "Section header for compilations" + }, + "artistPopular": "Popüler", + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, + "artistMonthlyListeners": "Aylık {count} dinleyici", + "@artistMonthlyListeners": { + "description": "Monthly listener count display", "placeholders": { - "version": { - "type": "String" + "count": { + "type": "String", + "description": "Formatted listener count" } } }, - "@settingsExtensions": { - "description": "Settings section - extension management" + "trackMetadataService": "Hizmet", + "@trackMetadataService": { + "description": "Metadata field - download service used" }, - "trackDeleteConfirmTitle": "Cihazdan kaldırılsın mı?", - "@trackDeleteConfirmTitle": { - "description": "Delete confirmation title" + "trackMetadataPlay": "Oynat", + "@trackMetadataPlay": { + "description": "Action button - play track" }, - "@settingsDownloadNetwork": { - "description": "Setting for network type preference" + "trackMetadataShare": "Paylaş", + "@trackMetadataShare": { + "description": "Action button - share track" }, - "downloadProvidersNoneEnabled": "No providers enabled", - "@downloadProvidersNoneEnabled": { - "description": "Shown when no lyrics providers are active" + "trackMetadataDelete": "Sil", + "@trackMetadataDelete": { + "description": "Action button - delete track" }, - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" + "setupGrantPermission": "İzin Ver", + "@setupGrantPermission": { + "description": "Button to request permission" }, - "trackReEnrichFieldBasicTags": "Album, Album Artist", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + "setupSkip": "Şimdilik atla", + "@setupSkip": { + "description": "Skip current step button" }, - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" + "setupStorageAccessRequired": "Depolama Erişimi Gerekli", + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" }, - "@logClearLogsTitle": { - "description": "Clear logs dialog title" + "setupStorageAccessMessageAndroid11": "Android 11 ve sonrasında şarkıların seçili klasörünüze kaydedilebilmesi için \"Bütün dosyalara eriş\" iznine ihtiyaç var.", + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" }, - "storageModeSafSubtitle": "SD kart dahil herhangi bir klasörü seçin", - "@storageModeSafSubtitle": { - "description": "Subtitle for SAF storage mode" + "setupOpenSettings": "Ayarları Aç", + "@setupOpenSettings": { + "description": "Button to open system settings" }, - "@notifUpdateProgress": { - "description": "Notification body showing update download progress", + "setupPermissionDeniedMessage": "İzin reddedildi. Devam etmek için lütfen bütün izinleri verin.", + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, + "setupPermissionRequired": "{permissionType} İzni Zorunlu", + "@setupPermissionRequired": { + "description": "Generic permission required title", "placeholders": { - "received": { - "type": "String" - }, - "total": { - "type": "String" - }, - "percentage": { - "type": "int" + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" } } }, - "downloadUsePrimaryArtistOnlyEnabled": "Düet sanatçıları klasör adından kaldırılır (örn. Justin Bieber, Quavo → Justin Bieber)", - "@downloadUsePrimaryArtistOnlyEnabled": { - "description": "Subtitle when primary artist only is enabled" - }, - "notifScanningLibrary": "Scanning local library", - "@notifScanningLibrary": { - "description": "Notification title while scanning local library" - }, - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "setupGetStarted": "Başla", - "@setupGetStarted": { - "description": "Final setup button" - }, - "libraryFilterQualityCD": "CD (16bit)", - "@libraryFilterQualityCD": { - "description": "Filter option - CD quality audio" - }, - "sectionLayout": "Düzen", - "@sectionLayout": { - "description": "Settings section header" - }, - "@tooltipLoveAll": { - "description": "Tooltip for the Love All button on album/playlist screens" - }, - "queueFinalizingDownload": "Finalizing download", - "@queueFinalizingDownload": { - "description": "Accessibility label for a queue item that is finalizing" - }, - "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", - "@trackConvertActionLabelLossy": { - "description": "Convert button label for lossy conversion", + "setupPermissionRequiredMessage": "En iyi deneyim için {permissionType} izni zorunludur. Bunu ayarlardan daha sonra değiştirebilirsiniz.", + "@setupPermissionRequiredMessage": { + "description": "Generic permission required message", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { + "permissionType": { "type": "String" } } }, - "extensionsMetadataPriority": "Meta Veri Önceliği", - "@extensionsMetadataPriority": { - "description": "Setting - metadata provider order" + "setupUseDefaultFolder": "Varsayılan Klasörü Kullan?", + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" }, - "updateCurrent": "Şimdiki", - "@updateCurrent": { - "description": "Label for current version" + "setupNoFolderSelected": "Klasör seçilmedi. Varsayılan \"Music\" klasörünü kullanmak ister misiniz?", + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" }, - "@aboutFeatureRequest": { - "description": "Link to suggest features" + "setupUseDefault": "Varsayılanı Kullan", + "@setupUseDefault": { + "description": "Button to use default folder" }, - "@safMigrationSuccess": { - "description": "Snackbar after successfully migrating to SAF" + "setupDownloadLocationTitle": "İndirme Konumu", + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" }, - "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", - "@cleanupOrphanedDownloadsNone": { - "description": "Snackbar when no orphans found" + "setupDownloadLocationIosMessage": "iOS'ta indirilenler uygulamanın \"Documents\" dosyasına kaydedilir. Onlara Dosyalar uygulamasından erişebilirsiniz.", + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", - "@lyricsProviderNeteaseDesc": { - "description": "Description for Netease provider" + "setupAppDocumentsFolder": "Uygulama Belgeler Klasörü", + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" }, - "libraryScanCancelledSubtitle": "You can retry the scan when ready.", - "@libraryScanCancelledSubtitle": { - "description": "Library scan status subtitle after cancellation" + "setupAppDocumentsFolderSubtitle": "Tavsiye edilen - Dosyalar uygulamasından erişilebilir", + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" }, - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" + "setupChooseFromFiles": "Dosyalar'dan Seç", + "@setupChooseFromFiles": { + "description": "iOS file picker option" }, - "@trackAlbum": { - "description": "Metadata label - album name" + "setupChooseFromFilesSubtitle": "iCloud veya başka konum seç", + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" }, - "dialogDeleteSelectedMessage": "{count} {count, plural, =1{şarkıyı} other{şarkıyı}} geçmişten silmeye emin misiniz?\n\nBu işlem seçilenleri cihazınızdan da silecektir.", - "@dialogDeleteSelectedMessage": { - "description": "Dialog message - delete selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "setupIosEmptyFolderWarning": "iOS'un sınırlaması: Boş klasörler seçilemiyor. İçinde en az bir dosya bulunan bir klasör seçin.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" }, - "trackReEnrich": "Re-enrich", - "@trackReEnrich": { - "description": "Menu action - re-embed metadata into audio file" + "setupIcloudNotSupported": "iCloud Drive desteklenmiyor. Lütfen uygulama Belgeler klasörünü kullanın.", + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" }, - "@lyricsProvidersSaved": { - "description": "Snackbar after saving lyrics provider priority" + "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "@setupDownloadInFlac": { + "description": "App tagline in setup" }, - "@storageModeSaf": { - "description": "Storage mode option - Storage Access Framework" + "setupStorageGranted": "Depolama İzni Verildi!", + "@setupStorageGranted": { + "description": "Success message for storage permission" }, - "libraryStorageAccessRequired": "Depolama Alanına Erişim Gereklidir", - "@libraryStorageAccessRequired": { - "description": "Dialog title for storage permission" + "setupStorageRequired": "Depolama İzni Gerekli", + "@setupStorageRequired": { + "description": "Title when storage permission needed" }, - "@cacheClearAllConfirmTitle": { - "description": "Dialog title before clearing all caches" + "setupStorageDescription": "SpotiFLAC'ın şarkılarınızı kaydetmek için depolama iznine ihtiyacı var.", + "@setupStorageDescription": { + "description": "Explanation for storage permission" }, - "@unknownArtist": { - "description": "Fallback artist name when metadata is missing" + "setupNotificationGranted": "Bildirim İzni Verildi!", + "@setupNotificationGranted": { + "description": "Success message for notification permission" }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist folder is enabled" + "setupNotificationEnable": "Bildirimleri Etkinleştir", + "@setupNotificationEnable": { + "description": "Button to enable notifications" }, - "dialogClearHistoryMessage": "Tüm indirme geçmişini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.", - "@dialogClearHistoryMessage": { - "description": "Dialog message - clear history confirmation" + "setupFolderChoose": "İndirilecek Klasörü Seç", + "@setupFolderChoose": { + "description": "Button to choose folder" }, - "@sectionData": { - "description": "Settings section header" + "setupFolderDescription": "İndirdiğin şarkıların kaydedileceği klasörü seç.", + "@setupFolderDescription": { + "description": "Explanation for folder selection" }, - "audioAnalysisRms": "RMS", - "@audioAnalysisRms": { - "description": "RMS level metric label" + "setupSelectFolder": "Klasör Seç", + "@setupSelectFolder": { + "description": "Button to select folder" }, - "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", - "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is on" + "setupEnableNotifications": "Bildirimleri Etkinleştir", + "@setupEnableNotifications": { + "description": "Button to enable notifications" }, - "timeJustNow": "Şu anda", - "@extensionCustomUrlHandlingShareHint": { - "description": "Extension detail hint explaining share-to-app URL handling" + "setupNotificationBackgroundDescription": "İndirmelerin durumu hakkında bildirim al. Bunu açmak uygulama arka plandayken indirmelerinizi takip etmenizi sağlar.", + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" }, - "cleanupOrphanedDownloads": "Yetim kalmış indirmeleri temizle", - "@cleanupOrphanedDownloads": { - "description": "Button to remove history entries for deleted files" + "setupSkipForNow": "Şimdilik atla", + "@setupSkipForNow": { + "description": "Skip button text" }, - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" + "setupNext": "Sıradaki", + "@setupNext": { + "description": "Next button text" }, - "@tutorialWelcomeTitle": { - "description": "Tutorial welcome page title" + "setupGetStarted": "Başla", + "@setupGetStarted": { + "description": "Final setup button" }, - "collectionFavoriteArtists": "Favori Sanatçılar", - "audioAnalysisRescanning": "Re-analyzing audio...", - "@audioAnalysisRescanning": { - "description": "Loading text while audio is being re-analyzed after an explicit refresh" + "setupAllowAccessToManageFiles": "Lütfen bir sonraki ekranda \"Bütün dosyalara eriş\" iznini sağlayın.", + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" }, - "logTitle": "Kayıtlar", - "@logTitle": { - "description": "Logs screen title" + "setupLanguageTitle": "Dil Seçin", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" }, - "@regionCountryGB": { - "description": "Country name for SongLink region picker" + "setupLanguageDescription": "Uygulama için tercih ettiğiniz dili seçin. Bunu daha sonra Ayarlar'dan değiştirebilirsiniz.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" }, - "@progressFetchingMetadata": { - "description": "Progress indicator - loading track info", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "setupLanguageSystemDefault": "Sistem Varsayılanı", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" }, - "aboutLogoArtist": "Uygulama logomuzu yaratmış yetenekli sanatçımız!", - "@aboutLogoArtist": { - "description": "Role description for logo artist" + "dialogCancel": "İptal", + "@dialogCancel": { + "description": "Dialog button - cancel action" }, - "channelPreview": "Önizleme", - "@channelPreview": { - "description": "Update channel - beta/preview releases" + "dialogSave": "Kaydet", + "@dialogSave": { + "description": "Dialog button - save changes" }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", - "@collectionPlaylistsDeleted": { - "description": "Snackbar after deleting selected playlists", + "dialogDelete": "Sil", + "@dialogDelete": { + "description": "Dialog button - delete item" + }, + "dialogRetry": "Yeniden dene", + "@dialogRetry": { + "description": "Dialog button - retry action" + }, + "dialogClear": "Temizle", + "@dialogClear": { + "description": "Dialog button - clear items" + }, + "dialogDone": "Tamamlandı", + "@dialogDone": { + "description": "Dialog button - action completed" + }, + "dialogImport": "İçe aktar", + "@dialogImport": { + "description": "Dialog button - import data" + }, + "dialogDownload": "İndir", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, + "previewPlay": "Play preview", + "@previewPlay": { + "description": "Tooltip for the button that plays a short track preview snippet" + }, + "previewStop": "Stop preview", + "@previewStop": { + "description": "Tooltip for the button that stops the playing track preview snippet" + }, + "previewUnavailable": "Preview unavailable", + "@previewUnavailable": { + "description": "Snackbar shown when a track preview snippet cannot be played" + }, + "dialogDiscard": "Vazgeç", + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, + "dialogRemove": "Kaldır", + "@dialogRemove": { + "description": "Dialog button - remove item" + }, + "dialogUninstall": "Kaldır", + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, + "dialogDiscardChanges": "Değişiklikleri İptal Et?", + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, + "dialogUnsavedChanges": "Kaydedilmeyen değişiklikler mevcut. Bu değişiklikleri iptal etmek istiyor musunuz?", + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, + "dialogClearAll": "Tümünü Temizle", + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, + "dialogRemoveExtension": "Eklentiyi Kaldır", + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogRemoveExtensionMessage": "Bu eklentiyi kaldırmak istediğine emin misin? Bu işlem geri alınamaz.", + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, + "dialogUninstallExtension": "Eklentiyi Kaldır?", + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogUninstallExtensionMessage": "{extensionName} eklentisini kaldırmak istediğine emin misin?", + "@dialogUninstallExtensionMessage": { + "description": "Dialog message - uninstall specific extension", "placeholders": { - "count": { - "type": "int" + "extensionName": { + "type": "String" } } }, - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" + "dialogClearHistoryTitle": "Geçmişi Temizle", + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" }, - "homeTitle": "Ana sayfa", - "@homeTitle": { - "description": "Home screen title" + "dialogClearHistoryMessage": "Tüm indirme geçmişini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" }, - "extensionMinAppVersion": "Minimum Uygulama Sürümü", - "@extensionMinAppVersion": { - "description": "Extension detail - minimum app version" + "dialogDeleteSelectedTitle": "Seçileni Sil", + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", - "@backupContentsLiked": { - "description": "Backup contents row for liked tracks count", + "dialogDeleteSelectedMessage": "{count} {count, plural, =1{şarkıyı} other{şarkıyı}} geçmişten silmeye emin misiniz?\n\nBu işlem seçilenleri cihazınızdan da silecektir.", + "@dialogDeleteSelectedMessage": { + "description": "Dialog message - delete selected tracks", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" + "dialogImportPlaylistTitle": "Çalma listesini içe aktar", + "@dialogImportPlaylistTitle": { + "description": "Dialog title - import CSV playlist" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", - "@notifDownloadsCanceledBody": { - "description": "Notification body when downloads are canceled by the user", + "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", + "csvImportTracks": "CSV'den {count} şarkı", + "@csvImportTracks": { + "description": "Label shown in quality picker for CSV import", "placeholders": { "count": { "type": "int" } } }, - "@dialogRetry": { - "description": "Dialog button - retry action" - }, - "@homeChangeSearchProviderTooltip": { - "description": "Tooltip for the Home search provider picker" - }, - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" + "collectionExportM3u": "Export as M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" }, - "@trackReEnrichSuccessWithFailures": { - "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "collectionExportM3uDone": "Exported {exported} of {total} tracks", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { - "successCount": { + "exported": { "type": "int" }, "total": { "type": "int" - }, - "failedCount": { - "type": "int" } } }, - "previewUnavailable": "Preview unavailable", - "@previewUnavailable": { - "description": "Snackbar shown when a track preview snippet cannot be played" - }, - "nowPlayingTabPlayer": "Player", - "@nowPlayingTabPlayer": { - "description": "Tab label for the player view" + "collectionExportM3uNone": "No downloaded files to export", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "@backupContentsPlaylists": { - "description": "Backup contents row for playlist count", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionExportM3uFailed": "Export failed", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "libraryLastScannedNever": "Asla", - "@libraryLastScannedNever": { - "description": "Shown when library has never been scanned" + "trackOpenOn": "Open on...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" }, - "trackTrackNumber": "Parça numarası", - "@trackTrackNumber": { - "description": "Metadata label - track number" + "trackOpenOnNoLinks": "No platform links found for this track.", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" }, - "trackReplayGainScanning": "Analyzing loudness...", - "@trackReplayGainScanning": { - "description": "Snackbar/progress message while scanning ReplayGain for a single track" + "libraryReviewDuplicates": "Review duplicates", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" }, - "downloadLossyMp3": "MP3 320kbps", - "@downloadLossyMp3": { - "description": "Lossy format option - MP3 320kbps" + "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" }, - "@albumFolderArtistAlbumSingles": { - "description": "Album folder option with singles inside artist" + "duplicatesTitle": "Duplicates", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" }, - "@extensionHealthNotConfigured": { - "description": "Extension service health status - not configured" + "duplicatesEmpty": "No duplicate tracks found.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" }, - "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is off" + "duplicatesKeepBest": "Keep best", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting to create a subfolder per playlist source" + "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", + "placeholders": { + "count": { + "type": "int" + }, + "trackName": { + "type": "String" + } + } }, - "@trackReleaseDate": { - "description": "Metadata label - release date" + "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "aboutContributors": "Katkıda Bulunanlar", - "@aboutContributors": { - "description": "Section for contributors" + "@dialogImportPlaylistMessage": { + "description": "Dialog message - import playlist confirmation", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@audioAnalysisMono": { - "description": "Audio channel layout label - mono" + "snackbarAddedToQueue": "\"{trackName}\" kuyruğa eklendi", + "@snackbarAddedToQueue": { + "description": "Snackbar - track added to download queue", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@audioAnalysisNyquist": { - "description": "Nyquist frequency metric label" + "snackbarAddedTracksToQueue": "{count} şarkı kuyruğa eklendi", + "@snackbarAddedTracksToQueue": { + "description": "Snackbar - multiple tracks added to queue", + "placeholders": { + "count": { + "type": "int" + } + } }, - "permissionStorage": "Depolama", - "@permissionStorage": { - "description": "Storage permission type label" + "snackbarAlreadyDownloaded": "\"{trackName}\" zaten indirilmiş", + "@snackbarAlreadyDownloaded": { + "description": "Snackbar - track already exists", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "permissionAudio": "Ses", - "@permissionAudio": { - "description": "Audio permission type label" + "snackbarAlreadyInLibrary": "\"{trackName}\" kitaplığınızda zaten mevcut", + "@snackbarAlreadyInLibrary": { + "description": "Snackbar - track already exists in local library", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@libraryScanSubtitle": { - "description": "Subtitle for scan button" + "snackbarHistoryCleared": "Geçmiş temizlendi", + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" }, - "@snackbarUnsupportedAudioFormat": { - "description": "Snackbar when the audio format is not supported for the requested operation" + "snackbarDeletedTracks": "{count} {count, plural, =1{şarkı} other{şarkı}} silindi", + "@snackbarDeletedTracks": { + "description": "Snackbar - tracks deleted", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@notifLibraryScanStopped": { - "description": "Notification body when library scan is cancelled" + "snackbarCannotOpenFile": "Dosya açılamadı: {error}", + "@snackbarCannotOpenFile": { + "description": "Snackbar - file open error", + "placeholders": { + "error": { + "type": "String" + } + } }, - "@downloadMusixmatchAuto": { - "description": "Button to clear Musixmatch language (use auto)" + "snackbarViewQueue": "Kuyruğu Görüntüle", + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, - "@trackLyricsTimeout": { - "description": "Message when lyrics request times out" + "snackbarUrlCopied": "{platform} Bağlantı panoya kopyalandı", + "@snackbarUrlCopied": { + "description": "Snackbar - URL copied", + "placeholders": { + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } + } }, - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" + "snackbarFileNotFound": "Dosya bulunamadı", + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" }, - "@regionCountryXK": { - "description": "Country name for SongLink region picker" + "snackbarSelectExtFile": "Lütfen .spotiflac-ext dosyasını seçin", + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" }, - "aboutTelegramChatSubtitle": "Diğer kullanıcılarla sohbet et", - "@aboutTelegramChatSubtitle": { - "description": "Subtitle for Telegram chat" + "snackbarProviderPrioritySaved": "Sağlayıcı önceliği kaydedildi", + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" }, - "selectionAllPlaylistsSelected": "All playlists selected", - "@selectionAllPlaylistsSelected": { - "description": "Shown when all playlists are selected in selection mode" + "snackbarMetadataProviderSaved": "Meta veri sağlayıcı önceliği kaydedildi", + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" }, - "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", - "@cacheTrackLookupDesc": { - "description": "Description of what track lookup cache contains" + "snackbarExtensionInstalled": "{extensionName} yüklendi.", + "@snackbarExtensionInstalled": { + "description": "Snackbar - extension installed successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@unknownAlbum": { - "description": "Fallback album name when metadata is missing" + "snackbarExtensionUpdated": "{extensionName} güncellendi.", + "@snackbarExtensionUpdated": { + "description": "Snackbar - extension updated successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "@extensionsErrorLoading": { - "description": "Error message when extension fails to load" + "snackbarFailedToInstall": "Eklenti yüklenirken hata oluştu", + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" }, - "@cacheTitle": { - "description": "Cache management page title" + "snackbarFailedToUpdate": "Eklenti güncellenirken hata oluştu", + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" }, - "@downloadFilenameFormat": { - "description": "Setting for output filename pattern" + "errorRateLimited": "Aşırı istek gönderildi", + "@errorRateLimited": { + "description": "Error title - too many requests" + }, + "errorRateLimitedMessage": "Çok fazla istek. Lütfen arama yapmadan önce biraz bekleyin.", + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" + }, + "errorNoTracksFound": "Parça bulunamadı", + "@errorNoTracksFound": { + "description": "Error - search returned no results" + }, + "searchEmptyResultSubtitle": "Try another keyword", + "@searchEmptyResultSubtitle": { + "description": "Subtitle shown under the empty search result state on the home screen" }, "errorUrlNotRecognized": "Bağlantı tanınamadı", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when album artist is used for folder names" + "errorUrlNotRecognizedMessage": "Bu bağlantı desteklenmiyor. URL'nin doğru olduğundan ve uyumlu bir uzantının yüklü olduğundan emin olun.", + "@errorUrlNotRecognizedMessage": { + "description": "Error message - URL not recognized explanation" }, - "@qualityFlacLossless": { - "description": "Quality option - CD quality FLAC" + "errorUrlFetchFailed": "Bu bağlantıdan içerik yüklenemedi. Lütfen tekrar deneyin.", + "@errorUrlFetchFailed": { + "description": "Error message - generic URL fetch failure" }, - "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", - "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is on" + "errorMissingExtensionSource": "{item} yüklenemedi: Eksik eklenti kaynağı", + "@errorMissingExtensionSource": { + "description": "Error - extension source not available", + "placeholders": { + "item": { + "type": "String" + } + } }, - "collectionLovedEmptySubtitle": "Favorilerinizi kaydetmek için parçalara beğeni bırakın", - "@collectionLovedEmptySubtitle": { - "description": "Loved empty state subtitle" + "actionPause": "Duraklat", + "@actionPause": { + "description": "Action button - pause download" }, - "@libraryBuiltInPlayerInfo": { - "description": "Info note explaining the built-in player is for previews only" + "actionResume": "Devam et", + "@actionResume": { + "description": "Action button - resume download" }, - "@notifLibraryScanProgressNoTotal": { - "description": "Notification body for library scan progress when total is unknown", + "actionCancel": "Vazgeç", + "@actionCancel": { + "description": "Action button - cancel operation" + }, + "actionSelectAll": "Tümünü Seç", + "@actionSelectAll": { + "description": "Action button - select all items" + }, + "actionDeselect": "Seçimi kaldır", + "@actionDeselect": { + "description": "Action button - deselect all" + }, + "selectionSelected": "{count} seçildi", + "@selectionSelected": { + "description": "Selection count indicator", "placeholders": { - "scanned": { - "type": "int" - }, - "percentage": { + "count": { "type": "int" } } }, - "@tutorialSearchTitle": { - "description": "Tutorial search page title" + "selectionAllSelected": "Tüm parçalar seçildi", + "@selectionAllSelected": { + "description": "Status - all items selected" }, - "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", - "@a11yTrackByArtist": { - "description": "Accessibility label for a queue or list track item", + "selectionSelectToDelete": "Silinecek parçaları seçin", + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "progressFetchingMetadata": "Meta verileri alınıyor... {current}/{total}", + "@progressFetchingMetadata": { + "description": "Progress indicator - loading track info", "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "libraryFilterMetadataMissingLabel": "Missing label", - "@libraryFilterMetadataMissingLabel": { - "description": "Filter option - items missing record label" - }, - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "trackMetadata": "Meta Veri", - "@trackMetadata": { - "description": "Tab title - track metadata" + "progressReadingCsv": "CSV okunuyor...", + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" }, - "trackOptionRemoveFromLoved": "Remove from Loved", - "@trackOptionRemoveFromLoved": { - "description": "Bottom sheet action label - remove track from loved folder" + "searchSongs": "Şarkılar", + "@searchSongs": { + "description": "Search result category - songs" }, - "@aboutTelegramChat": { - "description": "Link to Telegram chat group" + "searchArtists": "Sanatçılar", + "@searchArtists": { + "description": "Search result category - artists" }, - "@trackCopiedToClipboard": { - "description": "Snackbar - content copied" + "searchAlbums": "Albümler", + "@searchAlbums": { + "description": "Search result category - albums" }, - "aboutKeepAndroidOpen": "Android'i Açık Tutun", - "@aboutKeepAndroidOpen": { - "description": "Link to Keep Android Open campaign website" + "searchPlaylists": "Çalma Listeleri", + "@searchPlaylists": { + "description": "Search result category - playlists" }, - "@lyricsProvidersDisabledSection": { - "description": "Section header for disabled providers", - "placeholders": { - "count": { - "type": "int" - } - } + "searchSortTitle": "Sonuçları Sırala", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" }, - "@downloadAllowLocalNetwork": { - "description": "Setting title for allowing requests to private/local network targets" + "searchSortDefault": "Varsayılan", + "@searchSortDefault": { + "description": "Sort option - default API order" }, - "@openInOtherServices": { - "description": "Title and tooltip for finding the current collection in other services" + "searchSortTitleAZ": "Başlık (A-Z)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" }, - "@extensionVerificationBrowserInApp": { - "description": "Chip label for in-app browser verification mode" + "searchSortTitleZA": "Başlık (Z-A)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" }, - "sectionSearchSource": "Arama Kaynağı", - "@sectionSearchSource": { - "description": "Settings section header" + "searchSortArtistAZ": "Sanatçı (A-Z)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" }, - "allFilesAccess": "Tüm Dosyalara Erişim", - "@allFilesAccess": { - "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + "searchSortArtistZA": "Sanatçı (Z-A)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" }, - "extensionsInstalledCount": "{count} uzantı başarıyla yüklendi", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } + "searchSortDurationShort": "Süre (en kısa)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" }, - "snackbarFailedToEmbedLyrics": "Şarkı sözleri eklenemedi", - "@snackbarFailedToEmbedLyrics": { - "description": "Snackbar when lyrics embedding fails" + "searchSortDurationLong": "Süre (en uzun)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" }, - "@lyricsProviderMusixmatchDesc": { - "description": "Description for Musixmatch provider" + "searchSortDateOldest": "Yayın Tarihi (En eski)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" }, - "queueRateLimitTitle": "Service rate limited", - "@queueRateLimitTitle": { - "description": "Title shown on a failed queue item when the download service rate limits requests" + "searchSortDateNewest": "Yayın Tarihi (En yeni)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" }, - "@notifDownloadComplete": { - "description": "Notification title when a single download is complete" + "tooltipPlay": "Oynat", + "@tooltipPlay": { + "description": "Tooltip - play button" }, - "@homeSupports": { - "description": "Info text about supported URL types" + "filenameFormat": "Dosya adı formatı", + "@filenameFormat": { + "description": "Setting title - filename pattern" }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" + "filenameShowAdvancedTags": "Gelişmiş etiketleri göster", + "@filenameShowAdvancedTags": { + "description": "Toggle label for showing advanced filename tags" }, - "@lyricsModeEmbedSubtitle": { - "description": "Subtitle for embed option" + "filenameShowAdvancedTagsDescription": "Parça numarası tamamlama ve tarih desenleri için biçimlendirilmiş etiketleri etkinleştir", + "@filenameShowAdvancedTagsDescription": { + "description": "Description for advanced filename tag toggle" }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" + "folderOrganizationNone": "Organizasyon yok", + "@folderOrganizationNone": { + "description": "Folder option - flat structure" }, - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" + "folderOrganizationByPlaylist": "Çalma Listesine Göre", + "@folderOrganizationByPlaylist": { + "description": "Folder option - playlist folders" }, - "@trackArtist": { - "description": "Metadata label - artist name" + "folderOrganizationByPlaylistSubtitle": "Her çalma listesi için ayrı klasör", + "@folderOrganizationByPlaylistSubtitle": { + "description": "Subtitle for playlist folder option" }, - "cacheCoverImageDesc": "Albüm ve şarkı kapak resimleri indirildi. Görüntülendikten sonra tekrar indirilecektir.", - "@cacheCoverImageDesc": { - "description": "Description of what cover image cache contains" + "folderOrganizationByArtist": "Sanatçıya Göre", + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" }, - "queueClearAll": "Tümünü Temizle", - "@queueClearAll": { - "description": "Button - clear all queue items" + "folderOrganizationByAlbum": "Albüme Göre", + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" }, - "downloadUsePrimaryArtistOnlyDisabled": "Klasör adı için tam sanatçı dizesi kullanılır", - "@downloadUsePrimaryArtistOnlyDisabled": { - "description": "Subtitle when primary artist only is disabled" + "folderOrganizationByArtistAlbum": "Sanatçı/Albüm", + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" }, - "backupImportSectionTitle": "Restore backup", - "@backupImportSectionTitle": { - "description": "Section title for the import/restore card" + "folderOrganizationDescription": "İndirilenleri klasörlerle organize et", + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" }, - "@downloadMusixmatchLanguageHint": { - "description": "Placeholder for Musixmatch language input" + "folderOrganizationNoneSubtitle": "Her şey indirilen dosyasına kaydedilecek", + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" }, - "collectionRemoveFromFolder": "Remove from folder", - "@collectionRemoveFromFolder": { - "description": "Tooltip for removing track from wishlist/loved folder" + "folderOrganizationByArtistSubtitle": "Her sanatçı için ayrı klasör", + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" }, - "storeFilterMetadata": "Meta Veri", - "@storeFilterMetadata": { - "description": "Repo filter - metadata providers" + "folderOrganizationByAlbumSubtitle": "Her albüm için ayrı klasör", + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" }, - "shareSheetCopyLink": "Copy Link", - "errorRateLimitedMessage": "Çok fazla istek. Lütfen arama yapmadan önce biraz bekleyin.", - "@errorRateLimitedMessage": { - "description": "Error message - rate limit explanation" + "folderOrganizationByArtistAlbumSubtitle": "Sanatçı klasörlerinin içinde Albüm klasörleri", + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" }, - "libraryFilterSortGenreDesc": "Tür (Z-A)", - "@libraryFilterSortGenreDesc": { - "description": "Sort option - genre descending" + "updateAvailable": "Güncelleme Mevcut", + "@updateAvailable": { + "description": "Update dialog title" }, - "trackFileNotFound": "Dosya bulunamadı", - "@trackFileNotFound": { - "description": "Error - file doesn't exist" + "updateLater": "Daha Sonra", + "@updateLater": { + "description": "Update button - dismiss" }, - "@queueEmptySinglesSubtitle": { - "description": "Empty state subtitle for single track downloads" + "updateStartingDownload": "İndirme başlıyor...", + "@updateStartingDownload": { + "description": "Update status - initializing" }, - "@queueDownloadStarting": { - "description": "Queue status before download progress is available" + "updateDownloadFailed": "İndirme başarısız", + "@updateDownloadFailed": { + "description": "Update error title" }, - "metadataProviderPriorityInfo": "Deezer'da istek sınırı yoktur ve birincil olarak önerilir. Spotify, çok sayıda istekten sonra hız sınırlaması uygulayabilir.", - "@metadataProviderPriorityInfo": { - "description": "Info tip about rate limits" + "updateFailedMessage": "Güncelleme indirilemedi", + "@updateFailedMessage": { + "description": "Update error message" }, - "aboutPCSource": "PC kaynak kodu", - "@aboutPCSource": { - "description": "Link to PC GitHub repo" + "updateNewVersionReady": "Yeni bir sürüm hazır", + "@updateNewVersionReady": { + "description": "Update subtitle" }, - "editMetadataAutoFill": "Auto-fill from online", - "@editMetadataAutoFill": { - "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + "updateRequiredTitle": "Update required", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "snackbarDeletedTracks": "{count} {count, plural, =1{şarkı} other{şarkı}} silindi", - "@snackbarDeletedTracks": { - "description": "Snackbar - tracks deleted", + "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { "count": { "type": "int" } } }, - "@extensionHealthServiceDegraded": { - "description": "Tooltip for degraded extension service" + "updateCurrent": "Şimdiki", + "@updateCurrent": { + "description": "Label for current version" }, - "lyricsProviderLrclibDesc": "Open-source synced lyrics database", - "@lyricsProviderLrclibDesc": { - "description": "Description for LRCLIB provider" + "updateNew": "Yeni", + "@updateNew": { + "description": "Label for new version" }, - "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", - "@downloadMusixmatchLanguageDesc": { - "description": "Description in Musixmatch language picker" + "updateDownloading": "İndiriliyor...", + "@updateDownloading": { + "description": "Update status - downloading" }, - "@optionsEmbedMetadataSubtitleOn": { - "description": "Subtitle when metadata embedding is enabled" - }, - "@setupSkipForNow": { - "description": "Skip button text" - }, - "@a11ySelectTrack": { - "description": "Accessibility label for selecting a track" - }, - "@folderOrganizationByAlbumSubtitle": { - "description": "Subtitle for album folder option" - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@extensionVerificationBrowserTitle": { - "description": "Settings option title for extension verification browser preference" + "updateWhatsNew": "Yenilikler", + "@updateWhatsNew": { + "description": "Changelog section title" }, - "@backupContentsExtensions": { - "description": "Backup contents row for installed extensions count", - "placeholders": { - "count": { - "type": "int" - } - } + "updateDownloadInstall": "İndir & Yükle", + "@updateDownloadInstall": { + "description": "Update button - download and install" }, - "snackbarUrlCopied": "{platform} Bağlantı panoya kopyalandı", - "@snackbarUrlCopied": { - "description": "Snackbar - URL copied", - "placeholders": { - "platform": { - "type": "String", - "description": "Platform name (Spotify/Deezer)" - } - } + "updateDontRemind": "Bir daha sorma", + "@updateDontRemind": { + "description": "Update button - skip this version" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", - "@aboutBinimumDesc": { - "description": "Credit description for binimum" + "providerPriorityTitle": "İndirme hizmetleri öncelik sırası", + "@providerPriorityTitle": { + "description": "Provider priority page title" }, - "discographyFetchingAlbum": "{total} üzerinden {current} getiriliyor...", - "@discographyFetchingAlbum": { - "description": "Progress - fetching specific album", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "providerPriorityDescription": "İndirme hizmetlerini sıralamak için kaydır. Uygulama şarkı indirirken hizmetleri yukarıdan aşağıya doğru deneyecektir.", + "@providerPriorityDescription": { + "description": "Provider priority page description" }, - "logAutoScrollOn": "Auto-scroll ON", - "@logAutoScrollOn": { - "description": "Tooltip when auto-scroll is enabled on the log screen" + "providerPriorityInfo": "Eğer bir şarkı ilk hizmette mevcut değilse uygulama otomatik olarak bir sonrakini deneyecektir.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" }, - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" + "providerPriorityFallbackExtensionsDescription": "Otomatik geri dönüş sırasında hangi yüklü indirme uzantılarının kullanılabileceğini seçin.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" }, - "@regionCountryBR": { - "description": "Country name for SongLink region picker" + "providerPriorityFallbackExtensionsHint": "Burada yalnızca indirme sağlayıcısı yeteneğine sahip olan ve etkinleştirilmiş uzantılar listelenir.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" }, - "@lyricsProvidersTitle": { - "description": "Settings item title for lyrics provider order" + "providerExtension": "Eklenti", + "@providerExtension": { + "description": "Label for extension-provided providers" }, - "trackMetadataService": "Hizmet", - "@trackMetadataService": { - "description": "Metadata field - download service used" + "metadataProviderPriorityTitle": "Meta Veri Önceliği", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" }, - "discographyAddedToQueue": "{count} parça kuyruğa eklendi", - "cueSplitTrackCount": "{count} parça", - "@cueSplitTrackCount": { - "description": "Number of tracks in CUE sheet", - "placeholders": { - "count": { - "type": "int" - } - } + "metadataProviderPriorityDescription": "Meta veri sağlayıcılarını yeniden sıralamak için sürükleyin. Uygulama, parça ararken ve meta verileri alırken sağlayıcıları yukarıdan aşağıya doğru deneyecektir.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" }, - "dialogImportPlaylistTitle": "Çalma listesini içe aktar", - "@dialogImportPlaylistTitle": { - "description": "Dialog title - import CSV playlist" + "metadataProviderPriorityInfo": "Deezer'da istek sınırı yoktur ve birincil olarak önerilir. Spotify, çok sayıda istekten sonra hız sınırlaması uygulayabilir.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" }, - "@cleanupOrphanedDownloadsSubtitle": { - "description": "Subtitle for orphaned cleanup button" + "logTitle": "Kayıtlar", + "@logTitle": { + "description": "Logs screen title" }, - "settingsLocalLibrary": "Yerel Kitaplık", - "@settingsLocalLibrary": { - "description": "Settings menu item - local library" + "logCopied": "Kayıtlar panoya kopyalandı", + "@logCopied": { + "description": "Snackbar - logs copied" }, - "@metadataSaveFailedStorage": { - "description": "Snackbar error when writing metadata file back to storage fails" + "logSearchHint": "Kayıtları Ara...", + "@logSearchHint": { + "description": "Log search placeholder" }, - "logCopyLogs": "Copy logs", - "@logCopyLogs": { - "description": "Tooltip for copying logs" + "logFilterLevel": "Seviye", + "@logFilterLevel": { + "description": "Filter by log level" }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", - "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for WiFi-only option in picker" + "logFilterSection": "Filtre", + "@logFilterSection": { + "description": "Filter section title" }, - "@lyricsModeBothSubtitle": { - "description": "Subtitle for both option" + "logShareLogs": "Kayıtları paylaş", + "@logShareLogs": { + "description": "Share button tooltip" }, - "@collectionAlreadyInPlaylist": { - "description": "Snackbar when track already exists in playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "logClearLogs": "Kayıtları temizle", + "@logClearLogs": { + "description": "Clear button tooltip" }, - "@collectionFoldersTitle": { - "description": "Library section title for custom folders" + "logClearLogsTitle": "Kayıtları temizle", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" }, - "searchSortDateNewest": "Yayın Tarihi (En yeni)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" + "logClearLogsMessage": "Tüm kayıtları temizlemek istediğinize emin misiniz?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" + "logFilterBySeverity": "Günlükleri önem derecesine göre filtrele", + "@logFilterBySeverity": { + "description": "Filter dialog title" }, - "@recentTypeAlbum": { - "description": "Recent access item type - album" + "logNoLogsYet": "Henüz kayıt yok", + "@logNoLogsYet": { + "description": "Empty state title" }, - "nowPlayingPlayInOrder": "Play in order", - "@nowPlayingPlayInOrder": { - "description": "Tooltip when shuffle mode is disabled" + "logNoLogsYetSubtitle": "Uygulamayı kullandıkça günlükler burada görünecektir", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" }, - "@cueSplitConfirmMessage": { - "description": "CUE split confirmation dialog message", + "logEntriesFiltered": "Kayıtlar ({count} filtrelendi)", + "@logEntriesFiltered": { + "description": "Log count with filter active", "placeholders": { - "album": { - "type": "String" - }, "count": { "type": "int" } } }, - "@audioAnalysisFileSize": { - "description": "File size metric label" - }, - "artistSingles": "Single'lar ve EP'ler", - "@artistSingles": { - "description": "Section header for singles/EPs" - }, - "@snackbarProviderPrioritySaved": { - "description": "Snackbar - provider order saved" - }, - "@recentPlaylistInfo": { - "description": "Snackbar message when tapping playlist in recent access", + "logEntries": "Kayıtlar ({count})", + "@logEntries": { + "description": "Total log count", "placeholders": { - "name": { - "type": "String", - "description": "Playlist name" + "count": { + "type": "int" } } }, - "@lyricsProviderLyricsPlusDesc": { - "description": "Description for LyricsPlus provider" + "channelStable": "Kararlı", + "@channelStable": { + "description": "Update channel - stable releases" }, - "@libraryFilterDownloaded": { - "description": "Filter chip - show only downloaded items" + "channelPreview": "Önizleme", + "@channelPreview": { + "description": "Update channel - beta/preview releases" }, - "recentPlaylistInfo": "Çalma Listesi: {name}", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" + "sectionSearchSource": "Arama Kaynağı", + "@sectionSearchSource": { + "description": "Settings section header" }, - "@actionCreate": { - "description": "Generic action button - create" + "sectionDownload": "İndir", + "@sectionDownload": { + "description": "Settings section header" }, - "@downloadSelectQuality": { - "description": "Dialog title - choose audio quality" + "sectionPerformance": "Performans", + "@sectionPerformance": { + "description": "Settings section header" }, - "cueSplitAlbum": "Album: {album}", - "@cueSplitAlbum": { - "description": "Album name in CUE split sheet", - "placeholders": { - "album": { - "type": "String" - } - } + "sectionApp": "Uygulama", + "@sectionApp": { + "description": "Settings section header" }, - "@trackCoverNoSource": { - "description": "Snackbar when no cover art URL or embedded cover" + "sectionData": "Veri", + "@sectionData": { + "description": "Settings section header" }, - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" + "sectionDebug": "Hata ayıklama", + "@sectionDebug": { + "description": "Settings section header" }, - "@notifLibraryScanCompleteBody": { - "description": "Notification body for library scan complete - number of indexed tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "sectionService": "Servis", + "@sectionService": { + "description": "Settings section header" }, - "optionsDetailedLogging": "Detaylı Günlükleme", - "@optionsDetailedLogging": { - "description": "Enable verbose logs for debugging" + "sectionAudioQuality": "Ses Kalitesi", + "@sectionAudioQuality": { + "description": "Settings section header" }, - "@lyricsProvidersDiscardContent": { - "description": "Body text of the discard-changes dialog on lyrics provider page" + "sectionFileSettings": "Dosya Ayarları", + "@sectionFileSettings": { + "description": "Settings section header" }, - "@dialogDisableHistoryTitle": { - "description": "Confirmation dialog title shown before disabling download history" + "sectionLyrics": "Şarkı sözleri", + "@sectionLyrics": { + "description": "Settings section header" }, - "downloadLossyOpus128Subtitle": "En küçük boyut, parça başına ~4 Mb", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" + "lyricsMode": "Şarkı Sözü Modu", + "@lyricsMode": { + "description": "Setting - how to save lyrics" }, - "@appName": { - "description": "App name - DO NOT TRANSLATE" + "lyricsModeDescription": "Şarkı sözlerinin indirmelerinizle birlikte nasıl kaydedileceğini seçin", + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" }, - "libraryActions": "Eylemler", - "@libraryActions": { - "description": "Section header for library actions" + "lyricsModeEmbed": "Dosyaya göm", + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" }, - "setupNoFolderSelected": "Klasör seçilmedi. Varsayılan \"Music\" klasörünü kullanmak ister misiniz?", - "@setupNoFolderSelected": { - "description": "Prompt when no folder selected" + "lyricsModeEmbedSubtitle": "Şarkı sözleri FLAC meta verilerinin içinde saklanır", + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", - "trackSaveFailed": "Failed: {error}", - "@trackSaveFailed": { - "description": "Snackbar when save operation fails", - "placeholders": { - "error": { - "type": "String" - } - } + "lyricsModeExternal": "Harici .lrc dosyası", + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" }, - "replayGainBatchConfirmTitle": "Add ReplayGain", - "@replayGainBatchConfirmTitle": { - "description": "Title of the batch ReplayGain confirmation dialog" + "lyricsModeExternalSubtitle": "Samsung Music gibi oynatıcılar için ayrı .lrc dosyası", + "@lyricsModeExternalSubtitle": { + "description": "Subtitle for external option" }, - "tutorialExtensionsTip1": "Faydalı uzantıları keşfetmek için Depo sekmesine göz atın", - "@tutorialExtensionsTip1": { - "description": "Tutorial extensions tip 1" + "lyricsModeBoth": "Her ikisi de", + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" }, - "@trackAddToQueue": { - "description": "Menu action to add a track to the playback queue" + "lyricsModeBothSubtitle": "Hem göm hem de .lrc dosyası olarak kaydet", + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" }, - "@cacheTrackLookup": { - "description": "Cache item title for track ID lookup cache" + "sectionColor": "Renk", + "@sectionColor": { + "description": "Settings section header" }, - "@discographyNoAlbums": { - "description": "Error - no albums found for artist" + "sectionTheme": "Tema", + "@sectionTheme": { + "description": "Settings section header" }, - "@updateLater": { - "description": "Update button - dismiss" + "sectionLayout": "Düzen", + "@sectionLayout": { + "description": "Settings section header" }, - "@snackbarFailedToInstall": { - "description": "Snackbar - extension install error" + "sectionLanguage": "Dil", + "@sectionLanguage": { + "description": "Settings section header for language" }, - "@albumFolderArtistAlbumFlatSubtitle": { - "description": "Folder structure example for flat singles" + "appearanceLanguage": "Uygulama Dili", + "@appearanceLanguage": { + "description": "Language setting title" }, - "@errorMissingExtensionSource": { - "description": "Error - extension source not available", - "placeholders": { - "item": { - "type": "String" - } - } + "settingsAppearanceSubtitle": "Tema, renkler, görünüm", + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" }, - "libraryFilterSortAlbumAsc": "Albüm (A-Z)", - "@libraryFilterSortAlbumAsc": { - "description": "Sort option - album ascending" + "settingsDownloadSubtitle": "Hizmet, kalite, yedekleme", + "@settingsDownloadSubtitle": { + "description": "Download settings description" }, - "@queueTrackCount": { - "description": "Track count label with plural support", + "settingsExtensionsSubtitle": "İndirme sağlayıcılarını yönet", + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" + }, + "settingsLogsSubtitle": "Hata ayıklama için uygulama günlüklerini görüntüle", + "@settingsLogsSubtitle": { + "description": "Logs settings description" + }, + "loadingSharedLink": "Paylaşılan bağlantı yükleniyor...", + "@loadingSharedLink": { + "description": "Status when opening shared URL" + }, + "pressBackAgainToExit": "Çıkmak için tekrar geri basın", + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, + "downloadAllCount": "Tümünü İndir ({count})", + "@downloadAllCount": { + "description": "Download all button with count", "placeholders": { "count": { "type": "int" } } }, - "audioAnalysisMono": "Mono", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", + "tracksCount": "{count, plural, =1{1 parça} other{{count} parça}}", + "@tracksCount": { + "description": "Track count display", "placeholders": { - "source": { - "type": "String" + "count": { + "type": "int" } } }, - "@lyricsModeEmbed": { - "description": "Lyrics mode option - embed in audio file" + "trackCopyFilePath": "Dosya yolunu kopyala", + "@trackCopyFilePath": { + "description": "Action - copy file path" }, - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" + "trackRemoveFromDevice": "Cihazdan kaldır", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" }, - "@cacheRefreshStats": { - "description": "Button label to refresh cache statistics" + "trackLoadLyrics": "Şarkı Sözlerini Yükle", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" }, - "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", - "@lyricsProviderAppleMusicDesc": { - "description": "Description for Apple Music provider" + "trackMetadata": "Meta Veri", + "@trackMetadata": { + "description": "Tab title - track metadata" }, - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" + "trackFileInfo": "Dosya Bilgisi", + "@trackFileInfo": { + "description": "Tab title - file information" }, - "updateFailedMessage": "Güncelleme indirilemedi", - "@updateFailedMessage": { - "description": "Update error message" + "trackLyrics": "Şarkı Sözleri", + "@trackLyrics": { + "description": "Tab title - lyrics" }, - "cacheEstimatedTotal": "Estimated cache usage: {size}", - "@cacheEstimatedTotal": { - "description": "Total cache size shown in summary", - "placeholders": { - "size": { - "type": "String" - } - } + "trackFileNotFound": "Dosya bulunamadı", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" }, - "@aboutVersion": { - "description": "Version info label" + "trackOpenInDeezer": "Deezer'da aç", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" }, - "dialogRetry": "Yeniden dene", - "@cueSplitSplitting": { - "description": "Snackbar while splitting CUE", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } + "trackOpenInSpotify": "Spotify'da aç", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" }, - "@searchSortTitleZA": { - "description": "Sort option - title descending" + "trackTrackName": "Parça adı", + "@trackTrackName": { + "description": "Metadata label - track title" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", - "@tutorialLibraryTip2": { - "description": "Tutorial library tip 2" + "trackArtist": "Sanatçı", + "@trackArtist": { + "description": "Metadata label - artist name" }, - "extensionHealthServiceOffline": "Service offline", - "@extensionHealthServiceOffline": { - "description": "Tooltip for offline extension service" + "trackAlbumArtist": "Albüm sanatçısı", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" }, - "actionDeselect": "Seçimi kaldır", - "@actionDeselect": { - "description": "Action button - deselect all" + "trackAlbum": "Albüm", + "@trackAlbum": { + "description": "Metadata label - album name" }, - "@trackConvertOriginal": { - "description": "Label for keeping original bit depth or sample rate during conversion" + "trackTrackNumber": "Parça numarası", + "@trackTrackNumber": { + "description": "Metadata label - track number" }, - "@libraryClearConfirmTitle": { - "description": "Dialog title for clear confirmation" + "trackDiscNumber": "Disk numarası", + "@trackDiscNumber": { + "description": "Metadata label - disc number" }, - "@dialogDownloadAllMessage": { - "description": "Body of the Download All confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDuration": "Süre", + "@trackDuration": { + "description": "Metadata label - track length" }, - "homeSupports": "Desteklenen linkler: Şarkı, Albüm, Çalma Listesi, Sanatçı linkleri", - "@downloadedAlbumDeleteSelected": { - "description": "Button - delete selected tracks" + "trackAudioQuality": "Ses kalitesi", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" }, - "@recentShowAllDownloads": { - "description": "Button label to unhide hidden downloads in recent access" + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" + "trackReleaseDate": "Yayın tarihi", + "@trackReleaseDate": { + "description": "Metadata label - release date" }, - "collectionPlaylistEmptyTitle": "Çalma listesi boş", - "@collectionPlaylistEmptyTitle": { - "description": "Playlist empty state title" + "trackGenre": "Tür", + "@trackGenre": { + "description": "Metadata label - music genre" }, - "libraryFilterSortLatest": "En sonuncu", - "@libraryFilterSortLatest": { - "description": "Sort option - newest first" + "trackLabel": "Etiket / Müzik Şirketi", + "@trackLabel": { + "description": "Metadata label - record label" }, - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" + "trackCopyright": "Telif Hakkı", + "@trackCopyright": { + "description": "Metadata label - copyright information" }, - "@selectionSelected": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } + "trackDownloaded": "İndirildi", + "@trackDownloaded": { + "description": "Metadata label - download date" }, - "@tracksCount": { - "description": "Track count display", + "trackCopyLyrics": "Şarkı sözlerini kopyala", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsSource": "Kaynak: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", "placeholders": { - "count": { - "type": "int" + "source": { + "type": "String" } } }, - "@optionsCheckUpdates": { - "description": "Auto update check toggle" - }, - "@qualityHiResFlacMaxSubtitle": { - "description": "Technical spec for hi-res max" - }, - "actionStop": "Stop", - "@actionStop": { - "description": "Generic action - stop" - }, - "@selectionSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "folderOrganizationNoneSubtitle": "Her şey indirilen dosyasına kaydedilecek", - "@folderOrganizationNoneSubtitle": { - "description": "Subtitle for no organization option" - }, - "@updateDownloading": { - "description": "Update status - downloading" + "trackLyricsNotAvailable": "Bu parça için şarkı sözü mevcut değil", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" }, - "artistAlbums": "Albümler", - "@artistAlbums": { - "description": "Section header for artist albums" + "trackLyricsNotInFile": "Bu dosyada şarkı sözü bulunamadı", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" }, - "trackConvertDitherTriangular": "TPDF", - "@trackConvertDitherTriangular": { - "description": "Lossless conversion triangular probability density function dither option" + "trackFetchOnlineLyrics": "İnternetten Getir", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", - "@nowPlayingShuffleLibraryFailed": { - "description": "Snackbar when shuffling the library fails", - "placeholders": { - "error": { - "type": "String" - } - } + "trackLyricsTimeout": "İstek zaman aşımına uğradı. Daha sonra tekrar deneyin.", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" }, - "@setupIcloudNotSupported": { - "description": "Error when user selects iCloud Drive on iOS" + "trackLyricsLoadFailed": "Şarkı sözleri yüklenemedi", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" }, - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + "trackEmbedLyrics": "Şarkı Sözlerini Göm", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" }, - "@extensionsProviderPrioritySection": { - "description": "Section header - provider priority" + "trackLyricsEmbedded": "Şarkı sözleri başarıyla gömüldü", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" }, - "@libraryShowDuplicateIndicatorSubtitle": { - "description": "Subtitle for duplicate indicator toggle" + "trackInstrumental": "Enstrümantal parça", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" }, - "sectionDuplicates": "Yinelenenler", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" + "trackCopiedToClipboard": "Panoya kopyalandı", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" }, - "@backupTitle": { - "description": "App bar title for the backup and restore page" + "trackDeleteConfirmTitle": "Cihazdan kaldırılsın mı?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" }, - "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", - "cacheSectionMaintenance": "Bakım", - "@cacheSectionMaintenance": { - "description": "Section header for cleanup actions" + "trackDeleteConfirmMessage": "Bu işlem, indirilen dosyayı kalıcı olarak silecek ve geçmişinizden kaldıracaktır.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" }, - "@editMetadataFieldGenre": { - "description": "Chip label for genre field in auto-fill selector" + "dateToday": "Bugün", + "@dateToday": { + "description": "Relative date - today" }, - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" + "dateYesterday": "Dün", + "@dateYesterday": { + "description": "Relative date - yesterday" }, - "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", - "@selectionBatchConvertConfirmMessage": { - "description": "Confirmation dialog message for batch conversion", + "dateDaysAgo": "{count} gün önce", + "@dateDaysAgo": { + "description": "Relative date - days ago", "placeholders": { "count": { "type": "int" - }, - "format": { - "type": "String" - }, - "bitrate": { - "type": "String" } } }, - "@selectionTapPlaylistsToSelect": { - "description": "Hint shown in playlist selection mode" - }, - "qualityHiResFlacMaxSubtitle": "24-bit / 192kHz'e kadar", - "snackbarRemovedTracksFromLoved": "Sevilen albümünden {count} parça kaldırıldı", - "@snackbarRemovedTracksFromLoved": { - "description": "Snackbar after removing multiple tracks from Loved folder", + "dateWeeksAgo": "{count} hafta önce", + "@dateWeeksAgo": { + "description": "Relative date - weeks ago", "placeholders": { "count": { "type": "int" } } }, - "folderOrganizationByArtistAlbum": "Sanatçı/Albüm", - "@folderOrganizationByArtistAlbum": { - "description": "Folder option - nested folders" - }, - "snackbarCannotOpenFile": "Dosya açılamadı: {error}", - "@snackbarCannotOpenFile": { - "description": "Snackbar - file open error", + "dateMonthsAgo": "{count} ay önce", + "@dateMonthsAgo": { + "description": "Relative date - months ago", "placeholders": { - "error": { - "type": "String" + "count": { + "type": "int" } } }, - "@optionsDetailedLoggingOff": { - "description": "Status when logging disabled" - }, - "@setupStorageDescription": { - "description": "Explanation for storage permission" - }, - "audioAnalysisCodec": "Codec", - "@regionCountryFR": { - "description": "Country name for SongLink region picker" - }, - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" + "storeFilterAll": "Tümü", + "@storeFilterAll": { + "description": "Repo filter - all extensions" }, - "@libraryClearConfirmMessage": { - "description": "Dialog message for clear confirmation" + "storeFilterMetadata": "Meta Veri", + "@storeFilterMetadata": { + "description": "Repo filter - metadata providers" }, - "trackLyricsNotAvailable": "Bu parça için şarkı sözü mevcut değil", - "@trackLyricsNotAvailable": { - "description": "Message when lyrics not found" + "storeFilterDownload": "İndir", + "@storeFilterDownload": { + "description": "Repo filter - download providers" }, "storeFilterUtility": "Araç", "@storeFilterUtility": { "description": "Repo filter - utility extensions" }, - "collectionAddedToPlaylist": "\"{playlistName}\"e eklendi", - "@collectionAddedToPlaylist": { - "description": "Snackbar after adding track to playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } + "storeFilterLyrics": "Şarkı Sözleri", + "@storeFilterLyrics": { + "description": "Repo filter - lyrics providers" }, - "cacheClearConfirmTitle": "Clear cache?", - "@cacheClearConfirmTitle": { - "description": "Dialog title before clearing one cache category" + "storeFilterIntegration": "Entegrasyon", + "@storeFilterIntegration": { + "description": "Repo filter - integrations" }, - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" + "storeClearFilters": "Filtreleri temizle", + "@storeClearFilters": { + "description": "Button to clear all filters" }, - "@aboutMobileDeveloper": { - "description": "Role description for mobile dev" + "storeAddRepoTitle": "Uzantı Deposu Ekle", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" }, - "albumFolderYearAlbum": "[Yıl] Albüm", - "@albumFolderYearAlbum": { - "description": "Album folder option with year" + "storeAddRepoDescription": "Uzantılara göz atmak ve yüklemek için registry.json dosyası içeren bir GitHub depo URL'si girin.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" }, - "cacheTitle": "Depolama & Önbellek", - "@extensionPostProcessing": { - "description": "Capability - post-download processing" + "storeRepoUrlLabel": "Depo URL'si", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" }, - "extensionsNoMetadataProvider": "Meta veri sağlayıcısı içeren uzantı bulunamadı", - "@extensionsNoMetadataProvider": { - "description": "Empty state - no metadata providers" + "storeRepoUrlHint": "https://github.com/user/repo", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" }, - "searchSortTitleZA": "Başlık (Z-A)", - "@queueClearAllMessage": { - "description": "Clear queue confirmation" + "storeAddRepoButton": "Depo Ekle", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" }, - "audioAnalysisTitle": "Audio Quality Analysis", - "@audioAnalysisTitle": { - "description": "Title for audio analysis section" - }, - "@aboutReportIssueSubtitle": { - "description": "Subtitle for report issue" + "storeChangeRepoTooltip": "Depoyu değiştir", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" }, - "@audioAnalysisSampleRate": { - "description": "Sample rate metric label" + "storeRepoDialogTitle": "Uzantı Deposu", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" }, - "@discographySelectedCount": { - "description": "Selection count badge", - "placeholders": { - "count": { - "type": "int" - } - } + "storeRepoDialogCurrent": "Mevcut depo:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" }, - "qualityFlacLosslessSubtitle": "16-bit / 44.1kHz", - "@qualityFlacLosslessSubtitle": { - "description": "Technical spec for lossless" + "storeNewRepoUrlLabel": "Yeni Depo URL'si", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" }, - "libraryScanFinalizing": "Kütüphane sonlandırılıyor...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" + "storeLoadError": "Depo yüklenemedi", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" }, - "@trackEditMetadata": { - "description": "Menu action - edit embedded metadata" + "storeEmptyNoExtensions": "Uygun uzantı yok", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" }, - "@downloadNeteaseIncludeRomanization": { - "description": "Setting to include romanized lyrics from Netease" + "storeEmptyNoResults": "Uzantı bulunamadı", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" }, - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" + "extensionId": "Kimlik", + "@extensionId": { + "description": "Extension detail - unique ID" }, - "regionCountryDE": "Germany", - "@regionCountryDE": { - "description": "Country name for SongLink region picker" + "extensionError": "Hata", + "@extensionError": { + "description": "Extension detail - error message" }, - "optionsAutoFallback": "Diğerlerini dene", - "@optionsAutoFallback": { - "description": "Auto-retry with other services" + "extensionCapabilities": "Özellikler", + "@extensionCapabilities": { + "description": "Section header - extension features" }, - "@trackMetadataPlay": { - "description": "Action button - play track" + "extensionMetadataProvider": "Meta Veri Sağlayıcı", + "@extensionMetadataProvider": { + "description": "Capability - provides metadata" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" + "extensionDownloadProvider": "İndirme Sağlayıcı", + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" }, - "aboutMobileDeveloper": "Mobil versiyon geliştiricisi", - "@trackDownloaded": { - "description": "Metadata label - download date" + "extensionLyricsProvider": "Şarkı Sözü Sağlayıcı", + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" }, - "homeSkipAlreadyDownloaded": "Daha önce indirilmiş şarkıları atla", - "@homeSkipAlreadyDownloaded": { - "description": "Checkbox label in import dialog to skip already-downloaded songs" + "extensionUrlHandler": "URL İşleyici", + "@extensionUrlHandler": { + "description": "Capability - handles URLs" }, - "dialogUninstall": "Kaldır", - "@dialogUninstall": { - "description": "Dialog button - uninstall extension" + "extensionQualityOptions": "Kalite Seçenekleri", + "@extensionQualityOptions": { + "description": "Capability - quality selection" }, - "collectionDeletePlaylist": "Çalma listesini sil", - "@collectionDeletePlaylist": { - "description": "Action to delete playlist" + "extensionPostProcessingHooks": "Son İşlem Kancaları", + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" }, - "trackCoverOnline": "Online cover", - "@trackCoverOnline": { - "description": "Label shown when metadata autofill downloaded cover art from the internet" + "extensionPermissions": "İzinler", + "@extensionPermissions": { + "description": "Section header - required permissions" }, - "downloadTitle": "İndirme", - "@downloadTitle": { - "description": "Download settings page title" + "extensionSettings": "Ayarlar", + "@extensionSettings": { + "description": "Section header - extension settings" }, - "searchArtists": "Sanatçılar", - "@searchArtists": { - "description": "Search result category - artists" + "extensionRemoveButton": "Uzantıyı Kaldır", + "@extensionRemoveButton": { + "description": "Button to uninstall extension" }, - "extensionUrlHandler": "URL İşleyici", - "@extensionUrlHandler": { - "description": "Capability - handles URLs" + "extensionUpdated": "Güncellendi", + "@extensionUpdated": { + "description": "Extension detail - last update" }, - "@timeHoursAgo": { - "description": "Relative time - hours ago", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionMinAppVersion": "Minimum Uygulama Sürümü", + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" }, - "editMetadataAdvanced": "Gelişmiş", - "@editMetadataAdvanced": { - "description": "Expandable section label for advanced metadata fields" + "extensionCustomTrackMatching": "Özel Parça Eşleştirme", + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" }, - "@actionSelectAll": { - "description": "Action button - select all items" + "extensionPostProcessing": "Son İşlem", + "@extensionPostProcessing": { + "description": "Capability - post-download processing" }, - "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", - "@timeMinutesAgo": { - "description": "Relative time - minutes ago", + "extensionHooksAvailable": "{count} kanca kullanılabilir", + "@extensionHooksAvailable": { + "description": "Post-processing hooks count", "placeholders": { "count": { "type": "int" } } }, - "regionCountryXK": "Kosovo", - "@downloadAskQualitySubtitle": { - "description": "Subtitle for ask quality toggle" - }, - "setupLanguageSystemDefault": "Sistem Varsayılanı", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "@updateAvailable": { - "description": "Update dialog title" - }, - "cacheEntries": "{count} entries", - "@cacheEntries": { - "description": "Track cache entry count", + "extensionPatternsCount": "{count} desen", + "@extensionPatternsCount": { + "description": "URL patterns count", "placeholders": { "count": { "type": "int" } } }, - "@notifLibraryScanExcluded": { - "description": "Library scan complete suffix - excluded track count", + "extensionStrategy": "Strateji: {strategy}", + "@extensionStrategy": { + "description": "Track matching strategy name", "placeholders": { - "count": { - "type": "int" + "strategy": { + "type": "String" } } }, - "extensionsMetadataPrioritySubtitle": "Arama ve meta veri kaynağı sırasını ayarla", - "@extensionsMetadataPrioritySubtitle": { - "description": "Subtitle for metadata priority" + "extensionsProviderPrioritySection": "Sağlayıcı Önceliği", + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" }, - "downloadedAlbumSelectToDelete": "Silinecek parçaları seçin", - "@downloadedAlbumSelectToDelete": { - "description": "Placeholder when nothing selected" + "extensionsInstalledSection": "Kurulu uzantılar", + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" }, - "@dialogClearHistoryTitle": { - "description": "Dialog title - clear download history" + "extensionsNoExtensions": "Hiçbir eklenti kurulmamış", + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" }, - "tutorialSettingsTip1": "İndirme konumunu ve klasör düzenini değiştirin", - "@tutorialSettingsTip1": { - "description": "Tutorial settings tip 1" + "extensionsNoExtensionsSubtitle": "Yeni sağlayıcılar eklemek için .spotiflac-ext dosyalarını yükleyin", + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, + "extensionsInstallButton": "Uzantı Yükle", + "@extensionsInstallButton": { + "description": "Button to install extension from file" }, + "extensionsInfoTip": "Uzantılar yeni meta veri ve indirme sağlayıcıları ekleyebilir. Yalnızca güvenilir kaynaklardan gelen uzantıları yükleyin.", + "@extensionsInfoTip": { + "description": "Security warning about extensions" + }, + "extensionsInstalledSuccess": "Uzantı başarıyla yüklendi", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "allFilesAccessDisabledSubtitle": "Yalnızca medya klasörleriyle sınırlı", - "@allFilesAccessDisabledSubtitle": { - "description": "Subtitle when all files access is disabled" - }, - "@appearanceHistoryViewList": { - "description": "List layout option" + "extensionsInstalledCount": "{count} uzantı başarıyla yüklendi", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } }, - "@notifAlreadyInLibraryCount": { - "description": "Notification title when track is already in library, with count", + "extensionsInstallPartialSuccess": "Yüklenen uzantı sayısı: {installed} / {attempted}", + "@extensionsInstallPartialSuccess": { + "description": "Message when installing multiple extensions partially succeeds", "placeholders": { - "completed": { - "type": "int" + "installed": { + "type": "int", + "description": "Number of successfully installed extensions" }, - "total": { - "type": "int" + "attempted": { + "type": "int", + "description": "Number of selected extensions" } } }, - "@libraryFilterAll": { - "description": "Filter chip - show all library items" - }, - "settingsDownload": "İndirme", - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" + "extensionsDownloadPriority": "İndirme Önceliği", + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" }, - "@libraryFilterSort": { - "description": "Filter section - sort order" + "extensionsDownloadPrioritySubtitle": "İndirme servisi sırasını ayarla", + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" }, - "metadataProvidersSubtitle": "Drag to set search and metadata source order", - "@extensionPermissions": { - "description": "Section header - required permissions" + "extensionsFallbackTitle": "Yedekleme Uzantıları", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "selectionSelectToDelete": "Silinecek parçaları seçin", - "@libraryExternalPlayerSubtitle": { - "description": "Subtitle for external player option" + "extensionsFallbackSubtitle": "Hangi yüklü indirme uzantılarının yedekleme olarak kullanılabileceğini seçin", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" }, - "extensionVerificationOpenBrowser": "Open browser", - "@extensionVerificationOpenBrowser": { - "description": "Button to open the extension verification URL in a browser" + "extensionsNoDownloadProvider": "İndirme sağlayıcısı olan uzantı yok", + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" }, - "@trackConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless-to-lossless conversion", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionsMetadataPriority": "Meta Veri Önceliği", + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" }, - "@snackbarAddedTracksToQueue": { - "description": "Snackbar - multiple tracks added to queue", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsMetadataPrioritySubtitle": "Arama ve meta veri kaynağı sırasını ayarla", + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" }, - "@backupContentsWishlist": { - "description": "Backup contents row for wishlist tracks count", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsNoMetadataProvider": "Meta veri sağlayıcısı içeren uzantı bulunamadı", + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" }, - "@cacheCleanupUnusedSubtitle": { - "description": "Subtitle for cleanup unused data action" + "extensionsSearchProvider": "Arama Sağlayıcısı", + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" }, - "trackLabel": "Etiket / Müzik Şirketi", - "@trackLabel": { - "description": "Metadata label - record label" + "extensionsNoCustomSearch": "Özel arama içeren uzantı bulunamadı", + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" }, - "@collectionAddedToLoved": { - "description": "Snackbar after adding track to loved folder", - "placeholders": { - "trackName": { - "type": "String" - } - } + "extensionsSearchProviderDescription": "Parça aramak için hangi servisin kullanılacağını seçin", + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" }, - "regionCountryGB": "United Kingdom", - "dialogCancel": "İptal", - "@dialogCancel": { - "description": "Dialog button - cancel action" + "extensionsCustomSearch": "Özel arama", + "@extensionsCustomSearch": { + "description": "Label for custom search provider" }, - "@folderOrganizationByArtistAlbumSubtitle": { - "description": "Subtitle for nested folder option" + "extensionsErrorLoading": "Uzantı yüklenirken hata oluştu", + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" }, - "@notifAllDownloadsComplete": { - "description": "Notification title when all downloads finish successfully" + "qualityFlacLossless": "FLAC Kayıpsız", + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" }, - "setupEnableNotifications": "Bildirimleri Etkinleştir", - "@setupEnableNotifications": { - "description": "Button to enable notifications" + "qualityFlacLosslessSubtitle": "16-bit / 44.1kHz", + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" }, - "@notifFinalizingTrack": { - "description": "Notification title while finalizing (embedding metadata) a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "qualityHiResFlac": "Hi-Res FLAC", + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" }, - "@downloadLossy320FormatDesc": { - "description": "Description in the lossy format picker" + "qualityHiResFlacSubtitle": "24-bit / 96kHz'e kadar", + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" }, - "filenameFormat": "Dosya adı formatı", - "@filenameFormat": { - "description": "Setting title - filename pattern" + "qualityHiResFlacMax": "Hi-Res FLAC Max", + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" }, - "historySearchHint": "Arama geçmişi...", - "@historySearchHint": { - "description": "Search bar placeholder in history" + "qualityHiResFlacMaxSubtitle": "24-bit / 192kHz'e kadar", + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" }, - "@tutorialReadyMessage": { - "description": "Tutorial completion message" + "downloadLossy320": "Kayıplı 320kbps", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" }, - "cacheTempDirectoryDesc": "İndirmelerden ve ses dönüştürme işlemlerinden kaynaklanan geçici dosyalar.", - "@cacheTempDirectoryDesc": { - "description": "Description of what temporary directory contains" + "downloadLossyFormat": "Kayıplı Format", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" }, - "@trackSaveLyrics": { - "description": "Menu action - save lyrics as .lrc file" + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" }, - "@notifDownloadsFinished": { - "description": "Notification title when queue finishes with some failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" }, - "@historyFilterAlbums": { - "description": "Filter chip - show albums only" + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" }, - "trackEmbedLyrics": "Şarkı Sözlerini Göm", - "@trackEmbedLyrics": { - "description": "Action - embed lyrics into audio file" + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" }, - "@downloadPrimaryArtistOnlyOff": { - "description": "Status label when primary-artist-only folder naming is disabled" + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" }, - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" }, - "snackbarHistoryCleared": "Geçmiş temizlendi", - "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", - "@artistPopular": { - "description": "Section header for popular/top tracks" + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" }, - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" }, - "extensionLyricsProvider": "Şarkı Sözü Sağlayıcı", - "@extensionLyricsProvider": { - "description": "Capability - provides lyrics" + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" }, - "historyFilterAll": "Tümü", - "@historyFilterAll": { - "description": "Filter chip - show all items" + "downloadLossy320Format": "Kayıplı 320kbps Formatı", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" }, - "tutorialSearchTitle": "Müzik Bulma", - "@lyricsModeExternal": { - "description": "Lyrics mode option - separate LRC file" + "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "@downloadLossy320FormatDesc": { + "description": "Description in the lossy format picker" }, - "@actionDismiss": { - "description": "Generic action - dismiss" + "downloadLossyMp3": "MP3 320kbps", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" }, - "trackOpenInSpotify": "Spotify'da aç", - "@trackOpenInSpotify": { - "description": "Action - open track in Spotify app" + "downloadLossyMp3Subtitle": "En iyi uyumluluk, parça başına ~10 Mb", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" }, - "@libraryClear": { - "description": "Button to clear all library entries" + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "discographyFailedToFetch": "Bazı albümler getirilemedi", - "@filenameShowAdvancedTagsDescription": { - "description": "Description for advanced filename tag toggle" + "downloadLossyAacSubtitle": "En iyi mobil uyumluluk, M4A konteyner", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" }, - "@storeUpdate": { - "description": "Update available button" + "downloadLossyOpus256": "Opus 256kbps", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" }, - "collectionPlaylistTracks": "{count, plural, =1{1 parça} other{{count} parça}}", - "@collectionPlaylistTracks": { - "description": "Track count label for custom playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadLossyOpus256Subtitle": "En iyi Opus kalitesi, parça başına ~8 Mb", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" }, - "optionsPrimaryProviderSubtitle": "Parça veya albüm adına göre arama yapmak için kullanılan hizmet", - "@optionsPrimaryProviderSubtitle": { - "description": "Subtitle for primary provider" + "downloadLossyOpus128": "Opus 128kbps", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" }, - "@downloadEmbedLyricsDisabled": { - "description": "Subtitle when lyrics embedding is blocked by metadata toggle" + "downloadLossyOpus128Subtitle": "En küçük boyut, parça başına ~4 Mb", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" }, - "@librarySourceLocal": { - "description": "Badge for tracks from local library scan" + "downloadAskBeforeDownload": "İndirmeden Önce Sor", + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" }, - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" + "downloadDirectory": "İndirme Dizini", + "@downloadDirectory": { + "description": "Setting - download folder" }, - "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is off" + "downloadSeparateSinglesFolder": "Ayrı Single Klasörü", + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" }, - "queueDownloadingCount": "Downloading ({count})", - "@queueDownloadingCount": { - "description": "Header for active downloads section with count", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAlbumFolderStructure": "Albüm Klasör Yapısı", + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" }, - "extensionVerificationBrowserInApp": "In-app", - "trackAudioQuality": "Ses kalitesi", - "@trackAudioQuality": { - "description": "Metadata label - audio quality" - }, - "libraryRemovedMissingFiles": "Kütüphaneden {count} adet eksik dosya kaldırıldı", - "@libraryRemovedMissingFiles": { - "description": "Snackbar after cleanup", - "placeholders": { - "count": { - "type": "int" - } - } + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" }, - "collectionFavoriteArtistsEmptyTitle": "Henüz favori sanatçım yok", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" + "downloadUseAlbumArtistForFolders": "Klasörler için Albüm Sanatçısı'nı kullan", + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "@errorInvalidFolderSelected": { - "description": "Error when the selected folder is invalid" + "downloadUsePrimaryArtistOnly": "Klasörler için yalnızca birincil sanatçıyı kullan", + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" }, - "@searchSortArtistZA": { - "description": "Sort option - artist descending" + "downloadUsePrimaryArtistOnlyEnabled": "Düet sanatçıları klasör adından kaldırılır (örn. Justin Bieber, Quavo → Justin Bieber)", + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" }, - "snackbarAddedTracksToLoved": "Sevilen'e {count} parça eklendi", - "@snackbarAddedTracksToLoved": { - "description": "Snackbar after adding multiple tracks to Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadUsePrimaryArtistOnlyDisabled": "Klasör adı için tam sanatçı dizesi kullanılır", + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" }, - "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", - "@cancelDownloadContent": { - "description": "Dialog body when confirming cancellation of an active download", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadSelectQuality": "Kalite seçin", + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" }, - "settingsCacheSubtitle": "Boyutu görüntüle ve önbelleğe alınmış verileri temizle", - "@settingsCacheSubtitle": { - "description": "Subtitle for cache management menu" + "downloadFrom": "İndirme Kaynağı", + "@downloadFrom": { + "description": "Label - download source" }, - "notifLibraryScanCompleteBody": "{count} tracks indexed", - "@cacheSizeWithFiles": { - "description": "Cache size and file count", - "placeholders": { - "size": { - "type": "String" - }, - "count": { - "type": "int" - } - } + "appearanceAmoledDark": "AMOLED Koyu", + "@appearanceAmoledDark": { + "description": "Theme option - pure black" }, - "@downloadAskBeforeDownload": { - "description": "Setting - show quality picker" + "appearanceAmoledDarkSubtitle": "Saf siyah arka plan", + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" }, - "@extensionHealthDegraded": { - "description": "Extension service health status - degraded" + "appearanceHeroAnimations": "Hero animations", + "@appearanceHeroAnimations": { + "description": "Toggle for shared-element (Hero) transitions" }, - "@sectionPerformance": { - "description": "Settings section header" + "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", + "@appearanceHeroAnimationsSubtitle": { + "description": "Subtitle for the Hero animations toggle" }, - "@trackCoverCurrent": { - "description": "Label for the currently embedded cover preview" + "appearanceForceBlur": "Always use blur effects", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" }, - "discographySelectAlbums": "Albümleri Seç...", - "@discographySelectAlbums": { - "description": "Option - manually select albums to download" + "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" }, - "aboutAppDescription": "Müzik meta verilerini arayın, uzantıları yönetin ve kütüphanenizi düzenleyin.", - "@aboutAppDescription": { - "description": "App description in header card" + "queueClearAll": "Tümünü Temizle", + "@queueClearAll": { + "description": "Button - clear all queue items" }, - "extensionCustomTrackMatching": "Özel Parça Eşleştirme", - "@extensionCustomTrackMatching": { - "description": "Capability - custom track matching algorithm" + "queueClearAllMessage": "Tüm indirmeleri temizlemek istediğinizden emin misiniz?", + "@queueClearAllMessage": { + "description": "Clear queue confirmation" }, - "@editMetadataSelectNone": { - "description": "Button to clear selected fields for auto-fill" + "settingsAutoExportFailed": "Başarısız indirmeleri otomatik dışa aktar", + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" }, - "@trackPlayNext": { - "description": "Menu action to play a track as the next queue item" + "settingsAutoExportFailedSubtitle": "Başarısız indirmeleri otomatik olarak TXT dosyasına kaydet", + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" }, - "extensionCapabilities": "Özellikler", - "@extensionCapabilities": { - "description": "Section header - extension features" + "settingsDownloadNetwork": "İndirme Ağı", + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" }, - "@downloadSelectServiceToEnable": { - "description": "Subtitle when quality picker is disabled due to extension service" + "settingsDownloadNetworkAny": "WiFi + Mobil Veri", + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" }, - "logIssueRateLimitedDescription": "Too many requests to the service", - "@logIssueRateLimitedDescription": { - "description": "Diagnostic badge description for rate limiting" + "settingsDownloadNetworkWifiOnly": "Yalnızca WiFi", + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" }, - "@actionResume": { - "description": "Action button - resume download" + "settingsDownloadNetworkSubtitle": "İndirmeler için hangi ağın kullanılacağını seçin. Yalnızca WiFi olarak ayarlandığında, mobil veriye geçildiğinde indirmeler duraklatılır.", + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" }, - "@updateDownloadInstall": { - "description": "Update button - download and install" + "settingsConcurrentDownloads": "Concurrent downloads", + "@settingsConcurrentDownloads": { + "description": "Setting title - how many tracks download at the same time" }, - "downloadLossy320Format": "Kayıplı 320kbps Formatı", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" + "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", + "@settingsConcurrentDownloadsSubtitle": { + "description": "Subtitle explaining the concurrent downloads picker" }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@trackCopyright": { - "description": "Metadata label - copyright information" + "concurrentDownloadsOne": "1 track at a time", + "@concurrentDownloadsOne": { + "description": "Concurrent downloads option - sequential" }, - "@snackbarExtensionInstalled": { - "description": "Snackbar - extension installed successfully", + "concurrentDownloadsCount": "Up to {count} tracks at once", + "@concurrentDownloadsCount": { + "description": "Concurrent downloads option - parallel", "placeholders": { - "extensionName": { - "type": "String" + "count": { + "type": "int" } } }, - "@regionCountryJP": { - "description": "Country name for SongLink region picker" + "albumFolderArtistAlbum": "Sanatçı / Albüm", + "@albumFolderArtistAlbum": { + "description": "Album folder option" }, - "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", - "@trackReEnrichOnlineSubtitle": { - "description": "Subtitle for re-enrich metadata action for local items" + "albumFolderArtistAlbumSubtitle": "Albümler/Sanatçı Adı/Albüm Adı/", + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" }, - "nowPlayingNothingPlaying": "Nothing is playing", - "@nowPlayingNothingPlaying": { - "description": "Empty state when no track is currently playing" + "albumFolderArtistYearAlbum": "Sanatçı / [Yıl] Albüm", + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", - "@tutorialDownloadDesc": { - "description": "Tutorial download page description" + "albumFolderArtistYearAlbumSubtitle": "Albümler/Sanatçı Adı/[2005] Albüm Adı/", + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" }, - "@appearanceTitle": { - "description": "Appearance settings page title" + "albumFolderAlbumOnly": "Yalnızca Albüm", + "@albumFolderAlbumOnly": { + "description": "Album folder option" }, - "@backupExportSectionDescription": { - "description": "Description of what a backup contains" + "albumFolderAlbumOnlySubtitle": "Albümler/Albüm Adı/", + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" }, - "@downloadLossyOpus128": { - "description": "Lossy format option - Opus 128kbps" + "albumFolderYearAlbum": "[Yıl] Albüm", + "@albumFolderYearAlbum": { + "description": "Album folder option with year" }, - "@logFilterSection": { - "description": "Filter section title" + "albumFolderYearAlbumSubtitle": "Albümler/[2005] Albüm Adı/", + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" }, - "trackReEnrichSuccess": "Metadata re-enriched successfully", - "@trackReEnrichSuccess": { - "description": "Snackbar after successful re-enrichment" + "albumFolderArtistAlbumSingles": "Sanatçı / Albüm + Singlelar", + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", - "@backupContentsHistory": { - "description": "Backup contents row for history count", + "albumFolderArtistAlbumSinglesSubtitle": "Sanatçı/Albüm/ ve Sanatçı/Singlelar/", + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistAlbumFlat": "Sanatçı / Albüm (Singlelar alt klasörsüz)", + "@albumFolderArtistAlbumFlat": { + "description": "Album folder option with singles directly in artist folder" + }, + "albumFolderArtistAlbumFlatSubtitle": "Sanatçı/Albüm/ ve Sanatçı/şarkı.flac", + "@albumFolderArtistAlbumFlatSubtitle": { + "description": "Folder structure example for flat singles" + }, + "downloadedAlbumDeleteSelected": "Seçilenleri Sil", + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" + }, + "downloadedAlbumDeleteMessage": "Bu albümden {count} {count, plural, =1{parça} other{parça}} parça silinsin mi?\n\nBu işlem dosyaları depolama alanından da kalıcı olarak silecektir.", + "@downloadedAlbumDeleteMessage": { + "description": "Delete confirmation with count", "placeholders": { "count": { "type": "int" } } }, - "snackbarAddedToQueue": "\"{trackName}\" kuyruğa eklendi", - "@snackbarAddedToQueue": { - "description": "Snackbar - track added to download queue", + "downloadedAlbumSelectedCount": "{count} seçildi", + "@downloadedAlbumSelectedCount": { + "description": "Selection count indicator", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "libraryAutoScanOnOpen": "Her uygulama açılışında", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "audioAnalysisChannels": "Channels", - "@audioAnalysisChannels": { - "description": "Channels metric label" + "downloadedAlbumTapToSelect": "Seçmek için parçalara dokunun", + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" }, - "appearanceHistoryViewList": "Liste", - "updateDownloadInstall": "İndir & Yükle", - "@libraryShowDuplicateIndicator": { - "description": "Toggle for duplicate indicator in search" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "searchSortTitleAZ": "Başlık (A-Z)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", - "@collectionRemovedFromLoved": { - "description": "Snackbar after removing track from loved folder", + "downloadedAlbumDeleteCount": "{count} {count, plural, =1{parçayı} other{parçayı}} sil", + "@downloadedAlbumDeleteCount": { + "description": "Delete button text with count", "placeholders": { - "trackName": { - "type": "String" + "count": { + "type": "int" } } }, - "sectionAudioQuality": "Ses Kalitesi", - "@sectionAudioQuality": { - "description": "Settings section header" + "downloadedAlbumSelectToDelete": "Silinecek parçaları seçin", + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" }, - "trackConvertSuccess": "{format} formatına başarıyla dönüştürüldü", - "@trackConvertSuccess": { - "description": "Snackbar after successful conversion", + "downloadedAlbumDiscHeader": "Disk {discNumber}", + "@downloadedAlbumDiscHeader": { + "description": "Header for disc separator in multi-disc albums", "placeholders": { - "format": { - "type": "String" + "discNumber": { + "type": "int", + "example": "1" } } }, - "dialogUninstallExtensionMessage": "{extensionName} eklentisini kaldırmak istediğine emin misin?", - "@dialogUninstallExtensionMessage": { - "description": "Dialog message - uninstall specific extension", + "recentTypeArtist": "Sanatçı", + "@recentTypeArtist": { + "description": "Recent access item type - artist" + }, + "recentTypeAlbum": "Albüm", + "@recentTypeAlbum": { + "description": "Recent access item type - album" + }, + "recentTypeSong": "Şarkı", + "@recentTypeSong": { + "description": "Recent access item type - song/track" + }, + "recentTypePlaylist": "Çalma Listesi", + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" + }, + "recentEmpty": "Henüz son kullanılan öğe yok", + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, + "recentShowAllDownloads": "Tüm İndirmeleri Göster", + "@recentShowAllDownloads": { + "description": "Button label to unhide hidden downloads in recent access" + }, + "recentPlaylistInfo": "Çalma Listesi: {name}", + "@recentPlaylistInfo": { + "description": "Snackbar message when tapping playlist in recent access", "placeholders": { - "extensionName": { - "type": "String" + "name": { + "type": "String", + "description": "Playlist name" } } }, - "downloadNativeWorkerSubtitle": "Uzantı indirmeleri için Android arka plan hizmeti", - "@downloadNativeWorkerSubtitle": { - "description": "Setting subtitle for Android native download worker" + "discographyDownload": "Diskografiyi İndir", + "@discographyDownload": { + "description": "Button - download artist discography" }, - "storeUpdate": "Güncelle", - "libraryFilterMetadataMissingAny": "Herhangi bir meta veri eksik", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" + "discographyDownloadAll": "Tümünü İndir", + "@discographyDownloadAll": { + "description": "Option - download entire discography" }, - "@selectionBatchConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless batch conversion", + "discographyDownloadAllSubtitle": "{albumCount} yayından {count} parça", + "@discographyDownloadAllSubtitle": { + "description": "Subtitle showing total tracks and albums", "placeholders": { "count": { "type": "int" }, - "format": { - "type": "String" - }, - "quality": { - "type": "String" + "albumCount": { + "type": "int" } } }, - "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", - "@editMetadataAutoFillDesc": { - "description": "Description for the auto-fill section" - }, - "@lyricsProviderExtensionDesc": { - "description": "Generic description for extension-based lyrics providers" - }, - "downloadSongLinkRegion": "SongLink Region", - "@downloadSongLinkRegion": { - "description": "Setting for SongLink region used during fallback resolution" - }, - "shareSheetNoExtensions": "No other compatible services", - "@shareSheetNoExtensions": { - "description": "Empty state when no extensions can be searched for cross-service links" + "discographyAlbumsOnly": "Yalnızca Albümler", + "@discographyAlbumsOnly": { + "description": "Option - download only albums" }, - "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", - "@queueFlacConfirmMessage": { - "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", + "discographyAlbumsOnlySubtitle": "{albumCount} albümden {count} parça", + "@discographyAlbumsOnlySubtitle": { + "description": "Subtitle showing album tracks count", "placeholders": { "count": { "type": "int" + }, + "albumCount": { + "type": "int" } } }, - "tooltipAddToPlaylist": "Çalma listesine ekle", - "@tooltipAddToPlaylist": { - "description": "Tooltip for the Add to Playlist button" + "discographySinglesOnly": "Yalnızca Single'lar ve EP'ler", + "@discographySinglesOnly": { + "description": "Option - download only singles" }, - "@snackbarAddedToQueueGeneric": { - "description": "Snackbar when a track is added to the playback queue without naming it" + "discographySinglesOnlySubtitle": "{albumCount} tekliden {count} parça", + "@discographySinglesOnlySubtitle": { + "description": "Subtitle showing singles tracks count", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } }, - "@tutorialSettingsTip2": { - "description": "Tutorial settings tip 2" + "discographySelectAlbums": "Albümleri Seç...", + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" }, - "extensionPermissions": "İzinler", - "releaseTypeSingle": "Single", - "aboutTelegramChannelSubtitle": "Duyurular ve güncellemeler", - "@aboutTelegramChannelSubtitle": { - "description": "Subtitle for Telegram channel" + "discographySelectAlbumsSubtitle": "Belirli albümleri veya single'ları seçin", + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" }, - "@dialogDisableAndClear": { - "description": "Confirmation action to disable download history and clear existing entries" + "discographyFetchingTracks": "Parçalar getiriliyor...", + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" }, - "@homeSearchHintProvider": { - "description": "Placeholder for the main search field when a provider is selected", + "discographyFetchingAlbum": "{total} üzerinden {current} getiriliyor...", + "@discographyFetchingAlbum": { + "description": "Progress - fetching specific album", "placeholders": { - "providerName": { - "type": "String" + "current": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "metadataProvidersTitle": "Metadata Provider Priority", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "trackAddToQueue": "Add to queue", - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" + "discographySelectedCount": "{count} seçildi", + "@discographySelectedCount": { + "description": "Selection count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@editMetadataSelectEmpty": { - "description": "Button to select only fields that are currently empty" + "discographyDownloadSelected": "Seçilenleri İndir", + "@discographyDownloadSelected": { + "description": "Button - download selected albums" }, - "collectionAlreadyInPlaylist": "Zaten \"{playlistName}\" içinde", - "discographyAlbumsOnlySubtitle": "{albumCount} albümden {count} parça", - "@discographyAlbumsOnlySubtitle": { - "description": "Subtitle showing album tracks count", + "discographyAddedToQueue": "{count} parça kuyruğa eklendi", + "@discographyAddedToQueue": { + "description": "Snackbar - tracks added from discography", "placeholders": { "count": { "type": "int" + } + } + }, + "discographySkippedDownloaded": "{added} eklendi, {skipped} zaten indirilmiş", + "@discographySkippedDownloaded": { + "description": "Snackbar - with skipped tracks count", + "placeholders": { + "added": { + "type": "int" }, - "albumCount": { + "skipped": { "type": "int" } } }, - "setupNotificationEnable": "Bildirimleri Etkinleştir", - "@setupNotificationEnable": { - "description": "Button to enable notifications" - }, - "settingsAppearanceSubtitle": "Tema, renkler, görünüm", - "@settingsAppearanceSubtitle": { - "description": "Appearance settings description" + "discographyNoAlbums": "Kullanılabilir albüm yok", + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" }, - "@notifUpdateFailedBody": { - "description": "Notification body when app update download fails" + "discographyFailedToFetch": "Bazı albümler getirilemedi", + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" }, - "@aboutOriginalCreator": { - "description": "Role description for original creator" + "sectionStorageAccess": "Depolama Erişimi", + "@sectionStorageAccess": { + "description": "Section header for storage access settings" }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", - "@libraryBuiltInPreviewPlayer": { - "description": "Setting option to use the built-in preview player" + "allFilesAccess": "Tüm Dosyalara Erişim", + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "tooltipPlay": "Oynat", - "@tooltipPlay": { - "description": "Tooltip - play button" + "allFilesAccessEnabledSubtitle": "Herhangi bir klasöre yazabilir", + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" }, - "@safMigrationMessage2": { - "description": "Second paragraph of SAF migration dialog" + "allFilesAccessDisabledSubtitle": "Yalnızca medya klasörleriyle sınırlı", + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" }, - "@extensionsSearchProvider": { - "description": "Setting - search provider selection" + "allFilesAccessDescription": "Özel klasörlere kaydederken yazma hatalarıyla karşılaşırsanız bunu etkinleştirin. Android 13 ve üzeri, varsayılan olarak belirli dizinlere erişimi kısıtlar.", + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" }, - "libraryAboutDescription": "İndirme işlemi sırasında mevcut müzik koleksiyonunuzu tarayarak yinelenen dosyaları tespit eder. FLAC, M4A, MP3, Opus ve OGG formatlarını destekler. Varsa, meta veriler dosya etiketlerinden okunur.", - "@libraryAboutDescription": { - "description": "Description of local library feature" - }, - "downloadAskBeforeDownload": "İndirmeden Önce Sor", - "nowPlayingNoMetadata": "No metadata available", - "@nowPlayingNoMetadata": { - "description": "Empty state when track metadata cannot be loaded" - }, - "trackInstrumental": "Enstrümantal parça", - "@trackInstrumental": { - "description": "Message when track is instrumental (no lyrics)" + "allFilesAccessDeniedMessage": "İzin reddedildi. Lütfen sistem ayarlarından 'Tüm dosyalara erişim' iznini manuel olarak etkinleştirin.", + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" }, - "@collectionWishlistEmptyTitle": { - "description": "Wishlist empty state title" + "allFilesAccessDisabledMessage": "Tüm Dosyalara Erişim devre dışı bırakıldı. Uygulama kısıtlı depolama erişimi kullanacak.", + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", - "downloadDeduplication": "Skip Duplicate Downloads", - "libraryFilterSortOldest": "En eski", - "@libraryFilterSortOldest": { - "description": "Sort option - oldest first" + "settingsLocalLibrary": "Yerel Kitaplık", + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" }, - "setupSkip": "Şimdilik atla", - "@setupSkip": { - "description": "Skip current step button" + "settingsLocalLibrarySubtitle": "Müziği tara ve kopyaları tespit et", + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" }, - "@setupFolderDescription": { - "description": "Explanation for folder selection" + "settingsCache": "Depolama ve Önbellek", + "@settingsCache": { + "description": "Settings menu item - cache management" }, - "@settingsLogsSubtitle": { - "description": "Logs settings description" + "settingsCacheSubtitle": "Boyutu görüntüle ve önbelleğe alınmış verileri temizle", + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" }, - "storeNewRepoUrlLabel": "Yeni Depo URL'si", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" + "libraryTitle": "Yerel Kitaplık", + "@libraryTitle": { + "description": "Library settings page title" }, - "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", - "@cacheClearConfirmMessage": { - "description": "Dialog message before clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } + "libraryScanSettings": "Tarama Ayarları", + "@libraryScanSettings": { + "description": "Section header for scan settings" }, - "trackMetadataPlay": "Oynat", + "libraryEnableLocalLibrary": "Yerel Kitaplığı Etkinleştir", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, - "optionsUpdateChannel": "Güncelleme Kanalı", - "@optionsUpdateChannel": { - "description": "Stable vs preview releases" + "libraryEnableLocalLibrarySubtitle": "Mevcut müziğinizi tarayın ve takip edin", + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" }, - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist folder is disabled" + "libraryFolder": "Kitaplık Klasörü", + "@libraryFolder": { + "description": "Folder selection setting" }, - "@extensionRefreshStatus": { - "description": "Tooltip for refreshing extension service health status" + "libraryFolderHint": "Klasör seçmek için dokunun", + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", - "@backupRestoreRestartHint": { - "description": "Hint shown after restoring that an app restart is recommended" + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" }, - "@snackbarExtensionInstalledEnable": { - "description": "Snackbar after installing an extension from the repo tab", + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", "placeholders": { - "extensionName": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { "type": "String" } } }, - "settingsAutoExportFailedSubtitle": "Başarısız indirmeleri otomatik olarak TXT dosyasına kaydet", - "@settingsAutoExportFailedSubtitle": { - "description": "Subtitle for auto-export setting" - }, - "searchSortArtistAZ": "Sanatçı (A-Z)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" }, - "editMetadataFieldAlbumArtist": "Album Artist", - "@editMetadataFieldAlbumArtist": { - "description": "Chip label for album artist field in auto-fill selector" + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" }, - "@queueEmptyHistory": { - "description": "Empty state title when download history is empty" + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" }, - "@dialogDisableHistoryMessage": { - "description": "Confirmation dialog message shown before disabling download history" + "libraryShowDuplicateIndicator": "Kopya Belirtecini Göster", + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" }, - "queueFlacNoReliableMatches": "No reliable online matches found for the selection", - "@queueFlacNoReliableMatches": { - "description": "Snackbar when no safe FLAC redownload matches were found" + "libraryShowDuplicateIndicatorSubtitle": "Mevcut parçalar aranırken göster", + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" }, - "trackOpenInDeezer": "Deezer'da aç", - "@trackOpenInDeezer": { - "description": "Action - open track in Deezer app" + "libraryAutoScan": "Otomatik Tarama", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" }, - "setupChooseFromFilesSubtitle": "iCloud veya başka konum seç", - "@setupChooseFromFilesSubtitle": { - "description": "Subtitle for file picker" + "libraryAutoScanSubtitle": "Kitaplığınızı yeni dosyalar için otomatik olarak tarayın", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" }, - "artistMonthlyListeners": "Aylık {count} dinleyici", - "@artistMonthlyListeners": { - "description": "Monthly listener count display", - "placeholders": { - "count": { - "type": "String", - "description": "Formatted listener count" - } - } + "libraryAutoScanOff": "Kapalı", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" }, - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" + "libraryAutoScanOnOpen": "Her uygulama açılışında", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" }, - "cacheSectionStorage": "Önbelleğe alınmış veriler", - "@cacheSectionStorage": { - "description": "Section header for cache entries" + "libraryAutoScanDaily": "Günlük", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" }, + "libraryAutoScanWeekly": "Haftalık", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "tutorialDownloadCompletedSemantics": "İndirme tamamlandı", - "@tutorialDownloadCompletedSemantics": { - "description": "Accessibility label for completed download state in tutorial demo" + "libraryActions": "Eylemler", + "@libraryActions": { + "description": "Section header for library actions" }, - "@logNoLogsYet": { - "description": "Empty state title" + "libraryScan": "Kitaplığı Tara", + "@libraryScan": { + "description": "Button to start library scan" }, - "@selectionDeletePlaylistsCount": { - "description": "Button label for deleting multiple selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryScanSubtitle": "Ses dosyaları için tara", + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" }, - "downloadSeparateSinglesEnabled": "Single şarkılar ve EP'ler ayrı bir klasöre kaydedildi", - "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is on" + "libraryScanSelectFolderFirst": "Önce bir klasör seçin", + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" }, - "setupAppDocumentsFolder": "Uygulama Belgeler Klasörü", - "@setupAppDocumentsFolder": { - "description": "iOS documents folder option" + "libraryCleanupMissingFiles": "Eksik Dosyaları Temizle", + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" }, - "storeLoadError": "Depo yüklenemedi", - "settingsDownloadNetwork": "İndirme Ağı", - "metadataSaveFailedStorage": "Failed to write metadata back to storage", - "@logAutoScrollOff": { - "description": "Tooltip when auto-scroll is disabled on the log screen" + "libraryCleanupMissingFilesSubtitle": "Eski dosya kalıntılarını temizleyin", + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" }, - "@trackConvertFormat": { - "description": "Menu item - convert audio format" + "libraryClear": "Kitaplığı temizle", + "@libraryClear": { + "description": "Button to clear all library entries" }, - "optionsArtistTagModeJoined": "Birleşik tek değer", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" + "libraryClearSubtitle": "Taranan tüm parçaları sil", + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" }, - "@dateYesterday": { - "description": "Relative date - yesterday" + "libraryClearConfirmTitle": "Kütüphaneyi temizle", + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" }, - "@settingsExtensionsSubtitle": { - "description": "Extensions settings description" + "libraryClearConfirmMessage": "Bu işlem, kitaplığınızdaki tüm taranmış parçaları siler. Asıl müzik dosyalarınız silinmez.", + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" }, - "searchSortArtistZA": "Sanatçı (Z-A)", - "@extensionSettings": { - "description": "Section header - extension settings" + "libraryAbout": "Yerel Kütüphane Hakkında", + "@libraryAbout": { + "description": "Section header for about info" }, - "@extensionOauthConnectHint": { - "description": "Hint for an OAuth login link field before connecting Spotify" + "libraryAboutDescription": "İndirme işlemi sırasında mevcut müzik koleksiyonunuzu tarayarak yinelenen dosyaları tespit eder. FLAC, M4A, MP3, Opus ve OGG formatlarını destekler. Varsa, meta veriler dosya etiketlerinden okunur.", + "@libraryAboutDescription": { + "description": "Description of local library feature" }, - "@notifUpdateReady": { - "description": "Notification title when app update download is complete" + "libraryTracksUnit": "{count, plural, =1{parça} other{parçalar}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@regionCountryMX": { - "description": "Country name for SongLink region picker" - }, - "@nowPlayingOpenInExternalPlayer": { - "description": "Menu item to open the current track in an external player" - }, - "trackConvertDithering": "Dithering", - "@trackConvertDithering": { - "description": "Section label for lossless conversion dithering options" - }, - "settingsDownloadSubtitle": "Hizmet, kalite, yedekleme", - "@settingsDownloadSubtitle": { - "description": "Download settings description" + "libraryFilesUnit": "{count, plural, =1{dosya} other{dosyalar}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } }, "libraryLastScanned": "Son tarama tarihi: {time}", "@libraryLastScanned": { @@ -2678,620 +2667,723 @@ } } }, - "setupIosEmptyFolderWarning": "iOS'un sınırlaması: Boş klasörler seçilemiyor. İçinde en az bir dosya bulunan bir klasör seçin.", - "@setupIosEmptyFolderWarning": { - "description": "iOS folder selection warning" + "libraryLastScannedNever": "Asla", + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" }, - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" + "libraryScanning": "Scanning...", + "@libraryScanning": { + "description": "Status during scan" }, - "@snackbarFailedToInstallNamed": { - "description": "Snackbar when extension install fails in the repo tab", + "libraryScanFinalizing": "Kütüphane sonlandırılıyor...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, + "libraryScanProgress": "{total} dosyanın {progress}%'si", + "@libraryScanProgress": { + "description": "Scan progress display", "placeholders": { - "extensionName": { + "progress": { "type": "String" + }, + "total": { + "type": "int" } } }, - "@collectionAddedTracksToPlaylist": { - "description": "Snackbar after adding multiple tracks to a playlist", + "libraryInLibrary": "Kütüphanede", + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, + "libraryRemovedMissingFiles": "Kütüphaneden {count} adet eksik dosya kaldırıldı", + "@libraryRemovedMissingFiles": { + "description": "Snackbar after cleanup", "placeholders": { "count": { "type": "int" - }, - "playlistName": { - "type": "String" } } }, - "updateNew": "Yeni", - "@updateNew": { - "description": "Label for new version" + "libraryCleared": "Kütüphane temizlendi", + "@libraryCleared": { + "description": "Snackbar after clearing library" }, - "settingsExtensionsSubtitle": "İndirme sağlayıcılarını yönet", - "@albumFolderArtistAlbumSinglesSubtitle": { - "description": "Folder structure example" + "libraryStorageAccessRequired": "Depolama Alanına Erişim Gereklidir", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" }, - "trackReEnrichSelectAll": "Tümünü Seç", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" + "libraryStorageAccessMessage": "SpotiFLAC, müzik kitaplığınızı tarayabilmek için depolama alanına erişime ihtiyaç duyar. Lütfen ayarlar bölümünden izin verin.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" }, - "@extensionsUninstall": { - "description": "Uninstall extension button" + "libraryFolderNotExist": "Seçilen klasör mevcut değil", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" }, - "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when track artist is used for folder names" + "librarySourceDownloaded": "Downloaded", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" }, - "@logIssueNetworkErrorLabel": { - "description": "Diagnostic badge label for generic network errors" + "librarySourceLocal": "Yerel", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" }, - "albumFolderArtistYearAlbumSubtitle": "Albümler/Sanatçı Adı/[2005] Albüm Adı/", - "@albumFolderArtistYearAlbumSubtitle": { - "description": "Folder structure example" + "libraryFilterAll": "All", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" }, - "itemCount": "{count} {count, plural, =1{item} other{items}}", - "@itemCount": { - "description": "Generic item count label", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterDownloaded": "İndirildi", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" }, - "discographyFetchingTracks": "Parçalar getiriliyor...", - "@discographyFetchingTracks": { - "description": "Progress - fetching album tracks" + "libraryFilterLocal": "Yerel", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" }, - "@libraryFolder": { - "description": "Folder selection setting" + "libraryFilterTitle": "Filtreler", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" }, - "queueEmptyAlbums": "No album downloads", - "@queueEmptyAlbums": { - "description": "Empty state title when no album downloads exist" + "libraryFilterReset": "Reset", + "@libraryFilterReset": { + "description": "Reset all filters button" }, - "@metadataProviderPriorityDescription": { - "description": "Metadata priority page description" + "libraryFilterApply": "Uygula", + "@libraryFilterApply": { + "description": "Apply filters button" }, - "@extensionVerificationHelpTitleManual": { - "description": "Dialog title when automatic browser launch for verification fails" + "libraryFilterSource": "Kaynak", + "@libraryFilterSource": { + "description": "Filter section - source type" }, - "extensionError": "Hata", - "@extensionError": { - "description": "Extension detail - error message" + "libraryFilterQuality": "Kalite", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" }, - "@trackLyricsLoadFailed": { - "description": "Message when lyrics loading fails" + "libraryFilterQualityHiRes": "Hi-Res (24bit)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" }, - "@downloadedAlbumDeleteCount": { - "description": "Delete button text with count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterQualityCD": "CD (16bit)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" }, - "@extensionsNoHomeFeedExtensions": { - "description": "Extensions page - shown when no installed extension has home feed" + "libraryFilterQualityLossy": "Kayıplı", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" }, - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterFormat": "Format", + "@libraryFilterFormat": { + "description": "Filter section - file format" }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", - "@backupContentsArtists": { - "description": "Backup contents row for favorite artists count", - "placeholders": { - "count": { - "type": "int" - } - } + "libraryFilterMetadata": "Meta veriler", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" }, - "@trackRemoveFromDevice": { - "description": "Action - delete downloaded file" + "libraryFilterMetadataComplete": "Tam meta veriler", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" }, - "lyricsProvidersEnabledSection": "Enabled ({count})", - "@lyricsProvidersEnabledSection": { - "description": "Section header for enabled providers", + "libraryFilterMetadataMissingAny": "Herhangi bir meta veri eksik", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Kayıp yıl", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Eksik tür", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Kayıp albüm sanatçısı", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, + "libraryFilterSort": "Sırala", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "En sonuncu", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "En eski", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" + }, + "libraryFilterSortAlbumAsc": "Albüm (A-Z)", + "@libraryFilterSortAlbumAsc": { + "description": "Sort option - album ascending" + }, + "libraryFilterSortAlbumDesc": "Albüm (Z-A)", + "@libraryFilterSortAlbumDesc": { + "description": "Sort option - album descending" + }, + "libraryFilterSortGenreAsc": "Tür (A-Z)", + "@libraryFilterSortGenreAsc": { + "description": "Sort option - genre ascending" + }, + "libraryFilterSortGenreDesc": "Tür (Z-A)", + "@libraryFilterSortGenreDesc": { + "description": "Sort option - genre descending" + }, + "timeJustNow": "Şu anda", + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, + "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", + "@timeMinutesAgo": { + "description": "Relative time - minutes ago", "placeholders": { "count": { "type": "int" } } }, - "@cueSplitTitle": { - "description": "Title for CUE split bottom sheet" - }, - "@downloadedAlbumSelectedCount": { - "description": "Selection count indicator", + "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", + "@timeHoursAgo": { + "description": "Relative time - hours ago", "placeholders": { "count": { "type": "int" } } }, - "@trackOptionRemoveFromWishlist": { - "description": "Bottom sheet action label - remove track from wishlist" + "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" }, - "notifDownloadingTrack": "Downloading {trackName}", - "@notifDownloadingTrack": { - "description": "Notification title while downloading a track", - "placeholders": { - "trackName": { - "type": "String" - } - } + "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" }, - "@discographySkippedDownloaded": { - "description": "Snackbar - with skipped tracks count", - "placeholders": { - "added": { - "type": "int" - }, - "skipped": { - "type": "int" - } - } - }, - "@tutorialSettingsTip3": { - "description": "Tutorial settings tip 3" - }, - "@announcementUnableToOpenLink": { - "description": "Snackbar shown when an announcement CTA link cannot be opened" - }, - "trackReleaseDate": "Yayın tarihi", - "discographySelectedCount": "{count} seçildi", - "collectionArtistCount": "{count, plural, =1{1 sanatçı} other{{count} sanatçı}}", - "logIssueNetworkErrorLabel": "NETWORK ERROR", - "updateStartingDownload": "İndirme başlıyor...", - "@updateStartingDownload": { - "description": "Update status - initializing" - }, - "trackDiscNumber": "Disk numarası", - "@trackDiscNumber": { - "description": "Metadata label - disc number" + "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" }, - "optionsUsingExtension": "Kullanılan eklenti: {extensionName}", - "@optionsUsingExtension": { - "description": "Shows active extension name", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" }, - "dialogDisableHistoryTitle": "Turn off download history?", "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, - "@collectionPlaylistEmptySubtitle": { - "description": "Playlist empty state subtitle" - }, - "@tutorialSearchHint": { - "description": "Placeholder shown in the tutorial search demo" - }, - "cleanupOrphanedDownloadsNone": "Hiçbir yetim kayıt bulunamadı", - "discographySkippedDownloaded": "{added} eklendi, {skipped} zaten indirilmiş", - "@updateDontRemind": { - "description": "Update button - skip this version" - }, - "@snackbarLoadingCueSheet": { - "description": "Snackbar while loading a CUE sheet file" + "tutorialSearchTitle": "Müzik Bulma", + "@tutorialSearchTitle": { + "description": "Tutorial search page title" }, - "@dialogUninstallExtension": { - "description": "Dialog title - uninstall extension" + "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "@tutorialSearchDesc": { + "description": "Tutorial search page description" }, - "lyricsProvidersTitle": "Lyrics Provider Priority", - "@dialogRemove": { - "description": "Dialog button - remove item" + "tutorialDownloadTitle": "Müzik İndirme", + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" }, - "snackbarError": "Hata: {error}", - "@snackbarError": { - "description": "Generic error snackbar with error detail", - "placeholders": { - "error": { - "type": "String" - } - } + "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" }, - "@sectionApp": { - "description": "Settings section header" + "tutorialLibraryTitle": "Kitaplığınız", + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" }, - "@libraryPlayback": { - "description": "Section header for playback settings in library settings" + "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" }, - "@downloadPrimaryArtistOnlyOn": { - "description": "Status label when primary-artist-only folder naming is enabled" + "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" }, - "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", - "previewStop": "Stop preview", - "@previewStop": { - "description": "Tooltip for the button that stops the playing track preview snippet" + "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" }, - "trackConvertConfirmMessageLossless": "{sourceFormat} formatından {targetFormat} formatına dönüştürmek ister misiniz? (Kayıpsız — kalite kaybı yok)\n\nDönüştürme işleminden sonra orijinal dosya silinecektir.", - "discographyAlbumsOnly": "Yalnızca Albümler", - "@discographyAlbumsOnly": { - "description": "Option - download only albums" + "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" }, - "@editMetadataFieldCopyright": { - "description": "Chip label for copyright field in auto-fill selector" + "tutorialExtensionsTitle": "Uzantılar", + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" }, - "extensionsFallbackSubtitle": "Hangi yüklü indirme uzantılarının yedekleme olarak kullanılabileceğini seçin", - "aboutSocial": "Sosyal ağlar", - "@aboutSocial": { - "description": "Section for social links" + "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" }, - "audioAnalysisNyquist": "Nyquist", - "trackCoverSelected": "Seçili kapak", - "@trackCoverSelected": { - "description": "Label for the newly selected cover preview" + "tutorialExtensionsTip1": "Faydalı uzantıları keşfetmek için Depo sekmesine göz atın", + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" }, - "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" + "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" }, - "homeEmptyTitle": "Henüz arama sağlayıcısı yok", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" + "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" }, - "@extensionHealthUnknown": { - "description": "Extension service health status - unknown" + "tutorialSettingsTitle": "Deneyiminizi Özelleştirin", + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" }, - "storeInstalled": "Kuruldu", - "@storeInstalled": { - "description": "Already installed badge" + "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" }, - "trackReplayGainSuccess": "ReplayGain tags added", - "@trackReplayGainSuccess": { - "description": "Snackbar message after ReplayGain tags written for a single track" + "tutorialSettingsTip1": "İndirme konumunu ve klasör düzenini değiştirin", + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" }, - "libraryShowDuplicateIndicatorSubtitle": "Mevcut parçalar aranırken göster", - "@collectionPlaylistRenamed": { - "description": "Snackbar after renaming playlist" + "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" }, - "@trackConvertResamplerSoxr": { - "description": "Lossless conversion SoX resampler option" + "tutorialSettingsTip3": "Uygulama temasını ve görünümünü özelleştirin", + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" }, - "@dialogUnsavedChanges": { - "description": "Dialog message - unsaved changes" + "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "@tutorialReadyMessage": { + "description": "Tutorial completion message" }, - "dialogDownload": "İndir", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" + "libraryForceFullScan": "Tam Taramayı Zorla", + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" }, - "trackLyricsLoadFailed": "Şarkı sözleri yüklenemedi", - "@backupContentsTitle": { - "description": "Header above the list summarizing what the backup contains" + "libraryForceFullScanSubtitle": "Önbelleği yok sayarak tüm dosyaları yeniden tarayın", + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" }, - "@safMigrationTitle": { - "description": "Title of SAF migration dialog" + "cleanupOrphanedDownloads": "Yetim kalmış indirmeleri temizle", + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" }, - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" + "cleanupOrphanedDownloadsSubtitle": "Artık mevcut olmayan dosyalar için geçmiş kayıtlarını kaldırın", + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" }, - "setupPermissionDeniedMessage": "İzin reddedildi. Devam etmek için lütfen bütün izinleri verin.", - "@setupPermissionDeniedMessage": { - "description": "Error when permission denied" + "cleanupOrphanedDownloadsResult": "Geçmişten {count} adet yetim kayıt kaldırıldı", + "@cleanupOrphanedDownloadsResult": { + "description": "Snackbar after orphan cleanup", + "placeholders": { + "count": { + "type": "int" + } + } }, - "settingsDownloadNetworkWifiOnly": "Yalnızca WiFi", - "@settingsDownloadNetworkWifiOnly": { - "description": "Network option - only use WiFi" + "cleanupOrphanedDownloadsNone": "Hiçbir yetim kayıt bulunamadı", + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" }, - "@backupIncludeSecrets": { - "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" + "cacheTitle": "Depolama & Önbellek", + "@cacheTitle": { + "description": "Cache management page title" }, - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" + "cacheSummaryTitle": "Önbellek genel bakışı", + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" }, - "@extensionHealthServiceUnknown": { - "description": "Tooltip for unknown extension service health" + "cacheSummarySubtitle": "Önbelleği temizlemek, indirilen müzik dosyalarını silmeyecektir.", + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" }, - "snackbarExtensionUpdated": "{extensionName} güncellendi.", - "@snackbarExtensionUpdated": { - "description": "Snackbar - extension updated successfully", + "cacheEstimatedTotal": "Estimated cache usage: {size}", + "@cacheEstimatedTotal": { + "description": "Total cache size shown in summary", "placeholders": { - "extensionName": { + "size": { "type": "String" } } }, - "homeEmptySubtitle": "Devam etmek için bir eklenti yükleyin.", - "@settingsTitle": { - "description": "Settings screen title" + "cacheSectionStorage": "Önbelleğe alınmış veriler", + "@cacheSectionStorage": { + "description": "Section header for cache entries" }, - "@libraryFilterMetadataIncorrectIsrcFormat": { - "description": "Filter option - items with an invalid ISRC format" + "cacheSectionMaintenance": "Bakım", + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" }, - "@notifLibraryScanComplete": { - "description": "Notification title when library scan finishes" + "cacheAppDirectory": "Uygulama önbellek dizini", + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" }, - "@logIssueIspBlockingLabel": { - "description": "Diagnostic badge label when ISP blocking is detected" + "cacheAppDirectoryDesc": "HTTP yanıtları, WebView verileri ve diğer geçici uygulama verileri.", + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" }, - "tutorialDownloadTitle": "Müzik İndirme", - "@tutorialDownloadTitle": { - "description": "Tutorial download page title" - }, - "unknownTitle": "Unknown title", - "@unknownTitle": { - "description": "Fallback track title when metadata is missing" - }, - "navLibrary": "Kitaplığın", - "@navLibrary": { - "description": "Bottom navigation - Library tab" - }, - "@snackbarAlreadyDownloaded": { - "description": "Snackbar - track already exists", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "editMetadataSelectAll": "All", - "@editMetadataSelectAll": { - "description": "Button to select all fields for auto-fill" - }, - "storeEmptyNoExtensions": "Uygun uzantı yok", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" - }, - "optionsUpdateChannelWarning": "Önizleme sürümleri hatalar veya tamamlanmamış özellikler içerebilir", - "@optionsUpdateChannelWarning": { - "description": "Warning about preview channel" + "cacheTempDirectory": "Geçici dizin", + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" }, - "@collectionPlaylistNameHint": { - "description": "Hint text for playlist name input" + "cacheTempDirectoryDesc": "İndirmelerden ve ses dönüştürme işlemlerinden kaynaklanan geçici dosyalar.", + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" }, - "notifLibraryScanComplete": "Library scan complete", - "editMetadataFieldIsrc": "ISRC", - "@editMetadataFieldIsrc": { - "description": "Chip label for ISRC field in auto-fill selector" + "cacheCoverImage": "Kapak resmi önbelleği", + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" }, - "@libraryFolderHint": { - "description": "Placeholder when no folder selected" + "cacheCoverImageDesc": "Albüm ve şarkı kapak resimleri indirildi. Görüntülendikten sonra tekrar indirilecektir.", + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" }, - "homeSearchHintDefault": "Paste supported URL or search...", - "@homeSearchHintDefault": { - "description": "Default placeholder for the main search field on Home" + "cacheLibraryCover": "Kütüphane kapağı önbelleği", + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" }, - "extensionsNoExtensionsSubtitle": "Yeni sağlayıcılar eklemek için .spotiflac-ext dosyalarını yükleyin", - "@extensionsNoExtensionsSubtitle": { - "description": "Empty state subtitle" + "cacheLibraryCoverDesc": "Kapak resmi yerel müzik dosyalarından çıkarıldı. Bir sonraki taramada yeniden çıkarılacaktır.", + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" }, - "@extensionEnterValue": { - "description": "Hint for editing an extension setting value" + "libraryPlaybackNormalization": "Volume normalization", + "@libraryPlaybackNormalization": { + "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, - "backupRestoreConfirmTitle": "Restore this backup?", - "@backupRestoreConfirmTitle": { - "description": "Confirmation dialog title before restoring a backup" + "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", + "@libraryPlaybackNormalizationSubtitle": { + "description": "Subtitle explaining playback volume normalization" }, - "@libraryScanSelectFolderFirst": { - "description": "Message when trying to scan without folder" + "cacheAudioAnalysis": "Audio analysis cache", + "@cacheAudioAnalysis": { + "description": "Cache item title for saved audio analysis results" }, - "@qualityHiResFlac": { - "description": "Quality option - high resolution FLAC" + "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", + "@cacheAudioAnalysisDesc": { + "description": "Description of what audio analysis cache contains" }, - "aboutSpecialThanks": "Özel teşekkür", - "@aboutSpecialThanks": { - "description": "Section for special thanks" + "cacheExploreFeed": "Besleme önbelleğini keşfedin", + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" }, - "storeInstall": "Kur", - "@storeInstall": { - "description": "Install extension button" + "cacheExploreFeedDesc": "Sekme içeriğini keşfedin (yeni çıkanlar, trendler). Bir sonraki ziyaretinizde yenilenecektir.", + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" }, - "@collectionWishlistEmptySubtitle": { - "description": "Wishlist empty state subtitle" + "cacheTrackLookup": "İzleme arama önbelleği", + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" }, - "historyFilterAlbums": "Albümler", - "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", - "@extensionCustomUrlHandlingSubtitle": { - "description": "Extension detail subtitle for custom URL handling" + "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" }, - "filenameShowAdvancedTagsDescription": "Parça numarası tamamlama ve tarih desenleri için biçimlendirilmiş etiketleri etkinleştir", - "@aboutReportIssue": { - "description": "Link to report bugs" + "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" }, - "@folderOrganizationByPlaylist": { - "description": "Folder option - playlist folders" + "cacheNoData": "No cached data", + "@cacheNoData": { + "description": "Label when cache category has no data" }, - "@dateWeeksAgo": { - "description": "Relative date - weeks ago", + "cacheSizeWithFiles": "{size} in {count} files", + "@cacheSizeWithFiles": { + "description": "Cache size and file count", "placeholders": { + "size": { + "type": "String" + }, "count": { "type": "int" } } }, - "logEntriesFiltered": "Kayıtlar ({count} filtrelendi)", - "@logEntriesFiltered": { - "description": "Log count with filter active", + "cacheSizeOnly": "{size}", + "@cacheSizeOnly": { + "description": "Cache size only", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheEntries": "{count} entries", + "@cacheEntries": { + "description": "Track cache entry count", "placeholders": { "count": { "type": "int" } } }, - "@lyricsModeDescription": { - "description": "Lyrics mode picker description" - }, - "@setupAppDocumentsFolderSubtitle": { - "description": "Subtitle for documents folder" - }, - "storeAddRepoButton": "Depo Ekle", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "@collectionLovedEmptyTitle": { - "description": "Loved empty state title" - }, - "aboutReportIssue": "Sorun bildir", - "snackbarFailedToWriteStorage": "Depolama alanına geri yazma işlemi başarısız oldu", - "@snackbarFailedToWriteStorage": { - "description": "Snackbar when writing metadata back to file fails" - }, - "errorInvalidFolderSelected": "Invalid folder selected", - "allFilesAccessDisabledMessage": "Tüm Dosyalara Erişim devre dışı bırakıldı. Uygulama kısıtlı depolama erişimi kullanacak.", - "@allFilesAccessDisabledMessage": { - "description": "Snackbar message when user disables all files access" - }, - "downloadMusixmatchLanguageCode": "Language code", - "@downloadMusixmatchLanguageCode": { - "description": "Label for Musixmatch language input field" - }, - "dialogUnsavedChanges": "Kaydedilmeyen değişiklikler mevcut. Bu değişiklikleri iptal etmek istiyor musunuz?", - "setupChooseFromFiles": "Dosyalar'dan Seç", - "@setupChooseFromFiles": { - "description": "iOS file picker option" - }, - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", - "@backupRestoreConfirmButton": { - "description": "Confirm button to proceed with restore" - }, - "@queueEmptyAlbumsSubtitle": { - "description": "Empty state subtitle for album downloads" - }, - "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", - "@collectionRemovedFromWishlist": { - "description": "Snackbar after removing track from wishlist", + "cacheClearSuccess": "Cleared: {target}", + "@cacheClearSuccess": { + "description": "Snackbar after clearing selected cache", "placeholders": { - "trackName": { + "target": { "type": "String" } } }, - "extensionsInstalledSuccess": "Uzantı başarıyla yüklendi", - "progressReadingCsv": "CSV okunuyor...", - "@progressReadingCsv": { - "description": "Progress indicator - parsing CSV file" + "cacheClearConfirmTitle": "Clear cache?", + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" }, - "artistReleases": "Sürümler", - "@artistReleases": { - "description": "Section header for all artist releases" + "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", + "@cacheClearConfirmMessage": { + "description": "Dialog message before clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } }, - "extensionVerificationBrowserTitle": "Verification browser", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" + "cacheClearAllConfirmTitle": "Clear all cache?", + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" }, - "optionsArtistTagModeJoinedSubtitle": "Maksimum oynatıcı uyumluluğu için 'Sanatçı A, Sanatçı B' şeklinde tek bir SANATÇI değeri yazın.", - "downloadLossy320": "Kayıplı 320kbps", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" + "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" }, - "queueFlacAction": "Queue FLAC", - "@queueFlacAction": { - "description": "Action/button label for queueing FLAC redownloads for local tracks" + "cacheClearAll": "Clear all cache", + "@cacheClearAll": { + "description": "Button label to clear all caches" }, - "@setupDownloadLocationIosMessage": { - "description": "iOS-specific folder info" + "cacheCleanupUnused": "Cleanup unused data", + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" }, - "trackConvertOriginal": "Original", - "sectionLyricsProviderOptions": "Provider Options", - "nowPlayingTitle": "Now Playing", - "@nowPlayingTitle": { - "description": "Title for the now playing screen" + "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" }, - "@extensionHealthChecksConfigured": { - "description": "Extension service health check count", + "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", + "@cacheCleanupResult": { + "description": "Snackbar after unused data cleanup", "placeholders": { - "count": { + "downloadCount": { + "type": "int" + }, + "libraryCount": { "type": "int" } } }, - "@cacheClearAll": { - "description": "Button label to clear all caches" - }, - "a11yDeselectTrack": "Deselect track", - "@a11yDeselectTrack": { - "description": "Accessibility label for deselecting a track" + "cacheRefreshStats": "Refresh stats", + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" }, - "@lyricsProvidersInfoText": { - "description": "Info tip on lyrics provider priority page" + "trackSaveCoverArt": "Save Cover Art", + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" }, - "queueEmptyHistory": "No download history", - "dialogClear": "Temizle", - "@dialogClear": { - "description": "Dialog button - clear items" + "trackSaveLyrics": "Save Lyrics (.lrc)", + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" }, - "allFilesAccessDescription": "Özel klasörlere kaydederken yazma hatalarıyla karşılaşırsanız bunu etkinleştirin. Android 13 ve üzeri, varsayılan olarak belirli dizinlere erişimi kısıtlar.", - "@allFilesAccessDescription": { - "description": "Description explaining when to enable all files access" + "trackSaveLyricsProgress": "Saving lyrics...", + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" }, - "trackConvertConfirmTitle": "Dönüştürmeyi Onayla", - "storeCategoryLyrics": "Lyrics", - "@storeCategoryLyrics": { - "description": "Store extension category - lyrics" + "trackReEnrich": "Re-enrich", + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" }, - "@lyricsProvidersDescription": { - "description": "Description on the lyrics provider priority page" + "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" }, - "tooltipLoveAll": "Love All", - "downloadDirectory": "İndirme Dizini", - "@downloadDirectory": { - "description": "Setting - download folder" + "trackReEnrichFieldCover": "Cover Art", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" }, - "@tutorialExtensionsTip2": { - "description": "Tutorial extensions tip 2" + "trackReEnrichFieldLyrics": "Lyrics", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" }, - "libraryFolder": "Kitaplık Klasörü", - "@metadataProviderPriorityTitle": { - "description": "Metadata priority page title" + "trackReEnrichFieldBasicTags": "Album, Album Artist", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "@cleanupOrphanedDownloadsResult": { - "description": "Snackbar after orphan cleanup", + "trackReEnrichFieldTrackInfo": "Track & Disc Number", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Tümünü Seç", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" + }, + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" + }, + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" + }, + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" + }, + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" + }, + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", "placeholders": { - "count": { + "changeCount": { + "type": "int" + }, + "trackCount": { "type": "int" } } }, - "cacheExploreFeedDesc": "Sekme içeriğini keşfedin (yeni çıkanlar, trendler). Bir sonraki ziyaretinizde yenilenecektir.", - "@cacheExploreFeedDesc": { - "description": "Description of what explore feed cache contains" + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" }, - "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", - "@a11yOpenTrackByArtist": { - "description": "Accessibility label for opening a track item", + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, + "trackEditMetadata": "Edit Metadata", + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" + }, + "trackCoverSaved": "Cover art saved to {fileName}", + "@trackCoverSaved": { + "description": "Snackbar after cover art saved", "placeholders": { - "trackName": { + "fileName": { "type": "String" - }, - "artistName": { + } + } + }, + "trackCoverNoSource": "No cover art source available", + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" + }, + "trackLyricsSaved": "Lyrics saved to {fileName}", + "@trackLyricsSaved": { + "description": "Snackbar after lyrics saved", + "placeholders": { + "fileName": { "type": "String" } } }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", - "libraryFilterSortAlbumDesc": "Albüm (Z-A)", - "@libraryFilterSortAlbumDesc": { - "description": "Sort option - album descending" + "trackReEnrichProgress": "Re-enriching metadata...", + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" }, - "trackConvertBitrate": "Bitrate", - "@trackConvertBitrate": { - "description": "Label for bitrate selection" + "trackReEnrichSearching": "Searching metadata online...", + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" }, - "audioAnalysisFileSize": "Size", - "extensionHealthServiceOnline": "Service online", - "@extensionHealthServiceOnline": { - "description": "Tooltip for online extension service" + "trackReEnrichSuccess": "Metadata re-enriched successfully", + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" }, - "logEntries": "Kayıtlar ({count})", - "@logEntries": { - "description": "Total log count", + "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + }, + "queueFlacAction": "Queue FLAC", + "@queueFlacAction": { + "description": "Action/button label for queueing FLAC redownloads for local tracks" + }, + "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", + "@queueFlacConfirmMessage": { + "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { "count": { "type": "int" } } }, + "queueFlacNoReliableMatches": "No reliable online matches found for the selection", + "@queueFlacNoReliableMatches": { + "description": "Snackbar when no safe FLAC redownload matches were found" + }, + "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", + "@queueFlacQueuedWithSkipped": { + "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "placeholders": { + "addedCount": { + "type": "int" + }, + "skippedCount": { + "type": "int" + } + } + }, + "trackSaveFailed": "Failed: {error}", + "@trackSaveFailed": { + "description": "Snackbar when save operation fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "trackConvertFormat": "Convert Format", + "@trackConvertFormat": { + "description": "Menu item - convert audio format" + }, + "trackConvertTitle": "Convert Audio", + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" + }, + "trackConvertTargetFormat": "Target Format", + "@trackConvertTargetFormat": { + "description": "Label for format selection" + }, + "trackConvertBitrate": "Bitrate", + "@trackConvertBitrate": { + "description": "Label for bitrate selection" + }, + "trackConvertKeepOriginal": "Keep original file", + "@trackConvertKeepOriginal": { + "description": "Toggle to preserve the source file during conversion" + }, + "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", + "@trackConvertKeepOriginalDescription": { + "description": "Description for preserving the source file during conversion" + }, + "trackConvertConfirmTitle": "Dönüştürmeyi Onayla", + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" + }, "trackConvertConfirmMessage": "{sourceFormat} formatından {targetFormat} formatına {bitrate} hızında dönüştürülsün mü?\n\nDönüştürme işleminden sonra orijinal dosya silinecektir.", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", @@ -3307,1570 +3399,1522 @@ } } }, - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" + "trackConvertConfirmMessageLossless": "{sourceFormat} formatından {targetFormat} formatına dönüştürmek ister misiniz? (Kayıpsız — kalite kaybı yok)\n\nDönüştürme işleminden sonra orijinal dosya silinecektir.", + "@trackConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless-to-lossless conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "folderOrganizationByAlbum": "Albüme Göre", - "@folderOrganizationByAlbum": { - "description": "Folder option - album folders" + "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", + "@trackConvertConfirmKeepOriginal": { + "description": "Confirmation message when the source file will be preserved", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } }, - "libraryPlayback": "Playback", - "@storeFilterAll": { - "description": "Repo filter - all extensions" + "trackConvertLosslessHint": "Kayıpsız dönüştürme — kalite kaybı yok", + "@trackConvertLosslessHint": { + "description": "Hint shown when converting between lossless formats" }, - "aboutApp": "Uygulama", - "@aboutApp": { - "description": "Section for app info" + "trackConvertConverting": "Converting audio...", + "@trackConvertConverting": { + "description": "Snackbar while converting" }, - "optionsReplayGainSubtitleOff": "Devre dışı: Ses normalleştirme etiketi yok", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" - }, - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" + "trackConvertSuccess": "{format} formatına başarıyla dönüştürüldü", + "@trackConvertSuccess": { + "description": "Snackbar after successful conversion", + "placeholders": { + "format": { + "type": "String" + } + } }, - "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", - "storeFilterIntegration": "Entegrasyon", - "@storeFilterIntegration": { - "description": "Repo filter - integrations" + "trackConvertFailed": "Dönüştürme başarısız oldu", + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" }, - "@lyricsProvidersAtLeastOne": { - "description": "Snackbar when user tries to disable the last enabled provider" + "cueSplitTitle": "Bölünmüş CUE Sayfası", + "@cueSplitTitle": { + "description": "Title for CUE split bottom sheet" }, - "@appearanceHistoryViewGrid": { - "description": "Grid layout option" + "cueSplitAlbum": "Album: {album}", + "@cueSplitAlbum": { + "description": "Album name in CUE split sheet", + "placeholders": { + "album": { + "type": "String" + } + } }, - "trackDownloaded": "İndirildi", - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", - "setupDownloadLocationIosMessage": "iOS'ta indirilenler uygulamanın \"Documents\" dosyasına kaydedilir. Onlara Dosyalar uygulamasından erişebilirsiniz.", - "optionsArtistTagModeDescription": "Birden fazla sanatçının gömülü etiketlere nasıl yazılacağını seçin.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" + "cueSplitArtist": "Artist: {artist}", + "@cueSplitArtist": { + "description": "Artist name in CUE split sheet", + "placeholders": { + "artist": { + "type": "String" + } + } }, - "@queueRetryAllFailed": { - "description": "Button to retry every failed download in the queue", + "cueSplitTrackCount": "{count} parça", + "@cueSplitTrackCount": { + "description": "Number of tracks in CUE sheet", "placeholders": { "count": { "type": "int" } } }, - "@trackConvertDitherTriangularHp": { - "description": "Lossless conversion high-pass triangular dither option" - }, - "@extensionVerificationCopyLink": { - "description": "Button to copy the extension verification URL" - }, - "searchSongs": "Şarkılar", - "@searchSongs": { - "description": "Search result category - songs" - }, - "@appearanceHistoryView": { - "description": "Layout style for history" - }, - "sectionFileSettings": "Dosya Ayarları", - "@sectionFileSettings": { - "description": "Settings section header" - }, - "@cancelDownloadTitle": { - "description": "Dialog title when confirming cancellation of an active download" - }, - "@cacheLibraryCover": { - "description": "Cache item title for local library cover art images" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "dialogDelete": "Sil", - "@dialogDelete": { - "description": "Dialog button - delete item" - }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", - "@tutorialLibraryDesc": { - "description": "Tutorial library page description" + "cueSplitConfirmTitle": "Bölünmüş CUE Albümü", + "@cueSplitConfirmTitle": { + "description": "CUE split confirmation dialog title" }, - "@queueDownloadSpeedStatus": { - "description": "Queue status while downloading with speed", + "cueSplitConfirmMessage": "\"{album}\" albümünü {count} adet ayrı FLAC dosyasına bölmek ister misiniz?\n\nDosyalar aynı dizine kaydedilecektir.", + "@cueSplitConfirmMessage": { + "description": "CUE split confirmation dialog message", "placeholders": { - "speed": { + "album": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", - "@cacheCleanupResult": { - "description": "Snackbar after unused data cleanup", + "cueSplitSplitting": "CUE sayfası bölünüyor... ({current}/{total})", + "@cueSplitSplitting": { + "description": "Snackbar while splitting CUE", "placeholders": { - "downloadCount": { + "current": { "type": "int" }, - "libraryCount": { + "total": { "type": "int" } } }, - "trackConvertLosslessHint": "Kayıpsız dönüştürme — kalite kaybı yok", - "@trackConvertLosslessHint": { - "description": "Hint shown when converting between lossless formats" - }, - "collectionRenamePlaylist": "Çalma listesini yeniden adlandır", - "@collectionRenamePlaylist": { - "description": "Action to rename playlist" - }, - "@libraryFilterTitle": { - "description": "Filter bottom sheet title" - }, - "@storageModeAppFolder": { - "description": "Storage mode option - app-managed folder" - }, - "logTotalErrors": "Total errors: {count}", - "@logTotalErrors": { - "description": "Total error count in log issue analysis", + "cueSplitSuccess": "{count} parçaya başarıyla bölündü", + "@cueSplitSuccess": { + "description": "Snackbar after successful CUE split", "placeholders": { "count": { "type": "int" } } }, - "@setupStorageRequired": { - "description": "Title when storage permission needed" + "cueSplitFailed": "CUE bölme işlemi başarısız oldu", + "@cueSplitFailed": { + "description": "Snackbar when CUE split fails" }, - "@snackbarMetadataProviderSaved": { - "description": "Snackbar - metadata provider order saved" + "cueSplitNoAudioFile": "Bu CUE sayfası için ses dosyası bulunamadı", + "@cueSplitNoAudioFile": { + "description": "Error when CUE audio file is missing" }, - "@selectionBatchConvertConfirmTitle": { - "description": "Confirmation dialog title for batch conversion" + "cueSplitButton": "Parçalara Ayrılmış", + "@cueSplitButton": { + "description": "Button text to start CUE splitting" }, - "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", - "@extensionsHomeFeedAutoSubtitle": { - "description": "Extensions page - subtitle for auto home feed option" + "actionCreate": "Oluştur", + "@actionCreate": { + "description": "Generic action button - create" }, - "setupLanguageDescription": "Uygulama için tercih ettiğiniz dili seçin. Bunu daha sonra Ayarlar'dan değiştirebilirsiniz.", - "settingsBackupSubtitle": "Move your library, history and settings to a new device", - "@settingsBackupSubtitle": { - "description": "Subtitle for backup and restore settings item" + "collectionFoldersTitle": "Klasörlerim", + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" }, - "recentTypeArtist": "Sanatçı", - "@recentTypeArtist": { - "description": "Recent access item type - artist" + "collectionWishlist": "İstek listesi", + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" }, - "collectionPlaylistEmptySubtitle": "Buraya eklemek istediğiniz herhangi bir parçaya uzun süre basılı tutun +", - "artistCompilations": "Derlemeler", - "@artistCompilations": { - "description": "Section header for compilations" + "collectionLoved": "Sevilen", + "@collectionLoved": { + "description": "Custom folder for favorite tracks" }, - "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", - "@snackbarFolderPickerFailed": { - "description": "Snackbar shown when folder picker fails to open", - "placeholders": { - "error": { - "type": "String" - } - } + "collectionFavoriteArtists": "Favori Sanatçılar", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" }, - "@optionsDetailedLoggingOn": { - "description": "Status when logging enabled" + "collectionPlaylist": "Çalma listesi", + "@collectionPlaylist": { + "description": "Single playlist label" }, - "settingsSaveDownloadHistory": "Save download history", - "@settingsSaveDownloadHistory": { - "description": "Settings switch title for storing completed downloads in history" + "collectionAddToPlaylist": "Add to playlist", + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" }, - "@storeCategoryIntegration": { - "description": "Store extension category - integration" + "collectionCreatePlaylist": "Çalma listesi oluştur", + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" }, - "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", - "@a11yOpenItemCount": { - "description": "Accessibility label for opening a grouped item with count", + "collectionNoPlaylistsYet": "Henüz çalma listesi yok", + "@collectionNoPlaylistsYet": { + "description": "Empty state title when user has no playlists" + }, + "collectionPlaylistTracks": "{count, plural, =1{1 parça} other{{count} parça}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", "placeholders": { - "title": { - "type": "String" - }, "count": { "type": "int" } } }, - "trackFileInfo": "Dosya Bilgisi", - "@trackFileInfo": { - "description": "Tab title - file information" + "collectionArtistCount": "{count, plural, =1{1 sanatçı} other{{count} sanatçı}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "libraryFilterMetadataMissingAlbumArtist": "Kayıp albüm sanatçısı", - "audioAnalysisNoClipping": "No clipping", - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", - "@tutorialSettingsDesc": { - "description": "Tutorial settings page description" + "collectionAddedToPlaylist": "\"{playlistName}\"e eklendi", + "@collectionAddedToPlaylist": { + "description": "Snackbar after adding track to playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "lyricsModeExternalSubtitle": "Samsung Music gibi oynatıcılar için ayrı .lrc dosyası", - "@lyricsModeExternalSubtitle": { - "description": "Subtitle for external option" + "collectionAlreadyInPlaylist": "Zaten \"{playlistName}\" içinde", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } }, - "trackLoadLyrics": "Şarkı Sözlerini Yükle", - "@trackLoadLyrics": { - "description": "Action - fetch lyrics" + "collectionPlaylistNameHint": "Playlist name", + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", - "@extensionVerificationHelpTitleWaiting": { - "description": "Dialog title when verification is taking longer than expected" - }, - "libraryFilterReset": "Reset", - "@libraryFilterReset": { - "description": "Reset all filters button" - }, - "@downloadAlbumArtistMetadataFull": { - "description": "Status label when album-artist folder filtering uses full metadata" - }, - "storeTitle": "Uzantı Deposu", - "@storeTitle": { - "description": "Repo screen title" - }, - "libraryCleared": "Kütüphane temizlendi", - "@libraryCleared": { - "description": "Snackbar after clearing library" + "collectionPlaylistNameRequired": "Çalma listesi adı zorunludur", + "@collectionPlaylistNameRequired": { + "description": "Validation error for empty playlist name" }, - "queueDownloadCompleted": "Download completed", - "@queueDownloadCompleted": { - "description": "Accessibility label for completed download state in queue" + "collectionRenamePlaylist": "Çalma listesini yeniden adlandır", + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" }, - "libraryTitle": "Yerel Kitaplık", - "@libraryTitle": { - "description": "Library settings page title" + "collectionDeletePlaylist": "Çalma listesini sil", + "@collectionDeletePlaylist": { + "description": "Action to delete playlist" }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", - "@queueAlbumCount": { - "description": "Album count label with plural support", - "placeholders": { - "count": { - "type": "int" - } - } + "collectionPlaylistRenamed": "Çalma listesinin adı değiştirildi", + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" }, - "libraryClearConfirmTitle": "Kütüphaneyi temizle", - "@backupExportSectionTitle": { - "description": "Section title for the export/backup card" + "collectionWishlistEmptyTitle": "İstek listesi boş", + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" }, - "dialogClearAll": "Tümünü Temizle", - "@dialogClearAll": { - "description": "Dialog title - clear all items" + "collectionWishlistEmptySubtitle": "Daha sonra indirmek istediğiniz parçaları kaydetmek için parçaların üzerine + işaretiyle dokunun", + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", - "@tutorialExtensionsDesc": { - "description": "Tutorial extensions page description" + "collectionLovedEmptyTitle": "Sevilenler klasörü boş", + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" }, - "libraryExternalPlayer": "External player", - "@libraryExternalPlayer": { - "description": "Setting option to use an external music player" + "collectionLovedEmptySubtitle": "Favorilerinizi kaydetmek için parçalara beğeni bırakın", + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" }, - "editMetadataFieldGenre": "Genre", - "@tutorialLibraryTitle": { - "description": "Tutorial library page title" + "collectionFavoriteArtistsEmptyTitle": "Henüz favori sanatçım yok", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" }, - "folderOrganizationByPlaylist": "Çalma Listesine Göre", - "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" + "collectionFavoriteArtistsEmptySubtitle": "Bir sanatçının sayfasındaki kalbe dokunarak onu burada tutmaya devam edin", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" }, - "editMetadataSelectNone": "None", - "@historyFilterSingles": { - "description": "Filter chip - show singles only" + "collectionPlaylistEmptyTitle": "Çalma listesi boş", + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" }, - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" + "collectionPlaylistEmptySubtitle": "Buraya eklemek istediğiniz herhangi bir parçaya uzun süre basılı tutun +", + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" }, - "trackSaveCoverArt": "Save Cover Art", - "@trackSaveCoverArt": { - "description": "Menu action - save album cover art as file" + "collectionRemoveFromPlaylist": "Remove from playlist", + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" }, - "@downloadAlbumFolderStructure": { - "description": "Setting - album folder organization" + "collectionRemoveFromFolder": "Remove from folder", + "@collectionRemoveFromFolder": { + "description": "Tooltip for removing track from wishlist/loved folder" }, - "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", - "@notifDownloadCompleteCount": { - "description": "Notification title when download is complete, with count", + "collectionAddedToLoved": "\"{trackName}\" added to Loved", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", "placeholders": { - "completed": { - "type": "int" - }, - "total": { - "type": "int" + "trackName": { + "type": "String" } } }, - "setupUseDefault": "Varsayılanı Kullan", - "@setupUseDefault": { - "description": "Button to use default folder" - }, - "logNoLogsYetSubtitle": "Uygulamayı kullandıkça günlükler burada görünecektir", - "@logNoLogsYetSubtitle": { - "description": "Empty state subtitle" - }, - "@dateToday": { - "description": "Relative date - today" - }, - "trackSaveLyricsProgress": "Saving lyrics...", - "@trackSaveLyricsProgress": { - "description": "Snackbar while saving lyrics to file" + "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "trackCoverSaved": "Cover art saved to {fileName}", - "@trackCoverSaved": { - "description": "Snackbar after cover art saved", + "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", "placeholders": { - "fileName": { + "trackName": { "type": "String" } } }, - "trackReEnrichFieldLyrics": "Lyrics", - "@audioAnalysisRescan": { - "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" + "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } }, - "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is on" + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } }, - "dialogDisableAndClear": "Turn off and clear", - "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", - "cleanupOrphanedDownloadsSubtitle": "Artık mevcut olmayan dosyalar için geçmiş kayıtlarını kaldırın", - "@notifLibraryScanProgressWithTotal": { - "description": "Notification body for library scan progress when total is known", + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", "placeholders": { - "scanned": { - "type": "int" - }, - "total": { - "type": "int" - }, - "percentage": { - "type": "int" + "artistName": { + "type": "String" } } }, - "@extensionDetailsTags": { - "description": "Section title for extension tags" + "trackOptionAddToLoved": "Add to Loved", + "@trackOptionAddToLoved": { + "description": "Bottom sheet action label - add track to loved folder" }, - "@albumFolderAlbumOnlySubtitle": { - "description": "Folder structure example" + "trackOptionRemoveFromLoved": "Remove from Loved", + "@trackOptionRemoveFromLoved": { + "description": "Bottom sheet action label - remove track from loved folder" }, - "@audioAnalysisAnalyzing": { - "description": "Loading text while analyzing audio" + "trackOptionAddToWishlist": "Add to Wishlist", + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" }, - "@settingsDonate": { - "description": "Settings menu item - donate page" + "trackOptionRemoveFromWishlist": "Remove from Wishlist", + "@trackOptionRemoveFromWishlist": { + "description": "Bottom sheet action label - remove track from wishlist" }, - "@collectionPlaylistNameRequired": { - "description": "Validation error for empty playlist name" + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" }, - "@backupImportSectionDescription": { - "description": "Description for the restore action" + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" }, - "storeFilterLyrics": "Şarkı Sözleri", - "libraryAutoScan": "Otomatik Tarama", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" + "collectionPlaylistChangeCover": "Change cover image", + "@collectionPlaylistChangeCover": { + "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", - "@safMigrationMessage1": { - "description": "First paragraph of SAF migration dialog" + "collectionPlaylistRemoveCover": "Remove cover image", + "@collectionPlaylistRemoveCover": { + "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "setupStorageRequired": "Depolama İzni Gerekli", - "@notifLibraryScanErrors": { - "description": "Library scan complete suffix - error count", + "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", "placeholders": { "count": { "type": "int" } } }, - "appearanceHistoryViewGrid": "Izgara", - "trackConvertConverting": "Converting audio...", - "@trackConvertConverting": { - "description": "Snackbar while converting" - }, - "@setupUseDefaultFolder": { - "description": "Dialog title for default folder" + "selectionShareNoFiles": "No shareable files found", + "@selectionShareNoFiles": { + "description": "Snackbar when no selected files exist on disk" }, - "optionsArtistTagModeSplitVorbisSubtitle": "FLAC ve Opus için her sanatçıya ayrı bir etiket yazın; MP3 ve M4A birleşik kalır.", - "snackbarPlayingNext": "Playing next", - "@snackbarPlayingNext": { - "description": "Snackbar when a track is inserted as the next queue item" + "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } }, - "optionsDefaultSearchTabSubtitle": "Yeni arama sonuçları için hangi sekmenin önce açılacağını seçin.", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" - }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", - "@sectionService": { - "description": "Settings section header" - }, - "notifUpdateProgress": "{received} / {total} MB • {percentage}%", - "@discographyDownloadSelected": { - "description": "Button - download selected albums" - }, - "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", - "@cacheClearAllConfirmMessage": { - "description": "Dialog message before clearing all caches" - }, - "extensionsHomeFeedProvider": "Home Feed Provider", - "@extensionsHomeFeedProvider": { - "description": "Extensions page - label for home feed provider selector" - }, - "@cacheExploreFeed": { - "description": "Cache item title for explore home feed cache" + "selectionConvertNoConvertible": "No convertible tracks selected", + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" }, - "@audioAnalysisDynamicRange": { - "description": "Dynamic range metric label" + "selectionBatchConvertConfirmTitle": "Batch Convert", + "@selectionBatchConvertConfirmTitle": { + "description": "Confirmation dialog title for batch conversion" }, - "unknownAlbum": "Unknown Album", - "trackCoverCurrent": "Current cover", - "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", - "downloadPrimaryArtistOnlyOff": "Primary only: Off", - "dialogDone": "Tamamlandı", - "@dialogDone": { - "description": "Dialog button - action completed" + "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } }, - "storeRepoUrlLabel": "Depo URL'si", - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", - "@logIssueRateLimitedSuggestion": { - "description": "Diagnostic badge suggestion for rate limiting" + "selectionBatchConvertConfirmMessageLossless": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } }, - "libraryScanProgress": "{total} dosyanın {progress}%'si", - "@libraryScanProgress": { - "description": "Scan progress display", + "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": { + "description": "Batch conversion confirmation when source files will be preserved", "placeholders": { - "progress": { + "count": { + "type": "int" + }, + "format": { "type": "String" + } + } + }, + "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": { + "type": "int" }, "total": { "type": "int" + }, + "format": { + "type": "String" } } }, - "collectionLovedEmptyTitle": "Sevilenler klasörü boş", - "tutorialExtensionsTitle": "Uzantılar", - "@tutorialExtensionsTitle": { - "description": "Tutorial extensions page title" + "downloadedAlbumDownloadedCount": "{count} downloaded", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } }, - "searchSortDurationShort": "Süre (en kısa)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when album artist is used for folder names" }, - "trackCopyFilePath": "Dosya yolunu kopyala", - "@trackCopyFilePath": { - "description": "Action - copy file path" + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when track artist is used for folder names" }, - "albumFolderArtistAlbumFlatSubtitle": "Sanatçı/Albüm/ ve Sanatçı/şarkı.flac", - "@trackConvertResampler": { - "description": "Section label for lossless conversion resampler options" + "lyricsProvidersTitle": "Lyrics Provider Priority", + "@lyricsProvidersTitle": { + "description": "Settings item title for lyrics provider order" }, - "editMetadataFieldTrackNum": "Track #", - "@editMetadataFieldTrackNum": { - "description": "Chip label for track number field in auto-fill selector" + "lyricsProvidersDescription": "Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.", + "@lyricsProvidersDescription": { + "description": "Description on the lyrics provider priority page" }, - "snackbarFailedToUpdate": "Eklenti güncellenirken hata oluştu", - "@snackbarFailedToUpdate": { - "description": "Snackbar - extension update error" + "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", + "@lyricsProvidersInfoText": { + "description": "Info tip on lyrics provider priority page" }, - "notifAlreadyInLibrary": "Already in Library", - "@notifAlreadyInLibrary": { - "description": "Notification title when track is already in library" + "lyricsProvidersEnabledSection": "Enabled ({count})", + "@lyricsProvidersEnabledSection": { + "description": "Section header for enabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionPlaylistNameHint": "Playlist name", - "extensionVerificationCopyLink": "Copy link", - "@replayGainBatchAnalyzing": { - "description": "Progress dialog title while batch scanning ReplayGain" + "lyricsProvidersDisabledSection": "Disabled ({count})", + "@lyricsProvidersDisabledSection": { + "description": "Section header for disabled providers", + "placeholders": { + "count": { + "type": "int" + } + } }, - "setupLanguageTitle": "Dil Seçin", - "extensionId": "Kimlik", - "@extensionId": { - "description": "Extension detail - unique ID" + "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", + "@lyricsProvidersAtLeastOne": { + "description": "Snackbar when user tries to disable the last enabled provider" }, - "regionCountryBR": "Brazil", - "@updateNewVersionReady": { - "description": "Update subtitle" + "lyricsProvidersSaved": "Lyrics provider priority saved", + "@lyricsProvidersSaved": { + "description": "Snackbar after saving lyrics provider priority" }, - "@queueDownloadedFileMissing": { - "description": "Accessibility label when a downloaded file is missing from disk" + "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", + "@lyricsProvidersDiscardContent": { + "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "@lyricsMode": { - "description": "Setting - how to save lyrics" + "lyricsProviderLrclibDesc": "Open-source synced lyrics database", + "@lyricsProviderLrclibDesc": { + "description": "Description for LRCLIB provider" }, - "@settingsAppearance": { - "description": "Settings section - visual customization" + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", + "@lyricsProviderNeteaseDesc": { + "description": "Description for Netease provider" }, - "@setupStorageAccessMessageAndroid11": { - "description": "Android 11+ specific explanation" + "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", + "@lyricsProviderMusixmatchDesc": { + "description": "Description for Musixmatch provider" }, - "@tutorialLibraryTip3": { - "description": "Tutorial library tip 3" + "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", + "@lyricsProviderAppleMusicDesc": { + "description": "Description for Apple Music provider" }, - "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person lyrics is off" + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "@lyricsProviderQqMusicDesc": { + "description": "Description for QQ Music provider" }, - "libraryStorageAccessMessage": "SpotiFLAC, müzik kitaplığınızı tarayabilmek için depolama alanına erişime ihtiyaç duyar. Lütfen ayarlar bölümünden izin verin.", - "@libraryStorageAccessMessage": { - "description": "Dialog message for storage permission" + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" }, - "@tutorialLibraryTip1": { - "description": "Tutorial library tip 1" + "lyricsProviderExtensionDesc": "Extension provider", + "@lyricsProviderExtensionDesc": { + "description": "Generic description for extension-based lyrics providers" }, - "dialogRemoveExtensionMessage": "Bu eklentiyi kaldırmak istediğine emin misin? Bu işlem geri alınamaz.", - "@dialogRemoveExtensionMessage": { - "description": "Dialog message - uninstall confirmation" + "safMigrationTitle": "Storage Update Required", + "@safMigrationTitle": { + "description": "Title of SAF migration dialog" }, - "setupDownloadLocationTitle": "İndirme Konumu", - "@setupDownloadLocationTitle": { - "description": "Download location dialog title" + "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", + "@safMigrationMessage1": { + "description": "First paragraph of SAF migration dialog" }, - "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", - "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is on" + "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", + "@safMigrationMessage2": { + "description": "Second paragraph of SAF migration dialog" }, - "@audioAnalysisBitDepth": { - "description": "Bit depth metric label" + "safMigrationSuccess": "Download folder updated to SAF mode", + "@safMigrationSuccess": { + "description": "Snackbar after successfully migrating to SAF" }, - "trackOptionAddToLoved": "Add to Loved", - "@trackOptionAddToLoved": { - "description": "Bottom sheet action label - add track to loved folder" + "settingsDonate": "Support Development", + "@settingsDonate": { + "description": "Settings menu item - donate page" }, - "cacheAppDirectory": "Uygulama önbellek dizini", - "@cacheAppDirectory": { - "description": "Cache item title for app cache directory" + "settingsDonateSubtitle": "Buy the developer a coffee", + "@settingsDonateSubtitle": { + "description": "Subtitle for donate menu item" }, - "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", - "@navStore": { - "description": "Bottom navigation - Extension repo tab" + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" }, - "extensionPostProcessing": "Son İşlem", - "@searchTracks": { - "description": "Search filter label - tracks" + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" }, - "logCopied": "Kayıtlar panoya kopyalandı", - "@logCopied": { - "description": "Snackbar - logs copied" - }, - "@extensionHealthRequired": { - "description": "Label for a required extension service health check" + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" }, - "@previewPlay": { - "description": "Tooltip for the button that plays a short track preview snippet" + "backupExportSectionTitle": "Create backup", + "@backupExportSectionTitle": { + "description": "Section title for the export/backup card" }, - "clickableLookingUpArtist": "Looking up artist...", - "@clickableLookingUpArtist": { - "description": "Snackbar shown while clickable artist metadata is being resolved" + "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", + "@backupExportSectionDescription": { + "description": "Description of what a backup contains" }, - "@extensionVerificationBrowserSubtitleInApp": { - "description": "Subtitle when in-app browser is preferred for extension verification" + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" }, - "setupUseDefaultFolder": "Varsayılan Klasörü Kullan?", - "tutorialSearchHint": "Paste or search...", - "@logIssueTrackNotFoundLabel": { - "description": "Diagnostic badge label when a track is unavailable" + "backupImportSectionTitle": "Restore backup", + "@backupImportSectionTitle": { + "description": "Section title for the import/restore card" }, - "@storageModeAppFolderSubtitle": { - "description": "Subtitle for app folder storage mode" + "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", + "@backupImportSectionDescription": { + "description": "Description for the restore action" }, - "downloadMusixmatchLanguage": "Musixmatch Language", - "@downloadMusixmatchLanguage": { - "description": "Setting for Musixmatch lyrics translation language" + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" }, - "lyricsModeExternal": "Harici .lrc dosyası", - "@setupSelectFolder": { - "description": "Button to select folder" + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" }, - "logSearchHint": "Kayıtları Ara...", + "backupCreateFailed": "Failed to create backup", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "@settingsSaveDownloadHistorySubtitle": { - "description": "Settings switch subtitle for storing completed downloads in history" - }, - "@albumFolderArtistAlbumFlat": { - "description": "Album folder option with singles directly in artist folder" - }, - "extensionHealthRequired": "gerekli", - "actionCancel": "Vazgeç", - "@actionCancel": { - "description": "Action button - cancel operation" - }, - "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", - "@optionsEmbedMetadataSubtitleOff": { - "description": "Subtitle when metadata embedding is disabled" - }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", - "@downloadAllowLocalNetworkDisabled": { - "description": "Subtitle when allow local network access is off" - }, - "@extensionsDownloadPrioritySubtitle": { - "description": "Subtitle for download priority" - }, - "downloadSingleFilenameFormat": "Single Dosya Adı Formatı", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "cacheSummarySubtitle": "Önbelleği temizlemek, indirilen müzik dosyalarını silmeyecektir.", - "@cacheSummarySubtitle": { - "description": "Helper text for cache summary card" - }, - "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", - "libraryFilterMetadataMissingTrackNumber": "Missing track number", - "@libraryFilterMetadataMissingTrackNumber": { - "description": "Filter option - items missing track number" - }, - "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", - "@backupIncludeSecretsDescription": { - "description": "Explanation for the include-credentials toggle" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" + "backupRestoreConfirmTitle": "Restore this backup?", + "@backupRestoreConfirmTitle": { + "description": "Confirmation dialog title before restoring a backup" }, - "@extensionServiceStatus": { - "description": "Extension detail section header for service status" + "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", + "@backupRestoreConfirmMessage": { + "description": "Confirmation dialog message before restoring a backup" }, - "queueEmptySingles": "No single downloads", - "@queueEmptySingles": { - "description": "Empty state title when no single track downloads exist" + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" }, - "@snackbarSelectedPlaylistsEmpty": { - "description": "Snackbar when selected playlists contain no tracks" + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" }, - "@errorRateLimited": { - "description": "Error title - too many requests" + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", - "@setupDownloadInFlac": { - "description": "App tagline in setup" + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" }, - "trackRemoveFromDevice": "Cihazdan kaldır", - "@extensionsNoDownloadProvider": { - "description": "Empty state - no download providers" + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" }, - "@backupCreated": { - "description": "Snackbar after a backup file is created" + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" }, - "cacheSummaryTitle": "Önbellek genel bakışı", - "@cacheSummaryTitle": { - "description": "Heading for cache summary card" + "backupContentsSettings": "App settings", + "@backupContentsSettings": { + "description": "Backup contents row label for settings" }, - "selectionReplayGainCount": "ReplayGain ({count})", - "@selectionReplayGainCount": { - "description": "Batch selection action button label for ReplayGain", + "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "@backupContentsHistory": { + "description": "Backup contents row for history count", "placeholders": { "count": { "type": "int" } } }, - "@setupNotificationBackgroundDescription": { - "description": "Detailed notification explanation" - }, - "safMigrationTitle": "Storage Update Required", - "snackbarMetadataSaved": "Meta veriler başarıyla kaydedildi", - "@snackbarMetadataSaved": { - "description": "Snackbar after successfully saving track metadata" - }, - "@backupContentsSettings": { - "description": "Backup contents row label for settings" - }, - "logClearLogsTitle": "Kayıtları temizle", - "extensionsCustomSearch": "Özel arama", - "@extensionsCustomSearch": { - "description": "Label for custom search provider" - }, - "@downloadFrom": { - "description": "Label - download source" + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheSizeWithFiles": "{size} in {count} files", - "selectionShareNoFiles": "No shareable files found", - "@selectionShareNoFiles": { - "description": "Snackbar when no selected files exist on disk" + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "snackbarAddedTracksToQueue": "{count} şarkı kuyruğa eklendi", - "downloadFilenameInsertTag": "Etiket eklemek için dokunun:", - "@downloadFilenameInsertTag": { - "description": "Label above filename tag chips" + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", "placeholders": { - "artistName": { - "type": "String" + "count": { + "type": "int" } } }, - "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", - "backupRestoreConfirmButton": "Restore", - "@libraryCleanupMissingFiles": { - "description": "Button to remove entries for missing files" + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "backupCreateFailed": "Failed to create backup", - "notifLibraryScanFailed": "Library scan failed", - "@notifLibraryScanFailed": { - "description": "Notification title when library scan fails" + "backupIncludeSecrets": "Include extension credentials", + "@backupIncludeSecrets": { + "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, - "audioAnalysisRescan": "Re-analyze", - "@trackTrackName": { - "description": "Metadata label - track title" + "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", + "@backupIncludeSecretsDescription": { + "description": "Explanation for the include-credentials toggle" }, - "@setupPermissionRequired": { - "description": "Generic permission required title", + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { - "permissionType": { - "type": "String", - "description": "Type of permission (Storage/Notification)" + "count": { + "type": "int" } } }, - "@nowPlayingNoLyrics": { - "description": "Empty state when the playing file has no embedded lyrics" + "tooltipLoveAll": "Love All", + "@tooltipLoveAll": { + "description": "Tooltip for the Love All button on album/playlist screens" }, - "libraryFilesUnit": "{count, plural, =1{dosya} other{dosyalar}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", + "tooltipAddToPlaylist": "Çalma listesine ekle", + "@tooltipAddToPlaylist": { + "description": "Tooltip for the Add to Playlist button" + }, + "snackbarRemovedTracksFromLoved": "Sevilen albümünden {count} parça kaldırıldı", + "@snackbarRemovedTracksFromLoved": { + "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { "count": { "type": "int" } } }, - "@extensionMetadataProvider": { - "description": "Capability - provides metadata" + "snackbarAddedTracksToLoved": "Sevilen'e {count} parça eklendi", + "@snackbarAddedTracksToLoved": { + "description": "Snackbar after adding multiple tracks to Loved folder", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@downloadFilterContributing": { - "description": "Setting to strip contributing artists from Album Artist folder name" + "dialogDownloadAllTitle": "Tümünü İndir", + "@dialogDownloadAllTitle": { + "description": "Dialog title for bulk download confirmation" }, - "libraryScanSelectFolderFirst": "Önce bir klasör seçin", - "@sectionDownload": { - "description": "Settings section header" + "dialogDownloadAllMessage": "{count} parça indirilsin mi?", + "@dialogDownloadAllMessage": { + "description": "Body of the Download All confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionHealthNotConfigured": "Not configured", - "queueRetryAllFailed": "Retry {count} failed", - "folderOrganizationByPlaylistSubtitle": "Her çalma listesi için ayrı klasör", - "@folderOrganizationByPlaylistSubtitle": { - "description": "Subtitle for playlist folder option" + "homeSkipAlreadyDownloaded": "Daha önce indirilmiş şarkıları atla", + "@homeSkipAlreadyDownloaded": { + "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "lyricsProviderExtensionDesc": "Extension provider", - "@libraryFilterQualityHiRes": { - "description": "Filter option - high resolution audio" + "homeGoToAlbum": "Albüme Git", + "@homeGoToAlbum": { + "description": "Context menu item to navigate to the album page" }, - "trackConvertTitle": "Convert Audio", - "@trackConvertTitle": { - "description": "Title of convert bottom sheet" + "homeAlbumInfoUnavailable": "Albüm bilgisi mevcut değil", + "@homeAlbumInfoUnavailable": { + "description": "Snackbar when album info cannot be loaded" }, - "setupSkipForNow": "Şimdilik atla", - "sectionDownload": "İndir", - "downloadLossyOpus256Subtitle": "En iyi Opus kalitesi, parça başına ~8 Mb", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" + "snackbarLoadingCueSheet": "CUE sayfası yükleniyor...", + "@snackbarLoadingCueSheet": { + "description": "Snackbar while loading a CUE sheet file" }, - "@trackConvertActionLabelLossless": { - "description": "Convert button label for lossless conversion with quality cap", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" - } - } + "snackbarMetadataSaved": "Meta veriler başarıyla kaydedildi", + "@snackbarMetadataSaved": { + "description": "Snackbar after successfully saving track metadata" }, - "storeRequiresVersion": "Requires v{version}+", - "@storeRequiresVersion": { - "description": "Store compatibility badge for minimum app version", + "snackbarFailedToEmbedLyrics": "Şarkı sözleri eklenemedi", + "@snackbarFailedToEmbedLyrics": { + "description": "Snackbar when lyrics embedding fails" + }, + "snackbarFailedToWriteStorage": "Depolama alanına geri yazma işlemi başarısız oldu", + "@snackbarFailedToWriteStorage": { + "description": "Snackbar when writing metadata back to file fails" + }, + "snackbarError": "Hata: {error}", + "@snackbarError": { + "description": "Generic error snackbar with error detail", "placeholders": { - "version": { + "error": { "type": "String" } } }, - "metadataProviderPriorityDescription": "Meta veri sağlayıcılarını yeniden sıralamak için sürükleyin. Uygulama, parça ararken ve meta verileri alırken sağlayıcıları yukarıdan aşağıya doğru deneyecektir.", - "@notifUpdateFailed": { - "description": "Notification title when app update download fails" + "snackbarNoActionDefined": "Bu düğme için tanımlanmış bir işlem yok", + "@snackbarNoActionDefined": { + "description": "Snackbar when an extension button has no action configured" }, - "extensionsInfoTip": "Uzantılar yeni meta veri ve indirme sağlayıcıları ekleyebilir. Yalnızca güvenilir kaynaklardan gelen uzantıları yükleyin.", - "@extensionsInfoTip": { - "description": "Security warning about extensions" + "noTracksFoundForAlbum": "Bu albüm için hiçbir parça bulunamadı", + "@noTracksFoundForAlbum": { + "description": "Empty state message when an album has no tracks" }, - "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person lyrics is on" + "downloadLocationSubtitle": "İndirdiğiniz parçaları nereye kaydedeceğinizi seçin", + "@downloadLocationSubtitle": { + "description": "Subtitle shown in the download location picker sheet" }, - "libraryFilterMetadataMissingYear": "Kayıp yıl", - "extensionsDownloadPriority": "İndirme Önceliği", - "@extensionsDownloadPriority": { - "description": "Setting - download provider order" + "storageModeAppFolder": "Uygulama Klasörü (Önerilir)", + "@storageModeAppFolder": { + "description": "Storage mode option - app-managed folder" }, - "@downloadAllowLocalNetworkEnabled": { - "description": "Subtitle when allow local network access is on" + "storageModeAppFolderSubtitle": "Varsayılan olarak Müzik/SpotiFLAC klasörüne kaydeder", + "@storageModeAppFolderSubtitle": { + "description": "Subtitle for app folder storage mode" }, - "libraryScan": "Kitaplığı Tara", - "@libraryScan": { - "description": "Button to start library scan" + "storageModeSaf": "Özel Klasör (SAF)", + "@storageModeSaf": { + "description": "Storage mode option - Storage Access Framework" }, - "editMetadataFieldLabel": "Label", - "@editMetadataFieldLabel": { - "description": "Chip label for label field in auto-fill selector" + "storageModeSafSubtitle": "SD kart dahil herhangi bir klasörü seçin", + "@storageModeSafSubtitle": { + "description": "Subtitle for SAF storage mode" }, - "updateDownloadFailed": "İndirme başarısız", - "@updateDownloadFailed": { - "description": "Update error title" + "downloadFolderAccessLostTitle": "Download folder access lost", + "@downloadFolderAccessLostTitle": { + "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" }, - "appearanceAmoledDarkSubtitle": "Saf siyah arka plan", - "@appearanceAmoledDarkSubtitle": { - "description": "Subtitle for AMOLED dark" + "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", + "@downloadFolderAccessLostSubtitle": { + "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" }, - "setupIcloudNotSupported": "iCloud Drive desteklenmiyor. Lütfen uygulama Belgeler klasörünü kullanın.", - "trackLyricsEmbeddedSource": "Embedded", - "@trackLyricsEmbeddedSource": { - "description": "Lyrics source label for embedded lyrics" + "downloadFolderReselect": "Re-select folder", + "@downloadFolderReselect": { + "description": "Button that reopens the folder picker to restore download folder access" }, - "@trackAlbumArtist": { - "description": "Metadata label - album artist" + "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", + "@downloadErrorSafPermissionLost": { + "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" }, - "extensionsInstallPartialSuccess": "Yüklenen uzantı sayısı: {installed} / {attempted}", - "@extensionsInstallPartialSuccess": { - "description": "Message when installing multiple extensions partially succeeds", - "placeholders": { - "installed": { - "type": "int", - "description": "Number of successfully installed extensions" - }, - "attempted": { - "type": "int", - "description": "Number of selected extensions" - } - } + "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", + "@downloadErrorFolderAccessLost": { + "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, - "@extensionSettingsCount": { - "description": "Count of settings exposed by an extension quality option", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadFilenameDescription": "Yer tutucu olarak {artist}, {title}, {album}, {track}, {year}, {date}, {disc} ifadelerini kullanın.", + "@downloadFilenameDescription": { + "description": "Description shown in filename format editor" }, - "notifLibraryScanCancelled": "Library scan cancelled", - "@notifLibraryScanCancelled": { - "description": "Notification title when library scan is cancelled by the user" + "downloadFilenameInsertTag": "Etiket eklemek için dokunun:", + "@downloadFilenameInsertTag": { + "description": "Label above filename tag chips" }, - "collectionPlaylistNameRequired": "Çalma listesi adı zorunludur", - "libraryCleanupMissingFiles": "Eksik Dosyaları Temizle", - "storeCategoryUtility": "Utility", - "@storeCategoryUtility": { - "description": "Store extension category - utility" + "downloadSeparateSinglesEnabled": "Single şarkılar ve EP'ler ayrı bir klasöre kaydedildi", + "@downloadSeparateSinglesEnabled": { + "description": "Subtitle when separate singles folder is on" }, - "searchSortTitle": "Sonuçları Sırala", - "@extensionVerificationBrowserExternal": { - "description": "Chip label for external browser verification mode" + "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", + "@downloadSeparateSinglesDisabled": { + "description": "Subtitle when separate singles folder is off" }, - "audioAnalysisLufs": "LUFS", - "@setupAllowAccessToManageFiles": { - "description": "Instruction for file access permission" + "downloadArtistNameFilters": "Artist Name Filters", + "@downloadArtistNameFilters": { + "description": "Setting title for artist folder filter options" }, - "extensionsErrorLoading": "Uzantı yüklenirken hata oluştu", - "@actionPaste": { - "description": "Generic action - paste from clipboard" + "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", + "@downloadCreatePlaylistSourceFolder": { + "description": "Setting to create a subfolder per playlist source" }, - "aboutFeatureRequestSubtitle": "Uygulama için yeni özellikler isteyin", - "@aboutFeatureRequestSubtitle": { - "description": "Subtitle for feature request" + "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", + "@downloadCreatePlaylistSourceFolderEnabled": { + "description": "Subtitle when playlist folder is enabled" }, - "@aboutTitle": { - "description": "About page title" + "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", + "@downloadCreatePlaylistSourceFolderDisabled": { + "description": "Subtitle when playlist folder is disabled" }, - "@downloadNeteaseIncludeTranslation": { - "description": "Setting to include translated lyrics from Netease" + "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", + "@downloadCreatePlaylistSourceFolderRedundant": { + "description": "Subtitle when folder organization is already set to playlist" }, - "@actionGo": { - "description": "Generic action button label" + "downloadSongLinkRegion": "SongLink Region", + "@downloadSongLinkRegion": { + "description": "Setting for SongLink region used during fallback resolution" }, - "regionCountryFR": "France", - "trackConvertResamplerSoxr": "SoXr", - "extensionUpdated": "Güncellendi", - "@extensionUpdated": { - "description": "Extension detail - last update" + "downloadNetworkCompatibilityMode": "Network Compatibility Mode", + "@downloadNetworkCompatibilityMode": { + "description": "Setting for legacy TLS/network handling" }, - "downloadLossyFormat": "Kayıplı Format", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "@downloadNetworkCompatibilityModeEnabled": { + "description": "Subtitle when network compatibility mode is on" }, - "snackbarAlreadyInLibrary": "\"{trackName}\" kitaplığınızda zaten mevcut", - "@snackbarAlreadyInLibrary": { - "description": "Snackbar - track already exists in local library", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", + "@downloadNetworkCompatibilityModeDisabled": { + "description": "Subtitle when network compatibility mode is off" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", - "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", - "libraryFilterQuality": "Kalite", - "@libraryFilterQuality": { - "description": "Filter section - audio quality" + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@downloadAllowLocalNetwork": { + "description": "Setting title for allowing requests to private/local network targets" }, - "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", - "@editMetadataAutoFillDone": { - "description": "Snackbar confirming how many fields were auto-filled", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", + "@downloadAllowLocalNetworkEnabled": { + "description": "Subtitle when allow local network access is on" }, - "@discographyDownload": { - "description": "Button - download artist discography" + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" }, - "aboutFeatureRequest": "Özellik isteği", - "downloadSingleFilenameFormatDescription": "Single ve EP'ler için dosya adı örneği. Albüm formatıyla aynı etiketleri kullanır.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" + "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "@downloadSelectServiceToEnable": { + "description": "Subtitle when quality picker is disabled due to extension service" }, - "queueClearAllMessage": "Tüm indirmeleri temizlemek istediğinizden emin misiniz?", - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", - "extensionLastChecked": "Last checked {time}", - "@extensionLastChecked": { - "description": "Timestamp for the latest extension service health check", - "placeholders": { - "time": { - "type": "String" - } - } + "downloadEmbedLyricsDisabled": "Enable metadata embedding first", + "@downloadEmbedLyricsDisabled": { + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "homeImportCsvTooltip": "Import playlist (CSV, M3U)", - "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "downloadNeteaseIncludeTranslation": "Netease: Include Translation", + "@downloadNeteaseIncludeTranslation": { + "description": "Setting to include translated lyrics from Netease" }, - "trackConvertResamplerSwr": "SWR", - "@trackConvertResamplerSwr": { - "description": "Lossless conversion default FFmpeg swresample resampler option" + "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", + "@downloadNeteaseIncludeTranslationEnabled": { + "description": "Subtitle when Netease translation is on" }, - "@downloadFolderOrganization": { - "description": "Title of the folder organization picker bottom sheet" + "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", + "@downloadNeteaseIncludeTranslationDisabled": { + "description": "Subtitle when Netease translation is off" }, - "dialogClearHistoryTitle": "Geçmişi Temizle", - "@logClearSearch": { - "description": "Tooltip for clearing the log search field" + "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", + "@downloadNeteaseIncludeRomanization": { + "description": "Setting to include romanized lyrics from Netease" }, - "dialogImport": "İçe aktar", - "@dialogImport": { - "description": "Dialog button - import data" + "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", + "@downloadNeteaseIncludeRomanizationEnabled": { + "description": "Subtitle when Netease romanization is on" }, - "@setupChangeFolderTooltip": { - "description": "Tooltip for editing the selected download folder" + "downloadNeteaseIncludeRomanizationDisabled": "No romanization", + "@downloadNeteaseIncludeRomanizationDisabled": { + "description": "Subtitle when Netease romanization is off" }, - "notifLibraryScanErrors": "{count} hata", - "@downloadNetworkCompatibilityMode": { - "description": "Setting for legacy TLS/network handling" + "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", + "@downloadAppleQqMultiPerson": { + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, - "@metadataSaveFailedFfmpeg": { - "description": "Snackbar error when FFmpeg fails to write metadata" + "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", + "@downloadAppleQqMultiPersonEnabled": { + "description": "Subtitle when multi-person lyrics is on" }, - "dialogUninstallExtension": "Eklentiyi Kaldır?", - "recentTypePlaylist": "Çalma Listesi", - "@recentTypePlaylist": { - "description": "Recent access item type - playlist" + "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", + "@downloadAppleQqMultiPersonDisabled": { + "description": "Subtitle when multi-person lyrics is off" }, - "trackDeleteConfirmMessage": "Bu işlem, indirilen dosyayı kalıcı olarak silecek ve geçmişinizden kaldıracaktır.", - "@logIssueNetworkErrorDescription": { - "description": "Diagnostic badge description for generic network errors" + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "appearanceThemeSystem": "Sistem", - "@appearanceThemeSystem": { - "description": "Follow system theme" + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "albumFolderArtistAlbumSingles": "Sanatçı / Albüm + Singlelar", - "@aboutTranslators": { - "description": "Section for translators" + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "shareSheetNotFound": "Not found", - "@shareSheetNotFound": { - "description": "Cross-service share sheet row subtitle when a service has no match" + "downloadMusixmatchLanguage": "Musixmatch Language", + "@downloadMusixmatchLanguage": { + "description": "Setting for Musixmatch lyrics translation language" }, - "@tutorialDownloadInProgressSemantics": { - "description": "Accessibility label for active download state in tutorial demo" + "downloadMusixmatchLanguageAuto": "Auto (original language)", + "@downloadMusixmatchLanguageAuto": { + "description": "Subtitle when no language is set" }, - "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", - "@editMetadataAutoFillNoneSelected": { - "description": "Snackbar when user taps Fetch without selecting any fields" + "downloadFilterContributing": "Filter Contributing Artists", + "@downloadFilterContributing": { + "description": "Setting to strip contributing artists from Album Artist folder name" }, - "@snackbarViewQueue": { - "description": "Snackbar action - view download queue" + "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", + "@downloadFilterContributingEnabled": { + "description": "Subtitle when contributing artist filter is on" }, - "@optionsUpdateChannelPreview": { - "description": "Include beta/preview updates" + "downloadFilterContributingDisabled": "Full Album Artist string used", + "@downloadFilterContributingDisabled": { + "description": "Subtitle when contributing artist filter is off" }, - "editMetadataFieldComposer": "Besteci", - "@editMetadataFieldComposer": { - "description": "Label for composer field in the edit metadata sheet" + "downloadProvidersNoneEnabled": "No providers enabled", + "@downloadProvidersNoneEnabled": { + "description": "Shown when no lyrics providers are active" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", - "@aboutSachinsenalDesc": { - "description": "Credit description for sachinsenal0x64" + "downloadMusixmatchLanguageCode": "Language code", + "@downloadMusixmatchLanguageCode": { + "description": "Label for Musixmatch language input field" }, - "backupTitle": "Backup & Restore", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" + "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "@downloadMusixmatchLanguageHint": { + "description": "Placeholder for Musixmatch language input" }, - "setupStorageAccessRequired": "Depolama Erişimi Gerekli", - "@setupStorageAccessRequired": { - "description": "Title when storage access needed" + "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", + "@downloadMusixmatchLanguageDesc": { + "description": "Description in Musixmatch language picker" }, - "trackMetadataDelete": "Sil", - "@trackMetadataDelete": { - "description": "Action button - delete track" + "downloadMusixmatchAuto": "Auto", + "@downloadMusixmatchAuto": { + "description": "Button to clear Musixmatch language (use auto)" }, - "libraryFilterMetadataMissingDiscNumber": "Missing disc number", - "@libraryFilterMetadataMissingDiscNumber": { - "description": "Filter option - items missing disc number" + "downloadNetworkAnySubtitle": "Use WiFi or mobile data", + "@downloadNetworkAnySubtitle": { + "description": "Subtitle for any-network option in picker" }, - "snackbarMetadataProviderSaved": "Meta veri sağlayıcı önceliği kaydedildi", - "setupPermissionRequired": "{permissionType} İzni Zorunlu", - "@selectionConvertNoConvertible": { - "description": "Snackbar when no selected tracks support conversion" + "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "@downloadNetworkWifiOnlySubtitle": { + "description": "Subtitle for WiFi-only option in picker" }, - "extensionHealthDegraded": "Degraded", - "regionCountryKR": "South Korea", - "@regionCountryKR": { - "description": "Country name for SongLink region picker" + "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", + "@downloadSongLinkRegionDesc": { + "description": "Description in SongLink region picker" }, - "trackLyricsNotInFile": "Bu dosyada şarkı sözü bulunamadı", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" + "snackbarUnsupportedAudioFormat": "Unsupported audio format", + "@snackbarUnsupportedAudioFormat": { + "description": "Snackbar when the audio format is not supported for the requested operation" }, - "@downloadedAlbumTapToSelect": { - "description": "Selection hint" + "cacheRefresh": "Yenile", + "@cacheRefresh": { + "description": "Tooltip for refresh button on cache management page" }, - "downloadArtistNameFilters": "Artist Name Filters", - "@downloadArtistNameFilters": { - "description": "Setting title for artist folder filter options" + "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", + "@dialogDownloadPlaylistsMessage": { + "description": "Dialog message for bulk playlist download confirmation", + "placeholders": { + "trackCount": { + "type": "int" + }, + "playlistCount": { + "type": "int" + } + } }, - "@libraryFilterMetadataMissingArtist": { - "description": "Filter option - items missing artist" + "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", + "@bulkDownloadPlaylistsButton": { + "description": "Button label for bulk downloading selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "recentShowAllDownloads": "Tüm İndirmeleri Göster", - "@appearanceThemeLight": { - "description": "Light theme" + "bulkDownloadSelectPlaylists": "Select playlists to download", + "@bulkDownloadSelectPlaylists": { + "description": "Button label when no playlists are selected for download" }, - "trackReEnrichFieldTrackInfo": "Track & Disc Number", - "@appearanceThemeDark": { - "description": "Dark theme" + "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", + "@snackbarSelectedPlaylistsEmpty": { + "description": "Snackbar when selected playlists contain no tracks" }, - "extensionVerificationLinkCopied": "Verification link copied", - "@extensionVerificationLinkCopied": { - "description": "Snackbar after copying the extension verification URL" + "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@playlistsCount": { + "description": "Playlist count display", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@extensionsHomeFeedDescription": { - "description": "Extensions page - description for home feed provider picker" + "editMetadataAutoFill": "Auto-fill from online", + "@editMetadataAutoFill": { + "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", - "@downloadAlbumArtistMetadataPrimaryOnly": { - "description": "Status label when album-artist folder filtering uses primary artist only" + "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", + "@editMetadataAutoFillDesc": { + "description": "Description for the auto-fill section" }, - "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", - "setupNext": "Sıradaki", - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", - "libraryAutoScanDaily": "Günlük", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" + "editMetadataAutoFillSource": "Metadata source", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" }, - "@audioAnalysisDescription": { - "description": "Description for audio analysis tap-to-analyze prompt" + "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" }, - "nowPlayingUpNext": "Up next", - "@nowPlayingUpNext": { - "description": "Title for the playback queue sheet" + "editMetadataAutoFillFind": "Find metadata", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" }, - "nowPlayingPreviousTrack": "Previous track", - "nowPlayingNextTrack": "Next track", - "logAutoScrollOff": "Auto-scroll OFF", - "trackConvertFailed": "Dönüştürme başarısız oldu", - "@trackConvertFailed": { - "description": "Snackbar when conversion fails" + "editMetadataAutoFillPreview": "Data from {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } }, - "extensionsUninstall": "Kaldır", - "safMigrationSuccess": "Download folder updated to SAF mode", - "optionsClearHistorySubtitle": "İndirilen bütün şarkıları geçmişten temizle", - "@optionsClearHistorySubtitle": { - "description": "Subtitle for clear history" + "editMetadataAutoFillCoverAvailable": "Cover artwork available", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" }, - "trackPlayNext": "Play next", - "extensionsNoHomeFeedExtensions": "No extensions with home feed", - "optionsUpdateChannelStable": "Sadece stabil sürümler", - "@optionsUpdateChannelStable": { - "description": "Only stable updates" + "editMetadataAutoFillApply": "Apply selected data", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" }, - "@discographyDownloadAllSubtitle": { - "description": "Subtitle showing total tracks and albums", + "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" }, - "albumCount": { - "type": "int" + "source": { + "type": "String" } } }, - "searchPlaylists": "Çalma Listeleri", - "@searchPlaylists": { - "description": "Search result category - playlists" + "editMetadataAutoFillFetch": "Fetch & Fill", + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" }, - "downloadNetworkCompatibilityMode": "Network Compatibility Mode", - "settingsAppearance": "Görünüm", - "logIssueRateLimitedLabel": "RATE LIMITED", - "@logIssueRateLimitedLabel": { - "description": "Diagnostic badge label when the service rate limits requests" + "editMetadataAutoFillSearching": "Searching online...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" }, - "logIssueSummary": "Issue Summary", - "@logIssueSummary": { - "description": "Header for log issue analysis summary" + "editMetadataAutoFillNoResults": "No matching metadata found online", + "@editMetadataAutoFillNoResults": { + "description": "Snackbar when online metadata search returns no results" }, - "appName": "SpotiFLAC Mobile", - "storeRepoDialogCurrent": "Mevcut depo:", - "@optionsExtensionStoreSubtitle": { - "description": "Subtitle for extension repo toggle" + "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", + "@editMetadataAutoFillDone": { + "description": "Snackbar confirming how many fields were auto-filled", + "placeholders": { + "count": { + "type": "int" + } + } }, - "@trackLyrics": { - "description": "Tab title - lyrics" + "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", + "@editMetadataAutoFillNoneSelected": { + "description": "Snackbar when user taps Fetch without selecting any fields" }, - "@backupImportButton": { - "description": "Button to pick a backup file to restore" + "editMetadataFieldTitle": "Başlık", + "@editMetadataFieldTitle": { + "description": "Chip label for title field in auto-fill selector" }, - "@setupFolderChoose": { - "description": "Button to choose folder" + "editMetadataFieldArtist": "Artist", + "@editMetadataFieldArtist": { + "description": "Chip label for artist field in auto-fill selector" }, - "storageModeAppFolderSubtitle": "Varsayılan olarak Müzik/SpotiFLAC klasörüne kaydeder", - "@extensionsDisabled": { - "description": "Extension status - inactive" + "editMetadataFieldAlbum": "Album", + "@editMetadataFieldAlbum": { + "description": "Chip label for album field in auto-fill selector" }, - "@regionCountryAU": { - "description": "Country name for SongLink region picker" + "editMetadataFieldAlbumArtist": "Album Artist", + "@editMetadataFieldAlbumArtist": { + "description": "Chip label for album artist field in auto-fill selector" }, - "@storeCategoryMetadata": { - "description": "Store extension category - metadata" + "editMetadataFieldDate": "Date", + "@editMetadataFieldDate": { + "description": "Chip label for date field in auto-fill selector" }, - "libraryFilterApply": "Uygula", - "@libraryFilterApply": { - "description": "Apply filters button" + "editMetadataFieldTrackNum": "Track #", + "@editMetadataFieldTrackNum": { + "description": "Chip label for track number field in auto-fill selector" }, - "@libraryFilterSortGenreAsc": { - "description": "Sort option - genre ascending" + "editMetadataFieldDiscNum": "Disc #", + "@editMetadataFieldDiscNum": { + "description": "Chip label for disc number field in auto-fill selector" }, - "setupAllowAccessToManageFiles": "Lütfen bir sonraki ekranda \"Bütün dosyalara eriş\" iznini sağlayın.", - "@dialogSave": { - "description": "Dialog button - save changes" + "editMetadataFieldGenre": "Genre", + "@editMetadataFieldGenre": { + "description": "Chip label for genre field in auto-fill selector" }, - "trackLyrics": "Şarkı Sözleri", - "extensionSettingNotSet": "Not set", - "@extensionSettingNotSet": { - "description": "Value shown when an extension setting has no value" + "editMetadataFieldIsrc": "ISRC", + "@editMetadataFieldIsrc": { + "description": "Chip label for ISRC field in auto-fill selector" }, - "@audioAnalysisClipping": { - "description": "Clipping metric label" + "editMetadataFieldLabel": "Label", + "@editMetadataFieldLabel": { + "description": "Chip label for label field in auto-fill selector" }, - "downloadNeteaseIncludeTranslation": "Netease: Include Translation", - "@albumFolderArtistAlbumSubtitle": { - "description": "Folder structure example" + "editMetadataFieldCopyright": "Copyright", + "@editMetadataFieldCopyright": { + "description": "Chip label for copyright field in auto-fill selector" }, - "@settingsDonateSubtitle": { - "description": "Subtitle for donate menu item" + "editMetadataFieldCover": "Cover Art", + "@editMetadataFieldCover": { + "description": "Chip label for cover art field in auto-fill selector" }, - "cueSplitSuccess": "{count} parçaya başarıyla bölündü", - "@cueSplitSuccess": { - "description": "Snackbar after successful CUE split", + "editMetadataSelectAll": "All", + "@editMetadataSelectAll": { + "description": "Button to select all fields for auto-fill" + }, + "editMetadataSelectEmpty": "Empty only", + "@editMetadataSelectEmpty": { + "description": "Button to select only fields that are currently empty" + }, + "queueDownloadingCount": "Downloading ({count})", + "@queueDownloadingCount": { + "description": "Header for active downloads section with count", "placeholders": { "count": { "type": "int" } } }, - "cueSplitArtist": "Artist: {artist}", - "@cueSplitArtist": { - "description": "Artist name in CUE split sheet", + "queueFilteringIndicator": "Filtering...", + "@queueFilteringIndicator": { + "description": "Shown while filter results are being computed" + }, + "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "@queueTrackCount": { + "description": "Track count label with plural support", "placeholders": { - "artist": { - "type": "String" + "count": { + "type": "int" } } }, - "updateSeeReleaseNotes": "See release notes for details.", - "@updateSeeReleaseNotes": { - "description": "Fallback changelog text when release notes cannot be parsed" - }, - "@trackReEnrichFfmpegFailed": { - "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "@queueAlbumCount": { + "description": "Album count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "collectionWishlist": "İstek listesi", - "@collectionWishlist": { - "description": "Custom folder for saved tracks to download later" + "queueEmptyAlbums": "No album downloads", + "@queueEmptyAlbums": { + "description": "Empty state title when no album downloads exist" }, - "editMetadataAutoFillFetch": "Fetch & Fill", - "@extensionsHomeFeedAuto": { - "description": "Label for auto-selected search provider" + "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", + "@queueEmptyAlbumsSubtitle": { + "description": "Empty state subtitle for album downloads" }, - "providerPriorityDescription": "İndirme hizmetlerini sıralamak için kaydır. Uygulama şarkı indirirken hizmetleri yukarıdan aşağıya doğru deneyecektir.", - "@providerPriorityDescription": { - "description": "Provider priority page description" + "queueEmptySingles": "No single downloads", + "@queueEmptySingles": { + "description": "Empty state title when no single track downloads exist" }, "queueEmptySinglesSubtitle": "Single track downloads will appear here", - "downloadLossyOpus128": "Opus 128kbps", - "downloadUseAlbumArtistForFolders": "Klasörler için Albüm Sanatçısı'nı kullan", - "@downloadUseAlbumArtistForFolders": { - "description": "Setting - choose whether artist folders use Album Artist or Track Artist" + "@queueEmptySinglesSubtitle": { + "description": "Empty state subtitle for single track downloads" }, - "@aboutLinks": { - "description": "Section for external links" + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } }, - "downloadedAlbumDeleteCount": "{count} {count, plural, =1{parçayı} other{parçayı}} sil", - "updateLater": "Daha Sonra", - "@logIssueIspBlockingSuggestion": { - "description": "Diagnostic badge suggestion for ISP blocking" + "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" }, - "actionResume": "Devam et", - "optionsDetailedLoggingOff": "Hata bildirmek için aç", - "@searchSortDefault": { - "description": "Sort option - default API order" + "libraryDefaultView": "Default view", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" }, - "@regionCountryCA": { - "description": "Country name for SongLink region picker" + "libraryDefaultViewLastUsed": "Last used", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" }, - "@sectionStorageAccess": { - "description": "Section header for storage access settings" + "queueEmptyHistory": "No download history", + "@queueEmptyHistory": { + "description": "Empty state title when download history is empty" }, - "downloadFilterContributing": "Filter Contributing Artists", - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", - "storeSearch": "Eklenti ara...", - "@storeSearch": { - "description": "Repo search placeholder" + "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", + "@queueEmptyHistorySubtitle": { + "description": "Empty state subtitle for download history" }, - "aboutTelegramChat": "Telegram Grubu", - "lyricsModeBoth": "Her ikisi de", - "@lyricsModeBoth": { - "description": "Lyrics mode option - embed and external" + "selectionAllPlaylistsSelected": "All playlists selected", + "@selectionAllPlaylistsSelected": { + "description": "Shown when all playlists are selected in selection mode" }, - "@permissionNotification": { - "description": "Notification permission type label" - }, - "libraryAutoScanSubtitle": "Kitaplığınızı yeni dosyalar için otomatik olarak tarayın", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" + "selectionTapPlaylistsToSelect": "Tap playlists to select", + "@selectionTapPlaylistsToSelect": { + "description": "Hint shown in playlist selection mode" }, - "libraryEnableLocalLibrary": "Yerel Kitaplığı Etkinleştir", - "trackConvertTargetFormat": "Target Format", - "@trackConvertTargetFormat": { - "description": "Label for format selection" + "selectionSelectPlaylistsToDelete": "Select playlists to delete", + "@selectionSelectPlaylistsToDelete": { + "description": "Hint shown when no playlists are selected for deletion" }, - "extensionSettings": "Ayarlar", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" + "audioAnalysisTitle": "Audio Quality Analysis", + "@audioAnalysisTitle": { + "description": "Title for audio analysis section" }, - "trackLyricsTimeout": "İstek zaman aşımına uğradı. Daha sonra tekrar deneyin.", - "settingsExtensions": "Eklentiler", - "@settingsBackup": { - "description": "Settings menu item - backup and restore page" + "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", + "@audioAnalysisDescription": { + "description": "Description for audio analysis tap-to-analyze prompt" }, - "librarySourceDownloaded": "Downloaded", - "@librarySourceDownloaded": { - "description": "Badge for tracks downloaded via SpotiFLAC" + "audioAnalysisAnalyzing": "Analyzing audio...", + "@audioAnalysisAnalyzing": { + "description": "Loading text while analyzing audio" }, - "appearanceDynamicColor": "Dinamik Renk", - "@appearanceDynamicColor": { - "description": "Material You dynamic colors" + "audioAnalysisSampleRate": "Sample Rate", + "@audioAnalysisSampleRate": { + "description": "Sample rate metric label" }, - "backupImportButton": "Choose backup file", - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@optionsEmbedMetadata": { - "description": "Settings toggle title for writing metadata into downloaded files" + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" }, - "appearanceTitle": "Görünüm", - "downloadNeteaseIncludeRomanizationDisabled": "No romanization", - "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is off" + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" }, - "@libraryScanCancelled": { - "description": "Library scan status when a scan was cancelled" + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" }, - "tracksCount": "{count, plural, =1{1 parça} other{{count} parça}}", - "@snackbarFailedToUpdateNamed": { - "description": "Snackbar when extension update fails in the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } + "audioAnalysisBitDepth": "Bit Depth", + "@audioAnalysisBitDepth": { + "description": "Bit depth metric label" }, - "@extensionQualityOptions": { - "description": "Capability - quality selection" + "audioAnalysisChannels": "Channels", + "@audioAnalysisChannels": { + "description": "Channels metric label" }, - "logClearSearch": "Clear search", - "trackSaveLyrics": "Save Lyrics (.lrc)", - "@trackReEnrichSearching": { - "description": "Snackbar while searching metadata from internet for local items" + "audioAnalysisDuration": "Duration", + "@audioAnalysisDuration": { + "description": "Duration metric label" }, - "@editMetadataAutoFillNoResults": { - "description": "Snackbar when online metadata search returns no results" + "audioAnalysisNyquist": "Nyquist", + "@audioAnalysisNyquist": { + "description": "Nyquist frequency metric label" }, - "notifDownloadComplete": "Download Complete", - "snackbarAlreadyDownloaded": "\"{trackName}\" zaten indirilmiş", - "folderOrganizationByAlbumSubtitle": "Her albüm için ayrı klasör", - "storeRepoUrlHint": "https://github.com/user/repo", - "trackConvertDitherTriangularHp": "Triangular HP", - "lyricsModeBothSubtitle": "Hem göm hem de .lrc dosyası olarak kaydet", - "trackReEnrichFieldExtra": "Genre, Label, Copyright", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" + "audioAnalysisFileSize": "Size", + "@audioAnalysisFileSize": { + "description": "File size metric label" }, - "sectionLyrics": "Şarkı sözleri", - "@sectionLyrics": { - "description": "Settings section header" + "audioAnalysisDynamicRange": "Dynamic Range", + "@audioAnalysisDynamicRange": { + "description": "Dynamic range metric label" }, - "extensionStrategy": "Strateji: {strategy}", - "@extensionStrategy": { - "description": "Track matching strategy name", - "placeholders": { - "strategy": { - "type": "String" - } - } + "audioAnalysisPeak": "Peak", + "@audioAnalysisPeak": { + "description": "Peak amplitude metric label" }, - "@downloadNativeWorker": { - "description": "Setting title for Android native download worker" + "audioAnalysisRms": "RMS", + "@audioAnalysisRms": { + "description": "RMS level metric label" }, - "optionsArtistTagModeSplitVorbis": "FLAC/Opus için ayrılmış etiketler", - "extensionsHomeFeedUse": "Use {extensionName} home feed", - "@cacheAppDirectoryDesc": { - "description": "Description of what app cache directory contains" + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" }, - "cancelDownloadTitle": "Cancel download?", - "updateWhatsNew": "Yenilikler", - "updateNewVersionReady": "Yeni bir sürüm hazır", - "@extensionVerificationClose": { - "description": "Button to dismiss the extension verification help dialog" + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" }, - "a11ySelectTrack": "Select track", - "libraryClearSubtitle": "Taranan tüm parçaları sil", - "@libraryClearSubtitle": { - "description": "Subtitle for clear button" + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" }, - "@settingsDownloadNetworkSubtitle": { - "description": "Subtitle explaining network preference" + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" }, - "storeAnyVersion": "Any", - "@storeAnyVersion": { - "description": "Store detail value when any app version is accepted" + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" }, - "navStore": "Depo", - "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", - "libraryScanSettings": "Tarama Ayarları", - "@libraryScanSettings": { - "description": "Section header for scan settings" + "audioAnalysisCutoffNotDetected": "Not detected", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" }, - "trackDuration": "Süre", - "@trackDuration": { - "description": "Metadata label - track length" + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" }, - "extensionHealthOffline": "Çevrimdışı", - "@extensionHealthOffline": { - "description": "Extension service health status - offline" + "audioAnalysisSamples": "Samples", + "@audioAnalysisSamples": { + "description": "Total samples metric label" }, - "editMetadataFieldArtist": "Artist", - "@editMetadataFieldArtist": { - "description": "Chip label for artist field in auto-fill selector" + "audioAnalysisRescan": "Re-analyze", + "@audioAnalysisRescan": { + "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" }, - "libraryInLibrary": "Kütüphanede", - "pressBackAgainToExit": "Çıkmak için tekrar geri basın", - "@pressBackAgainToExit": { - "description": "Exit confirmation message" + "audioAnalysisRescanning": "Re-analyzing audio...", + "@audioAnalysisRescanning": { + "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "setupNotificationGranted": "Bildirim İzni Verildi!", - "@setupNotificationGranted": { - "description": "Success message for notification permission" + "extensionsHomeFeedProvider": "Home Feed Provider", + "@extensionsHomeFeedProvider": { + "description": "Extensions page - label for home feed provider selector" }, - "settingsDonate": "Support Development", - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", - "backupContentsTitle": "Backup contents", - "updateDontRemind": "Bir daha sorma", - "@dialogDiscard": { - "description": "Dialog button - discard changes" + "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", + "@extensionsHomeFeedDescription": { + "description": "Extensions page - description for home feed provider picker" }, - "editMetadataAutoFillSearching": "Searching online...", - "discographyDownloadSelected": "Seçilenleri İndir", - "trackConvertResampler": "Resampler", - "queueFilteringIndicator": "Filtering...", - "@queueFilteringIndicator": { - "description": "Shown while filter results are being computed" + "extensionsHomeFeedAuto": "Auto", + "@extensionsHomeFeedAuto": { + "description": "Label for auto-selected search provider" }, - "@dialogDownloadAllTitle": { - "description": "Dialog title for bulk download confirmation" + "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", + "@extensionsHomeFeedAutoSubtitle": { + "description": "Extensions page - subtitle for auto home feed option" }, - "cueSplitConfirmMessage": "\"{album}\" albümünü {count} adet ayrı FLAC dosyasına bölmek ister misiniz?\n\nDosyalar aynı dizine kaydedilecektir.", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when folder organization is already set to playlist" + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" }, - "regionCountryCA": "Canada", - "cacheTempDirectory": "Geçici dizin", - "@cacheTempDirectory": { - "description": "Cache item title for temporary files directory" + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" }, - "libraryShowDuplicateIndicator": "Kopya Belirtecini Göster", - "@logFilterBySeverity": { - "description": "Filter dialog title" + "extensionsHomeFeedUse": "Use {extensionName} home feed", + "@extensionsHomeFeedUse": { + "description": "Extensions page - subtitle for a specific extension home feed option", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, - "homeSearchHintProvider": "Search with {providerName}...", - "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is off" + "extensionsNoHomeFeedExtensions": "No extensions with home feed", + "@extensionsNoHomeFeedExtensions": { + "description": "Extensions page - shown when no installed extension has home feed" }, - "optionsCheckUpdates": "Güncelleştirmeleri Denetle", - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", - "recentTypeAlbum": "Albüm", - "providerExtension": "Eklenti", - "@providerExtension": { - "description": "Label for extension-provided providers" + "cancelDownloadTitle": "Cancel download?", + "@cancelDownloadTitle": { + "description": "Dialog title when confirming cancellation of an active download" }, - "trackCoverNoSource": "No cover art source available", - "libraryFilterMetadata": "Meta veriler", - "albumFolderArtistYearAlbum": "Sanatçı / [Yıl] Albüm", - "@albumFolderArtistYearAlbum": { - "description": "Album folder option with year" - }, - "audioAnalysisClipping": "Clipping", - "@a11yOpenAlbumByArtistTrackCount": { - "description": "Accessibility label for opening an album item with track count", + "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", + "@cancelDownloadContent": { + "description": "Dialog body when confirming cancellation of an active download", "placeholders": { - "albumName": { - "type": "String" - }, - "artistName": { + "trackName": { "type": "String" - }, - "trackCount": { - "type": "int" } } }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", - "@backupExtensionsRestoreFailed": { - "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "cancelDownloadKeep": "Keep", + "@cancelDownloadKeep": { + "description": "Dialog button - keep the active download (do not cancel)" + }, + "queueCancelledTitle": "Download cancelled", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, + "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", + "@metadataSaveFailedFfmpeg": { + "description": "Snackbar error when FFmpeg fails to write metadata" + }, + "metadataSaveFailedStorage": "Failed to write metadata back to storage", + "@metadataSaveFailedStorage": { + "description": "Snackbar error when writing metadata file back to storage fails" + }, + "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", + "@snackbarFolderPickerFailed": { + "description": "Snackbar shown when folder picker fails to open", "placeholders": { - "count": { - "type": "int" + "error": { + "type": "String" } } }, - "channelStable": "Kararlı", - "@channelStable": { - "description": "Update channel - stable releases" - }, - "tutorialSettingsTip3": "Uygulama temasını ve görünümünü özelleştirin", - "setupAppDocumentsFolderSubtitle": "Tavsiye edilen - Dosyalar uygulamasından erişilebilir", - "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", - "@a11yPlayTrackByArtist": { - "description": "Accessibility label for playing a local library track", + "notifDownloadingTrack": "Downloading {trackName}", + "@notifDownloadingTrack": { + "description": "Notification title while downloading a track", "placeholders": { "trackName": { "type": "String" - }, - "artistName": { - "type": "String" } } }, - "dialogRemove": "Kaldır", - "extensionVerificationClose": "Close", - "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", - "@bulkDownloadPlaylistsButton": { - "description": "Button label for bulk downloading selected playlists", + "notifFinalizingTrack": "Finalizing {trackName}", + "@notifFinalizingTrack": { + "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" } } }, - "optionsAutoFallbackSubtitle": "İndirme başarısız olursa diğer hizmetleri dene", - "@optionsAutoFallbackSubtitle": { - "description": "Subtitle for auto fallback" - }, - "extensionPatternsCount": "{count} desen", - "@libraryFilterLocal": { - "description": "Filter chip - show only local library items" - }, - "errorUrlNotRecognizedMessage": "Bu bağlantı desteklenmiyor. URL'nin doğru olduğundan ve uyumlu bir uzantının yüklü olduğundan emin olun.", - "@errorUrlNotRecognizedMessage": { - "description": "Error message - URL not recognized explanation" - }, - "@extensionVerificationBrowserSubtitleExternal": { - "description": "Subtitle when external browser is preferred for extension verification" - }, - "optionsArtistTagMode": "Sanatçı Etiketi Modu", - "libraryFilterMetadataComplete": "Tam meta veriler", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" + "notifEmbeddingMetadata": "Embedding metadata...", + "@notifEmbeddingMetadata": { + "description": "Notification body while embedding metadata into a downloaded track" }, - "@extensionsVersion": { - "description": "Extension version display", + "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", + "@notifAlreadyInLibraryCount": { + "description": "Notification title when track is already in library, with count", "placeholders": { - "version": { - "type": "String" + "completed": { + "type": "int" + }, + "total": { + "type": "int" } } }, - "@downloadNetworkAnySubtitle": { - "description": "Subtitle for any-network option in picker" - }, - "optionsReplayGainSubtitleOn": "Ses yüksekliğini tara ve ReplayGain etiketlerini göm (EBU R128)", - "libraryScanning": "Scanning...", - "@libraryScanning": { - "description": "Status during scan" - }, - "cacheRefresh": "Yenile", - "@actionShuffle": { - "description": "Tooltip for shuffle playback action" - }, - "optionsEmbedLyricsSubtitle": "İndirdiğiniz parçaların yanına senkronize edilmiş şarkı sözlerini kaydedin", - "@optionsEmbedLyricsSubtitle": { - "description": "Subtitle for embed lyrics" - }, - "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", - "extensionEnterValue": "Enter value", - "@settingsDownloadNetworkAny": { - "description": "Network option - use any connection" + "notifAlreadyInLibrary": "Already in Library", + "@notifAlreadyInLibrary": { + "description": "Notification title when track is already in library" }, - "collectionLoved": "Sevilen", - "@collectionLoved": { - "description": "Custom folder for favorite tracks" + "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", + "@notifDownloadCompleteCount": { + "description": "Notification title when download is complete, with count", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } }, - "storeAddRepoTitle": "Uzantı Deposu Ekle", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" + "notifDownloadComplete": "Download Complete", + "@notifDownloadComplete": { + "description": "Notification title when a single download is complete" }, - "collectionNoPlaylistsYet": "Henüz çalma listesi yok", - "@collectionNoPlaylistsYet": { - "description": "Empty state title when user has no playlists" + "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", + "@notifDownloadsFinished": { + "description": "Notification title when queue finishes with some failures", + "placeholders": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } }, - "libraryCleanupMissingFilesSubtitle": "Eski dosya kalıntılarını temizleyin", - "@libraryCleanupMissingFilesSubtitle": { - "description": "Subtitle for cleanup button" + "notifVerificationRequiredTitle": "Verification required", + "@notifVerificationRequiredTitle": { + "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" }, - "folderOrganizationByArtist": "Sanatçıya Göre", - "@folderOrganizationByArtist": { - "description": "Folder option - artist folders" + "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", + "@notifVerificationRequiredBody": { + "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, - "aboutTranslators": "Çevirmenler", - "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", - "editMetadataFieldTitle": "Başlık", - "@editMetadataFieldTitle": { - "description": "Chip label for title field in auto-fill selector" + "notifAllDownloadsComplete": "All Downloads Complete", + "@notifAllDownloadsComplete": { + "description": "Notification title when all downloads finish successfully" }, - "downloadFilenameDescription": "Yer tutucu olarak {artist}, {title}, {album}, {track}, {year}, {date}, {disc} ifadelerini kullanın.", - "@downloadFilenameDescription": { - "description": "Description shown in filename format editor" + "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", + "@notifTracksDownloadedSuccess": { + "description": "Notification body for queue complete - how many tracks were downloaded", + "placeholders": { + "count": { + "type": "int" + } + } }, + "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -4882,371 +4926,430 @@ } } }, - "@libraryFolderNotExist": { - "description": "Error when folder doesn't exist" + "notifDownloadsCanceledTitle": "Downloads canceled", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" }, - "@playlistsCount": { - "description": "Playlist count display", + "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", + "@notifDownloadsCanceledBody": { + "description": "Notification body when downloads are canceled by the user", "placeholders": { "count": { "type": "int" } } }, - "@loadingSharedLink": { - "description": "Status when opening shared URL" - }, - "extensionServiceHealth": "Service health", - "@extensionServiceHealth": { - "description": "Extension capability label for service health checks" + "notifScanningLibrary": "Scanning local library", + "@notifScanningLibrary": { + "description": "Notification title while scanning local library" }, - "@collectionDeletePlaylistsMessage": { - "description": "Confirmation message for deleting selected playlists", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", + "@notifLibraryScanProgressWithTotal": { + "description": "Notification body for library scan progress when total is known", "placeholders": { - "count": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "percentage": { "type": "int" } } }, - "setupStorageDescription": "SpotiFLAC'ın şarkılarınızı kaydetmek için depolama iznine ihtiyacı var.", - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", - "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", - "appearanceThemeLight": "Açık", - "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", - "@queueEmptyHistorySubtitle": { - "description": "Empty state subtitle for download history" - }, - "backupRestoreFailed": "Failed to restore backup", - "@backupRestoreFailed": { - "description": "Snackbar when restore fails" - }, - "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", - "@queueFlacQueuedWithSkipped": { - "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", + "@notifLibraryScanProgressNoTotal": { + "description": "Notification body for library scan progress when total is unknown", "placeholders": { - "addedCount": { + "scanned": { "type": "int" }, - "skippedCount": { + "percentage": { "type": "int" } } }, - "@trackReplayGain": { - "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + "notifLibraryScanComplete": "Library scan complete", + "@notifLibraryScanComplete": { + "description": "Notification title when library scan finishes" }, - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", - "placeholders": { + "notifLibraryScanCompleteBody": "{count} tracks indexed", + "@notifLibraryScanCompleteBody": { + "description": "Notification body for library scan complete - number of indexed tracks", + "placeholders": { "count": { "type": "int" } } }, - "setupFolderChoose": "İndirilecek Klasörü Seç", - "dialogDownloadAllTitle": "Tümünü İndir", - "providerPriorityInfo": "Eğer bir şarkı ilk hizmette mevcut değilse uygulama otomatik olarak bir sonrakini deneyecektir.", - "@providerPriorityInfo": { - "description": "Info tip about fallback behavior" - }, - "@dialogDiscardChanges": { - "description": "Dialog title - unsaved changes warning" - }, - "discographyNoAlbums": "Kullanılabilir albüm yok", - "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", - "cacheNoData": "No cached data", - "@cacheNoData": { - "description": "Label when cache category has no data" - }, - "tutorialStartDownloadSemantics": "İndirmeyi başlat", - "@tutorialStartDownloadSemantics": { - "description": "Accessibility label for idle download button in tutorial demo" - }, - "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", - "aboutTitle": "Hakkında", - "@cueSplitButton": { - "description": "Button text to start CUE splitting" - }, - "appearanceHistoryView": "Geçmiş Düzeni", - "audioAnalysisSampleRate": "Sample Rate", - "@settingsCache": { - "description": "Settings menu item - cache management" - }, - "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", - "cacheTrackLookup": "İzleme arama önbelleği", - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@downloadUsePrimaryArtistOnly": { - "description": "Setting - strip featured artists from folder name" - }, - "@regionCountryIN": { - "description": "Country name for SongLink region picker" - }, - "@libraryFilterQualityLossy": { - "description": "Filter option - lossy compressed audio" + "notifLibraryScanExcluded": "{count} excluded", + "@notifLibraryScanExcluded": { + "description": "Library scan complete suffix - excluded track count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "extensionRefreshStatus": "Refresh status", - "notifAllDownloadsComplete": "All Downloads Complete", - "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", - "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", - "@editMetadataFieldDateHint": { - "description": "Hint text for the edit metadata date field" + "notifLibraryScanErrors": "{count} hata", + "@notifLibraryScanErrors": { + "description": "Library scan complete suffix - error count", + "placeholders": { + "count": { + "type": "int" + } + } }, - "trackMetadataShare": "Paylaş", - "@trackMetadataShare": { - "description": "Action button - share track" + "notifLibraryScanFailed": "Library scan failed", + "@notifLibraryScanFailed": { + "description": "Notification title when library scan fails" }, - "discographyDownloadAllSubtitle": "{albumCount} yayından {count} parça", - "settingsDonateSubtitle": "Buy the developer a coffee", - "libraryFilterDownloaded": "İndirildi", - "downloadNetworkAnySubtitle": "Use WiFi or mobile data", - "@cueSplitNoAudioFile": { - "description": "Error when CUE audio file is missing" + "notifLibraryScanCancelled": "Library scan cancelled", + "@notifLibraryScanCancelled": { + "description": "Notification title when library scan is cancelled by the user" }, "notifLibraryScanStopped": "Scan stopped before completion.", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", - "trackCopyLyrics": "Şarkı sözlerini kopyala", - "@trackCopyLyrics": { - "description": "Action - copy lyrics to clipboard" - }, - "regionCountryAU": "Australia", - "downloadAlbumFolderStructure": "Albüm Klasör Yapısı", - "downloadMusixmatchAuto": "Auto", - "actionDismiss": "Dismiss", - "storeFilterAll": "Tümü", - "extensionsDisabled": "Devre Dışı", - "@logClearLogs": { - "description": "Clear button tooltip" - }, - "dialogDownloadAllMessage": "{count} parça indirilsin mi?", - "@optionsEmbedLyrics": { - "description": "Embed lyrics in audio files" - }, - "tutorialLibraryTitle": "Kitaplığınız", - "optionsCheckUpdatesSubtitle": "Yeni sürüm çıktığında bildir", - "@optionsCheckUpdatesSubtitle": { - "description": "Subtitle for update check" + "@notifLibraryScanStopped": { + "description": "Notification body when library scan is cancelled" }, - "collectionPlaylist": "Çalma listesi", - "@collectionPlaylist": { - "description": "Single playlist label" + "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", + "@notifDownloadingUpdate": { + "description": "Notification title while downloading an app update", + "placeholders": { + "version": { + "type": "String" + } + } }, - "dateMonthsAgo": "{count} ay önce", - "@dateMonthsAgo": { - "description": "Relative date - months ago", + "notifUpdateProgress": "{received} / {total} MB • {percentage}%", + "@notifUpdateProgress": { + "description": "Notification body showing update download progress", "placeholders": { - "count": { + "received": { + "type": "String" + }, + "total": { + "type": "String" + }, + "percentage": { "type": "int" } } }, - "@extensionRemoveButton": { - "description": "Button to uninstall extension" - }, - "collectionPlaylistRenamed": "Çalma listesinin adı değiştirildi", - "collectionCreatePlaylist": "Çalma listesi oluştur", - "homeGoToAlbum": "Albüme Git", - "@homeGoToAlbum": { - "description": "Context menu item to navigate to the album page" - }, - "folderOrganizationByArtistSubtitle": "Her sanatçı için ayrı klasör", - "@optionsClearHistory": { - "description": "Delete all download history" + "notifUpdateReady": "Güncelleme Hazır", + "@notifUpdateReady": { + "description": "Notification title when app update download is complete" }, - "@searchAlbums": { - "description": "Search result category - albums" + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", + "@notifUpdateReadyBody": { + "description": "Notification body when app update is ready to install", + "placeholders": { + "version": { + "type": "String" + } + } }, - "@sectionDebug": { - "description": "Settings section header" + "notifUpdateFailed": "Update Failed", + "@notifUpdateFailed": { + "description": "Notification title when app update download fails" }, - "extensionsVersion": "Versiyon {version}", - "@navHome": { - "description": "Bottom navigation - Home tab" + "notifUpdateFailedBody": "Could not download update. Try again later.", + "@notifUpdateFailedBody": { + "description": "Notification body when app update download fails" }, - "@editMetadataFieldDate": { - "description": "Chip label for date field in auto-fill selector" + "searchTracks": "Tracks", + "@searchTracks": { + "description": "Search filter label - tracks" }, - "downloadUsePrimaryArtistOnly": "Klasörler için yalnızca birincil sanatçıyı kullan", - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", - "@setupStorageGranted": { - "description": "Success message for storage permission" + "homeSearchHintDefault": "Paste supported URL or search...", + "@homeSearchHintDefault": { + "description": "Default placeholder for the main search field on Home" }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", - "a11ySelectAlbum": "Select album {albumName}", - "@a11ySelectAlbum": { - "description": "Accessibility label for selecting an album", + "homeSearchHintProvider": "Search with {providerName}...", + "@homeSearchHintProvider": { + "description": "Placeholder for the main search field when a provider is selected", "placeholders": { - "albumName": { + "providerName": { "type": "String" } } }, - "aboutMobileSource": "Mobil kaynak kodu", - "@aboutMobileSource": { - "description": "Link to mobile GitHub repo" + "homeImportCsvTooltip": "Import playlist (CSV, M3U)", + "@homeImportCsvTooltip": { + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, - "@extensionCustomUrlHandling": { - "description": "Extension detail section title for custom URL handling" + "homeChangeSearchProviderTooltip": "Change search provider", + "@homeChangeSearchProviderTooltip": { + "description": "Tooltip for the Home search provider picker" }, - "@downloadMusixmatchLanguageAuto": { - "description": "Subtitle when no language is set" + "actionPaste": "Yapıştır", + "@actionPaste": { + "description": "Generic action - paste from clipboard" }, - "@cancelDownloadKeep": { - "description": "Dialog button - keep the active download (do not cancel)" + "tutorialSearchHint": "Paste or search...", + "@tutorialSearchHint": { + "description": "Placeholder shown in the tutorial search demo" }, - "libraryFilterSource": "Kaynak", - "@libraryFilterSource": { - "description": "Filter section - source type" + "tutorialDownloadCompletedSemantics": "İndirme tamamlandı", + "@tutorialDownloadCompletedSemantics": { + "description": "Accessibility label for completed download state in tutorial demo" }, - "sectionStorageAccess": "Depolama Erişimi", - "logFilterBySeverity": "Günlükleri önem derecesine göre filtrele", - "libraryFolderNotExist": "Seçilen klasör mevcut değil", - "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", - "albumFolderArtistAlbum": "Sanatçı / Albüm", - "@albumFolderArtistAlbum": { - "description": "Album folder option" + "tutorialDownloadInProgressSemantics": "Download in progress", + "@tutorialDownloadInProgressSemantics": { + "description": "Accessibility label for active download state in tutorial demo" }, - "allFilesAccessDeniedMessage": "İzin reddedildi. Lütfen sistem ayarlarından 'Tüm dosyalara erişim' iznini manuel olarak etkinleştirin.", - "@allFilesAccessDeniedMessage": { - "description": "Message when permission is permanently denied" + "tutorialStartDownloadSemantics": "İndirmeyi başlat", + "@tutorialStartDownloadSemantics": { + "description": "Accessibility label for idle download button in tutorial demo" }, - "editMetadataSelectEmpty": "Empty only", - "settingsLocalLibrarySubtitle": "Müziği tara ve kopyaları tespit et", - "@settingsAutoExportFailed": { - "description": "Setting toggle for auto-export" + "optionsEmbedMetadata": "Embed Metadata", + "@optionsEmbedMetadata": { + "description": "Settings toggle title for writing metadata into downloaded files" }, - "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", - "@tutorialSettingsTitle": { - "description": "Tutorial settings page title" + "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", + "@optionsEmbedMetadataSubtitleOn": { + "description": "Subtitle when metadata embedding is enabled" }, - "libraryFilterMetadataMissingGenre": "Eksik tür", - "@appearanceSelectAccentColor": { - "description": "Accessibility label for picking an accent color", - "placeholders": { - "hex": { - "type": "String" - } - } + "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", + "@optionsEmbedMetadataSubtitleOff": { + "description": "Subtitle when metadata embedding is disabled" }, - "setupFolderDescription": "İndirdiğin şarkıların kaydedileceği klasörü seç.", - "extensionDetailsTags": "Etiketler", - "unknownArtist": "Unknown Artist", - "trackFetchOnlineLyrics": "İnternetten Getir", - "snackbarNoActionDefined": "Bu düğme için tanımlanmış bir işlem yok", - "@snackbarNoActionDefined": { - "description": "Snackbar when an extension button has no action configured" + "trackCoverNoEmbeddedArt": "No embedded album art found", + "@trackCoverNoEmbeddedArt": { + "description": "Message shown when a track file has no embedded cover art" }, - "downloadAllCount": "Tümünü İndir ({count})", - "@downloadAllCount": { - "description": "Download all button with count", + "trackCoverReplace": "Replace Cover", + "@trackCoverReplace": { + "description": "Button label for replacing selected cover art" + }, + "trackCoverPick": "Kapak Seç", + "@trackCoverPick": { + "description": "Button label for selecting cover art" + }, + "trackCoverClearSelected": "Clear selected cover", + "@trackCoverClearSelected": { + "description": "Tooltip for clearing the newly selected cover art" + }, + "trackCoverCurrent": "Current cover", + "@trackCoverCurrent": { + "description": "Label for the currently embedded cover preview" + }, + "trackCoverSelected": "Seçili kapak", + "@trackCoverSelected": { + "description": "Label for the newly selected cover preview" + }, + "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", + "@trackCoverReplaceNotice": { + "description": "Notice shown when a new cover has been selected but not saved yet" + }, + "trackCoverResolution": "Cover resolution", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" + }, + "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" + }, + "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", + "@trackCoverResizeFailed": { + "description": "Error shown when resizing cover art before saving metadata fails" + }, + "actionStop": "Stop", + "@actionStop": { + "description": "Generic action - stop" + }, + "queueFinalizingDownload": "Finalizing download", + "@queueFinalizingDownload": { + "description": "Accessibility label for a queue item that is finalizing" + }, + "queueDownloadNext": "Download next", + "@queueDownloadNext": { + "description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it" + }, + "queueMoveUp": "Move up", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" + }, + "queueMoveDown": "Move down", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" + }, + "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" + }, + "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" + }, + "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" + }, + "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" + }, + "nowPlayingRepeatOff": "Repeat off", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" + }, + "nowPlayingRepeatAll": "Repeat all", + "@nowPlayingRepeatAll": { + "description": "Repeat toggle tooltip when the whole queue repeats" + }, + "nowPlayingRepeatOne": "Repeat one", + "@nowPlayingRepeatOne": { + "description": "Repeat toggle tooltip when the current track repeats" + }, + "queueNetworkFailedOffline": "{count} downloads failed while offline", + "@queueNetworkFailedOffline": { + "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", "placeholders": { "count": { "type": "int" } } }, - "downloadedAlbumDiscHeader": "Disk {discNumber}", - "@backupInvalidFile": { - "description": "Snackbar when the chosen file is not a valid backup" + "queueDownloadedFileMissing": "Downloaded file missing", + "@queueDownloadedFileMissing": { + "description": "Accessibility label when a downloaded file is missing from disk" }, - "@extensionHooksAvailable": { - "description": "Post-processing hooks count", + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." + }, + "queueDownloadCompleted": "Download completed", + "@queueDownloadCompleted": { + "description": "Accessibility label for completed download state in queue" + }, + "queueRateLimitTitle": "Service rate limited", + "@queueRateLimitTitle": { + "description": "Title shown on a failed queue item when the download service rate limits requests" + }, + "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", + "@queueRateLimitMessage": { + "description": "Explanation shown on a failed queue item when the download service rate limits requests" + }, + "appearanceSelectAccentColor": "Select accent color {hex}", + "@appearanceSelectAccentColor": { + "description": "Accessibility label for picking an accent color", "placeholders": { - "count": { - "type": "int" + "hex": { + "type": "String" } } }, - "@logIssueTrackNotFoundSuggestion": { - "description": "Diagnostic badge suggestion when a track is unavailable" + "logAutoScrollOn": "Auto-scroll ON", + "@logAutoScrollOn": { + "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "@snackbarFileNotFound": { - "description": "Snackbar - file doesn't exist" + "logAutoScrollOff": "Auto-scroll OFF", + "@logAutoScrollOff": { + "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "extensionHealthOnline": "Çevrimiçi", - "@extensionHealthOnline": { - "description": "Extension service health status - online" + "logCopyLogs": "Copy logs", + "@logCopyLogs": { + "description": "Tooltip for copying logs" }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", - "trackOptionRemoveFromWishlist": "Remove from Wishlist", - "extensionsFallbackTitle": "Yedekleme Uzantıları", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" + "logClearSearch": "Clear search", + "@logClearSearch": { + "description": "Tooltip for clearing the log search field" }, - "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", - "@albumFolderAlbumOnly": { - "description": "Album folder option" + "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", + "@logIssueIspBlockingLabel": { + "description": "Diagnostic badge label when ISP blocking is detected" }, - "@albumFolderYearAlbumSubtitle": { - "description": "Folder structure example" + "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", + "@logIssueIspBlockingDescription": { + "description": "Diagnostic badge description for ISP blocking" }, - "downloadedAlbumDeleteSelected": "Seçilenleri Sil", - "selectionSelectPlaylistsToDelete": "Select playlists to delete", - "@selectionSelectPlaylistsToDelete": { - "description": "Hint shown when no playlists are selected for deletion" + "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", + "@logIssueIspBlockingSuggestion": { + "description": "Diagnostic badge suggestion for ISP blocking" }, - "storeAddRepoDescription": "Uzantılara göz atmak ve yüklemek için registry.json dosyası içeren bir GitHub depo URL'si girin.", - "appearanceThemeDark": "Koyu", - "downloadedAlbumTapToSelect": "Seçmek için parçalara dokunun", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } + "logIssueRateLimitedLabel": "RATE LIMITED", + "@logIssueRateLimitedLabel": { + "description": "Diagnostic badge label when the service rate limits requests" }, - "@backupRestored": { - "description": "Snackbar after a successful restore" + "logIssueRateLimitedDescription": "Too many requests to the service", + "@logIssueRateLimitedDescription": { + "description": "Diagnostic badge description for rate limiting" }, - "nowPlayingLibraryEmpty": "Your library is empty", - "@nowPlayingLibraryEmpty": { - "description": "Snackbar when shuffle library is requested but library has no tracks" + "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", + "@logIssueRateLimitedSuggestion": { + "description": "Diagnostic badge suggestion for rate limiting" }, - "editMetadataAutoFillNoResults": "No matching metadata found online", - "updateDownloading": "İndiriliyor...", - "trackLyricsSource": "Kaynak: {source}", - "logFilterLevel": "Seviye", - "logNoLogsYet": "Henüz kayıt yok", - "cacheSizeOnly": "{size}", - "@cacheSizeOnly": { - "description": "Cache size only", - "placeholders": { - "size": { - "type": "String" - } - } + "logIssueNetworkErrorLabel": "NETWORK ERROR", + "@logIssueNetworkErrorLabel": { + "description": "Diagnostic badge label for generic network errors" }, - "trackOpenInService": "Open in {serviceName}", - "@trackOpenInService": { - "description": "Button label to open a track in a named music service", + "logIssueNetworkErrorDescription": "Connection issues detected", + "@logIssueNetworkErrorDescription": { + "description": "Diagnostic badge description for generic network errors" + }, + "logIssueNetworkErrorSuggestion": "Check your internet connection", + "@logIssueNetworkErrorSuggestion": { + "description": "Diagnostic badge suggestion for generic network errors" + }, + "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", + "@logIssueTrackNotFoundLabel": { + "description": "Diagnostic badge label when a track is unavailable" + }, + "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", + "@logIssueTrackNotFoundDescription": { + "description": "Diagnostic badge description when a track is unavailable" + }, + "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", + "@logIssueTrackNotFoundSuggestion": { + "description": "Diagnostic badge suggestion when a track is unavailable" + }, + "clickableLookingUpArtist": "Looking up artist...", + "@clickableLookingUpArtist": { + "description": "Snackbar shown while clickable artist metadata is being resolved" + }, + "clickableInformationUnavailable": "{type} information not available", + "@clickableInformationUnavailable": { + "description": "Snackbar shown when clickable metadata cannot open a destination", "placeholders": { - "serviceName": { + "type": { "type": "String" } } }, - "@cacheLibraryCoverDesc": { - "description": "Description of what library cover cache contains" + "extensionDetailsTags": "Etiketler", + "@extensionDetailsTags": { + "description": "Section title for extension tags" }, - "libraryClearConfirmMessage": "Bu işlem, kitaplığınızdaki tüm taranmış parçaları siler. Asıl müzik dosyalarınız silinmez.", - "@dialogImportPlaylistMessage": { - "description": "Dialog message - import playlist confirmation", + "extensionDetailsInformation": "Information", + "@extensionDetailsInformation": { + "description": "Section title for extension metadata information" + }, + "extensionUtilityFunctions": "Utility Functions", + "@extensionUtilityFunctions": { + "description": "Capability label for utility-only extensions" + }, + "actionDismiss": "Dismiss", + "@actionDismiss": { + "description": "Generic action - dismiss" + }, + "setupChangeFolderTooltip": "Change folder", + "@setupChangeFolderTooltip": { + "description": "Tooltip for editing the selected download folder" + }, + "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", + "@a11yOpenTrackByArtist": { + "description": "Accessibility label for opening a track item", "placeholders": { - "count": { - "type": "int" + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" } } }, - "extensionsHomeFeedAuto": "Auto", - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "dateToday": "Bugün", "a11yOpenItem": "Open {itemType} {name}", "@a11yOpenItem": { "description": "Accessibility label for opening a generic item", @@ -5259,844 +5362,1187 @@ } } }, - "audioAnalysisBitDepth": "Bit Depth", - "editMetadataFieldTrackTotal": "Track Total", - "@editMetadataFieldTrackTotal": { - "description": "Label for total tracks field in the edit metadata sheet" - }, - "@editMetadataFieldDiscTotal": { - "description": "Label for total discs field in the edit metadata sheet" - }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", - "@notifDownloadingUpdate": { - "description": "Notification title while downloading an app update", + "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", + "@a11yOpenItemCount": { + "description": "Accessibility label for opening a grouped item with count", "placeholders": { - "version": { + "title": { "type": "String" + }, + "count": { + "type": "int" } } }, - "@csvImportTracks": { - "description": "Label shown in quality picker for CSV import", + "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", + "@a11yOpenAlbumByArtistTrackCount": { + "description": "Accessibility label for opening an album item with track count", "placeholders": { - "count": { + "albumName": { + "type": "String" + }, + "artistName": { + "type": "String" + }, + "trackCount": { "type": "int" } } }, - "trackEditMetadata": "Edit Metadata", - "discographyDownloadAll": "Tümünü İndir", - "@discographyDownloadAll": { - "description": "Option - download entire discography" - }, - "@editMetadataFieldAlbum": { - "description": "Chip label for album field in auto-fill selector" - }, - "albumFolderArtistAlbumSubtitle": "Albümler/Sanatçı Adı/Albüm Adı/", - "extensionHealthServiceUnknown": "Service status unknown", - "navHome": "Ana sayfa", - "queueDownloadStarting": "Starting...", - "@dialogRemoveExtension": { - "description": "Dialog title - uninstall extension" - }, - "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", - "@appearanceAmoledDark": { - "description": "Theme option - pure black" - }, - "qualityHiResFlac": "Hi-Res FLAC", - "selectionSelected": "{count} seçildi", - "extensionDetailsInformation": "Information", - "@extensionDetailsInformation": { - "description": "Section title for extension metadata information" - }, - "discographyDownload": "Diskografiyi İndir", - "editMetadataFieldCopyright": "Copyright", - "@setupOpenSettings": { - "description": "Button to open system settings" - }, - "libraryFilterSort": "Sırala", - "cacheLibraryCoverDesc": "Kapak resmi yerel müzik dosyalarından çıkarıldı. Bir sonraki taramada yeniden çıkarılacaktır.", - "dialogRemoveExtension": "Eklentiyi Kaldır", - "backupExportSectionTitle": "Create backup", - "downloadEmbedLyricsDisabled": "Enable metadata embedding first", - "openInOtherServices": "Open in Other Services", - "actionSelectAll": "Tümünü Seç", - "settingsDownloadNetworkSubtitle": "İndirmeler için hangi ağın kullanılacağını seçin. Yalnızca WiFi olarak ayarlandığında, mobil veriye geçildiğinde indirmeler duraklatılır.", - "downloadFolderOrganization": "Dosya Organizasyonu", - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", - "@tutorialWelcomeTip2": { - "description": "Tutorial welcome tip 2" - }, - "selectionAllSelected": "Tüm parçalar seçildi", - "@selectionAllSelected": { - "description": "Status - all items selected" - }, - "settingsLogsSubtitle": "Hata ayıklama için uygulama günlüklerini görüntüle", - "albumFolderYearAlbumSubtitle": "Albümler/[2005] Albüm Adı/", - "cancelDownloadKeep": "Keep", - "optionsDetailedLoggingOn": "Detaylı günlük kayıt ediliyor", - "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" + "a11yTrackByArtist": "{trackName} by {artistName}", + "@a11yTrackByArtist": { + "description": "Accessibility label for a queue or list track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "regionCountryJP": "Japan", - "notifUpdateFailed": "Update Failed", - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", - "@trackLyricsSaved": { - "description": "Snackbar after lyrics saved", + "a11ySelectAlbum": "Select album {albumName}", + "@a11ySelectAlbum": { + "description": "Accessibility label for selecting an album", "placeholders": { - "fileName": { + "albumName": { "type": "String" } } }, - "downloadLocationSubtitle": "İndirdiğiniz parçaları nereye kaydedeceğinizi seçin", - "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", - "lyricsProvidersDisabledSection": "Disabled ({count})", - "@dateDaysAgo": { - "description": "Relative date - days ago", + "a11yOpenAlbum": "Open album {albumName}", + "@a11yOpenAlbum": { + "description": "Accessibility label for opening an album", "placeholders": { - "count": { - "type": "int" + "albumName": { + "type": "String" } } }, - "librarySourceLocal": "Yerel", - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", - "sectionService": "Servis", - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", - "@lyricsProviderQqMusicDesc": { - "description": "Description for QQ Music provider" + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" }, - "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", - "selectionTapPlaylistsToSelect": "Tap playlists to select", - "notifUpdateFailedBody": "Could not download update. Try again later.", - "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", - "artistPopular": "Popüler", - "extensionRemoveButton": "Uzantıyı Kaldır", - "allFilesAccessEnabledSubtitle": "Herhangi bir klasöre yazabilir", - "@allFilesAccessEnabledSubtitle": { - "description": "Subtitle when all files access is enabled" + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" }, - "extensionsSearchProvider": "Arama Sağlayıcısı", - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", - "selectionBatchConvertConfirmTitle": "Batch Convert", - "extensionMetadataProvider": "Meta Veri Sağlayıcı", - "queueDownloadedFileMissing": "Downloaded file missing", - "logClearLogs": "Kayıtları temizle", - "@downloadAppleQqMultiPerson": { - "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", - "@tutorialWelcomeTip1": { - "description": "Tutorial welcome tip 1" + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" }, - "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", - "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", - "@regionCountryUS": { - "description": "Country name for SongLink region picker" + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" }, - "trackArtist": "Sanatçı", - "extensionCustomUrlHandling": "Custom URL Handling", - "appearanceDynamicColorSubtitle": "Duvar kağıdının renklerini kullan", - "@appearanceDynamicColorSubtitle": { - "description": "Subtitle for dynamic color" + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" }, - "searchSortDefault": "Varsayılan", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" + "settingsApp": "Uygulama", + "@settingsApp": { + "description": "Settings menu item - app settings" }, - "albumFolderStructureDescription": "Choose how album folders are structured", - "@albumFolderStructureDescription": { - "description": "Album folder structure picker description" + "settingsAppSubtitle": "Updates, data, extension repo, debug", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" }, - "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", - "@libraryBuiltInPreviewPlayerSubtitle": { - "description": "Subtitle for built-in preview player option" + "sectionMetadataProviders": "Providers", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" }, - "storageModeAppFolder": "Uygulama Klasörü (Önerilir)", - "@actionPause": { - "description": "Action button - pause download" + "sectionDuplicates": "Yinelenenler", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" }, - "actionPaste": "Yapıştır", - "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", - "downloadNativeWorker": "Native download worker", - "releaseTypeEp": "EP", - "@releaseTypeEp": { - "description": "Badge label for EP releases" + "sectionLyricsProviderOptions": "Provider Options", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", - "cacheRefreshStats": "Refresh stats", - "collectionPlaylistChangeCover": "Change cover image", - "@collectionPlaylistChangeCover": { - "description": "Bottom sheet action to pick a custom cover image for a playlist" + "metadataProvidersTitle": "Metadata Provider Priority", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" }, - "optionsClearHistory": "İndirme Geçmişini Temizle", - "trackGenre": "Tür", - "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", - "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", - "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", - "libraryFilterMetadataMissingArtist": "Missing artist", - "extensionsNoCustomSearch": "Özel arama içeren uzantı bulunamadı", - "@extensionsTitle": { - "description": "Extensions page title" + "metadataProvidersSubtitle": "Drag to set search and metadata source order", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" }, - "extensionDownloadProvider": "İndirme Sağlayıcı", - "@extensionDownloadProvider": { - "description": "Capability - provides downloads" + "downloadDeduplication": "Skip Duplicate Downloads", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" }, - "lyricsMode": "Şarkı Sözü Modu", - "aboutReportIssueSubtitle": "Karşılaştığın herhangi bir problemi bildir", - "@downloadSeparateSinglesFolder": { - "description": "Setting - separate folder for singles" + "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" }, - "appearanceAmoledDark": "AMOLED Koyu", - "logIssueNetworkErrorDescription": "Connection issues detected", - "folderOrganizationByArtistAlbumSubtitle": "Sanatçı klasörlerinin içinde Albüm klasörleri", - "@libraryForceFullScanSubtitle": { - "description": "Subtitle for force full scan button" + "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", + "@downloadDeduplicationWithQualityVariants": { + "description": "Deduplication subtitle when separate quality versions are allowed" }, - "setupGrantPermission": "İzin Ver", - "lyricsProvidersDescription": "Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.", - "dateDaysAgo": "{count} gün önce", - "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", - "downloadLossyMp3Subtitle": "En iyi uyumluluk, parça başına ~10 Mb", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" }, - "nowPlayingDetails": "Details", - "collectionWishlistEmptyTitle": "İstek listesi boş", - "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", - "@snackbarExtensionUpdatedVersion": { - "description": "Snackbar after updating an extension from the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - }, - "version": { - "type": "String" - } - } + "downloadQualityVariants": "Allow different quality versions", + "@downloadQualityVariants": { + "description": "Setting to retain multiple quality versions of the same track" }, - "extensionHealthServiceDegraded": "Service degraded", - "selectionConvertNoConvertible": "No convertible tracks selected", - "setupStorageGranted": "Depolama İzni Verildi!", - "downloadAllowLocalNetwork": "Allow Local Network Access", - "nowPlayingNoLyrics": "No lyrics in this file", - "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", - "@selectionDeleteTracksCount": { - "description": "Button label for deleting selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", + "@downloadQualityVariantsDescription": { + "description": "Description for retaining multiple quality versions" }, - "@libraryForceFullScan": { - "description": "Button to force a complete rescan of library" + "trackOptionDownloadQualityVariant": "Download another quality", + "@trackOptionDownloadQualityVariant": { + "description": "Track menu action to download another quality version" }, - "notifLibraryScanExcluded": "{count} excluded", - "@aboutPaxsenixSubtitle": { - "description": "Subtitle for Paxsenix special thanks entry on the about page" + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" }, - "setupChangeFolderTooltip": "Change folder", - "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", - "@logIssueIspBlockingDescription": { - "description": "Diagnostic badge description for ISP blocking" + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" }, - "libraryClear": "Kitaplığı temizle", - "collectionRemoveFromPlaylist": "Remove from playlist", - "@collectionRemoveFromPlaylist": { - "description": "Tooltip for removing track from playlist" + "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", + "@editMetadataFieldDateHint": { + "description": "Hint text for the edit metadata date field" }, - "backupIncludeSecrets": "Include extension credentials", - "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", - "storeCategoryMetadata": "Metadata", - "@trackLyricsEmbedded": { - "description": "Snackbar - lyrics saved to file" + "editMetadataFieldTrackTotal": "Track Total", + "@editMetadataFieldTrackTotal": { + "description": "Label for total tracks field in the edit metadata sheet" }, "editMetadataFieldDiscTotal": "Disc Total", - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" + "@editMetadataFieldDiscTotal": { + "description": "Label for total discs field in the edit metadata sheet" }, - "libraryFilterLocal": "Yerel", - "tutorialDownloadInProgressSemantics": "Download in progress", - "searchSortDurationLong": "Süre (en uzun)", - "@appearanceLanguage": { - "description": "Language setting title" + "editMetadataFieldComposer": "Besteci", + "@editMetadataFieldComposer": { + "description": "Label for composer field in the edit metadata sheet" }, - "libraryAbout": "Yerel Kütüphane Hakkında", - "@libraryAbout": { - "description": "Section header for about info" + "editMetadataFieldComment": "Yorum", + "@editMetadataFieldComment": { + "description": "Label for comment field in the edit metadata sheet" }, - "cueSplitNoAudioFile": "Bu CUE sayfası için ses dosyası bulunamadı", - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", - "appearanceSelectAccentColor": "Select accent color {hex}", - "@homeAlbumInfoUnavailable": { - "description": "Snackbar when album info cannot be loaded" + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" }, - "trackReplayGain": "Rescan ReplayGain", - "downloadSeparateSinglesFolder": "Ayrı Single Klasörü", - "trackAlbumArtist": "Albüm sanatçısı", - "qualityFlacLossless": "FLAC Kayıpsız", - "@extensionVerificationHelpMessageWaiting": { - "description": "Dialog message when verification may need manual browser help" + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" }, - "tutorialSettingsTitle": "Deneyiminizi Özelleştirin", - "extensionActionFailed": "Action failed", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", - "trackCoverNoEmbeddedArt": "No embedded album art found", - "@trackCoverNoEmbeddedArt": { - "description": "Message shown when a track file has no embedded cover art" + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", - "setupStorageAccessMessageAndroid11": "Android 11 ve sonrasında şarkıların seçili klasörünüze kaydedilebilmesi için \"Bütün dosyalara eriş\" iznine ihtiyaç var.", - "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", - "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", - "optionsPrimaryProvider": "Ana Kaynek", - "@optionsPrimaryProvider": { - "description": "Main search provider setting" + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" }, - "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", - "collectionAddedToLoved": "\"{trackName}\" added to Loved", - "albumFolderArtistAlbumFlat": "Sanatçı / Albüm (Singlelar alt klasörsüz)", - "homeAlbumInfoUnavailable": "Albüm bilgisi mevcut değil", - "settingsLyrics": "Lyrics", - "extensionVerificationBrowserExternal": "External", - "regionCountryIN": "India", - "extensionHealthUnknown": "Unknown", - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", - "settingsAutoExportFailed": "Başarısız indirmeleri otomatik dışa aktar", - "logFilterSection": "Filtre", - "dialogDiscardChanges": "Değişiklikleri İptal Et?", - "@qualityHiResFlacSubtitle": { - "description": "Technical spec for hi-res" + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" }, - "searchTracks": "Tracks", - "searchAlbums": "Albümler", - "trackConvertFormat": "Convert Format", - "metadataProviderPriorityTitle": "Meta Veri Önceliği", - "libraryFolderHint": "Klasör seçmek için dokunun", - "downloadedAlbumDeleteMessage": "Bu albümden {count} {count, plural, =1{parça} other{parça}} parça silinsin mi?\n\nBu işlem dosyaları depolama alanından da kalıcı olarak silecektir.", - "@downloadedAlbumDeleteMessage": { - "description": "Delete confirmation with count", + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, + "editMetadataAdvanced": "Gelişmiş", + "@editMetadataAdvanced": { + "description": "Expandable section label for advanced metadata fields" + }, + "libraryFilterMetadataMissingTrackNumber": "Missing track number", + "@libraryFilterMetadataMissingTrackNumber": { + "description": "Filter option - items missing track number" + }, + "libraryFilterMetadataMissingDiscNumber": "Missing disc number", + "@libraryFilterMetadataMissingDiscNumber": { + "description": "Filter option - items missing disc number" + }, + "libraryFilterMetadataMissingArtist": "Missing artist", + "@libraryFilterMetadataMissingArtist": { + "description": "Filter option - items missing artist" + }, + "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", + "@libraryFilterMetadataIncorrectIsrcFormat": { + "description": "Filter option - items with an invalid ISRC format" + }, + "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, + "libraryFilterMetadataMissingLabel": "Missing label", + "@libraryFilterMetadataMissingLabel": { + "description": "Filter option - items missing record label" + }, + "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", + "@collectionDeletePlaylistsMessage": { + "description": "Confirmation message for deleting selected playlists", "placeholders": { "count": { "type": "int" } } }, - "trackAlbum": "Albüm", - "updateAvailable": "Güncelleme Mevcut", - "optionsEmbedLyrics": "Şarkı Sözlerini Göm", - "trackReEnrichProgress": "Re-enriching metadata...", - "@trackReEnrichProgress": { - "description": "Snackbar while re-enriching metadata" - }, - "audioAnalysisPeak": "Peak", - "@audioAnalysisPeak": { - "description": "Peak amplitude metric label" - }, - "optionsExtensionStoreSubtitle": "Gezinme menüsünde Depo sekmesini göster", - "settingsTitle": "Ayarlar", - "@settingsAbout": { - "description": "Settings section - app info" + "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", + "@collectionPlaylistsDeleted": { + "description": "Snackbar after deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } }, - "cacheExploreFeed": "Besleme önbelleğini keşfedin", - "@dialogDownloadPlaylistsMessage": { - "description": "Dialog message for bulk playlist download confirmation", + "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", + "@collectionAddedTracksToPlaylist": { + "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { - "trackCount": { + "count": { "type": "int" }, - "playlistCount": { - "type": "int" + "playlistName": { + "type": "String" } } }, - "downloadedAlbumSelectedCount": "{count} seçildi", - "downloadAskQualitySubtitle": "Her indirmeden önce kalite seçim ekranını göster", - "filenameShowAdvancedTags": "Gelişmiş etiketleri göster", - "@filenameShowAdvancedTags": { - "description": "Toggle label for showing advanced filename tags" - }, - "@editMetadataFieldComment": { - "description": "Label for comment field in the edit metadata sheet" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", - "cacheLibraryCover": "Kütüphane kapağı önbelleği", - "actionShuffle": "Shuffle", - "backupCreated": "Backup created", - "downloadLossyAacSubtitle": "En iyi mobil uyumluluk, M4A konteyner", - "actionCreate": "Oluştur", - "snackbarAddedToQueueGeneric": "Added to queue", - "downloadedAlbumDownloadedCount": "{count} downloaded", - "snackbarLoadingCueSheet": "CUE sayfası yükleniyor...", - "@trackCoverClearSelected": { - "description": "Tooltip for clearing the newly selected cover art" - }, - "aboutOriginalCreator": "Orijinal SpotiFLAC'ın kurucusu", - "a11yTrackByArtist": "{trackName} by {artistName}", - "audioAnalysisDynamicRange": "Dynamic Range", - "homeChangeSearchProviderTooltip": "Change search provider", - "loadingSharedLink": "Paylaşılan bağlantı yükleniyor...", - "lyricsModeEmbedSubtitle": "Şarkı sözleri FLAC meta verilerinin içinde saklanır", - "setupNotificationBackgroundDescription": "İndirmelerin durumu hakkında bildirim al. Bunu açmak uygulama arka plandayken indirmelerinizi takip etmenizi sağlar.", - "snackbarViewQueue": "Kuyruğu Görüntüle", - "@audioAnalysisDuration": { - "description": "Duration metric label" - }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", - "backupRestored": "Backup restored successfully", - "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", - "@trackConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless conversion of a single file", + "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", + "@collectionAddedTracksToPlaylistWithExisting": { + "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { - "sourceFormat": { - "type": "String" + "count": { + "type": "int" }, - "targetFormat": { + "playlistName": { "type": "String" }, - "quality": { - "type": "String" + "alreadyCount": { + "type": "int" } } }, - "discographySelectAlbumsSubtitle": "Belirli albümleri veya single'ları seçin", - "@discographySelectAlbumsSubtitle": { - "description": "Subtitle for select albums option" - }, - "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", - "errorUrlFetchFailed": "Bu bağlantıdan içerik yüklenemedi. Lütfen tekrar deneyin.", - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", - "dialogSave": "Kaydet", - "trackReEnrichSearching": "Searching metadata online...", - "regionCountryUS": "United States", - "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", - "downloadFilenameFormat": "Dosya adı formatı", - "cueSplitTitle": "Bölünmüş CUE Sayfası", - "settingsAppSubtitle": "Updates, data, extension repo, debug", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "@setupPermissionRequiredMessage": { - "description": "Generic permission required message", + "itemCount": "{count} {count, plural, =1{item} other{items}}", + "@itemCount": { + "description": "Generic item count label", "placeholders": { - "permissionType": { - "type": "String" + "count": { + "type": "int" } } }, - "errorMissingExtensionSource": "{item} yüklenemedi: Eksik eklenti kaynağı", - "albumFolderAlbumOnlySubtitle": "Albümler/Albüm Adı/", - "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", - "extensionVerificationHelpTitleManual": "Open verification manually", - "dialogDiscard": "Vazgeç", - "storageModeSaf": "Özel Klasör (SAF)", - "errorRateLimited": "Aşırı istek gönderildi", - "downloadSelectQuality": "Kalite seçin", - "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", - "collectionFoldersTitle": "Klasörlerim", - "progressFetchingMetadata": "Meta verileri alınıyor... {current}/{total}", - "settingsDownloadNetworkAny": "WiFi + Mobil Veri", - "audioAnalysisDuration": "Duration", - "audioAnalysisAnalyzing": "Analyzing audio...", - "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", - "editMetadataFieldDiscNum": "Disc #", - "@editMetadataFieldDiscNum": { - "description": "Chip label for disc number field in auto-fill selector" - }, - "@noTracksFoundForAlbum": { - "description": "Empty state message when an album has no tracks" - }, - "previewPlay": "Play preview", - "setupPermissionRequiredMessage": "En iyi deneyim için {permissionType} izni zorunludur. Bunu ayarlardan daha sonra değiştirebilirsiniz.", - "aboutVersion": "Versiyon", - "qualityHiResFlacSubtitle": "24-bit / 96kHz'e kadar", - "audioAnalysisSamples": "Samples", - "libraryFilterQualityHiRes": "Hi-Res (24bit)", - "sectionMetadataProviders": "Providers", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "trackCopyright": "Telif Hakkı", - "libraryForceFullScanSubtitle": "Önbelleği yok sayarak tüm dosyaları yeniden tarayın", - "trackCopiedToClipboard": "Panoya kopyalandı", - "optionsEmbedMetadata": "Embed Metadata", - "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", - "@collectionAddedTracksToPlaylistWithExisting": { - "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", + "@trackReEnrichSuccessWithFailures": { + "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", "placeholders": { - "count": { + "successCount": { "type": "int" }, - "playlistName": { - "type": "String" + "total": { + "type": "int" }, - "alreadyCount": { + "failedCount": { "type": "int" } } }, - "storeCategoryIntegration": "Integration", - "storeClearFilters": "Filtreleri temizle", - "navSettings": "Ayarlar", - "@homeRecent": { - "description": "Section header for recent searches" + "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "@selectionDeleteTracksCount": { + "description": "Button label for deleting selected tracks", + "placeholders": { + "count": { + "type": "int" + } + } }, - "sectionApp": "Uygulama", - "@sectionLanguage": { - "description": "Settings section header for language" + "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", + "@queueDownloadSpeedStatus": { + "description": "Queue status while downloading with speed", + "placeholders": { + "speed": { + "type": "String" + } + } }, - "downloadFilterContributingDisabled": "Full Album Artist string used", - "albumFolderArtistAlbumSinglesSubtitle": "Sanatçı/Albüm/ ve Sanatçı/Singlelar/", - "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", - "lyricsProvidersSaved": "Lyrics provider priority saved", - "@trackReplayGainFailed": { - "description": "Snackbar message when ReplayGain scan/write fails" + "queueDownloadStarting": "Starting...", + "queueCheckingDownloadSession": "Checking download session...", + "queueResolvingDownloadMetadata": "Resolving track metadata...", + "queueResolvingDownloadStream": "Preparing audio stream...", + "queueWaitingForVerification": "Waiting for verification...", + "queueResumingAfterVerification": "Resuming after verification...", + "@queueDownloadStarting": { + "description": "Queue status before download progress is available" }, - "trackTrackName": "Parça adı", - "homeRecent": "En son", - "recentEmpty": "Henüz son kullanılan öğe yok", - "cacheClearAll": "Clear all cache", - "trackReEnrichFieldReleaseInfo": "Date & ISRC", - "regionCountryMX": "Mexico", - "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", - "editMetadataFieldAlbum": "Album", - "settingsAbout": "Hakkında", - "libraryFilterTitle": "Filtreler", - "cleanupOrphanedDownloadsResult": "Geçmişten {count} adet yetim kayıt kaldırıldı", - "extensionHooksAvailable": "{count} kanca kullanılabilir", - "backupContentsSettings": "App settings", - "trackLyricsEmbedded": "Şarkı sözleri başarıyla gömüldü", - "optionsUpdateChannelPreview": "Önizleme sürümlerini al", - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "libraryForceFullScan": "Tam Taramayı Zorla", - "snackbarProviderPrioritySaved": "Sağlayıcı önceliği kaydedildi", - "collectionFavoriteArtistsEmptySubtitle": "Bir sanatçının sayfasındaki kalbe dokunarak onu burada tutmaya devam edin", - "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", - "extensionServiceStatus": "Service Status", - "dateWeeksAgo": "{count} hafta önce", - "historyFilterSingles": "Single'lar", - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", - "trackLyricsSaved": "Lyrics saved to {fileName}", - "cacheClearAllConfirmTitle": "Clear all cache?", - "noTracksFoundForAlbum": "Bu albüm için hiçbir parça bulunamadı", - "sectionLanguage": "Dil", - "@logIssueTrackNotFoundDescription": { - "description": "Diagnostic badge description when a track is unavailable" + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." }, - "setupSelectFolder": "Klasör Seç", - "dateYesterday": "Dün", - "collectionAddToPlaylist": "Add to playlist", - "snackbarUnsupportedAudioFormat": "Unsupported audio format", - "libraryScanCancelled": "Scan cancelled", - "appearanceLanguage": "Uygulama Dili", - "extensionsTitle": "Eklentiler", - "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", - "permissionNotification": "Bildirim", - "notifUpdateReady": "Güncelleme Hazır", - "lyricsModeDescription": "Şarkı sözlerinin indirmelerinizle birlikte nasıl kaydedileceğini seçin", - "downloadFrom": "İndirme Kaynağı", - "collectionWishlistEmptySubtitle": "Daha sonra indirmek istediğiniz parçaları kaydetmek için parçaların üzerine + işaretiyle dokunun", - "cueSplitSplitting": "CUE sayfası bölünüyor... ({current}/{total})", - "trackOptionAddToWishlist": "Add to Wishlist", - "settingsBackup": "Backup & Restore", - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", - "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", - "extensionsNoDownloadProvider": "İndirme sağlayıcısı olan uzantı yok", - "libraryFilterSortGenreAsc": "Tür (A-Z)", - "trackReplayGainFailed": "Failed to add ReplayGain tags", - "collectionPlaylistRemoveCover": "Remove cover image", - "storeEmptyNoResults": "Uzantı bulunamadı", - "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", - "editMetadataFieldComment": "Yorum", - "settingsMetadata": "Metadata", - "settingsCache": "Depolama ve Önbellek", - "providerPriorityFallbackExtensionsHint": "Burada yalnızca indirme sağlayıcısı yeteneğine sahip olan ve etkinleştirilmiş uzantılar listelenir.", - "libraryFilterAll": "All", - "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", - "extensionsProviderPrioritySection": "Sağlayıcı Önceliği", - "storeChangeRepoTooltip": "Depoyu değiştir", - "snackbarFailedToInstall": "Eklenti yüklenirken hata oluştu", - "libraryScanSubtitle": "Ses dosyaları için tara", - "snackbarExtensionInstalled": "{extensionName} yüklendi.", - "setupOpenSettings": "Ayarları Aç", - "extensionsInstalledSection": "Kurulu uzantılar", - "aboutLinks": "Linkler", - "trackCoverClearSelected": "Clear selected cover", - "libraryAutoScanWeekly": "Haftalık", - "downloadMusixmatchLanguageAuto": "Auto (original language)", - "optionsDefaultSearchTab": "Varsayılan Arama Sekmesi", - "downloadPrimaryArtistOnlyOn": "Primary only: On", - "folderOrganizationDescription": "İndirilenleri klasörlerle organize et", - "@folderOrganizationDescription": { - "description": "Folder organization sheet description" + "a11ySelectTrack": "Select track", + "@a11ySelectTrack": { + "description": "Accessibility label for selecting a track" }, - "lyricsModeEmbed": "Dosyaya göm", - "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", - "@extensionsSearchProviderDescription": { - "description": "Search provider setting description" + "a11yDeselectTrack": "Deselect track", + "@a11yDeselectTrack": { + "description": "Accessibility label for deselecting a track" }, - "libraryFilterQualityLossy": "Kayıplı", - "actionPause": "Duraklat", - "csvImportTracks": "CSV'den {count} şarkı", - "actionGo": "Go", - "sectionDebug": "Hata ayıklama", - "editMetadataFieldDate": "Date", - "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", - "sectionPerformance": "Performans", - "extensionsDownloadPrioritySubtitle": "İndirme servisi sırasını ayarla", - "cacheAppDirectoryDesc": "HTTP yanıtları, WebView verileri ve diğer geçici uygulama verileri.", - "sectionData": "Veri", - "notifFinalizingTrack": "Finalizing {trackName}", - "snackbarFileNotFound": "Dosya bulunamadı", - "extensionQualityOptions": "Kalite Seçenekleri", - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", - "storeRepoDialogTitle": "Uzantı Deposu", - "extensionsSearchProviderDescription": "Parça aramak için hangi servisin kullanılacağını seçin", - "albumFolderAlbumOnly": "Yalnızca Albüm", - "nowPlayingOpenInExternalPlayer": "Open in external player", - "cueSplitButton": "Parçalara Ayrılmış", - "updateRequiredTitle": "Update required", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" + "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", + "@a11yPlayTrackByArtist": { + "description": "Accessibility label for playing a local library track", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } }, - "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", + "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", + "@storeExtensionsCount": { + "description": "Store extension result count", "placeholders": { "count": { "type": "int" } } }, - "appearanceHeroAnimations": "Hero animations", - "@appearanceHeroAnimations": { - "description": "Toggle for shared-element (Hero) transitions" + "storeRequiresVersion": "Requires v{version}+", + "@storeRequiresVersion": { + "description": "Store compatibility badge for minimum app version", + "placeholders": { + "version": { + "type": "String" + } + } }, - "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", - "@appearanceHeroAnimationsSubtitle": { - "description": "Subtitle for the Hero animations toggle" + "actionGo": "Go", + "@actionGo": { + "description": "Generic action button label" + }, + "logIssueSummary": "Issue Summary", + "@logIssueSummary": { + "description": "Header for log issue analysis summary" + }, + "logTotalErrors": "Total errors: {count}", + "@logTotalErrors": { + "description": "Total error count in log issue analysis", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "logAffectedDomains": "Affected: {domains}", + "@logAffectedDomains": { + "description": "Affected domains in log issue analysis", + "placeholders": { + "domains": { + "type": "String" + } + } + }, + "libraryScanCancelled": "Scan cancelled", + "@libraryScanCancelled": { + "description": "Library scan status when a scan was cancelled" + }, + "libraryScanCancelledSubtitle": "You can retry the scan when ready.", + "@libraryScanCancelledSubtitle": { + "description": "Library scan status subtitle after cancellation" + }, + "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", + "@libraryDownloadsHistoryExcluded": { + "description": "Library count note for downloaded history items excluded from the local list", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadNativeWorker": "Native download worker", + "@downloadNativeWorker": { + "description": "Setting title for Android native download worker" + }, + "downloadNativeWorkerSubtitle": "Android background service for extension downloads", + "@downloadNativeWorkerSubtitle": { + "description": "Setting subtitle for Android native download worker" + }, + "extensionServiceStatus": "Service Status", + "@extensionServiceStatus": { + "description": "Extension detail section header for service status" + }, + "extensionServiceHealth": "Service health", + "@extensionServiceHealth": { + "description": "Extension capability label for service health checks" + }, + "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", + "@extensionHealthChecksConfigured": { + "description": "Extension service health check count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", + "@extensionOauthConnectHint": { + "description": "Hint for an OAuth login link field before connecting Spotify" + }, + "extensionLastChecked": "Last checked {time}", + "@extensionLastChecked": { + "description": "Timestamp for the latest extension service health check", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "extensionRefreshStatus": "Refresh status", + "@extensionRefreshStatus": { + "description": "Tooltip for refreshing extension service health status" + }, + "extensionCustomUrlHandling": "Custom URL Handling", + "@extensionCustomUrlHandling": { + "description": "Extension detail section title for custom URL handling" + }, + "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", + "@extensionCustomUrlHandlingSubtitle": { + "description": "Extension detail subtitle for custom URL handling" + }, + "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", + "@extensionCustomUrlHandlingShareHint": { + "description": "Extension detail hint explaining share-to-app URL handling" + }, + "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", + "@extensionSettingsCount": { + "description": "Count of settings exposed by an extension quality option", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionHealthOnline": "Çevrimiçi", + "@extensionHealthOnline": { + "description": "Extension service health status - online" + }, + "extensionHealthDegraded": "Degraded", + "@extensionHealthDegraded": { + "description": "Extension service health status - degraded" + }, + "extensionHealthOffline": "Çevrimdışı", + "@extensionHealthOffline": { + "description": "Extension service health status - offline" + }, + "extensionHealthNotConfigured": "Not configured", + "@extensionHealthNotConfigured": { + "description": "Extension service health status - not configured" + }, + "extensionHealthUnknown": "Unknown", + "@extensionHealthUnknown": { + "description": "Extension service health status - unknown" + }, + "extensionHealthRequired": "gerekli", + "@extensionHealthRequired": { + "description": "Label for a required extension service health check" + }, + "extensionSettingNotSet": "Not set", + "@extensionSettingNotSet": { + "description": "Value shown when an extension setting has no value" + }, + "extensionActionFailed": "Action failed", + "@extensionActionFailed": { + "description": "Fallback error when an extension action fails without details" + }, + "extensionEnterValue": "Enter value", + "@extensionEnterValue": { + "description": "Hint for editing an extension setting value" + }, + "extensionHealthServiceOnline": "Service online", + "@extensionHealthServiceOnline": { + "description": "Tooltip for online extension service" + }, + "extensionHealthServiceDegraded": "Service degraded", + "@extensionHealthServiceDegraded": { + "description": "Tooltip for degraded extension service" + }, + "extensionHealthServiceOffline": "Service offline", + "@extensionHealthServiceOffline": { + "description": "Tooltip for offline extension service" + }, + "extensionHealthServiceUnknown": "Service status unknown", + "@extensionHealthServiceUnknown": { + "description": "Tooltip for unknown extension service health" + }, + "audioAnalysisStereo": "Stereo", + "@audioAnalysisStereo": { + "description": "Audio channel layout label - stereo" + }, + "audioAnalysisMono": "Mono", + "@audioAnalysisMono": { + "description": "Audio channel layout label - mono" + }, + "trackOpenInService": "Open in {serviceName}", + "@trackOpenInService": { + "description": "Button label to open a track in a named music service", + "placeholders": { + "serviceName": { + "type": "String" + } + } + }, + "trackLyricsEmbeddedSource": "Embedded", + "@trackLyricsEmbeddedSource": { + "description": "Lyrics source label for embedded lyrics" + }, + "unknownAlbum": "Unknown Album", + "@unknownAlbum": { + "description": "Fallback album name when metadata is missing" + }, + "unknownArtist": "Unknown Artist", + "@unknownArtist": { + "description": "Fallback artist name when metadata is missing" + }, + "permissionAudio": "Ses", + "@permissionAudio": { + "description": "Audio permission type label" + }, + "permissionStorage": "Depolama", + "@permissionStorage": { + "description": "Storage permission type label" + }, + "permissionNotification": "Bildirim", + "@permissionNotification": { + "description": "Notification permission type label" + }, + "errorInvalidFolderSelected": "Invalid folder selected", + "@errorInvalidFolderSelected": { + "description": "Error when the selected folder is invalid" + }, + "storeAnyVersion": "Any", + "@storeAnyVersion": { + "description": "Store detail value when any app version is accepted" + }, + "storeCategoryMetadata": "Metadata", + "@storeCategoryMetadata": { + "description": "Store extension category - metadata" + }, + "storeCategoryDownload": "Download", + "@storeCategoryDownload": { + "description": "Store extension category - download" + }, + "storeCategoryUtility": "Utility", + "@storeCategoryUtility": { + "description": "Store extension category - utility" + }, + "storeCategoryLyrics": "Lyrics", + "@storeCategoryLyrics": { + "description": "Store extension category - lyrics" + }, + "storeCategoryIntegration": "Integration", + "@storeCategoryIntegration": { + "description": "Store extension category - integration" + }, + "artistReleases": "Sürümler", + "@artistReleases": { + "description": "Section header for all artist releases" + }, + "editMetadataSelectNone": "None", + "@editMetadataSelectNone": { + "description": "Button to clear selected fields for auto-fill" + }, + "queueRetryAllFailed": "Retry {count} failed", + "@queueRetryAllFailed": { + "description": "Button to retry every failed download in the queue", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "settingsSaveDownloadHistory": "Save download history", + "@settingsSaveDownloadHistory": { + "description": "Settings switch title for storing completed downloads in history" + }, + "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "@settingsSaveDownloadHistorySubtitle": { + "description": "Settings switch subtitle for storing completed downloads in history" + }, + "dialogDisableHistoryTitle": "Turn off download history?", + "@dialogDisableHistoryTitle": { + "description": "Confirmation dialog title shown before disabling download history" + }, + "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "@dialogDisableHistoryMessage": { + "description": "Confirmation dialog message shown before disabling download history" + }, + "dialogDisableAndClear": "Turn off and clear", + "@dialogDisableAndClear": { + "description": "Confirmation action to disable download history and clear existing entries" + }, + "openInOtherServices": "Open in Other Services", + "@openInOtherServices": { + "description": "Title and tooltip for finding the current collection in other services" + }, + "shareSheetNoExtensions": "No other compatible services", + "@shareSheetNoExtensions": { + "description": "Empty state when no extensions can be searched for cross-service links" + }, + "shareSheetNotFound": "Not found", + "@shareSheetNotFound": { + "description": "Cross-service share sheet row subtitle when a service has no match" + }, + "shareSheetCopyLink": "Copy Link", + "@shareSheetCopyLink": { + "description": "Tooltip for copying a cross-service link" + }, + "shareSheetLinkCopied": "{service} link copied", + "@shareSheetLinkCopied": { + "description": "Snackbar after copying a cross-service link", + "placeholders": { + "service": {} + } + }, + "libraryPlayback": "Playback", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "External player", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Built-in preview player", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Now Playing", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Nothing is playing", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimize", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Up next", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, + "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, + "nowPlayingOpenInExternalPlayer": "Open in external player", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Player", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lyrics", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "No lyrics in this file", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Your library is empty", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Shuffle on", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Play in order", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Shuffle library", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Queue is empty", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "No metadata available", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" + }, + "snackbarPlayingNext": "Playing next", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Added to queue", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Shuffle", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" + }, + "downloadPrimaryArtistOnlyOn": "Primary only: On", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Original quality", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "trackConvertDithering": "Dithering", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "Resampler", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "None", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "Triangular HP", + "@trackConvertDitherTriangularHp": { + "description": "Lossless conversion high-pass triangular dither option" + }, + "trackConvertResamplerSwr": "SWR", + "@trackConvertResamplerSwr": { + "description": "Lossless conversion default FFmpeg swresample resampler option" + }, + "trackConvertResamplerSoxr": "SoXr", + "@trackConvertResamplerSoxr": { + "description": "Lossless conversion SoX resampler option" + }, + "updateSeeReleaseNotes": "See release notes for details.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Unknown title", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Play next", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Add to queue", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + }, + "version": { + "type": "String" + } + } + }, + "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" + }, + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" + }, + "trackCoverOnline": "Online cover", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" + }, + "regionCountryUS": "United States", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" + }, + "regionCountryGB": "United Kingdom", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" + }, + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloads": "Concurrent downloads", - "@settingsConcurrentDownloads": { - "description": "Setting title - how many tracks download at the same time" + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" }, - "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", - "@settingsConcurrentDownloadsSubtitle": { - "description": "Subtitle explaining the concurrent downloads picker" + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsOne": "1 track at a time", - "@concurrentDownloadsOne": { - "description": "Concurrent downloads option - sequential" + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" }, - "concurrentDownloadsCount": "Up to {count} tracks at once", - "@concurrentDownloadsCount": { - "description": "Concurrent downloads option - parallel", - "placeholders": { - "count": { - "type": "int" - } - } + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalization": "Volume normalization", - "@libraryPlaybackNormalization": { - "description": "Toggle title for ReplayGain playback normalization in the built-in player" + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" }, - "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", - "@libraryPlaybackNormalizationSubtitle": { - "description": "Subtitle explaining playback volume normalization" + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysis": "Audio analysis cache", - "@cacheAudioAnalysis": { - "description": "Cache item title for saved audio analysis results" + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" }, - "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", - "@cacheAudioAnalysisDesc": { - "description": "Description of what audio analysis cache contains" + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginal": "Keep original file", - "@trackConvertKeepOriginal": { - "description": "Toggle to preserve the source file during conversion" + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" }, - "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", - "@trackConvertKeepOriginalDescription": { - "description": "Description for preserving the source file during conversion" + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" }, - "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", - "@trackConvertConfirmKeepOriginal": { - "description": "Confirmation message when the source file will be preserved", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" }, - "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": { - "description": "Batch conversion confirmation when source files will be preserved", - "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - } - } + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" }, - "downloadFolderAccessLostTitle": "Download folder access lost", - "@downloadFolderAccessLostTitle": { - "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" }, - "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", - "@downloadFolderAccessLostSubtitle": { - "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" }, - "downloadFolderReselect": "Re-select folder", - "@downloadFolderReselect": { - "description": "Button that reopens the folder picker to restore download folder access" + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" }, - "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", - "@downloadErrorSafPermissionLost": { - "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" + "extensionVerificationHelpTitleManual": "Open verification manually", + "@extensionVerificationHelpTitleManual": { + "description": "Dialog title when automatic browser launch for verification fails" }, - "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", - "@downloadErrorFolderAccessLost": { - "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" + "extensionVerificationHelpTitleWaiting": "Verification still waiting", + "@extensionVerificationHelpTitleWaiting": { + "description": "Dialog title when verification is taking longer than expected" }, - "notifVerificationRequiredTitle": "Verification required", - "@notifVerificationRequiredTitle": { - "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" + "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", + "@extensionVerificationHelpMessageManual": { + "description": "Dialog message when automatic browser launch for verification fails" }, - "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", - "@notifVerificationRequiredBody": { - "description": "Notification body prompting the user to return to the app to solve a verification challenge" + "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", + "@extensionVerificationHelpMessageWaiting": { + "description": "Dialog message when verification may need manual browser help" }, - "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", - "@downloadDeduplicationWithQualityVariants": { - "description": "Deduplication subtitle when separate quality versions are allowed" + "extensionVerificationClose": "Close", + "@extensionVerificationClose": { + "description": "Button to dismiss the extension verification help dialog" }, - "downloadQualityVariants": "Allow different quality versions", - "@downloadQualityVariants": { - "description": "Setting to retain multiple quality versions of the same track" + "extensionVerificationCopyLink": "Copy link", + "@extensionVerificationCopyLink": { + "description": "Button to copy the extension verification URL" }, - "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", - "@downloadQualityVariantsDescription": { - "description": "Description for retaining multiple quality versions" + "extensionVerificationLinkCopied": "Verification link copied", + "@extensionVerificationLinkCopied": { + "description": "Snackbar after copying the extension verification URL" }, - "trackOptionDownloadQualityVariant": "Download another quality", - "@trackOptionDownloadQualityVariant": { - "description": "Track menu action to download another quality version" + "extensionVerificationOpenBrowser": "Open browser", + "@extensionVerificationOpenBrowser": { + "description": "Button to open the extension verification URL in a browser" }, - "queueCheckingDownloadSession": "Checking download session...", - "queueResolvingDownloadMetadata": "Resolving track metadata...", - "queueResolvingDownloadStream": "Preparing audio stream...", - "queueWaitingForVerification": "Waiting for verification...", - "queueResumingAfterVerification": "Resuming after verification...", "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", - "collectionExportM3u": "Export as M3U8", - "collectionExportM3uDone": "Exported {exported} of {total} tracks", - "collectionExportM3uNone": "No downloaded files to export", - "collectionExportM3uFailed": "Export failed", - "trackOpenOn": "Open on...", - "trackOpenOnNoLinks": "No platform links found for this track.", - "libraryReviewDuplicates": "Review duplicates", - "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", - "duplicatesTitle": "Duplicates", - "duplicatesEmpty": "No duplicate tracks found.", - "duplicatesKeepBest": "Keep best", - "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", - "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", - "downloadAutoConvert": "Auto-convert after download", - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "downloadAutoConvertFormat": "Output format", - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "downloadAutoConvertBitrate": "Output quality", - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "appearanceForceBlur": "Always use blur effects", - "appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "editMetadataAutoFillSource": "Metadata source", - "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", - "editMetadataAutoFillFind": "Find metadata", - "editMetadataAutoFillPreview": "Data from {source}", - "editMetadataAutoFillCoverAvailable": "Cover artwork available", - "editMetadataAutoFillApply": "Apply selected data", - "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", - "libraryDefaultView": "Default view", - "libraryDefaultViewLastUsed": "Last used", - "audioAnalysisCutoffNotDetected": "Not detected", - "queueCancelledTitle": "Download cancelled", - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", - "trackCoverResolution": "Cover resolution", - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", - "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", - "queueDownloadNext": "Download next", - "queueMoveUp": "Move up", - "queueMoveDown": "Move down", - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", - "nowPlayingRepeatOff": "Repeat off", - "nowPlayingRepeatAll": "Repeat all", - "nowPlayingRepeatOne": "Repeat one", - "queueNetworkFailedOffline": "{count} downloads failed while offline", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "libraryFilterMetadataMissingIsrc": "Missing ISRC" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file From 7407f5a8dcc15217fd8ad0a76f6452931bed3ebe Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:54 +0700 Subject: [PATCH 15/59] New translations app_en.arb (Chinese Simplified) [ci skip] --- lib/l10n/arb/app_zh_CN.arb | 57 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/lib/l10n/arb/app_zh_CN.arb b/lib/l10n/arb/app_zh_CN.arb index 71b173083..4f2059e13 100644 --- a/lib/l10n/arb/app_zh_CN.arb +++ b/lib/l10n/arb/app_zh_CN.arb @@ -1,5 +1,5 @@ { - "@@locale": "zh_CN", + "@@locale": "zh-CN", "@@last_modified": "2026-04-28", "appName": "SpotiFLAC 移动版", "@appName": { @@ -461,6 +461,18 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" + }, + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" + }, + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" + }, "aboutAppDescription": "搜索音乐元数据、管理扩展并整理你的乐库。", "@aboutAppDescription": { "description": "App description in header card" @@ -3889,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -6047,6 +6059,45 @@ "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, "nowPlayingOpenInExternalPlayer": "Open in external player", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" @@ -6494,4 +6545,4 @@ "@optionsEmbeddedCoverSizeOriginal": { "description": "Option that preserves the provider artwork at its original resolution" } -} +} \ No newline at end of file From 742828c11ee2b5a80db8f5dea1184fb7cafcb5bc Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:56 +0700 Subject: [PATCH 16/59] New translations app_en.arb (Hindi) [ci skip] --- lib/l10n/arb/app_hi.arb | 55 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/lib/l10n/arb/app_hi.arb b/lib/l10n/arb/app_hi.arb index da2d86806..022cec204 100644 --- a/lib/l10n/arb/app_hi.arb +++ b/lib/l10n/arb/app_hi.arb @@ -461,6 +461,18 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" + }, + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" + }, + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" + }, "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", "@aboutAppDescription": { "description": "App description in header card" @@ -3889,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -6047,6 +6059,45 @@ "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, "nowPlayingOpenInExternalPlayer": "Open in external player", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" @@ -6494,4 +6545,4 @@ "@optionsEmbeddedCoverSizeOriginal": { "description": "Option that preserves the provider artwork at its original resolution" } -} +} \ No newline at end of file From 94778094b3912f2b2fee2a06902808f7c480c7d9 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 17:10:38 +0700 Subject: [PATCH 17/59] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 62 ++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index 64de4f15c..ce0370015 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -461,11 +461,11 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "aboutUnituneDesc": "Résolveur de liens musicaux open source développé par Flaze, utilisé pour la correspondance de repli multiplateforme.", "@aboutUnituneDesc": { "description": "Credit for the UniTune resolver" }, - "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "aboutMusicBrainzDesc": "Base de données musicale ouverte gérée par MetaBrainz et sa communauté, utilisée pour enregistrer des références croisées.", "@aboutMusicBrainzDesc": { "description": "Credit for the MusicBrainz database" }, @@ -1576,7 +1576,7 @@ "@trackAudioQuality": { "description": "Metadata label - audio quality" }, - "libraryQualityLabelFileFormat": "File format", + "libraryQualityLabelFileFormat": "Format de fichier", "@libraryQualityLabelFileFormat": { "description": "Library audio quality label mode that shows the detected file format" }, @@ -1995,23 +1995,23 @@ "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadAutoConvert": "Auto-convert after download", + "downloadAutoConvert": "Conversion automatique après le téléchargement", "@downloadAutoConvert": { "description": "Toggle for automatic post-download audio conversion" }, - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "downloadAutoConvertSubtitle": "Convertissez les téléchargements terminés dans un format compressé avec perte plus léger. Le fichier d'origine n'est remplacé qu'une fois la conversion réussie.", "@downloadAutoConvertSubtitle": { "description": "Explanation of safe automatic post-download conversion" }, - "downloadAutoConvertFormat": "Output format", + "downloadAutoConvertFormat": "Format de sortie", "@downloadAutoConvertFormat": { "description": "Automatic conversion output format setting" }, - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "downloadAutoConvertFormatSubtitle": "Choisissez le format avec perte à utiliser pour les téléchargements qui viennent d'être terminés.", "@downloadAutoConvertFormatSubtitle": { "description": "Automatic conversion format picker explanation" }, - "downloadAutoConvertBitrate": "Output quality", + "downloadAutoConvertBitrate": "Qualité de sortie", "@downloadAutoConvertBitrate": { "description": "Automatic conversion bitrate setting" }, @@ -5535,23 +5535,23 @@ "@editMetadataFieldAlbumTypeHint": { "description": "Hint for the release type metadata field" }, - "editMetadataFieldExplicit": "Explicit", + "editMetadataFieldExplicit": "Explicite", "@editMetadataFieldExplicit": { "description": "Label for the explicit content metadata field" }, - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "editMetadataFieldExplicitHint": "Signaler ce morceau comme contenant du contenu explicite", "@editMetadataFieldExplicitHint": { "description": "Description for the explicit content metadata switch" }, - "metadataExplicitValue": "Explicit", + "metadataExplicitValue": "Explicite", "@metadataExplicitValue": { "description": "Displayed value when a track is marked explicit" }, - "editMetadataFieldUpc": "UPC / Barcode", + "editMetadataFieldUpc": "UPC / Code-barres", "@editMetadataFieldUpc": { "description": "Label for the release barcode metadata field" }, - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "editMetadataFieldUpcHint": "UPC, EAN ou GTIN sous forme numérique", "@editMetadataFieldUpcHint": { "description": "Hint for the release barcode metadata field" }, @@ -6047,11 +6047,11 @@ "@nowPlayingUpNext": { "description": "Title for the playback queue sheet" }, - "nowPlayingPreviousTrack": "Previous track", + "nowPlayingPreviousTrack": "Piste précédente", "@nowPlayingPreviousTrack": { "description": "Tooltip for the previous-track playback control" }, - "nowPlayingNextTrack": "Next track", + "nowPlayingNextTrack": "Piste suivante", "@nowPlayingNextTrack": { "description": "Tooltip for the next-track playback control" }, @@ -6059,11 +6059,11 @@ "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, - "nowPlayingSleepTimer": "Sleep timer", + "nowPlayingSleepTimer": "Minuterie", "@nowPlayingSleepTimer": { "description": "Menu item and sheet title for the playback sleep timer" }, - "nowPlayingSleepTimerActive": "Ends at {time}", + "nowPlayingSleepTimerActive": "Se termine à {time}", "@nowPlayingSleepTimerActive": { "description": "Active sleep timer deadline shown in the player menu", "placeholders": { @@ -6072,7 +6072,7 @@ } } }, - "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "nowPlayingSleepTimerMinutes": "{minutes, plural, one {}=1{1 minute} other{{minutes} minutes}}", "@nowPlayingSleepTimerMinutes": { "description": "Duration choice for the playback sleep timer", "placeholders": { @@ -6081,11 +6081,11 @@ } } }, - "nowPlayingSleepTimerOff": "Turn off sleep timer", + "nowPlayingSleepTimerOff": "Désactiver la minuterie", "@nowPlayingSleepTimerOff": { "description": "Action to cancel the active playback sleep timer" }, - "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "nowPlayingSleepTimerSet": "Minuterie réglée sur {duration}", "@nowPlayingSleepTimerSet": { "description": "Confirmation after setting the playback sleep timer", "placeholders": { @@ -6094,7 +6094,7 @@ } } }, - "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "nowPlayingSleepTimerCancelled": "La minuterie est désactivée", "@nowPlayingSleepTimerCancelled": { "description": "Confirmation after cancelling the playback sleep timer" }, @@ -6505,43 +6505,43 @@ "@settingsGroupHelp": { "description": "Settings group covering the about page and donations" }, - "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "libraryFilterMetadataMissingLyrics": "Paroles manquantes", "@libraryFilterMetadataMissingLyrics": { "description": "Filter option for tracks without embedded or sidecar lyrics" }, - "trackOptionCopyTrackName": "Copy track name", + "trackOptionCopyTrackName": "Copier le titre de la piste", "@trackOptionCopyTrackName": { "description": "Track menu action that copies the track title" }, - "trackOptionCopyArtist": "Copy artist", + "trackOptionCopyArtist": "Copier l'artiste", "@trackOptionCopyArtist": { "description": "Track menu action that copies the artist name" }, - "trackOptionCopyTrackAndArtist": "Copy track and artist", + "trackOptionCopyTrackAndArtist": "Copier le titre et l'interprète", "@trackOptionCopyTrackAndArtist": { "description": "Track menu action that copies the track title and artist" }, - "metadataCopyValue": "Copy value", + "metadataCopyValue": "Copier la valeur", "@metadataCopyValue": { "description": "Metadata menu action that copies only the selected value" }, - "metadataCopyField": "Copy field and value", + "metadataCopyField": "Copier le champ et la valeur", "@metadataCopyField": { "description": "Metadata menu action that copies the selected key and value" }, - "metadataCopyAll": "Copy all metadata", + "metadataCopyAll": "Copier toutes les métadonnées", "@metadataCopyAll": { "description": "Metadata menu action that copies every visible key and value" }, - "optionsEmbeddedCoverSize": "Embedded Cover Size", + "optionsEmbeddedCoverSize": "Dimensions de la pochette intégrée", "@optionsEmbeddedCoverSize": { "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" }, - "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "optionsEmbeddedCoverSizeDescription": "Réduire la taille des pochettes téléchargées à distance avant de les intégrer. Les images qui respectent déjà la limite restent inchangées.", "@optionsEmbeddedCoverSizeDescription": { "description": "Description shown in the embedded cover size picker" }, - "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "optionsEmbeddedCoverSizeOriginal": "Résolution originale", "@optionsEmbeddedCoverSizeOriginal": { "description": "Option that preserves the provider artwork at its original resolution" } From aa9c6911459801336b30f4e89dd93270ba6fa59a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 19:08:36 +0700 Subject: [PATCH 18/59] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 46 ++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index a0061c682..1019743a7 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -461,15 +461,15 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "aboutUnituneDesc": "Flaze가 개발한 오픈소스 음악 링크 확인 도구로, 플랫폼 간 대체 매칭에 사용됩니다", "@aboutUnituneDesc": { "description": "Credit for the UniTune resolver" }, - "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "aboutMusicBrainzDesc": "MetaBrainz와 커뮤니티가 관리하는 오픈 음악 데이터베이스로, 음원 간 상호 참조 정보를 기록하는데 사용됩니다", "@aboutMusicBrainzDesc": { "description": "Credit for the MusicBrainz database" }, - "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "aboutSquiglyDesc": "Liam Macmillan이 개발한 범용 음악 링크 서비스로, 플랫폼 간 링크 확인을 위한 최종 대체 수단으로 사용됩니다", "@aboutSquiglyDesc": { "description": "Credit for the Squigly resolver" }, @@ -1576,7 +1576,7 @@ "@trackAudioQuality": { "description": "Metadata label - audio quality" }, - "libraryQualityLabelFileFormat": "File format", + "libraryQualityLabelFileFormat": "파일 형식", "@libraryQualityLabelFileFormat": { "description": "Library audio quality label mode that shows the detected file format" }, @@ -3901,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "lyricsProviderQqMusicDesc": "QQ Music (중국 노래에 적합, 직접 API)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -4256,7 +4256,7 @@ "@downloadNetworkCompatibilityMode": { "description": "Setting for legacy TLS/network handling" }, - "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "downloadNetworkCompatibilityModeEnabled": "레거시 HTTP 엔드포인트를 허용합니다; TLS 인증서 검증은 계속 활성화되어 있습니다", "@downloadNetworkCompatibilityModeEnabled": { "description": "Subtitle when network compatibility mode is on" }, @@ -5216,7 +5216,7 @@ "@queueDownloadedFileMissing": { "description": "Accessibility label when a downloaded file is missing from disk" }, - "queueCheckingDownloadedFile": "Checking downloaded file...", + "queueCheckingDownloadedFile": "다운로드된 파일을 확인하는 중...", "@queueCheckingDownloadedFile": { "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." }, @@ -6059,11 +6059,11 @@ "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, - "nowPlayingSleepTimer": "Sleep timer", + "nowPlayingSleepTimer": "취침 타이머", "@nowPlayingSleepTimer": { "description": "Menu item and sheet title for the playback sleep timer" }, - "nowPlayingSleepTimerActive": "Ends at {time}", + "nowPlayingSleepTimerActive": "{time}에 종료", "@nowPlayingSleepTimerActive": { "description": "Active sleep timer deadline shown in the player menu", "placeholders": { @@ -6072,7 +6072,7 @@ } } }, - "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 분} other{{minutes} 분}}", "@nowPlayingSleepTimerMinutes": { "description": "Duration choice for the playback sleep timer", "placeholders": { @@ -6081,11 +6081,11 @@ } } }, - "nowPlayingSleepTimerOff": "Turn off sleep timer", + "nowPlayingSleepTimerOff": "취침 타이머 끄기", "@nowPlayingSleepTimerOff": { "description": "Action to cancel the active playback sleep timer" }, - "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "nowPlayingSleepTimerSet": "{duration} 동안 취침 타이머가 설정됨", "@nowPlayingSleepTimerSet": { "description": "Confirmation after setting the playback sleep timer", "placeholders": { @@ -6094,7 +6094,7 @@ } } }, - "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "nowPlayingSleepTimerCancelled": "취침 타이머가 꺼졌습니다", "@nowPlayingSleepTimerCancelled": { "description": "Confirmation after cancelling the playback sleep timer" }, @@ -6505,43 +6505,43 @@ "@settingsGroupHelp": { "description": "Settings group covering the about page and donations" }, - "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "libraryFilterMetadataMissingLyrics": "가사 누락", "@libraryFilterMetadataMissingLyrics": { "description": "Filter option for tracks without embedded or sidecar lyrics" }, - "trackOptionCopyTrackName": "Copy track name", + "trackOptionCopyTrackName": "트랙 이름 복사", "@trackOptionCopyTrackName": { "description": "Track menu action that copies the track title" }, - "trackOptionCopyArtist": "Copy artist", + "trackOptionCopyArtist": "아티스트 복사", "@trackOptionCopyArtist": { "description": "Track menu action that copies the artist name" }, - "trackOptionCopyTrackAndArtist": "Copy track and artist", + "trackOptionCopyTrackAndArtist": "트랙 및 아티스트 복사", "@trackOptionCopyTrackAndArtist": { "description": "Track menu action that copies the track title and artist" }, - "metadataCopyValue": "Copy value", + "metadataCopyValue": "값 복사", "@metadataCopyValue": { "description": "Metadata menu action that copies only the selected value" }, - "metadataCopyField": "Copy field and value", + "metadataCopyField": "필드 및 값 복사", "@metadataCopyField": { "description": "Metadata menu action that copies the selected key and value" }, - "metadataCopyAll": "Copy all metadata", + "metadataCopyAll": "모든 메타데이터 복사", "@metadataCopyAll": { "description": "Metadata menu action that copies every visible key and value" }, - "optionsEmbeddedCoverSize": "Embedded Cover Size", + "optionsEmbeddedCoverSize": "내장된 앨범 커버 크기", "@optionsEmbeddedCoverSize": { "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" }, - "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "optionsEmbeddedCoverSizeDescription": "원격으로 다운로드된 앨범 커버를 내장하기 전에 크기를 줄입니다. 이미 제한 내에 있는 이미지는 변경되지 않습니다", "@optionsEmbeddedCoverSizeDescription": { "description": "Description shown in the embedded cover size picker" }, - "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "optionsEmbeddedCoverSizeOriginal": "원본 해상도", "@optionsEmbeddedCoverSizeOriginal": { "description": "Option that preserves the provider artwork at its original resolution" } From ea33b4cfbbf10d8914454aba5672848bd9445e53 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 22:39:07 +0700 Subject: [PATCH 19/59] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 1019743a7..5c53162e8 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -1879,7 +1879,7 @@ "@extensionsInstallButton": { "description": "Button to install extension from file" }, - "extensionsInfoTip": "확장 기능은 새 메타데이터와 다운로드 제공자를 추가할 수 있습니다. 신뢰할 수 있는 출처의 확장 기능만 설치하세요", + "extensionsInfoTip": "확장 기능은 새 메타데이터와 다운로드 제공자를 추가할 수 있습니다. 신뢰할 수 있는 확장 기능만 설치하세요", "@extensionsInfoTip": { "description": "Security warning about extensions" }, @@ -4256,7 +4256,7 @@ "@downloadNetworkCompatibilityMode": { "description": "Setting for legacy TLS/network handling" }, - "downloadNetworkCompatibilityModeEnabled": "레거시 HTTP 엔드포인트를 허용합니다; TLS 인증서 검증은 계속 활성화되어 있습니다", + "downloadNetworkCompatibilityModeEnabled": "레거시 HTTP 엔드포인트 허용; TLS 인증서 검증은 계속 활성화됨", "@downloadNetworkCompatibilityModeEnabled": { "description": "Subtitle when network compatibility mode is on" }, From 8196f7b0f26dcef7c8661e0c1fe0d798347c2c29 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 23:42:49 +0700 Subject: [PATCH 20/59] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 5c53162e8..38022bc77 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -6094,7 +6094,7 @@ } } }, - "nowPlayingSleepTimerCancelled": "취침 타이머가 꺼졌습니다", + "nowPlayingSleepTimerCancelled": "취침 타이머가 꺼짐", "@nowPlayingSleepTimerCancelled": { "description": "Confirmation after cancelling the playback sleep timer" }, From d06157cec4b702ea7d57f0396099d5baae5b29eb Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 2 Sep 2026 03:57:57 +0700 Subject: [PATCH 21/59] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index ce0370015..2842f11bd 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -2019,7 +2019,7 @@ "@downloadAutoConvertBitrateSubtitle": { "description": "Automatic conversion bitrate picker explanation" }, - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "downloadAutoConvertMp3Subtitle": "Compatibilité optimale entre les lecteurs et les appareils", "@downloadAutoConvertMp3Subtitle": { "description": "MP3 automatic conversion option description" }, @@ -2027,7 +2027,7 @@ "@downloadAutoConvertM4aSubtitle": { "description": "M4A AAC automatic conversion option description" }, - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "downloadAutoConvertOpusSubtitle": "Une efficacité optimale pour les lecteurs d'aujourd'hui", "@downloadAutoConvertOpusSubtitle": { "description": "Opus automatic conversion option description" }, @@ -2309,7 +2309,7 @@ "@recentEmpty": { "description": "Empty state text for recent access list" }, - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "recentClearAllMessage": "Effacer toutes les activités récentes ? L'historique des téléchargements et les fichiers musicaux ne seront pas supprimés.", "@recentClearAllMessage": { "description": "Confirmation message before clearing all recent activity" }, From 29be8ae92efbc5894138f79ef4043afec9b571d4 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 2 Sep 2026 04:53:25 +0700 Subject: [PATCH 22/59] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index 2842f11bd..b587b51e5 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -2513,11 +2513,11 @@ "@libraryFolderHint": { "description": "Placeholder when no folder selected" }, - "libraryAddFolder": "Add library folder", + "libraryAddFolder": "Ajouter un dossier de bibliothèque", "@libraryAddFolder": { "description": "Action to add another local library source" }, - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "libraryAddFolderSubtitle": "Mémoire interne, carte SD, SSD ou autre disque externe", "@libraryAddFolderSubtitle": { "description": "Supported storage locations for local library sources" }, @@ -2529,7 +2529,7 @@ "@librarySourceOffline": { "description": "Library source is temporarily disconnected" }, - "librarySourceDisabled": "Disabled", + "librarySourceDisabled": "Désactivé", "@librarySourceDisabled": { "description": "Library source has been disabled by the user" }, @@ -2548,7 +2548,7 @@ } } }, - "libraryExternalStorage": "External storage", + "libraryExternalStorage": "Stockage externe", "@libraryExternalStorage": { "description": "Label for a removable or external library source" }, From c662134bec1f3a9c0592a67809f4a8280f7a40b6 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 6 Sep 2026 07:30:19 +0700 Subject: [PATCH 23/59] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 210 ++++++++++++++++++++-------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index cd3429a45..17705ca4a 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -461,15 +461,15 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "aboutUnituneDesc": "محلل رابط الموسيقى المفتوح المصدر بواسطة Flaze، يستخدم لمطابقة الظهر عبر المنصات.", "@aboutUnituneDesc": { "description": "Credit for the UniTune resolver" }, - "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "aboutMusicBrainzDesc": "فتح قاعدة بيانات الموسيقى التي يحتفظ بها ميتابراينز ومجتمعه، تستخدم لتسجيل الإحالات المرجعية.", "@aboutMusicBrainzDesc": { "description": "Credit for the MusicBrainz database" }, - "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "aboutSquiglyDesc": "خدمة وصلة موسيقية عالمية من قبل ليام ماكميلان، تستخدم كمرجع نهائي للحلول عبر المنصات.", "@aboutSquiglyDesc": { "description": "Credit for the Squigly resolver" }, @@ -606,7 +606,7 @@ "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "setupDownloadInFlac": "تحميل الموسيقى بجودة عالية و عالية", "@setupDownloadInFlac": { "description": "App tagline in setup" }, @@ -792,7 +792,7 @@ "@dialogImportPlaylistTitle": { "description": "Dialog title - import CSV playlist" }, - "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", + "dialogImportPlaylistMessage": "تم العثور على {count} مسارات في ملف قائمة التشغيل. إضافتها لتنزيل؟", "csvImportTracks": "{count} مسارات من CSV", "@csvImportTracks": { "description": "Label shown in quality picker for CSV import", @@ -802,11 +802,11 @@ } } }, - "collectionExportM3u": "Export as M3U8", + "collectionExportM3u": "تصدير كـ 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": "تصدير {exported} من مسارات {total}", "@collectionExportM3uDone": { "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { @@ -818,43 +818,43 @@ } } }, - "collectionExportM3uNone": "No downloaded files to export", + "collectionExportM3uNone": "لا توجد ملفات تم تنزيلها للتصدير", "@collectionExportM3uNone": { "description": "Snackbar when an M3U8 export finds no local files" }, - "collectionExportM3uFailed": "Export failed", + "collectionExportM3uFailed": "فشل التصدير", "@collectionExportM3uFailed": { "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "trackOpenOn": "Open on...", + "trackOpenOn": "فتح على...", "@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": "لم يتم العثور على روابط منصة لهذا المسار.", "@trackOpenOnNoLinks": { "description": "Shown in the Open on sheet when song.link returns no links" }, - "libraryReviewDuplicates": "Review duplicates", + "libraryReviewDuplicates": "مراجعة التكرار", "@libraryReviewDuplicates": { "description": "Library settings row opening the duplicate review sheet" }, - "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", + "libraryReviewDuplicatesSubtitle": "العثور على المسارات المخزنة أكثر من مرة", "@libraryReviewDuplicatesSubtitle": { "description": "Subtitle for the duplicate review settings row" }, - "duplicatesTitle": "Duplicates", + "duplicatesTitle": "مكرر", "@duplicatesTitle": { "description": "Title of the duplicate review sheet" }, - "duplicatesEmpty": "No duplicate tracks found.", + "duplicatesEmpty": "لم يتم العثور على مسارات مكررة.", "@duplicatesEmpty": { "description": "Shown when the duplicate review sheet finds nothing" }, - "duplicatesKeepBest": "Keep best", + "duplicatesKeepBest": "احتفظ بأفضل", "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", + "duplicatesKeepBestMessage": "حذف {count} نسخ أقل جودة من \"{trackName}\"؟", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", "placeholders": { @@ -866,7 +866,7 @@ } } }, - "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", + "duplicatesDeleteCopyMessage": "حذف هذه النسخة من \"{trackName}\"؟", "@duplicatesDeleteCopyMessage": { "description": "Confirmation message for deleting one duplicate copy", "placeholders": { @@ -1227,11 +1227,11 @@ "@updateNewVersionReady": { "description": "Update subtitle" }, - "updateRequiredTitle": "Update required", + "updateRequiredTitle": "التحديث مطلوب", "@updateRequiredTitle": { "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", + "updateRequiredNotice": "هذا الإصدار هو إصدارات {count} وراءه ولم يعد مدعوماً. قم بالتحديث لمواصلة استخدام التطبيق.", "@updateRequiredNotice": { "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { @@ -1576,7 +1576,7 @@ "@trackAudioQuality": { "description": "Metadata label - audio quality" }, - "libraryQualityLabelFileFormat": "File format", + "libraryQualityLabelFileFormat": "صيغة الملف", "@libraryQualityLabelFileFormat": { "description": "Library audio quality label mode that shows the detected file format" }, @@ -1943,27 +1943,27 @@ "@extensionsNoMetadataProvider": { "description": "Empty state - no metadata providers" }, - "extensionsSearchProvider": "Search Provider", + "extensionsSearchProvider": "مزود البحث", "@extensionsSearchProvider": { "description": "Setting - search provider selection" }, - "extensionsNoCustomSearch": "No extensions with custom search", + "extensionsNoCustomSearch": "لا توجد ملحقات مع بحث مخصص", "@extensionsNoCustomSearch": { "description": "Empty state - no search providers" }, - "extensionsSearchProviderDescription": "Choose which service to use for searching tracks", + "extensionsSearchProviderDescription": "اختر الخدمة التي يمكن استخدامها للبحث عن المسارات", "@extensionsSearchProviderDescription": { "description": "Search provider setting description" }, - "extensionsCustomSearch": "Custom search", + "extensionsCustomSearch": "بحث مخصص", "@extensionsCustomSearch": { "description": "Label for custom search provider" }, - "extensionsErrorLoading": "Error loading extension", + "extensionsErrorLoading": "خطأ في تحميل الملحق", "@extensionsErrorLoading": { "description": "Error message when extension fails to load" }, - "qualityFlacLossless": "FLAC Lossless", + "qualityFlacLossless": "عدم فقدان الدقة FLAC", "@qualityFlacLossless": { "description": "Quality option - CD quality FLAC" }, @@ -1995,39 +1995,39 @@ "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadAutoConvert": "Auto-convert after download", + "downloadAutoConvert": "التحويل التلقائي بعد التحميل", "@downloadAutoConvert": { "description": "Toggle for automatic post-download audio conversion" }, - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "downloadAutoConvertSubtitle": "تحويل التنزيلات المكتملة إلى تنسيق أقل خسارة. يتم استبدال الأصل فقط بعد نجاح التحويل.", "@downloadAutoConvertSubtitle": { "description": "Explanation of safe automatic post-download conversion" }, - "downloadAutoConvertFormat": "Output format", + "downloadAutoConvertFormat": "تنسيق الإخراج", "@downloadAutoConvertFormat": { "description": "Automatic conversion output format setting" }, - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "downloadAutoConvertFormatSubtitle": "اختر التنسيق المستخدم للتنزيلات المكتملة حديثا.", "@downloadAutoConvertFormatSubtitle": { "description": "Automatic conversion format picker explanation" }, - "downloadAutoConvertBitrate": "Output quality", + "downloadAutoConvertBitrate": "جودة الإخراج", "@downloadAutoConvertBitrate": { "description": "Automatic conversion bitrate setting" }, - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "downloadAutoConvertBitrateSubtitle": "معدلات البتات الأعلى تحافظ على المزيد من التفاصيل ولكن تنشئ ملفات أكبر.", "@downloadAutoConvertBitrateSubtitle": { "description": "Automatic conversion bitrate picker explanation" }, - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "downloadAutoConvertMp3Subtitle": "أفضل توافق عبر اللاعبين والأجهزة", "@downloadAutoConvertMp3Subtitle": { "description": "MP3 automatic conversion option description" }, - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "downloadAutoConvertM4aSubtitle": "صوت AC فعال في حاوية M4A", "@downloadAutoConvertM4aSubtitle": { "description": "M4A AAC automatic conversion option description" }, - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "downloadAutoConvertOpusSubtitle": "أفضل كفاءة للاعبين الجدد", "@downloadAutoConvertOpusSubtitle": { "description": "Opus automatic conversion option description" }, @@ -2087,7 +2087,7 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, - "albumFolderStructureDescription": "Choose how album folders are structured", + "albumFolderStructureDescription": "اختر كيف يتم تنظيم مجلدات الألبوم", "@albumFolderStructureDescription": { "description": "Album folder structure picker description" }, @@ -2123,19 +2123,19 @@ "@appearanceAmoledDarkSubtitle": { "description": "Subtitle for AMOLED dark" }, - "appearanceHeroAnimations": "Hero animations", + "appearanceHeroAnimations": "الرسوم المتحركة ", "@appearanceHeroAnimations": { "description": "Toggle for shared-element (Hero) transitions" }, - "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", + "appearanceHeroAnimationsSubtitle": "أغطية الطيران بين الشاشات، على سبيل المثال عند فتح اللاعب", "@appearanceHeroAnimationsSubtitle": { "description": "Subtitle for the Hero animations toggle" }, - "appearanceForceBlur": "Always use blur effects", + "appearanceForceBlur": "استخدام تأثيرات الضبابية دائمًا", "@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": "تمكين شريط التنقل يطمس حتى على الأجهزة حيث يتم إيقافه بشكل افتراضي. قد يكون أداء التكلفة.", "@appearanceForceBlurSubtitle": { "description": "Subtitle for the force-blur toggle" }, @@ -2171,19 +2171,19 @@ "@settingsDownloadNetworkSubtitle": { "description": "Subtitle explaining network preference" }, - "settingsConcurrentDownloads": "Concurrent downloads", + "settingsConcurrentDownloads": "عدد التنزيلات في نفس الوقت", "@settingsConcurrentDownloads": { "description": "Setting title - how many tracks download at the same time" }, - "settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.", + "settingsConcurrentDownloadsSubtitle": "تنزيل عدة مسارات في وقت واحد أسرع، ولكن بعض مقدمي الخدمات قد يحدون من الطلبات الموازية.", "@settingsConcurrentDownloadsSubtitle": { "description": "Subtitle explaining the concurrent downloads picker" }, - "concurrentDownloadsOne": "1 track at a time", + "concurrentDownloadsOne": "مسار واحد في وقت واحد", "@concurrentDownloadsOne": { "description": "Concurrent downloads option - sequential" }, - "concurrentDownloadsCount": "Up to {count} tracks at once", + "concurrentDownloadsCount": "حتى {count} مسارات في وقت واحد", "@concurrentDownloadsCount": { "description": "Concurrent downloads option - parallel", "placeholders": { @@ -2240,11 +2240,11 @@ "@albumFolderArtistAlbumFlatSubtitle": { "description": "Folder structure example for flat singles" }, - "downloadedAlbumDeleteSelected": "Delete Selected", + "downloadedAlbumDeleteSelected": "حذف المحدد", "@downloadedAlbumDeleteSelected": { "description": "Button - delete selected tracks" }, - "downloadedAlbumDeleteMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from this album?\n\nThis will also delete the files from storage.", + "downloadedAlbumDeleteMessage": "حذف {count} {count, plural, zero {} one {المسارات} two {أغنيتين} few {أغانٍ} many {أغنية}=1{أغنية} other{الأغاني}} من التاريخ؟\n\nسيؤدي هذا أيضا إلى حذف الملفات من وحدة التخزين.", "@downloadedAlbumDeleteMessage": { "description": "Delete confirmation with count", "placeholders": { @@ -2253,7 +2253,7 @@ } } }, - "downloadedAlbumSelectedCount": "{count} selected", + "downloadedAlbumSelectedCount": "تم تحديد {count}", "@downloadedAlbumSelectedCount": { "description": "Selection count indicator", "placeholders": { @@ -2262,11 +2262,11 @@ } } }, - "downloadedAlbumTapToSelect": "Tap tracks to select", + "downloadedAlbumTapToSelect": "اضغط على المسارات لتحديد", "@downloadedAlbumTapToSelect": { "description": "Selection hint" }, - "downloadedAlbumDeleteCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "downloadedAlbumDeleteCount": "تم حذف {count} {count, plural, zero {} one {أغنيتين} two {أغنيتين} few {أغانٍ} many {أغنية}=1{أغنية} other{أغانٍ}}", "@downloadedAlbumDeleteCount": { "description": "Delete button text with count", "placeholders": { @@ -2275,11 +2275,11 @@ } } }, - "downloadedAlbumSelectToDelete": "Select tracks to delete", + "downloadedAlbumSelectToDelete": "حدد الأغاني المراد حذفها", "@downloadedAlbumSelectToDelete": { "description": "Placeholder when nothing selected" }, - "downloadedAlbumDiscHeader": "Disc {discNumber}", + "downloadedAlbumDiscHeader": "قرص {discNumber}", "@downloadedAlbumDiscHeader": { "description": "Header for disc separator in multi-disc albums", "placeholders": { @@ -2289,11 +2289,11 @@ } } }, - "recentTypeArtist": "Artist", + "recentTypeArtist": "الفنان", "@recentTypeArtist": { "description": "Recent access item type - artist" }, - "recentTypeAlbum": "Album", + "recentTypeAlbum": "الألبوم", "@recentTypeAlbum": { "description": "Recent access item type - album" }, @@ -2564,75 +2564,75 @@ "@libraryShowDuplicateIndicator": { "description": "Toggle for duplicate indicator in search" }, - "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", + "libraryShowDuplicateIndicatorSubtitle": "إظهار عند البحث عن المسارات الموجودة", "@libraryShowDuplicateIndicatorSubtitle": { "description": "Subtitle for duplicate indicator toggle" }, - "libraryAutoScan": "Auto Scan", + "libraryAutoScan": "فحص تلقائي", "@libraryAutoScan": { "description": "Setting for automatic library scanning" }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", + "libraryAutoScanSubtitle": "مسح مكتبتك تلقائياً للملفات الجديدة", "@libraryAutoScanSubtitle": { "description": "Subtitle for auto scan setting" }, - "libraryAutoScanOff": "Off", + "libraryAutoScanOff": "إيقاف", "@libraryAutoScanOff": { "description": "Auto scan disabled" }, - "libraryAutoScanOnOpen": "Every app open", + "libraryAutoScanOnOpen": "كل مرة يتم فيها فتح التطبيق", "@libraryAutoScanOnOpen": { "description": "Auto scan when app opens" }, - "libraryAutoScanDaily": "Daily", + "libraryAutoScanDaily": "يومياً", "@libraryAutoScanDaily": { "description": "Auto scan once per day" }, - "libraryAutoScanWeekly": "Weekly", + "libraryAutoScanWeekly": "أسبوعيًا", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "libraryActions": "Actions", + "libraryActions": "الإجراءات", "@libraryActions": { "description": "Section header for library actions" }, - "libraryScan": "Scan Library", + "libraryScan": "تفحص المكتبة", "@libraryScan": { "description": "Button to start library scan" }, - "libraryScanSubtitle": "Scan for audio files", + "libraryScanSubtitle": "البحث عن الملفات الصوتية", "@libraryScanSubtitle": { "description": "Subtitle for scan button" }, - "libraryScanSelectFolderFirst": "Select a folder first", + "libraryScanSelectFolderFirst": "حدد مجلد أولاً", "@libraryScanSelectFolderFirst": { "description": "Message when trying to scan without folder" }, - "libraryCleanupMissingFiles": "Cleanup Missing Files", + "libraryCleanupMissingFiles": "تنظيف الملفات المفقودة", "@libraryCleanupMissingFiles": { "description": "Button to remove entries for missing files" }, - "libraryCleanupMissingFilesSubtitle": "Remove entries for files that no longer exist", + "libraryCleanupMissingFilesSubtitle": "إزالة المدخلات للملفات التي لم تعد موجودة", "@libraryCleanupMissingFilesSubtitle": { "description": "Subtitle for cleanup button" }, - "libraryClear": "Clear Library", + "libraryClear": "مسح المكتبة", "@libraryClear": { "description": "Button to clear all library entries" }, - "libraryClearSubtitle": "Remove all scanned tracks", + "libraryClearSubtitle": "إزالة جميع المسارات الممسوحة ضوئيا", "@libraryClearSubtitle": { "description": "Subtitle for clear button" }, - "libraryClearConfirmTitle": "Clear Library", + "libraryClearConfirmTitle": "مسح المكتبة", "@libraryClearConfirmTitle": { "description": "Dialog title for clear confirmation" }, - "libraryClearConfirmMessage": "This will remove all scanned tracks from your library. Your actual music files will not be deleted.", + "libraryClearConfirmMessage": "سيؤدي هذا إلى إزالة جميع المسارات التي تم فحصها من مكتبتك. لن يتم حذف ملفات الموسيقى الفعلية الخاصة بك.", "@libraryClearConfirmMessage": { "description": "Dialog message for clear confirmation" }, - "libraryAbout": "About Local Library", + "libraryAbout": "حول المكتبة المحلية", "@libraryAbout": { "description": "Section header for about info" }, @@ -2640,7 +2640,7 @@ "@libraryAboutDescription": { "description": "Description of local library feature" }, - "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "libraryTracksUnit": "{count, plural, zero {لا توجد أغاني محددة} one {{count} مسارات} two {أغنيتين} few {{count} أغانٍ} many {{count} أغانٍ}=1{أغنية واحدة} other{{count} أغانٍ}}", "@libraryTracksUnit": { "description": "Unit label for tracks count (without the number itself)", "placeholders": { @@ -2649,7 +2649,7 @@ } } }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "libraryFilesUnit": "{count, plural, zero {} one {ملفات} two {ملفات} few {ملفات} many {ملفات}=1{ملف} other{ملفات}}", "@libraryFilesUnit": { "description": "Unit label for files count during library scanning", "placeholders": { @@ -2658,7 +2658,7 @@ } } }, - "libraryLastScanned": "Last scanned: {time}", + "libraryLastScanned": "آخر مسح: {time}", "@libraryLastScanned": { "description": "Last scan time display", "placeholders": { @@ -2667,19 +2667,19 @@ } } }, - "libraryLastScannedNever": "Never", + "libraryLastScannedNever": "مطلقًا", "@libraryLastScannedNever": { "description": "Shown when library has never been scanned" }, - "libraryScanning": "Scanning...", + "libraryScanning": "جارٍ الفحص...", "@libraryScanning": { "description": "Status during scan" }, - "libraryScanFinalizing": "Finalizing library...", + "libraryScanFinalizing": "الانتهاء من المكتبة...", "@libraryScanFinalizing": { "description": "Status shown after file scanning finishes but library persistence is still running" }, - "libraryScanProgress": "{progress}% of {total} files", + "libraryScanProgress": "{progress}% من ملفات {total}", "@libraryScanProgress": { "description": "Scan progress display", "placeholders": { @@ -2691,11 +2691,11 @@ } } }, - "libraryInLibrary": "In Library", + "libraryInLibrary": "في المكتبة", "@libraryInLibrary": { "description": "Badge shown on tracks that exist in local library" }, - "libraryRemovedMissingFiles": "Removed {count} missing files from library", + "libraryRemovedMissingFiles": "إزالة الملفات المفقودة {count} من المكتبة", "@libraryRemovedMissingFiles": { "description": "Snackbar after cleanup", "placeholders": { @@ -2704,59 +2704,59 @@ } } }, - "libraryCleared": "Library cleared", + "libraryCleared": "تم مسح السجل", "@libraryCleared": { "description": "Snackbar after clearing library" }, - "libraryStorageAccessRequired": "Storage Access Required", + "libraryStorageAccessRequired": "إذن دخول وحدة التخزين مطلوب", "@libraryStorageAccessRequired": { "description": "Dialog title for storage permission" }, - "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", + "libraryStorageAccessMessage": "SpotiFLAC يحتاج إلى الوصول إلى التخزين لمسح مكتبة الموسيقى الخاصة بك. الرجاء منح الإذن في الإعدادات.", "@libraryStorageAccessMessage": { "description": "Dialog message for storage permission" }, - "libraryFolderNotExist": "Selected folder does not exist", + "libraryFolderNotExist": "المجلد المحدد غير موجود", "@libraryFolderNotExist": { "description": "Error when folder doesn't exist" }, - "librarySourceDownloaded": "Downloaded", + "librarySourceDownloaded": "تم التنزيل", "@librarySourceDownloaded": { "description": "Badge for tracks downloaded via SpotiFLAC" }, - "librarySourceLocal": "Local", + "librarySourceLocal": "محلي", "@librarySourceLocal": { "description": "Badge for tracks from local library scan" }, - "libraryFilterAll": "All", + "libraryFilterAll": "الكل", "@libraryFilterAll": { "description": "Filter chip - show all library items" }, - "libraryFilterDownloaded": "Downloaded", + "libraryFilterDownloaded": "تم التنزيل", "@libraryFilterDownloaded": { "description": "Filter chip - show only downloaded items" }, - "libraryFilterLocal": "Local", + "libraryFilterLocal": "محلي", "@libraryFilterLocal": { "description": "Filter chip - show only local library items" }, - "libraryFilterTitle": "Filters", + "libraryFilterTitle": "المرشحات", "@libraryFilterTitle": { "description": "Filter bottom sheet title" }, - "libraryFilterReset": "Reset", + "libraryFilterReset": "إعادة الضبط", "@libraryFilterReset": { "description": "Reset all filters button" }, - "libraryFilterApply": "Apply", + "libraryFilterApply": "تطبيق", "@libraryFilterApply": { "description": "Apply filters button" }, - "libraryFilterSource": "Source", + "libraryFilterSource": "المصدر", "@libraryFilterSource": { "description": "Filter section - source type" }, - "libraryFilterQuality": "Quality", + "libraryFilterQuality": "الجودة", "@libraryFilterQuality": { "description": "Filter section - audio quality" }, @@ -2764,35 +2764,35 @@ "@libraryFilterQualityHiRes": { "description": "Filter option - high resolution audio" }, - "libraryFilterQualityCD": "CD (16bit)", + "libraryFilterQualityCD": "قرص مدمج (16bit)", "@libraryFilterQualityCD": { "description": "Filter option - CD quality audio" }, - "libraryFilterQualityLossy": "Lossy", + "libraryFilterQualityLossy": "فقدان", "@libraryFilterQualityLossy": { "description": "Filter option - lossy compressed audio" }, - "libraryFilterFormat": "Format", + "libraryFilterFormat": "التنسيق", "@libraryFilterFormat": { "description": "Filter section - file format" }, - "libraryFilterMetadata": "Metadata", + "libraryFilterMetadata": "البيانات الوصفية (Metadata)", "@libraryFilterMetadata": { "description": "Filter section - metadata completeness" }, - "libraryFilterMetadataComplete": "Complete metadata", + "libraryFilterMetadataComplete": "أكمل البيانات الوصفية", "@libraryFilterMetadataComplete": { "description": "Filter option - items with complete metadata" }, - "libraryFilterMetadataMissingAny": "Missing any metadata", + "libraryFilterMetadataMissingAny": "بيانات التعريف مفقودة", "@libraryFilterMetadataMissingAny": { "description": "Filter option - items missing any tracked metadata field" }, - "libraryFilterMetadataMissingYear": "Missing year", + "libraryFilterMetadataMissingYear": "السنة المفقودة", "@libraryFilterMetadataMissingYear": { "description": "Filter option - items missing release year/date" }, - "libraryFilterMetadataMissingGenre": "Missing genre", + "libraryFilterMetadataMissingGenre": "السنة المفقودة", "@libraryFilterMetadataMissingGenre": { "description": "Filter option - items missing genre" }, @@ -3016,11 +3016,11 @@ "@cacheAppDirectoryDesc": { "description": "Description of what app cache directory contains" }, - "cacheTempDirectory": "Temporary directory", + "cacheTempDirectory": "مجلد مؤقت", "@cacheTempDirectory": { "description": "Cache item title for temporary files directory" }, - "cacheTempDirectoryDesc": "Temporary files from downloads and audio conversion.", + "cacheTempDirectoryDesc": "الملفات المؤقتة من التنزيلات وتحويل الصوت.", "@cacheTempDirectoryDesc": { "description": "Description of what temporary directory contains" }, From b952e763d52c4343f395e5fb4c88a4e73c014aa5 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 6 Sep 2026 09:32:46 +0700 Subject: [PATCH 24/59] New translations app_en.arb (Portuguese) [ci skip] --- lib/l10n/arb/app_pt_PT.arb | 56 +++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/lib/l10n/arb/app_pt_PT.arb b/lib/l10n/arb/app_pt_PT.arb index dd1b6cbe3..ed0018e69 100644 --- a/lib/l10n/arb/app_pt_PT.arb +++ b/lib/l10n/arb/app_pt_PT.arb @@ -461,15 +461,15 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "aboutUnituneDesc": "Localizador de links de música de código aberto da Flaze, usado para correspondência alternativa entre plataformas.", "@aboutUnituneDesc": { "description": "Credit for the UniTune resolver" }, - "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "aboutMusicBrainzDesc": "Banco de dados de música aberto mantido pela MetaBrainz e a sua comunidade, usado para registrar referências cruzadas.", "@aboutMusicBrainzDesc": { "description": "Credit for the MusicBrainz database" }, - "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "aboutSquiglyDesc": "Serviço universal de links de música criado por Liam Macmillan, usado como último recurso para localizar links equivalentes entre plataformas.", "@aboutSquiglyDesc": { "description": "Credit for the Squigly resolver" }, @@ -606,7 +606,7 @@ "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "setupDownloadInFlac": "Baixar músicas em qualidade sem perdas e Hi-Res \"alta resolução\"", "@setupDownloadInFlac": { "description": "App tagline in setup" }, @@ -792,7 +792,7 @@ "@dialogImportPlaylistTitle": { "description": "Dialog title - import CSV playlist" }, - "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", + "dialogImportPlaylistMessage": "Foram encontradas {count} faixas no arquivo da playlist. Deseja adicioná-las à fila de downloads?", "csvImportTracks": "{count} faixas do CSV", "@csvImportTracks": { "description": "Label shown in quality picker for CSV import", @@ -802,11 +802,11 @@ } } }, - "collectionExportM3u": "Export as M3U8", + "collectionExportM3u": "Exportar como 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": "{exported} de {total} faixas exportadas", "@collectionExportM3uDone": { "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { @@ -818,43 +818,43 @@ } } }, - "collectionExportM3uNone": "No downloaded files to export", + "collectionExportM3uNone": "Não há arquivos baixados para exportar", "@collectionExportM3uNone": { "description": "Snackbar when an M3U8 export finds no local files" }, - "collectionExportM3uFailed": "Export failed", + "collectionExportM3uFailed": "A exportação falhou", "@collectionExportM3uFailed": { "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "trackOpenOn": "Open on...", + "trackOpenOn": "Abrir em...", "@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": "Nenhum link de plataforma encontrado para esta faixa.", "@trackOpenOnNoLinks": { "description": "Shown in the Open on sheet when song.link returns no links" }, - "libraryReviewDuplicates": "Review duplicates", + "libraryReviewDuplicates": "Verificar duplicados", "@libraryReviewDuplicates": { "description": "Library settings row opening the duplicate review sheet" }, - "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", + "libraryReviewDuplicatesSubtitle": "Encontrar faixas armazenadas mais de uma vez", "@libraryReviewDuplicatesSubtitle": { "description": "Subtitle for the duplicate review settings row" }, - "duplicatesTitle": "Duplicates", + "duplicatesTitle": "Duplicados", "@duplicatesTitle": { "description": "Title of the duplicate review sheet" }, - "duplicatesEmpty": "No duplicate tracks found.", + "duplicatesEmpty": "Nenhuma faixa duplicada encontrada.", "@duplicatesEmpty": { "description": "Shown when the duplicate review sheet finds nothing" }, - "duplicatesKeepBest": "Keep best", + "duplicatesKeepBest": "Manter a melhor", "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", + "duplicatesKeepBestMessage": "Excluir {count} cópias de qualidade inferior de \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", "placeholders": { @@ -866,7 +866,7 @@ } } }, - "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", + "duplicatesDeleteCopyMessage": "Excluir esta cópia de \"{trackName}\"?", "@duplicatesDeleteCopyMessage": { "description": "Confirmation message for deleting one duplicate copy", "placeholders": { @@ -1227,11 +1227,11 @@ "@updateNewVersionReady": { "description": "Update subtitle" }, - "updateRequiredTitle": "Update required", + "updateRequiredTitle": "Atualização necessária", "@updateRequiredTitle": { "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", + "updateRequiredNotice": "Esta versão está {count} versões atrasada e não é mais compatível. Atualize para continuar a usar o aplicativo.", "@updateRequiredNotice": { "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { @@ -1576,7 +1576,7 @@ "@trackAudioQuality": { "description": "Metadata label - audio quality" }, - "libraryQualityLabelFileFormat": "File format", + "libraryQualityLabelFileFormat": "Formato do arquivo", "@libraryQualityLabelFileFormat": { "description": "Library audio quality label mode that shows the detected file format" }, @@ -1987,31 +1987,31 @@ "@qualityHiResFlacMaxSubtitle": { "description": "Technical spec for hi-res max" }, - "downloadLossy320": "Lossy 320kbps", + "downloadLossy320": "Com perdas, 320kbps", "@downloadLossy320": { "description": "Quality option label for lossy 320kbps" }, - "downloadLossyFormat": "Lossy Format", + "downloadLossyFormat": "Formato com perda de dados", "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadAutoConvert": "Auto-convert after download", + "downloadAutoConvert": "Converter automaticamente após baixar", "@downloadAutoConvert": { "description": "Toggle for automatic post-download audio conversion" }, - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "downloadAutoConvertSubtitle": "Converta os downloads concluídos para um formato com perda de dados menor. O arquivo original só será substituído após a conversão ser concluída com sucesso.", "@downloadAutoConvertSubtitle": { "description": "Explanation of safe automatic post-download conversion" }, - "downloadAutoConvertFormat": "Output format", + "downloadAutoConvertFormat": "Formato de saída", "@downloadAutoConvertFormat": { "description": "Automatic conversion output format setting" }, - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "downloadAutoConvertFormatSubtitle": "Escolha o formato de arquivo com perdas a ser usado para os downloads concluídos recentemente.", "@downloadAutoConvertFormatSubtitle": { "description": "Automatic conversion format picker explanation" }, - "downloadAutoConvertBitrate": "Output quality", + "downloadAutoConvertBitrate": "Qualidade de saída", "@downloadAutoConvertBitrate": { "description": "Automatic conversion bitrate setting" }, From c983181bc79d1467635e57a1c4dab78ade5fd327 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 6 Sep 2026 23:33:44 +0700 Subject: [PATCH 25/59] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index c18895b8b..e0c195f73 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -461,11 +461,11 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "aboutUnituneDesc": "Resolvedor de links de música por Flaze, usado para coincidencias multiplataforma.", "@aboutUnituneDesc": { "description": "Credit for the UniTune resolver" }, - "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "aboutMusicBrainzDesc": "Base de datos abierta mantenida por MetaBrainz y su comunidad, usado para grabar multi-referencias.", "@aboutMusicBrainzDesc": { "description": "Credit for the MusicBrainz database" }, From a3a633dda37d56a84dce2284dfddc61b231c74ce Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 01:04:18 +0700 Subject: [PATCH 26/59] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 42 +++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index e0c195f73..1cca2ff65 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -461,7 +461,7 @@ "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutUnituneDesc": "Resolvedor de links de música por Flaze, usado para coincidencias multiplataforma.", + "aboutUnituneDesc": "Resolvedor de links de música por Flaze, usado para coincidencias multiplataforma de respaldo.", "@aboutUnituneDesc": { "description": "Credit for the UniTune resolver" }, @@ -469,7 +469,7 @@ "@aboutMusicBrainzDesc": { "description": "Credit for the MusicBrainz database" }, - "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "aboutSquiglyDesc": "Servicio de enlaces de música universal por Liam Macmillan, usado como resolvedor multiplataforma final de respaldo.", "@aboutSquiglyDesc": { "description": "Credit for the Squigly resolver" }, @@ -606,7 +606,7 @@ "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "setupDownloadInFlac": "Descarga música sin pérdida y Hi-Res", "@setupDownloadInFlac": { "description": "App tagline in setup" }, @@ -1576,7 +1576,7 @@ "@trackAudioQuality": { "description": "Metadata label - audio quality" }, - "libraryQualityLabelFileFormat": "File format", + "libraryQualityLabelFileFormat": "Formato de archivo", "@libraryQualityLabelFileFormat": { "description": "Library audio quality label mode that shows the detected file format" }, @@ -1995,39 +1995,39 @@ "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadAutoConvert": "Auto-convert after download", + "downloadAutoConvert": "Autoconvertir después de descargar", "@downloadAutoConvert": { "description": "Toggle for automatic post-download audio conversion" }, - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "downloadAutoConvertSubtitle": "Convierte descargas completadas a un formato con pérdidas más pequeño. El original solo es reemplazado después que la conversión sea exitosa.", "@downloadAutoConvertSubtitle": { "description": "Explanation of safe automatic post-download conversion" }, - "downloadAutoConvertFormat": "Output format", + "downloadAutoConvertFormat": "Formato de salida", "@downloadAutoConvertFormat": { "description": "Automatic conversion output format setting" }, - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "downloadAutoConvertFormatSubtitle": "Elige el formato con pérdidas para descargas completadas nuevas.", "@downloadAutoConvertFormatSubtitle": { "description": "Automatic conversion format picker explanation" }, - "downloadAutoConvertBitrate": "Output quality", + "downloadAutoConvertBitrate": "Calidad de salida", "@downloadAutoConvertBitrate": { "description": "Automatic conversion bitrate setting" }, - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "downloadAutoConvertBitrateSubtitle": "Las tasas de bits más altas preservan más detalles pero hacen archivos más grandes.", "@downloadAutoConvertBitrateSubtitle": { "description": "Automatic conversion bitrate picker explanation" }, - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "downloadAutoConvertMp3Subtitle": "Mejor compatibilidad en reproductores y dispositivos", "@downloadAutoConvertMp3Subtitle": { "description": "MP3 automatic conversion option description" }, - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "downloadAutoConvertM4aSubtitle": "Audio AAC eficiente en un contenedor M4A", "@downloadAutoConvertM4aSubtitle": { "description": "M4A AAC automatic conversion option description" }, - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "downloadAutoConvertOpusSubtitle": "Mejor eficiencia para reproductores modernos", "@downloadAutoConvertOpusSubtitle": { "description": "Opus automatic conversion option description" }, @@ -2309,7 +2309,7 @@ "@recentEmpty": { "description": "Empty state text for recent access list" }, - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "recentClearAllMessage": "¿Borrar toda la actividad reciente? No se eliminarán los archivos del historial de descargas y de música.", "@recentClearAllMessage": { "description": "Confirmation message before clearing all recent activity" }, @@ -2513,11 +2513,11 @@ "@libraryFolderHint": { "description": "Placeholder when no folder selected" }, - "libraryAddFolder": "Add library folder", + "libraryAddFolder": "Añadir carpeta de biblioteca", "@libraryAddFolder": { "description": "Action to add another local library source" }, - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "libraryAddFolderSubtitle": "Almacenamiento interno, tarjeta SD, o otro drive externo", "@libraryAddFolderSubtitle": { "description": "Supported storage locations for local library sources" }, @@ -2525,15 +2525,15 @@ "@librarySourceOnline": { "description": "Library source is connected and accessible" }, - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "librarySourceOffline": "Offline. Reconecta el almacenamiento para restaurar estas pistas", "@librarySourceOffline": { "description": "Library source is temporarily disconnected" }, - "librarySourceDisabled": "Disabled", + "librarySourceDisabled": "Desactivado", "@librarySourceDisabled": { "description": "Library source has been disabled by the user" }, - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "librarySourceScanCount": "{scanned} archivos de {total} escaneados ({progress}%)", "@librarySourceScanCount": { "description": "Live progress for one library folder scan", "placeholders": { @@ -2548,11 +2548,11 @@ } } }, - "libraryExternalStorage": "External storage", + "libraryExternalStorage": "Almacenamiento externo", "@libraryExternalStorage": { "description": "Label for a removable or external library source" }, - "libraryRemoveFolder": "Remove library folder", + "libraryRemoveFolder": "Eliminar carpeta de biblioteca", "@libraryRemoveFolder": { "description": "Action to remove one indexed library source" }, From b3d825cf1d131bef82eb077c8231dc0026b0bd69 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 02:05:39 +0700 Subject: [PATCH 27/59] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 74 ++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index b587b51e5..e77161fff 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -469,7 +469,7 @@ "@aboutMusicBrainzDesc": { "description": "Credit for the MusicBrainz database" }, - "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "aboutSquiglyDesc": "Service de liens musicaux universel développé par Liam Macmillan, utilisé comme solution de secours finale pour la résolution multiplateforme.", "@aboutSquiglyDesc": { "description": "Credit for the Squigly resolver" }, @@ -606,7 +606,7 @@ "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "setupDownloadInFlac": "Télécharger de la musique en qualité sans perte et haute résolution", "@setupDownloadInFlac": { "description": "App tagline in setup" }, @@ -2015,7 +2015,7 @@ "@downloadAutoConvertBitrate": { "description": "Automatic conversion bitrate setting" }, - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "downloadAutoConvertBitrateSubtitle": "Des débits binaires plus élevés permettent de conserver davantage de détails, mais génèrent des fichiers plus volumineux.", "@downloadAutoConvertBitrateSubtitle": { "description": "Automatic conversion bitrate picker explanation" }, @@ -2023,7 +2023,7 @@ "@downloadAutoConvertMp3Subtitle": { "description": "MP3 automatic conversion option description" }, - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "downloadAutoConvertM4aSubtitle": "Fichier audio AAC de haute qualité au format M4A", "@downloadAutoConvertM4aSubtitle": { "description": "M4A AAC automatic conversion option description" }, @@ -2521,11 +2521,11 @@ "@libraryAddFolderSubtitle": { "description": "Supported storage locations for local library sources" }, - "librarySourceOnline": "Online", + "librarySourceOnline": "En ligne", "@librarySourceOnline": { "description": "Library source is connected and accessible" }, - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "librarySourceOffline": "Hors ligne. Reconnectez le périphérique de stockage pour restaurer ces morceaux.", "@librarySourceOffline": { "description": "Library source is temporarily disconnected" }, @@ -2552,11 +2552,11 @@ "@libraryExternalStorage": { "description": "Label for a removable or external library source" }, - "libraryRemoveFolder": "Remove library folder", + "libraryRemoveFolder": "Supprimer le dossier de la bibliothèque", "@libraryRemoveFolder": { "description": "Action to remove one indexed library source" }, - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "libraryRemoveFolderMessage": "Supprimer ce dossier et les morceaux indexés qu'il contient de SpotiFLAC Mobile ? Les fichiers audio présents sur le périphérique de stockage ne seront pas supprimés.", "@libraryRemoveFolderMessage": { "description": "Confirmation shown before removing a library source" }, @@ -2854,19 +2854,19 @@ "@tutorialWelcomeTitle": { "description": "Tutorial welcome page title" }, - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "tutorialWelcomeDesc": "Découvrez comment rechercher de la musique avec des extensions, choisir la qualité souhaitée et gérer vos téléchargements dans SpotiFLAC Mobile.", "@tutorialWelcomeDesc": { "description": "Tutorial welcome page description" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "tutorialWelcomeTip1": "Effectuez une recherche à l'aide d'une extension installée ou collez un lien musical pris en charge", "@tutorialWelcomeTip1": { "description": "Tutorial welcome tip 1" }, - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "tutorialWelcomeTip2": "Choisissez parmi les qualités audio proposées par votre fournisseur de téléchargement", "@tutorialWelcomeTip2": { "description": "Tutorial welcome tip 2" }, - "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", + "tutorialWelcomeTip3": "Intégrez automatiquement les métadonnées, la pochette, les paroles et les informations relatives à la sortie", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, @@ -2874,7 +2874,7 @@ "@tutorialSearchTitle": { "description": "Tutorial search page title" }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "tutorialSearchDesc": "Effectuez une recherche à l'aide de l'extension que vous avez sélectionnée ou collez un lien musical pris en charge.", "@tutorialSearchDesc": { "description": "Tutorial search page description" }, @@ -2882,7 +2882,7 @@ "@tutorialDownloadTitle": { "description": "Tutorial download page title" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "tutorialDownloadDesc": "Choisissez une qualité disponible, lancez le téléchargement et suivez sa progression dans la file d'attente.", "@tutorialDownloadDesc": { "description": "Tutorial download page description" }, @@ -2890,19 +2890,19 @@ "@tutorialLibraryTitle": { "description": "Tutorial library page title" }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "tutorialLibraryDesc": "La musique téléchargée et numérisée localement est classée dans votre bibliothèque.", "@tutorialLibraryDesc": { "description": "Tutorial library page description" }, - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "tutorialLibraryTip1": "Gérez les téléchargements en cours, en attente et terminés depuis la file d'attente de la bibliothèque", "@tutorialLibraryTip1": { "description": "Tutorial library tip 1" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "tutorialLibraryTip2": "Appuyez sur un morceau pour le lire avec le lecteur intégré", "@tutorialLibraryTip2": { "description": "Tutorial library tip 2" }, - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "tutorialLibraryTip3": "Parcourez les titres, les albums et les playlists sous forme de liste ou de grille", "@tutorialLibraryTip3": { "description": "Tutorial library tip 3" }, @@ -2910,7 +2910,7 @@ "@tutorialExtensionsTitle": { "description": "Tutorial extensions page title" }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "tutorialExtensionsDesc": "Les extensions permettent d'ajouter des fonctionnalités de recherche, de téléchargement, de métadonnées, de paroles de morceaux et d'autres intégrations.", "@tutorialExtensionsDesc": { "description": "Tutorial extensions page description" }, @@ -2918,11 +2918,11 @@ "@tutorialExtensionsTip1": { "description": "Tutorial extensions tip 1" }, - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "tutorialExtensionsTip2": "Choisissez les fournisseurs pour la recherche, les téléchargements, les métadonnées et les solutions de secours", "@tutorialExtensionsTip2": { "description": "Tutorial extensions tip 2" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "tutorialExtensionsTip3": "Connectez les comptes lorsque cela est nécessaire et veillez à ce que les extensions soient à jour", "@tutorialExtensionsTip3": { "description": "Tutorial extensions tip 3" }, @@ -2930,7 +2930,7 @@ "@tutorialSettingsTitle": { "description": "Tutorial settings page title" }, - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "tutorialSettingsDesc": "Personnalisez les téléchargements, la lecture, le fonctionnement de la bibliothèque, l'apparence et le stockage.", "@tutorialSettingsDesc": { "description": "Tutorial settings page description" }, @@ -2946,7 +2946,7 @@ "@tutorialSettingsTip3": { "description": "Tutorial settings tip 3" }, - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "tutorialReadyMessage": "Vous êtes prêt. Sélectionnez vos extensions, puis effectuez une recherche ou collez un lien compatible.", "@tutorialReadyMessage": { "description": "Tutorial completion message" }, @@ -3216,11 +3216,11 @@ "@trackReEnrichSelectAll": { "description": "Select all fields checkbox in re-enrich" }, - "trackReEnrichModeIsrc": "ISRC only", + "trackReEnrichModeIsrc": "ISRC uniquement", "@trackReEnrichModeIsrc": { "description": "Batch metadata mode that only writes ISRC" }, - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "trackReEnrichModeIsrcSubtitle": "Rechercher et ajouter l'identifiant de l'enregistrement sans modifier les autres balises", "@trackReEnrichModeIsrcSubtitle": { "description": "Explanation for the ISRC-only batch metadata mode" }, @@ -3228,15 +3228,15 @@ "@trackReEnrichModeMissing": { "description": "Batch metadata mode that fills only empty tags" }, - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "trackReEnrichModeMissingSubtitle": "Conserver les valeurs existantes et ne remplir que les champs vides", "@trackReEnrichModeMissingSubtitle": { "description": "Explanation for the fill-missing batch metadata mode" }, - "trackReEnrichModeReplace": "Update selected tags", + "trackReEnrichModeReplace": "Mettre à jour les balises sélectionnées", "@trackReEnrichModeReplace": { "description": "Batch metadata mode that replaces selected tag groups" }, - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "trackReEnrichModeReplaceSubtitle": "Sélectionnez les valeurs existantes pouvant être remplacées par des métadonnées en ligne", "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, @@ -3248,11 +3248,11 @@ "@trackReEnrichReview": { "description": "Button that searches metadata and opens the batch change review" }, - "trackReEnrichReviewTitle": "Review metadata changes", + "trackReEnrichReviewTitle": "Vérifier les modifications apportées aux métadonnées", "@trackReEnrichReviewTitle": { "description": "Title of the batch metadata review sheet" }, - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "trackReEnrichReviewSubtitle": "{changeCount} modifications proposées sur {trackCount} titres", "@trackReEnrichReviewSubtitle": { "description": "Summary shown above proposed batch metadata changes", "placeholders": { @@ -3264,15 +3264,15 @@ } } }, - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "trackReEnrichNoChanges": "Aucune modification des métadonnées n'a été détectée pour les morceaux sélectionnés.", "@trackReEnrichNoChanges": { "description": "Message when batch metadata preview has no proposed changes" }, - "trackReEnrichApplyChanges": "Apply changes", + "trackReEnrichApplyChanges": "Appliquer les modifications", "@trackReEnrichApplyChanges": { "description": "Confirmation button in the batch metadata review sheet" }, - "trackReEnrichRefreshOnline": "Refresh from online", + "trackReEnrichRefreshOnline": "Actualiser depuis Internet", "@trackReEnrichRefreshOnline": { "description": "Proposed value when lyrics will be refreshed during re-enrich" }, @@ -3901,7 +3901,7 @@ "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "lyricsProviderQqMusicDesc": "QQ Music (idéal pour les morceaux chinois, API directe)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, @@ -4256,7 +4256,7 @@ "@downloadNetworkCompatibilityMode": { "description": "Setting for legacy TLS/network handling" }, - "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "downloadNetworkCompatibilityModeEnabled": "Les points de terminaison HTTP hérités sont autorisés ; la vérification TLS reste activée", "@downloadNetworkCompatibilityModeEnabled": { "description": "Subtitle when network compatibility mode is on" }, @@ -5216,7 +5216,7 @@ "@queueDownloadedFileMissing": { "description": "Accessibility label when a downloaded file is missing from disk" }, - "queueCheckingDownloadedFile": "Checking downloaded file...", + "queueCheckingDownloadedFile": "Vérification du fichier téléchargé...", "@queueCheckingDownloadedFile": { "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." }, @@ -5527,7 +5527,7 @@ "@editMetadataFieldComment": { "description": "Label for comment field in the edit metadata sheet" }, - "trackAlbumType": "Release Type", + "trackAlbumType": "Type de publication", "@trackAlbumType": { "description": "Label for an album or release type metadata value" }, From 2483fbb61d1a20a47ab586bdbec4f22622c2a5b4 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 03:19:50 +0700 Subject: [PATCH 28/59] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index e77161fff..9e6cf2377 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -2533,7 +2533,7 @@ "@librarySourceDisabled": { "description": "Library source has been disabled by the user" }, - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "librarySourceScanCount": "{scanned} fichiers analysés sur {total} ({progress} %)", "@librarySourceScanCount": { "description": "Live progress for one library folder scan", "placeholders": { @@ -2938,7 +2938,7 @@ "@tutorialSettingsTip1": { "description": "Tutorial settings tip 1" }, - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "tutorialSettingsTip2": "Définissez la qualité, le nombre de tâches simultanées, les noms de fichiers et les préférences de conversion", "@tutorialSettingsTip2": { "description": "Tutorial settings tip 2" }, @@ -3224,7 +3224,7 @@ "@trackReEnrichModeIsrcSubtitle": { "description": "Explanation for the ISRC-only batch metadata mode" }, - "trackReEnrichModeMissing": "Fill missing tags", + "trackReEnrichModeMissing": "Compléter les balises manquantes", "@trackReEnrichModeMissing": { "description": "Batch metadata mode that fills only empty tags" }, @@ -3240,11 +3240,11 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, - "trackReEnrichFieldsTitle": "Tags to update", + "trackReEnrichFieldsTitle": "Balises à mettre à jour", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" }, - "trackReEnrichReview": "Review changes", + "trackReEnrichReview": "Vérifier les modifications", "@trackReEnrichReview": { "description": "Button that searches metadata and opens the batch change review" }, From 2af826746f7892d2ea7036f3459658fdf322382e Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:03:59 +0700 Subject: [PATCH 29/59] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 1cca2ff65..4163ca767 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "Se agregaron las etiquetas ReplayGain a {success} de {total} pistas", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "¿Eliminar {count} copias de menor calidad del \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Carátula", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Información ", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 8af6cf26a7e8bba3a5f5fc69a43df9f98ca65c89 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:01 +0700 Subject: [PATCH 30/59] New translations app_en.arb (Ukrainian) [ci skip] --- lib/l10n/arb/app_uk.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_uk.arb b/lib/l10n/arb/app_uk.arb index 3cc0756aa..5803fee6f 100644 --- a/lib/l10n/arb/app_uk.arb +++ b/lib/l10n/arb/app_uk.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Обкладинка", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Метадані повторно збагачені успішно", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 8a4ce832034fa14ac51adf7467bd2c612d3a2363 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:03 +0700 Subject: [PATCH 31/59] New translations app_en.arb (Italian) [ci skip] --- lib/l10n/arb/app_it.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_it.arb b/lib/l10n/arb/app_it.arb index b01b25e24..fc371d718 100644 --- a/lib/l10n/arb/app_it.arb +++ b/lib/l10n/arb/app_it.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Eliminare {count} copie con qualità minore di \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From b6a3256203b2a0fdec0f2cb35a1426bd1cb2bf44 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:05 +0700 Subject: [PATCH 32/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 5a119e2bc..a4e194f06 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain ditambahkan ke {success} dari {total} trek", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Hapus {count} salinan kualitas rendah lagu \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 380f7c1e2bd7a002945014d1d72bd1f745678c1f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:06 +0700 Subject: [PATCH 33/59] New translations app_en.arb (Chinese Traditional) [ci skip] --- lib/l10n/arb/app_zh_TW.arb | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_zh_TW.arb b/lib/l10n/arb/app_zh_TW.arb index 6adc4d629..4d0fff774 100644 --- a/lib/l10n/arb/app_zh_TW.arb +++ b/lib/l10n/arb/app_zh_TW.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "已{success}為{total}首歌添加音量平衡", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From ec745dd837acccc94dba5020d358fb5675c7afc3 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:08 +0700 Subject: [PATCH 34/59] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index 9e6cf2377..f07aa0d5c 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain ajouté à {success} de {total} pistes", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Supprimer {count} copies de moindre qualité de « {trackName} » ?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Illustration de couverture", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Balises à mettre à jour", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Métadonnées réenrichies avec succès", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Lancer la vérification manuellement", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From bfb348d598f032d633d24f8f66ede7b2d0da45e9 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:10 +0700 Subject: [PATCH 35/59] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 17705ca4a..6b8b86b5c 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "تمت إضافة وسوم ReplyGain ل {success} أغنية من أصل {total}", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "حذف {count} نسخ أقل جودة من \"{trackName}\"؟", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 909c86d54f8c1a855b6597b5e2ef944c5201b656 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:11 +0700 Subject: [PATCH 36/59] New translations app_en.arb (German) [ci skip] --- lib/l10n/arb/app_de.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb index e7070a702..84da94aea 100644 --- a/lib/l10n/arb/app_de.arb +++ b/lib/l10n/arb/app_de.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover-Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadaten erfolgreich neu angereichert", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From d33a933875d1ca02c8dcc1e86706807d29a99649 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:13 +0700 Subject: [PATCH 37/59] New translations app_en.arb (Japanese) [ci skip] --- lib/l10n/arb/app_ja.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_ja.arb b/lib/l10n/arb/app_ja.arb index b1d2f08cf..35fcbbb4e 100644 --- a/lib/l10n/arb/app_ja.arb +++ b/lib/l10n/arb/app_ja.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From be057d7feb9234f0d77b15a78e9b9336f0b9cacf Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:15 +0700 Subject: [PATCH 38/59] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 38022bc77..f0ee1f6be 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "{total} 개의 트랙 중 {success} 개에 리플레이게인이 추가됨", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "\"{trackName}\"의 {count} 개의 저음질 복사본을 삭제하시겠습니까?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "앨범 커버", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "업데이트할 태그", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "메타데이터 재구성 성공", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "수동으로 인증 열기", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 5beef58fe4bc14dd266ab6f1a8433bf5445b97b2 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:17 +0700 Subject: [PATCH 39/59] New translations app_en.arb (Dutch) [ci skip] --- lib/l10n/arb/app_nl.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_nl.arb b/lib/l10n/arb/app_nl.arb index 284f30881..36609108c 100644 --- a/lib/l10n/arb/app_nl.arb +++ b/lib/l10n/arb/app_nl.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 6bf724a381fd8af16f08a46d32d81df202ba932f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:18 +0700 Subject: [PATCH 40/59] New translations app_en.arb (Portuguese) [ci skip] --- lib/l10n/arb/app_pt_PT.arb | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_pt_PT.arb b/lib/l10n/arb/app_pt_PT.arb index ed0018e69..e91893124 100644 --- a/lib/l10n/arb/app_pt_PT.arb +++ b/lib/l10n/arb/app_pt_PT.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain adicionado a {success} de {total} faixas", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Excluir {count} cópias de qualidade inferior de \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 6c1c1be8373a8887eb400a898cd762bc0fe8b4e2 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:20 +0700 Subject: [PATCH 41/59] New translations app_en.arb (Russian) [ci skip] --- lib/l10n/arb/app_ru.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_ru.arb b/lib/l10n/arb/app_ru.arb index 5570f308d..d0f11d122 100644 --- a/lib/l10n/arb/app_ru.arb +++ b/lib/l10n/arb/app_ru.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain добавлен к {success} треков {total}", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Обложка", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Метаданные успешно обновлены", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 548b704ba51f63dd935e98e6fc30587dade20a7d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:22 +0700 Subject: [PATCH 42/59] New translations app_en.arb (Turkish) [ci skip] --- lib/l10n/arb/app_tr.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_tr.arb b/lib/l10n/arb/app_tr.arb index 41fc4868e..b83af7758 100644 --- a/lib/l10n/arb/app_tr.arb +++ b/lib/l10n/arb/app_tr.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 2b0eef8407555e6645dfa4f6c67643e522ef08dd Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:23 +0700 Subject: [PATCH 43/59] New translations app_en.arb (Chinese Simplified) [ci skip] --- lib/l10n/arb/app_zh_CN.arb | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_zh_CN.arb b/lib/l10n/arb/app_zh_CN.arb index 4f2059e13..dd2572031 100644 --- a/lib/l10n/arb/app_zh_CN.arb +++ b/lib/l10n/arb/app_zh_CN.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "已为 {success}/{total} 首歌曲添加 ReplayGain", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From 907ee74b6d65cb8286bde36d9a1afa78d79a2489 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:04:25 +0700 Subject: [PATCH 44/59] New translations app_en.arb (Hindi) [ci skip] --- lib/l10n/arb/app_hi.arb | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/l10n/arb/app_hi.arb b/lib/l10n/arb/app_hi.arb index 022cec204..3c25df11b 100644 --- a/lib/l10n/arb/app_hi.arb +++ b/lib/l10n/arb/app_hi.arb @@ -237,6 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -854,6 +855,22 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, + "duplicatesKeepBestAll": "Keep best for all", + "@duplicatesKeepBestAll": { + "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" + }, + "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "@duplicatesKeepBestAllMessage": { + "description": "Confirmation message for keeping the best copy across every duplicate group", + "placeholders": { + "count": { + "type": "int" + }, + "groupCount": { + "type": "int" + } + } + }, "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", "@duplicatesKeepBestMessage": { "description": "Confirmation message for the keep-best action", @@ -3188,6 +3205,10 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "@trackReEnrichBatchSubtitle": { + "description": "Subtitle for batch metadata update choices" + }, "trackReEnrichFieldCover": "Cover Art", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" @@ -3240,6 +3261,22 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, + "trackReEnrichModeManual": "Set common values", + "@trackReEnrichModeManual": { + "description": "Batch metadata mode that applies shared values to every selected track" + }, + "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "@trackReEnrichModeManualSubtitle": { + "description": "Explanation for the manual shared-value batch metadata mode" + }, + "trackReEnrichManualFieldsTitle": "Values to apply", + "@trackReEnrichManualFieldsTitle": { + "description": "Heading above manual batch metadata inputs" + }, + "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "@trackReEnrichManualHint": { + "description": "Safety explanation for manual batch metadata inputs" + }, "trackReEnrichFieldsTitle": "Tags to update", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" @@ -3310,6 +3347,10 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, + "trackReEnrichPreparing": "Preparing metadata changes...", + "@trackReEnrichPreparing": { + "description": "Progress message while preparing manual batch metadata changes" + }, "trackReEnrichSuccess": "Metadata re-enriched successfully", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" @@ -6440,6 +6481,15 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, + "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "@extensionVerificationUnavailable": { + "description": "Shown when the app cannot retrieve a pending verification challenge", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "extensionVerificationHelpTitleManual": "Open verification manually", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" From ad5305265a688433c689d4bac23352326d2b7742 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 20:53:15 +0700 Subject: [PATCH 45/59] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index f0ee1f6be..78d5705e4 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -237,7 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "{total} 개의 트랙 중 {success} 개에 리플레이게인이 추가됨", - "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", + "replayGainUnsupportedDecoder": "일부 트랙은 리플레이게인 디코더에서 지원하지 않는 오디오 코덱을 사용하기 때문에 분석할 수 없습니다. 해당 파일은 변경되지 않았습니다", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -855,11 +855,11 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "duplicatesKeepBestAll": "Keep best for all", + "duplicatesKeepBestAll": "모두에 대해 최상의 파일 유지", "@duplicatesKeepBestAll": { "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" }, - "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "duplicatesKeepBestAllMessage": "{groupCount} 개의 {groupCount, plural, =1{트랙} other{트랙}} 중 가장 좋은 음질의 복사본을 유지하고, {count} 개의 품질이 낮은 {count, plural, =1{복사본} other{복사본}}을 삭제하시겠습니까?\n\n삭제된 파일은 저장소에서 제거됩니다", "@duplicatesKeepBestAllMessage": { "description": "Confirmation message for keeping the best copy across every duplicate group", "placeholders": { @@ -3205,7 +3205,7 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, - "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "trackReEnrichBatchSubtitle": "온라인 업데이트 또는 수동 업데이트를 선택한 다음, 변경 사항을 모두 검토한 후 적용하세요", "@trackReEnrichBatchSubtitle": { "description": "Subtitle for batch metadata update choices" }, @@ -3261,19 +3261,19 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, - "trackReEnrichModeManual": "Set common values", + "trackReEnrichModeManual": "공통 값 설정", "@trackReEnrichModeManual": { "description": "Batch metadata mode that applies shared values to every selected track" }, - "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "trackReEnrichModeManualSubtitle": "선택한 모든 트랙에 동일한 값 적용", "@trackReEnrichModeManualSubtitle": { "description": "Explanation for the manual shared-value batch metadata mode" }, - "trackReEnrichManualFieldsTitle": "Values to apply", + "trackReEnrichManualFieldsTitle": "적용할 값", "@trackReEnrichManualFieldsTitle": { "description": "Heading above manual batch metadata inputs" }, - "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "trackReEnrichManualHint": "현재 값을 유지하려면 필드를 비워 두세요. 트랙 제목, 번호 및 ISRC는 변경되지 않습니다", "@trackReEnrichManualHint": { "description": "Safety explanation for manual batch metadata inputs" }, @@ -3347,7 +3347,7 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, - "trackReEnrichPreparing": "Preparing metadata changes...", + "trackReEnrichPreparing": "메타데이터 변경 준비 중...", "@trackReEnrichPreparing": { "description": "Progress message while preparing manual batch metadata changes" }, @@ -6135,7 +6135,7 @@ } } }, - "nowPlayingSleepTimerCancelled": "취침 타이머가 꺼짐", + "nowPlayingSleepTimerCancelled": "취침 타이머 꺼짐", "@nowPlayingSleepTimerCancelled": { "description": "Confirmation after cancelling the playback sleep timer" }, @@ -6481,7 +6481,7 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, - "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "extensionVerificationUnavailable": "\"{extension}\"에 대한 인증 페이지를 사용할 수 없습니다. 새 인증을 요청하려면 다운로드를 다시 시도하세요", "@extensionVerificationUnavailable": { "description": "Shown when the app cannot retrieve a pending verification challenge", "placeholders": { From 833ca66a3e757af8e27718d4255a3becf6ce5d27 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 7 Sep 2026 23:00:00 +0700 Subject: [PATCH 46/59] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index f07aa0d5c..f69aaa5b3 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -237,7 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain ajouté à {success} de {total} pistes", - "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", + "replayGainUnsupportedDecoder": "Certaines pistes n'ont pas pu être analysées car leur codec audio n'est pas pris en charge par le décodeur ReplayGain. Leurs fichiers n'ont pas été modifiés.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -855,11 +855,11 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "duplicatesKeepBestAll": "Keep best for all", + "duplicatesKeepBestAll": "À conserver dans les meilleures conditions pour tous", "@duplicatesKeepBestAll": { "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" }, - "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "duplicatesKeepBestAllMessage": "Conserver la meilleure copie parmi {groupCount} {groupCount, plural, =1{piste} other{pistes}} et supprimer {count} copies de moindre qualité parmi {count, plural, =1{copie} other{copies}} ?\n\nLes fichiers supprimés seront retirés de l'espace de stockage.", "@duplicatesKeepBestAllMessage": { "description": "Confirmation message for keeping the best copy across every duplicate group", "placeholders": { @@ -3205,7 +3205,7 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, - "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "trackReEnrichBatchSubtitle": "Choisissez une mise à jour en ligne ou manuelle, puis vérifiez chaque modification avant de valider", "@trackReEnrichBatchSubtitle": { "description": "Subtitle for batch metadata update choices" }, @@ -3261,19 +3261,19 @@ "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, - "trackReEnrichModeManual": "Set common values", + "trackReEnrichModeManual": "Définir des valeurs communes", "@trackReEnrichModeManual": { "description": "Batch metadata mode that applies shared values to every selected track" }, - "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "trackReEnrichModeManualSubtitle": "Appliquer les mêmes valeurs à toutes les pistes sélectionnées", "@trackReEnrichModeManualSubtitle": { "description": "Explanation for the manual shared-value batch metadata mode" }, - "trackReEnrichManualFieldsTitle": "Values to apply", + "trackReEnrichManualFieldsTitle": "Valeurs à appliquer", "@trackReEnrichManualFieldsTitle": { "description": "Heading above manual batch metadata inputs" }, - "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "trackReEnrichManualHint": "Laissez un champ vide pour conserver sa valeur actuelle. Les titres, numéros et codes ISRC des morceaux restent inchangés.", "@trackReEnrichManualHint": { "description": "Safety explanation for manual batch metadata inputs" }, @@ -3347,7 +3347,7 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, - "trackReEnrichPreparing": "Preparing metadata changes...", + "trackReEnrichPreparing": "Préparation des modifications des métadonnées...", "@trackReEnrichPreparing": { "description": "Progress message while preparing manual batch metadata changes" }, @@ -6481,7 +6481,7 @@ "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, - "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "extensionVerificationUnavailable": "Aucune page de vérification n'est disponible pour {extension}. Réessayez le téléchargement pour demander un nouveau code de vérification.", "@extensionVerificationUnavailable": { "description": "Shown when the app cannot retrieve a pending verification challenge", "placeholders": { From e4c64250501f1f9e6b31d4e5aa88c3bc86b234e2 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 9 Sep 2026 01:32:57 +0700 Subject: [PATCH 47/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index a4e194f06..960bd8b0a 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -237,7 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain ditambahkan ke {success} dari {total} trek", - "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", + "replayGainUnsupportedDecoder": "Beberapa lagu tidak dapat dianalisis karena decoder ReplayGain tidak mendukung codec audio-nya. File tidak diubah.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { From 5ab2a35fcf00e67c1f94059d03315391ad8a633a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 10 Sep 2026 22:57:00 +0700 Subject: [PATCH 48/59] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 4163ca767..dc221eba5 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -237,7 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "Se agregaron las etiquetas ReplayGain a {success} de {total} pistas", - "replayGainUnsupportedDecoder": "Some tracks could not be analyzed because their audio codec is not supported by the ReplayGain decoder. Their files were not changed.", + "replayGainUnsupportedDecoder": "Algunas pistas no se pudieron analizar porque el decodificador de ReplayGain no es compatible con su códec de audio. Los archivos no se modificaron.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -855,11 +855,11 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "duplicatesKeepBestAll": "Keep best for all", + "duplicatesKeepBestAll": "Lo mejor para todos", "@duplicatesKeepBestAll": { "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" }, - "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "duplicatesKeepBestAllMessage": "¿Quieres conservar la mejor copia de {groupCount} {groupCount, plural, =1{track} other{tracks}} y eliminar {count} copias de menor calidad {count, plural, =1{copy} other{copies}}?\n\nLos archivos eliminados se borrarán del almacenamiento.", "@duplicatesKeepBestAllMessage": { "description": "Confirmation message for keeping the best copy across every duplicate group", "placeholders": { @@ -2573,7 +2573,7 @@ "@libraryRemoveFolder": { "description": "Action to remove one indexed library source" }, - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "libraryRemoveFolderMessage": "¿Deseas eliminar esta carpeta y sus pistas indexadas de SpotiFLAC Mobile? Los archivos de audio almacenados no se borrarán.", "@libraryRemoveFolderMessage": { "description": "Confirmation shown before removing a library source" }, @@ -2871,11 +2871,11 @@ "@tutorialWelcomeTitle": { "description": "Tutorial welcome page title" }, - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "tutorialWelcomeDesc": "Aprende a buscar música con extensiones, a elegir la calidad que desees y a administrar las descargas en SpotiFLAC Mobile.", "@tutorialWelcomeDesc": { "description": "Tutorial welcome page description" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "tutorialWelcomeTip1": "Busca con una extensión instalada o pega un enlace de música compatible", "@tutorialWelcomeTip1": { "description": "Tutorial welcome tip 1" }, From 393810af10c04ce407a5ed02bcb3c36303d24554 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 11 Sep 2026 00:24:19 +0700 Subject: [PATCH 49/59] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index dc221eba5..421a92f41 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -2879,11 +2879,11 @@ "@tutorialWelcomeTip1": { "description": "Tutorial welcome tip 1" }, - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "tutorialWelcomeTip2": "Elige entre las calidades de audio que ofrece tu proveedor de descargas", "@tutorialWelcomeTip2": { "description": "Tutorial welcome tip 2" }, - "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", + "tutorialWelcomeTip3": "Incorpora metadatos, portadas, letras e información sobre el lanzamiento automáticamente", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, @@ -2891,7 +2891,7 @@ "@tutorialSearchTitle": { "description": "Tutorial search page title" }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "tutorialSearchDesc": "Busca con la extensión que hayas seleccionado o pega un enlace de música compatible.", "@tutorialSearchDesc": { "description": "Tutorial search page description" }, @@ -2899,7 +2899,7 @@ "@tutorialDownloadTitle": { "description": "Tutorial download page title" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "tutorialDownloadDesc": "Elige una calidad disponible, inicia la descarga y sigue su avance en la fila.", "@tutorialDownloadDesc": { "description": "Tutorial download page description" }, @@ -2907,19 +2907,19 @@ "@tutorialLibraryTitle": { "description": "Tutorial library page title" }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "tutorialLibraryDesc": "La música descargada y escaneada localmente se organiza en tu biblioteca.", "@tutorialLibraryDesc": { "description": "Tutorial library page description" }, - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "tutorialLibraryTip1": "Administra las descargas activas, pendientes y completadas desde la cola de la Biblioteca", "@tutorialLibraryTip1": { "description": "Tutorial library tip 1" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "tutorialLibraryTip2": "Toca una canción para reproducirla con el reproductor integrado", "@tutorialLibraryTip2": { "description": "Tutorial library tip 2" }, - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "tutorialLibraryTip3": "Explora canciones, álbumes y listas de reproducción en vista de lista o de cuadrícula", "@tutorialLibraryTip3": { "description": "Tutorial library tip 3" }, From d5042c4d3ccdf9b3c96aa23731c9ff20a8a05acb Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 11 Sep 2026 02:19:33 +0700 Subject: [PATCH 50/59] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 421a92f41..87b2aa60d 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -2927,7 +2927,7 @@ "@tutorialExtensionsTitle": { "description": "Tutorial extensions page title" }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "tutorialExtensionsDesc": "Las extensiones añaden funciones de búsqueda, descarga, metadatos, letras de canciones y otras integraciones.", "@tutorialExtensionsDesc": { "description": "Tutorial extensions page description" }, @@ -2935,11 +2935,11 @@ "@tutorialExtensionsTip1": { "description": "Tutorial extensions tip 1" }, - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "tutorialExtensionsTip2": "Selecciona proveedores para búsquedas, descargas, metadatos y opciones alternativas", "@tutorialExtensionsTip2": { "description": "Tutorial extensions tip 2" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "tutorialExtensionsTip3": "Conecta las cuentas cuando sea necesario y mantén las extensiones actualizadas", "@tutorialExtensionsTip3": { "description": "Tutorial extensions tip 3" }, @@ -4843,7 +4843,7 @@ "@cancelDownloadKeep": { "description": "Dialog button - keep the active download (do not cancel)" }, - "queueCancelledTitle": "Download cancelled", + "queueCancelledTitle": "Descarga cancelada", "@queueCancelledTitle": { "description": "Dialog title when opening a cancelled queue item" }, @@ -5042,7 +5042,7 @@ } } }, - "notifLibraryScanFailed": "Library scan failed", + "notifLibraryScanFailed": "Error al escanear la biblioteca", "@notifLibraryScanFailed": { "description": "Notification title when library scan fails" }, From b743f27877281fe6664c327b3fe3d7611241a00f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 11 Sep 2026 11:36:33 +0700 Subject: [PATCH 51/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 248 ++++++++++++++++++++-------------------- 1 file changed, 124 insertions(+), 124 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 960bd8b0a..e66ac7ac9 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -2296,7 +2296,7 @@ "@downloadedAlbumSelectToDelete": { "description": "Placeholder when nothing selected" }, - "downloadedAlbumDiscHeader": "Disc {discNumber}", + "downloadedAlbumDiscHeader": "Disk {discNumber}", "@downloadedAlbumDiscHeader": { "description": "Header for disc separator in multi-disc albums", "placeholders": { @@ -2326,7 +2326,7 @@ "@recentEmpty": { "description": "Empty state text for recent access list" }, - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "recentClearAllMessage": "Hapus semua baru-baru ini? Histori download dan file musik tidak akan dihapus.", "@recentClearAllMessage": { "description": "Confirmation message before clearing all recent activity" }, @@ -2442,7 +2442,7 @@ } } }, - "discographySkippedDownloaded": "{added} added, {skipped} already downloaded", + "discographySkippedDownloaded": "{added} ditambahkan, {skipped} terdownload", "@discographySkippedDownloaded": { "description": "Snackbar - with skipped tracks count", "placeholders": { @@ -2454,87 +2454,87 @@ } } }, - "discographyNoAlbums": "No albums available", + "discographyNoAlbums": "Tidak ada album tersedia", "@discographyNoAlbums": { "description": "Error - no albums found for artist" }, - "discographyFailedToFetch": "Failed to fetch some albums", + "discographyFailedToFetch": "Gagal mendapatkan informasi album", "@discographyFailedToFetch": { "description": "Error - some albums failed to load" }, - "sectionStorageAccess": "Storage Access", + "sectionStorageAccess": "Akses Penyimpanan", "@sectionStorageAccess": { "description": "Section header for storage access settings" }, - "allFilesAccess": "All Files Access", + "allFilesAccess": "Akses Semua File", "@allFilesAccess": { "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "allFilesAccessEnabledSubtitle": "Can write to any folder", + "allFilesAccessEnabledSubtitle": "Dapat menyimpan ke folder manapun", "@allFilesAccessEnabledSubtitle": { "description": "Subtitle when all files access is enabled" }, - "allFilesAccessDisabledSubtitle": "Limited to media folders only", + "allFilesAccessDisabledSubtitle": "Gunakan folder media saja", "@allFilesAccessDisabledSubtitle": { "description": "Subtitle when all files access is disabled" }, - "allFilesAccessDescription": "Enable this if you encounter write errors when saving to custom folders. Android 13+ restricts access to certain directories by default.", + "allFilesAccessDescription": "Hidupkan ini bila aplikasi mengalami eror saat menyimpan ke folder tertentu. Android 13+ membatasi akses ke folder tertentu secara default.", "@allFilesAccessDescription": { "description": "Description explaining when to enable all files access" }, - "allFilesAccessDeniedMessage": "Permission was denied. Please enable 'All files access' manually in system settings.", + "allFilesAccessDeniedMessage": "Izin ditolak. Mohon hidupkan 'Akses semua file' di setelan sistem.", "@allFilesAccessDeniedMessage": { "description": "Message when permission is permanently denied" }, - "allFilesAccessDisabledMessage": "All Files Access disabled. The app will use limited storage access.", + "allFilesAccessDisabledMessage": "Akses Semua File dimatikan. Aplikasi akan menyimpan di folder media saja.", "@allFilesAccessDisabledMessage": { "description": "Snackbar message when user disables all files access" }, - "settingsLocalLibrary": "Local Library", + "settingsLocalLibrary": "Koleksi Lokal", "@settingsLocalLibrary": { "description": "Settings menu item - local library" }, - "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", + "settingsLocalLibrarySubtitle": "Pindah musik & deteksi file ganda", "@settingsLocalLibrarySubtitle": { "description": "Subtitle for local library settings" }, - "settingsCache": "Storage & Cache", + "settingsCache": "Penyimpanan & Cache", "@settingsCache": { "description": "Settings menu item - cache management" }, - "settingsCacheSubtitle": "View size and clear cached data", + "settingsCacheSubtitle": "Lihat total dan bersihkan cache", "@settingsCacheSubtitle": { "description": "Subtitle for cache management menu" }, - "libraryTitle": "Local Library", + "libraryTitle": "Pustaka Lokal", "@libraryTitle": { "description": "Library settings page title" }, - "libraryScanSettings": "Scan Settings", + "libraryScanSettings": "Setelan Pemindaian", "@libraryScanSettings": { "description": "Section header for scan settings" }, - "libraryEnableLocalLibrary": "Enable Local Library", + "libraryEnableLocalLibrary": "Hidupkan Koleksi Lokal", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, - "libraryEnableLocalLibrarySubtitle": "Scan and track your existing music", + "libraryEnableLocalLibrarySubtitle": "Pindai seluruh musik di perangkat Anda", "@libraryEnableLocalLibrarySubtitle": { "description": "Subtitle for enable toggle" }, - "libraryFolder": "Library Folder", + "libraryFolder": "Folder Pustaka", "@libraryFolder": { "description": "Folder selection setting" }, - "libraryFolderHint": "Tap to select folder", + "libraryFolderHint": "Ketuk untuk memilih folder", "@libraryFolderHint": { "description": "Placeholder when no folder selected" }, - "libraryAddFolder": "Add library folder", + "libraryAddFolder": "Tambahkan folder koleksi", "@libraryAddFolder": { "description": "Action to add another local library source" }, - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "libraryAddFolderSubtitle": "Penyimpanan internal, kartu SD, SSD, atau penyimpanan eksternal lain", "@libraryAddFolderSubtitle": { "description": "Supported storage locations for local library sources" }, @@ -2542,15 +2542,15 @@ "@librarySourceOnline": { "description": "Library source is connected and accessible" }, - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "librarySourceOffline": "Offline. Hubungkan penyimpanan ke ponsel untuk mengakses lagu", "@librarySourceOffline": { "description": "Library source is temporarily disconnected" }, - "librarySourceDisabled": "Disabled", + "librarySourceDisabled": "Dimatikan", "@librarySourceDisabled": { "description": "Library source has been disabled by the user" }, - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "librarySourceScanCount": "{scanned} dari {total} file dipindai ({progress}%)", "@librarySourceScanCount": { "description": "Live progress for one library folder scan", "placeholders": { @@ -2565,91 +2565,91 @@ } } }, - "libraryExternalStorage": "External storage", + "libraryExternalStorage": "Penyimpanan eksternal", "@libraryExternalStorage": { "description": "Label for a removable or external library source" }, - "libraryRemoveFolder": "Remove library folder", + "libraryRemoveFolder": "Hapus folder koleksi", "@libraryRemoveFolder": { "description": "Action to remove one indexed library source" }, - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "libraryRemoveFolderMessage": "Hapus folder ini dan lagu di dalamnya dari SpotiFLAC Mobile? File audio di perangkat tidak akan dihapus.", "@libraryRemoveFolderMessage": { "description": "Confirmation shown before removing a library source" }, - "libraryShowDuplicateIndicator": "Show Duplicate Indicator", + "libraryShowDuplicateIndicator": "Tampilkan Tanda File Ganda", "@libraryShowDuplicateIndicator": { "description": "Toggle for duplicate indicator in search" }, - "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", + "libraryShowDuplicateIndicatorSubtitle": "Tampilkan saat menelusuri lagu", "@libraryShowDuplicateIndicatorSubtitle": { "description": "Subtitle for duplicate indicator toggle" }, - "libraryAutoScan": "Auto Scan", + "libraryAutoScan": "Pindai Oto", "@libraryAutoScan": { "description": "Setting for automatic library scanning" }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", + "libraryAutoScanSubtitle": "Otomatis memindai pustaka Anda", "@libraryAutoScanSubtitle": { "description": "Subtitle for auto scan setting" }, - "libraryAutoScanOff": "Off", + "libraryAutoScanOff": "Mati", "@libraryAutoScanOff": { "description": "Auto scan disabled" }, - "libraryAutoScanOnOpen": "Every app open", + "libraryAutoScanOnOpen": "Setiap dibuka", "@libraryAutoScanOnOpen": { "description": "Auto scan when app opens" }, - "libraryAutoScanDaily": "Daily", + "libraryAutoScanDaily": "Harian", "@libraryAutoScanDaily": { "description": "Auto scan once per day" }, - "libraryAutoScanWeekly": "Weekly", + "libraryAutoScanWeekly": "Mingguan", "@libraryAutoScanWeekly": { "description": "Auto scan once per week" }, - "libraryActions": "Actions", + "libraryActions": "Tindakan", "@libraryActions": { "description": "Section header for library actions" }, - "libraryScan": "Scan Library", + "libraryScan": "Pindai Koleksi", "@libraryScan": { "description": "Button to start library scan" }, - "libraryScanSubtitle": "Scan for audio files", + "libraryScanSubtitle": "Pindai file audio", "@libraryScanSubtitle": { "description": "Subtitle for scan button" }, - "libraryScanSelectFolderFirst": "Select a folder first", + "libraryScanSelectFolderFirst": "Pilih folder dahulu", "@libraryScanSelectFolderFirst": { "description": "Message when trying to scan without folder" }, - "libraryCleanupMissingFiles": "Cleanup Missing Files", + "libraryCleanupMissingFiles": "Bersihkan file yang hilang", "@libraryCleanupMissingFiles": { "description": "Button to remove entries for missing files" }, - "libraryCleanupMissingFilesSubtitle": "Remove entries for files that no longer exist", + "libraryCleanupMissingFilesSubtitle": "Bersihkan lagu yang sudah tidak ada", "@libraryCleanupMissingFilesSubtitle": { "description": "Subtitle for cleanup button" }, - "libraryClear": "Clear Library", + "libraryClear": "Bersihkan Koleksi", "@libraryClear": { "description": "Button to clear all library entries" }, - "libraryClearSubtitle": "Remove all scanned tracks", + "libraryClearSubtitle": "Hapus semua lagu terpindai", "@libraryClearSubtitle": { "description": "Subtitle for clear button" }, - "libraryClearConfirmTitle": "Clear Library", + "libraryClearConfirmTitle": "Bersihkan Koleksi", "@libraryClearConfirmTitle": { "description": "Dialog title for clear confirmation" }, - "libraryClearConfirmMessage": "This will remove all scanned tracks from your library. Your actual music files will not be deleted.", + "libraryClearConfirmMessage": "Tindakan ini akan menghapus lagu terpindai dari Koleksi Anda. File asli akan tetap berada di ponsel Anda.", "@libraryClearConfirmMessage": { "description": "Dialog message for clear confirmation" }, - "libraryAbout": "About Local Library", + "libraryAbout": "Tentang Koleksi Lokal", "@libraryAbout": { "description": "Section header for about info" }, @@ -2657,7 +2657,7 @@ "@libraryAboutDescription": { "description": "Description of local library feature" }, - "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "libraryTracksUnit": "{count, plural, =1{lagu} other{lagu}}", "@libraryTracksUnit": { "description": "Unit label for tracks count (without the number itself)", "placeholders": { @@ -2666,7 +2666,7 @@ } } }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "libraryFilesUnit": "{count, plural, =1{file} other{file}}", "@libraryFilesUnit": { "description": "Unit label for files count during library scanning", "placeholders": { @@ -2675,7 +2675,7 @@ } } }, - "libraryLastScanned": "Last scanned: {time}", + "libraryLastScanned": "Terakhir dipindai: {time}", "@libraryLastScanned": { "description": "Last scan time display", "placeholders": { @@ -2684,19 +2684,19 @@ } } }, - "libraryLastScannedNever": "Never", + "libraryLastScannedNever": "Belum", "@libraryLastScannedNever": { "description": "Shown when library has never been scanned" }, - "libraryScanning": "Scanning...", + "libraryScanning": "Memindai...", "@libraryScanning": { "description": "Status during scan" }, - "libraryScanFinalizing": "Finalizing library...", + "libraryScanFinalizing": "Menyelesaikan koleksi...", "@libraryScanFinalizing": { "description": "Status shown after file scanning finishes but library persistence is still running" }, - "libraryScanProgress": "{progress}% of {total} files", + "libraryScanProgress": "{progress}% dari {total} file", "@libraryScanProgress": { "description": "Scan progress display", "placeholders": { @@ -2708,11 +2708,11 @@ } } }, - "libraryInLibrary": "In Library", + "libraryInLibrary": "Di Koleksi", "@libraryInLibrary": { "description": "Badge shown on tracks that exist in local library" }, - "libraryRemovedMissingFiles": "Removed {count} missing files from library", + "libraryRemovedMissingFiles": "Menghapus {count} file hilang dari Koleksi", "@libraryRemovedMissingFiles": { "description": "Snackbar after cleanup", "placeholders": { @@ -2721,43 +2721,43 @@ } } }, - "libraryCleared": "Library cleared", + "libraryCleared": "Koleksi dibersihkan", "@libraryCleared": { "description": "Snackbar after clearing library" }, - "libraryStorageAccessRequired": "Storage Access Required", + "libraryStorageAccessRequired": "Butuh Akses Penyimpanan", "@libraryStorageAccessRequired": { "description": "Dialog title for storage permission" }, - "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", + "libraryStorageAccessMessage": "SpotiFLAC butuh akses penyimpanan untuk memindai Koleksi musik Anda. Mohon berikan perizinan di Setelan.", "@libraryStorageAccessMessage": { "description": "Dialog message for storage permission" }, - "libraryFolderNotExist": "Selected folder does not exist", + "libraryFolderNotExist": "Folder terpilih tidak ada", "@libraryFolderNotExist": { "description": "Error when folder doesn't exist" }, - "librarySourceDownloaded": "Downloaded", + "librarySourceDownloaded": "Terdownload", "@librarySourceDownloaded": { "description": "Badge for tracks downloaded via SpotiFLAC" }, - "librarySourceLocal": "Local", + "librarySourceLocal": "Lokal", "@librarySourceLocal": { "description": "Badge for tracks from local library scan" }, - "libraryFilterAll": "All", + "libraryFilterAll": "Semua", "@libraryFilterAll": { "description": "Filter chip - show all library items" }, - "libraryFilterDownloaded": "Downloaded", + "libraryFilterDownloaded": "Terdownload", "@libraryFilterDownloaded": { "description": "Filter chip - show only downloaded items" }, - "libraryFilterLocal": "Local", + "libraryFilterLocal": "Lokal", "@libraryFilterLocal": { "description": "Filter chip - show only local library items" }, - "libraryFilterTitle": "Filters", + "libraryFilterTitle": "Filter", "@libraryFilterTitle": { "description": "Filter bottom sheet title" }, @@ -2765,15 +2765,15 @@ "@libraryFilterReset": { "description": "Reset all filters button" }, - "libraryFilterApply": "Apply", + "libraryFilterApply": "Terapkan", "@libraryFilterApply": { "description": "Apply filters button" }, - "libraryFilterSource": "Source", + "libraryFilterSource": "Sumber", "@libraryFilterSource": { "description": "Filter section - source type" }, - "libraryFilterQuality": "Quality", + "libraryFilterQuality": "Kualitas", "@libraryFilterQuality": { "description": "Filter section - audio quality" }, @@ -2797,35 +2797,35 @@ "@libraryFilterMetadata": { "description": "Filter section - metadata completeness" }, - "libraryFilterMetadataComplete": "Complete metadata", + "libraryFilterMetadataComplete": "Metadata lengkap", "@libraryFilterMetadataComplete": { "description": "Filter option - items with complete metadata" }, - "libraryFilterMetadataMissingAny": "Missing any metadata", + "libraryFilterMetadataMissingAny": "Metadata belum lengkap", "@libraryFilterMetadataMissingAny": { "description": "Filter option - items missing any tracked metadata field" }, - "libraryFilterMetadataMissingYear": "Missing year", + "libraryFilterMetadataMissingYear": "Tidak ada tahun", "@libraryFilterMetadataMissingYear": { "description": "Filter option - items missing release year/date" }, - "libraryFilterMetadataMissingGenre": "Missing genre", + "libraryFilterMetadataMissingGenre": "Tidak ada genre", "@libraryFilterMetadataMissingGenre": { "description": "Filter option - items missing genre" }, - "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", + "libraryFilterMetadataMissingAlbumArtist": "Tidak ada artis album", "@libraryFilterMetadataMissingAlbumArtist": { "description": "Filter option - items missing album artist" }, - "libraryFilterSort": "Sort", + "libraryFilterSort": "Urut", "@libraryFilterSort": { "description": "Filter section - sort order" }, - "libraryFilterSortLatest": "Latest", + "libraryFilterSortLatest": "Terbaru", "@libraryFilterSortLatest": { "description": "Sort option - newest first" }, - "libraryFilterSortOldest": "Oldest", + "libraryFilterSortOldest": "Terlama", "@libraryFilterSortOldest": { "description": "Sort option - oldest first" }, @@ -2845,11 +2845,11 @@ "@libraryFilterSortGenreDesc": { "description": "Sort option - genre descending" }, - "timeJustNow": "Just now", + "timeJustNow": "Baru saja", "@timeJustNow": { "description": "Relative time - less than a minute ago" }, - "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", + "timeMinutesAgo": "{count, plural, =1{1 menit lalu} other{{count} menit lalu}}", "@timeMinutesAgo": { "description": "Relative time - minutes ago", "placeholders": { @@ -2858,7 +2858,7 @@ } } }, - "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", + "timeHoursAgo": "{count, plural, =1{1 jam lalu} other{{count} jam lalu}}", "@timeHoursAgo": { "description": "Relative time - hours ago", "placeholders": { @@ -2867,23 +2867,23 @@ } } }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", + "tutorialWelcomeTitle": "Selamat datang di SpotiFLAC Mobile!", "@tutorialWelcomeTitle": { "description": "Tutorial welcome page title" }, - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "tutorialWelcomeDesc": "Pelajari cara menemukan musik dengan ekstensi, pilih kualitas yang Anda inginkan, dan atur download-nya di SpotiFLAC Mobile.", "@tutorialWelcomeDesc": { "description": "Tutorial welcome page description" }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "tutorialWelcomeTip1": "Telusuri dengan ekstensi terinstal atau tempelkan link musik yang didukung.", "@tutorialWelcomeTip1": { "description": "Tutorial welcome tip 1" }, - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "tutorialWelcomeTip2": "Pilih kualitas audio yang diberikan provider download Anda", "@tutorialWelcomeTip2": { "description": "Tutorial welcome tip 2" }, - "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", + "tutorialWelcomeTip3": "Otomatis menyatukan metadata, cover art, lirik, dan informasi rilisan", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, @@ -2891,7 +2891,7 @@ "@tutorialSearchTitle": { "description": "Tutorial search page title" }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "tutorialSearchDesc": "Telusuri dengan ekstensi terinstal atau tempelkan link musik yang didukung.", "@tutorialSearchDesc": { "description": "Tutorial search page description" }, @@ -2899,7 +2899,7 @@ "@tutorialDownloadTitle": { "description": "Tutorial download page title" }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "tutorialDownloadDesc": "Pilih kualitas yang tersedia, mulai download, dan pantau progresnya di antrean.", "@tutorialDownloadDesc": { "description": "Tutorial download page description" }, @@ -2907,83 +2907,83 @@ "@tutorialLibraryTitle": { "description": "Tutorial library page title" }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "tutorialLibraryDesc": "Musik yang terdownload dan terpindai akan muncul di Koleksi Anda.", "@tutorialLibraryDesc": { "description": "Tutorial library page description" }, - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "tutorialLibraryTip1": "Pantau download yang sedang berlangsung, menunggu, dan selesai lewat antrean Koleksi", "@tutorialLibraryTip1": { "description": "Tutorial library tip 1" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "tutorialLibraryTip2": "Ketuk lagu untuk memutarnya dengan pemutar built-in", "@tutorialLibraryTip2": { "description": "Tutorial library tip 2" }, - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "tutorialLibraryTip3": "Jelajahi lagu, album, dan playlist dalam tampilan daftar atau kisi", "@tutorialLibraryTip3": { "description": "Tutorial library tip 3" }, - "tutorialExtensionsTitle": "Extensions", + "tutorialExtensionsTitle": "Ekstensi", "@tutorialExtensionsTitle": { "description": "Tutorial extensions page title" }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "tutorialExtensionsDesc": "Ekstensi menambahkan penelusuran, download, metadata, lirik, dan lainnya.", "@tutorialExtensionsDesc": { "description": "Tutorial extensions page description" }, - "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", + "tutorialExtensionsTip1": "Jelajahi menu Repositori untuk menemukan berbagai ekstensi.", "@tutorialExtensionsTip1": { "description": "Tutorial extensions tip 1" }, - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "tutorialExtensionsTip2": "Pilih provider untuk penelusuran, download, metadata, dan fallback", "@tutorialExtensionsTip2": { "description": "Tutorial extensions tip 2" }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "tutorialExtensionsTip3": "Hubungkan akun jika diperlukan dan pastikan ekstensi selalu terupdate", "@tutorialExtensionsTip3": { "description": "Tutorial extensions tip 3" }, - "tutorialSettingsTitle": "Customize Your Experience", + "tutorialSettingsTitle": "Sesuaikan Selera Anda", "@tutorialSettingsTitle": { "description": "Tutorial settings page title" }, - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "tutorialSettingsDesc": "Sesuaikan download, pemutaran, perilaku Koleksi, tampilan, dan penyimpanan.", "@tutorialSettingsDesc": { "description": "Tutorial settings page description" }, - "tutorialSettingsTip1": "Change download location and folder organization", + "tutorialSettingsTip1": "Ubah lokasi download dan atur folder", "@tutorialSettingsTip1": { "description": "Tutorial settings tip 1" }, - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "tutorialSettingsTip2": "Atur kualitas, batas download, nama file, dan format favorit", "@tutorialSettingsTip2": { "description": "Tutorial settings tip 2" }, - "tutorialSettingsTip3": "Customize app theme and appearance", + "tutorialSettingsTip3": "Sesuaikan tampilan dan tema aplikasi", "@tutorialSettingsTip3": { "description": "Tutorial settings tip 3" }, - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "tutorialReadyMessage": "Anda sudah siap, Pilih ekstensi Anda, lalu telusuri atau tempel link yang didukung.", "@tutorialReadyMessage": { "description": "Tutorial completion message" }, - "libraryForceFullScan": "Force Full Scan", + "libraryForceFullScan": "Paksa Pindai Ulang", "@libraryForceFullScan": { "description": "Button to force a complete rescan of library" }, - "libraryForceFullScanSubtitle": "Rescan all files, ignoring cache", + "libraryForceFullScanSubtitle": "Pindah ulang semua file, tanpa cache", "@libraryForceFullScanSubtitle": { "description": "Subtitle for force full scan button" }, - "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", + "cleanupOrphanedDownloads": "Bersihkan Sampah", "@cleanupOrphanedDownloads": { "description": "Button to remove history entries for deleted files" }, - "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", + "cleanupOrphanedDownloadsSubtitle": "Hapus sampah dari histori", "@cleanupOrphanedDownloadsSubtitle": { "description": "Subtitle for orphaned cleanup button" }, - "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", + "cleanupOrphanedDownloadsResult": "Menghapus {count} sampah dari hisyori", "@cleanupOrphanedDownloadsResult": { "description": "Snackbar after orphan cleanup", "placeholders": { @@ -2992,23 +2992,23 @@ } } }, - "cleanupOrphanedDownloadsNone": "No orphaned entries found", + "cleanupOrphanedDownloadsNone": "Tidak ada histori ", "@cleanupOrphanedDownloadsNone": { "description": "Snackbar when no orphans found" }, - "cacheTitle": "Storage & Cache", + "cacheTitle": "Penyimpanan & Cache", "@cacheTitle": { "description": "Cache management page title" }, - "cacheSummaryTitle": "Cache overview", + "cacheSummaryTitle": "Penggunaan cache", "@cacheSummaryTitle": { "description": "Heading for cache summary card" }, - "cacheSummarySubtitle": "Clearing cache will not remove downloaded music files.", + "cacheSummarySubtitle": "Membersihkan cache tidak menghapus file terdownload.", "@cacheSummarySubtitle": { "description": "Helper text for cache summary card" }, - "cacheEstimatedTotal": "Estimated cache usage: {size}", + "cacheEstimatedTotal": "Total cache yang digunakan:", "@cacheEstimatedTotal": { "description": "Total cache size shown in summary", "placeholders": { @@ -3017,7 +3017,7 @@ } } }, - "cacheSectionStorage": "Cached Data", + "cacheSectionStorage": "Data Cache", "@cacheSectionStorage": { "description": "Section header for cache entries" }, @@ -3025,39 +3025,39 @@ "@cacheSectionMaintenance": { "description": "Section header for cleanup actions" }, - "cacheAppDirectory": "App cache directory", + "cacheAppDirectory": "Folder cache aplikasi", "@cacheAppDirectory": { "description": "Cache item title for app cache directory" }, - "cacheAppDirectoryDesc": "HTTP responses, WebView data, and other temporary app data.", + "cacheAppDirectoryDesc": "Respons HTTP, data WebView, dan data aplikasi sementara lain.", "@cacheAppDirectoryDesc": { "description": "Description of what app cache directory contains" }, - "cacheTempDirectory": "Temporary directory", + "cacheTempDirectory": "Folder sementara", "@cacheTempDirectory": { "description": "Cache item title for temporary files directory" }, - "cacheTempDirectoryDesc": "Temporary files from downloads and audio conversion.", + "cacheTempDirectoryDesc": "File sementara dari proses download dan ubah format.", "@cacheTempDirectoryDesc": { "description": "Description of what temporary directory contains" }, - "cacheCoverImage": "Cover image cache", + "cacheCoverImage": "Cache foto cover", "@cacheCoverImage": { "description": "Cache item title for persistent cover images" }, - "cacheCoverImageDesc": "Downloaded album and track cover art. Will re-download when viewed.", + "cacheCoverImageDesc": "Foto cover album dan lagu yang terdownload. Akan didownload ulang bila dilihat. ", "@cacheCoverImageDesc": { "description": "Description of what cover image cache contains" }, - "cacheLibraryCover": "Library cover cache", + "cacheLibraryCover": "Cache cover koleksi", "@cacheLibraryCover": { "description": "Cache item title for local library cover art images" }, - "cacheLibraryCoverDesc": "Cover art extracted from local music files. Will re-extract on next scan.", + "cacheLibraryCoverDesc": "Foto cover yang diekstrak dari file musik lokal. Diekstrak ulang saat memindai.", "@cacheLibraryCoverDesc": { "description": "Description of what library cover cache contains" }, - "libraryPlaybackNormalization": "Volume normalization", + "libraryPlaybackNormalization": "Normalisasi kenyaringan", "@libraryPlaybackNormalization": { "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, From f007cd1619738712acfeb16c2415fb95b9c0d047 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sat, 12 Sep 2026 02:52:08 +0700 Subject: [PATCH 52/59] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 78d5705e4..bd8605690 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -237,7 +237,7 @@ "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "{total} 개의 트랙 중 {success} 개에 리플레이게인이 추가됨", - "replayGainUnsupportedDecoder": "일부 트랙은 리플레이게인 디코더에서 지원하지 않는 오디오 코덱을 사용하기 때문에 분석할 수 없습니다. 해당 파일은 변경되지 않았습니다", + "replayGainUnsupportedDecoder": "Certains titres n'ont pas pu être analysées car leur codec audio n'est pas pris en charge par le décodeur ReplayGain. Leurs fichiers n'ont pas été modifiés.", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -855,7 +855,7 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "duplicatesKeepBestAll": "모두에 대해 최상의 파일 유지", + "duplicatesKeepBestAll": "Faites ce qu'il y a de mieux pour tout le monde", "@duplicatesKeepBestAll": { "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" }, From c2916bb3f04030e847ec7404ff402705fcbf5d96 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sat, 12 Sep 2026 10:29:38 +0700 Subject: [PATCH 53/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index e66ac7ac9..675117b33 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -37,7 +37,7 @@ "@homeEmptySubtitle": { "description": "Subtitle shown on home when no providers are available yet" }, - "homeSupports": "Mendukung: URL Lagu, Album, Daftar Putar, dan Artis", + "homeSupports": "Mendukung: URL Track, Album, Playlist, Artis", "@homeSupports": { "description": "Info text about supported URL types" }, @@ -1248,7 +1248,7 @@ "@updateRequiredTitle": { "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "updateRequiredNotice": "Versi yang Anda gunakan adalah {count} dan sudah tidak didukung. Update untuk terus menggunakan aplikasi.", + "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", "@updateRequiredNotice": { "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { From fb737bc1325a8524ebbf44d58ba662920fdb8749 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sat, 12 Sep 2026 11:50:59 +0700 Subject: [PATCH 54/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 675117b33..04a58063f 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -2494,7 +2494,7 @@ "@settingsLocalLibrary": { "description": "Settings menu item - local library" }, - "settingsLocalLibrarySubtitle": "Pindah musik & deteksi file ganda", + "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", "@settingsLocalLibrarySubtitle": { "description": "Subtitle for local library settings" }, @@ -2506,7 +2506,7 @@ "@settingsCacheSubtitle": { "description": "Subtitle for cache management menu" }, - "libraryTitle": "Pustaka Lokal", + "libraryTitle": "Local Library", "@libraryTitle": { "description": "Library settings page title" }, @@ -2522,7 +2522,7 @@ "@libraryEnableLocalLibrarySubtitle": { "description": "Subtitle for enable toggle" }, - "libraryFolder": "Folder Pustaka", + "libraryFolder": "Library Folder", "@libraryFolder": { "description": "Folder selection setting" }, @@ -2975,15 +2975,15 @@ "@libraryForceFullScanSubtitle": { "description": "Subtitle for force full scan button" }, - "cleanupOrphanedDownloads": "Bersihkan Sampah", + "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", "@cleanupOrphanedDownloads": { "description": "Button to remove history entries for deleted files" }, - "cleanupOrphanedDownloadsSubtitle": "Hapus sampah dari histori", + "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", "@cleanupOrphanedDownloadsSubtitle": { "description": "Subtitle for orphaned cleanup button" }, - "cleanupOrphanedDownloadsResult": "Menghapus {count} sampah dari hisyori", + "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", "@cleanupOrphanedDownloadsResult": { "description": "Snackbar after orphan cleanup", "placeholders": { From f0563a722a15db9c86e00956feaa3318ede7641f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sat, 12 Sep 2026 13:09:18 +0700 Subject: [PATCH 55/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 974 ++++++++++++++++++++-------------------- 1 file changed, 487 insertions(+), 487 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 04a58063f..7889ffc2b 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -9,15 +9,15 @@ "@navHome": { "description": "Bottom navigation - Home tab" }, - "navLibrary": "Pustaka", + "navLibrary": "Koleksi", "@navLibrary": { "description": "Bottom navigation - Library tab" }, - "navSettings": "Pengaturan", + "navSettings": "Setelan", "@navSettings": { "description": "Bottom navigation - Settings tab" }, - "navStore": "Repositori", + "navStore": "Repo", "@navStore": { "description": "Bottom navigation - Extension repo tab" }, @@ -29,7 +29,7 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, - "homeEmptyTitle": "Belum ada penyedia pencarian", + "homeEmptyTitle": "Belum ada provider penelusuran", "@homeEmptyTitle": { "description": "Title shown on home when no providers are available yet" }, @@ -57,15 +57,15 @@ "@historyFilterSingles": { "description": "Filter chip - show singles only" }, - "historySearchHint": "Cari riwayat...", + "historySearchHint": "Telusuri histori...", "@historySearchHint": { "description": "Search bar placeholder in history" }, - "settingsTitle": "Pengaturan", + "settingsTitle": "Setelan", "@settingsTitle": { "description": "Settings screen title" }, - "settingsDownload": "Unduhan", + "settingsDownload": "Download", "@settingsDownload": { "description": "Settings section - download options" }, @@ -81,11 +81,11 @@ "@settingsAbout": { "description": "Settings section - app info" }, - "downloadTitle": "Unduhan", + "downloadTitle": "Download", "@downloadTitle": { "description": "Download settings page title" }, - "downloadAskQualitySubtitle": "Tampilkan pemilih kualitas untuk setiap unduhan", + "downloadAskQualitySubtitle": "Tampilkan pemilih kualitas setiap mendownload", "@downloadAskQualitySubtitle": { "description": "Subtitle for ask quality toggle" }, @@ -93,7 +93,7 @@ "@downloadFilenameFormat": { "description": "Setting for output filename pattern" }, - "downloadSingleFilenameFormat": "Format Nama Berkas Tunggal", + "downloadSingleFilenameFormat": "Format Nama FileTunggal", "@downloadSingleFilenameFormat": { "description": "Setting for output filename pattern for singles/EPs" }, @@ -129,7 +129,7 @@ "@appearanceDynamicColorSubtitle": { "description": "Subtitle for dynamic color" }, - "appearanceHistoryView": "Gaya Tampilan Histori", + "appearanceHistoryView": "Tampilan Histori", "@appearanceHistoryView": { "description": "Layout style for history" }, @@ -145,7 +145,7 @@ "@optionsPrimaryProvider": { "description": "Main search provider setting" }, - "optionsPrimaryProviderSubtitle": "Layanan yang digunakan untuk mencari berdasarkan nama lagu atau album", + "optionsPrimaryProviderSubtitle": "Layanan yang digunakan untuk menelusuri lagu atau album", "@optionsPrimaryProviderSubtitle": { "description": "Subtitle for primary provider" }, @@ -158,11 +158,11 @@ } } }, - "optionsDefaultSearchTab": "Tab Pencarian Default", + "optionsDefaultSearchTab": "Tab Penelusuran Default", "@optionsDefaultSearchTab": { "description": "Title for the preferred default search tab setting" }, - "optionsDefaultSearchTabSubtitle": "Pilih tab mana yang terbuka terlebih dahulu untuk hasil pencarian baru.", + "optionsDefaultSearchTabSubtitle": "Pilih tab mana yang terbuka terlebih dahulu untuk hasil penelusuran baru.", "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, @@ -170,15 +170,15 @@ "@optionsAutoFallback": { "description": "Auto-retry with other services" }, - "optionsAutoFallbackSubtitle": "Coba layanan lain jika unduhan gagal", + "optionsAutoFallbackSubtitle": "Gunakan layanan lain jika download gagal", "@optionsAutoFallbackSubtitle": { "description": "Subtitle for auto fallback" }, - "optionsEmbedLyrics": "Sematkan Lirik", + "optionsEmbedLyrics": "Lirik Tersemat", "@optionsEmbedLyrics": { "description": "Embed lyrics in audio files" }, - "optionsEmbedLyricsSubtitle": "Simpan lirik yang disinkronkan bersama dengan lagu yang Anda unduh", + "optionsEmbedLyricsSubtitle": "Simpan lirik berjalan dalam file lagu yang terdownload", "@optionsEmbedLyricsSubtitle": { "description": "Subtitle for embed lyrics" }, @@ -190,7 +190,7 @@ "@optionsReplayGainSubtitleOn": { "description": "Subtitle when ReplayGain is enabled" }, - "optionsReplayGainSubtitleOff": "Dinonaktifkan: tidak ada tag normalisasi kenyaringan", + "optionsReplayGainSubtitleOff": "Mati: tidak ada tag normalisasi kenyaringan", "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, @@ -253,27 +253,27 @@ "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" }, - "optionsArtistTagModeDescription": "Pilih bagaimana beberapa artis dicantumkan dalam tag yang disematkan.", + "optionsArtistTagModeDescription": "Pilih cara mencantumkan artis di tag tersemat.", "@optionsArtistTagModeDescription": { "description": "Bottom-sheet description for artist tag mode setting" }, - "optionsArtistTagModeJoined": "Nilai gabungan tunggal", + "optionsArtistTagModeJoined": "Gabungkan semuanya", "@optionsArtistTagModeJoined": { "description": "Artist tag mode option that joins multiple artists into one value" }, - "optionsArtistTagModeJoinedSubtitle": "Tuliskan satu nilai ARTIS seperti \"Artis A, Artis B\" untuk kompatibilitas pemain maksimal.", + "optionsArtistTagModeJoinedSubtitle": "Tulis semua ARTIS dalam satu tag \"Artis A, Artis B\", mendukung lebih banyak pemutar,", "@optionsArtistTagModeJoinedSubtitle": { "description": "Subtitle for joined artist tag mode" }, - "optionsArtistTagModeSplitVorbis": "Tag terpisah untuk FLAC/Opus", + "optionsArtistTagModeSplitVorbis": "Pisahkan tag (hanya FLAC/Opus)", "@optionsArtistTagModeSplitVorbis": { "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Tulis satu tag artis per artis untuk FLAC dan Opus; MP3 dan M4A tetap tergabung.", + "optionsArtistTagModeSplitVorbisSubtitle": "Pisahkan tag hanya untuk satu artis untuk file FLAC/Opus; MP3 dan M4A tetap tergabung.", "@optionsArtistTagModeSplitVorbisSubtitle": { "description": "Subtitle for split Vorbis artist tag mode" }, - "optionsExtensionStore": "Repositori Ekstensi", + "optionsExtensionStore": "Repo Ekstensi", "@optionsExtensionStore": { "description": "Show/hide repo tab" }, @@ -281,7 +281,7 @@ "@optionsExtensionStoreSubtitle": { "description": "Subtitle for extension repo toggle" }, - "optionsCheckUpdates": "Periksa Pembaruan", + "optionsCheckUpdates": "Periksa Update", "@optionsCheckUpdates": { "description": "Auto update check toggle" }, @@ -289,39 +289,39 @@ "@optionsCheckUpdatesSubtitle": { "description": "Subtitle for update check" }, - "optionsUpdateChannel": "Saluran Pembaruan", + "optionsUpdateChannel": "Channel Update", "@optionsUpdateChannel": { "description": "Stable vs preview releases" }, - "optionsUpdateChannelStable": "Hanya rilis stabil", + "optionsUpdateChannelStable": "Versi Stabil", "@optionsUpdateChannelStable": { "description": "Only stable updates" }, - "optionsUpdateChannelPreview": "Dapatkan rilis preview", + "optionsUpdateChannelPreview": "Versi Preview", "@optionsUpdateChannelPreview": { "description": "Include beta/preview updates" }, - "optionsUpdateChannelWarning": "Preview mungkin mengandung bug atau fitur belum lengkap", + "optionsUpdateChannelWarning": "Mungkin ada bug atau fitur belum selesai di versi Preview", "@optionsUpdateChannelWarning": { "description": "Warning about preview channel" }, - "optionsClearHistory": "Hapus Riwayat Unduhan", + "optionsClearHistory": "Hapus Histori Download", "@optionsClearHistory": { "description": "Delete all download history" }, - "optionsClearHistorySubtitle": "Hapus semua lagu dari riwayat", + "optionsClearHistorySubtitle": "Hapus semua lagu dari histori", "@optionsClearHistorySubtitle": { "description": "Subtitle for clear history" }, - "optionsDetailedLogging": "Log Detail", + "optionsDetailedLogging": "Logging Mendetail", "@optionsDetailedLogging": { "description": "Enable verbose logs for debugging" }, - "optionsDetailedLoggingOn": "Log detail sedang direkam", + "optionsDetailedLoggingOn": "Log mendetail sedang direkam", "@optionsDetailedLoggingOn": { "description": "Status when logging enabled" }, - "optionsDetailedLoggingOff": "Aktifkan untuk laporan bug", + "optionsDetailedLoggingOff": "Hidupkan untuk laporan bug", "@optionsDetailedLoggingOff": { "description": "Status when logging disabled" }, @@ -329,7 +329,7 @@ "@extensionsTitle": { "description": "Extensions page title" }, - "extensionsDisabled": "Nonaktif", + "extensionsDisabled": "Mati", "@extensionsDisabled": { "description": "Extension status - inactive" }, @@ -342,11 +342,11 @@ } } }, - "extensionsUninstall": "Copot", + "extensionsUninstall": "Uninstal", "@extensionsUninstall": { "description": "Uninstall extension button" }, - "storeTitle": "Repositori Ekstensi", + "storeTitle": "Repo Ekstensi", "@storeTitle": { "description": "Repo screen title" }, @@ -354,15 +354,15 @@ "@storeSearch": { "description": "Repo search placeholder" }, - "storeInstall": "Pasang", + "storeInstall": "Instal", "@storeInstall": { "description": "Install extension button" }, - "storeInstalled": "Terpasang", + "storeInstalled": "Terinstal", "@storeInstalled": { "description": "Already installed badge" }, - "storeUpdate": "Perbarui", + "storeUpdate": "Update", "@storeUpdate": { "description": "Update available button" }, @@ -374,7 +374,7 @@ "@aboutContributors": { "description": "Section for contributors" }, - "aboutMobileDeveloper": "Pengembang versi mobile", + "aboutMobileDeveloper": "Developer versi mobile", "@aboutMobileDeveloper": { "description": "Role description for mobile dev" }, @@ -382,7 +382,7 @@ "@aboutOriginalCreator": { "description": "Role description for original creator" }, - "aboutLogoArtist": "Seniman berbakat yang membuat logo aplikasi kita yang indah!", + "aboutLogoArtist": "Artist berbakat yang membuat logo indah untuk aplikasi kami!", "@aboutLogoArtist": { "description": "Role description for logo artist" }, @@ -394,19 +394,19 @@ "@aboutSpecialThanks": { "description": "Section for special thanks" }, - "aboutLinks": "Tautan", + "aboutLinks": "Link", "@aboutLinks": { "description": "Section for external links" }, - "aboutMobileSource": "Kode sumber mobile", + "aboutMobileSource": "Source code versi mobile", "@aboutMobileSource": { "description": "Link to mobile GitHub repo" }, - "aboutPCSource": "Kode sumber PC", + "aboutPCSource": "Source code versi PC", "@aboutPCSource": { "description": "Link to PC GitHub repo" }, - "aboutKeepAndroidOpen": "Biarkan Android tetap terbuka", + "aboutKeepAndroidOpen": "Jaga Android tetap terbuka", "@aboutKeepAndroidOpen": { "description": "Link to Keep Android Open campaign website" }, @@ -418,19 +418,19 @@ "@aboutReportIssueSubtitle": { "description": "Subtitle for report issue" }, - "aboutFeatureRequest": "Permintaan fitur", + "aboutFeatureRequest": "Kirim masukan", "@aboutFeatureRequest": { "description": "Link to suggest features" }, - "aboutFeatureRequestSubtitle": "Sarankan fitur baru untuk aplikasi", + "aboutFeatureRequestSubtitle": "Berikan masukan untuk aplikasi", "@aboutFeatureRequestSubtitle": { "description": "Subtitle for feature request" }, - "aboutTelegramChannel": "Saluran Telegram", + "aboutTelegramChannel": "Channel Telegram", "@aboutTelegramChannel": { "description": "Link to Telegram channel" }, - "aboutTelegramChannelSubtitle": "Pengumuman dan pembaruan", + "aboutTelegramChannelSubtitle": "Pengumuman dan update", "@aboutTelegramChannelSubtitle": { "description": "Subtitle for Telegram channel" }, @@ -438,11 +438,11 @@ "@aboutTelegramChat": { "description": "Link to Telegram chat group" }, - "aboutTelegramChatSubtitle": "Berbincang dengan pengguna lain", + "aboutTelegramChatSubtitle": "Chat dengan pengguna lain", "@aboutTelegramChatSubtitle": { "description": "Subtitle for Telegram chat" }, - "aboutSocial": "Sosial", + "aboutSocial": "Media Sosial", "@aboutSocial": { "description": "Section for social links" }, @@ -454,27 +454,27 @@ "@aboutVersion": { "description": "Version info label" }, - "aboutBinimumDesc": "Pencipta QQDL & HiFi API. Proyek ini membantu membentuk dukungan unduhan lossless.", + "aboutBinimumDesc": "Pembuat API QQDL & HiFi. Proyeknya membantu membuat dukungan download lossless.", "@aboutBinimumDesc": { "description": "Credit description for binimum" }, - "aboutSachinsenalDesc": "Pencipta proyek HiFi asli. Sebuah fondasi untuk integrasi sumber lossless.", + "aboutSachinsenalDesc": "Pembuat proyek HiFi asli. Sebuah fondasi untuk integrasi sumber lossless.", "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "aboutUnituneDesc": "Resolver link musik open-source oleh Flaze, untuk melakukan match link cadangan cross-platform.", "@aboutUnituneDesc": { "description": "Credit for the UniTune resolver" }, - "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "aboutMusicBrainzDesc": "Database musik terbuka dimaintain oleh MetaBrainz dan komunitasnya, untuk merekam cross-reference.", "@aboutMusicBrainzDesc": { "description": "Credit for the MusicBrainz database" }, - "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "aboutSquiglyDesc": "Layanan link musik universal oleh Liam Macmillan, digunakan untuk resolver fallback cross-platform final.", "@aboutSquiglyDesc": { "description": "Credit for the Squigly resolver" }, - "aboutAppDescription": "Cari metadata musik, kelola ekstensi, dan atur perpustakaan Anda.", + "aboutAppDescription": "Cari metadata musik, kelola ekstensi, dan atur Koleksi Anda.", "@aboutAppDescription": { "description": "App description in header card" }, @@ -536,7 +536,7 @@ "@setupStorageAccessMessageAndroid11": { "description": "Android 11+ specific explanation" }, - "setupOpenSettings": "Buka Pengaturan", + "setupOpenSettings": "Buka Setelan", "@setupOpenSettings": { "description": "Button to open system settings" }, @@ -575,7 +575,7 @@ "@setupUseDefault": { "description": "Button to use default folder" }, - "setupDownloadLocationTitle": "Lokasi Unduhan", + "setupDownloadLocationTitle": "Lokasi Download", "@setupDownloadLocationTitle": { "description": "Download location dialog title" }, @@ -607,35 +607,35 @@ "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "setupDownloadInFlac": "Download musik dengan kualitas loseless dan Hi-Res", "@setupDownloadInFlac": { "description": "App tagline in setup" }, - "setupStorageGranted": "Izin Penyimpanan Diberikan!", + "setupStorageGranted": "Akses Penyimpanan Diberikan!", "@setupStorageGranted": { "description": "Success message for storage permission" }, - "setupStorageRequired": "Izin Penyimpanan Diperlukan", + "setupStorageRequired": "Butuh Akses Penyimpanan", "@setupStorageRequired": { "description": "Title when storage permission needed" }, - "setupStorageDescription": "SpotiFLAC membutuhkan izin penyimpanan untuk menyimpan file musik yang diunduh.", + "setupStorageDescription": "SpotiFLAC perlu akses penyimpanan untuk menyimpan file musik terdownload.", "@setupStorageDescription": { "description": "Explanation for storage permission" }, - "setupNotificationGranted": "Izin Notifikasi Diberikan!", + "setupNotificationGranted": "Akses Notifikasi Diberikan!", "@setupNotificationGranted": { "description": "Success message for notification permission" }, - "setupNotificationEnable": "Aktifkan Notifikasi", + "setupNotificationEnable": "Aktifkan Akses Notifikasi", "@setupNotificationEnable": { "description": "Button to enable notifications" }, - "setupFolderChoose": "Pilih Folder Unduhan", + "setupFolderChoose": "Pilih Folder Download", "@setupFolderChoose": { "description": "Button to choose folder" }, - "setupFolderDescription": "Pilih folder tempat musik yang diunduh akan disimpan.", + "setupFolderDescription": "Pilih folder untuk menyimpan musik terdownload.", "@setupFolderDescription": { "description": "Explanation for folder selection" }, @@ -643,11 +643,11 @@ "@setupSelectFolder": { "description": "Button to select folder" }, - "setupEnableNotifications": "Aktifkan Notifikasi", + "setupEnableNotifications": "Aktifkan Akses Notifikasi", "@setupEnableNotifications": { "description": "Button to enable notifications" }, - "setupNotificationBackgroundDescription": "Dapatkan notifikasi tentang progres dan penyelesaian unduhan. Ini membantu Anda melacak unduhan saat aplikasi di latar belakang.", + "setupNotificationBackgroundDescription": "Memberitahu progres download Anda. Akan membantu Anda mengetahui kondisi download Anda selama di luar aplikasi.", "@setupNotificationBackgroundDescription": { "description": "Detailed notification explanation" }, @@ -671,11 +671,11 @@ "@setupLanguageTitle": { "description": "Title for the language selection step in setup" }, - "setupLanguageDescription": "Pilih bahasa pilihan Anda untuk aplikasi ini. Anda dapat mengubahnya nanti di Pengaturan.", + "setupLanguageDescription": "Pilih bahasa pilihan Anda untuk aplikasi ini. Anda dapat mengubahnya nanti di Setelan.", "@setupLanguageDescription": { "description": "Description for the language selection step in setup" }, - "setupLanguageSystemDefault": "Bawaan Sistem", + "setupLanguageSystemDefault": "Default Sistem", "@setupLanguageSystemDefault": { "description": "Option to use the system language" }, @@ -707,19 +707,19 @@ "@dialogImport": { "description": "Dialog button - import data" }, - "dialogDownload": "Unduh", + "dialogDownload": "Download", "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "previewPlay": "Putar pratinjau", + "previewPlay": "Putar preview", "@previewPlay": { "description": "Tooltip for the button that plays a short track preview snippet" }, - "previewStop": "Hentikan pratinjau", + "previewStop": "Hentikan Preview", "@previewStop": { "description": "Tooltip for the button that stops the playing track preview snippet" }, - "previewUnavailable": "Pratinjau tidak tersedia", + "previewUnavailable": "Preview tidak tersedia", "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, @@ -731,7 +731,7 @@ "@dialogRemove": { "description": "Dialog button - remove item" }, - "dialogUninstall": "Copot", + "dialogUninstall": "Uninstal", "@dialogUninstall": { "description": "Dialog button - uninstall extension" }, @@ -739,7 +739,7 @@ "@dialogDiscardChanges": { "description": "Dialog title - unsaved changes warning" }, - "dialogUnsavedChanges": "Anda memiliki perubahan yang belum disimpan. Apakah Anda ingin membuangnya?", + "dialogUnsavedChanges": "Ada perubahan yang belum disimpan. Anda ingin membuangnya?", "@dialogUnsavedChanges": { "description": "Dialog message - unsaved changes" }, @@ -751,11 +751,11 @@ "@dialogRemoveExtension": { "description": "Dialog title - uninstall extension" }, - "dialogRemoveExtensionMessage": "Apakah Anda yakin ingin menghapus ekstensi ini? Tindakan ini tidak dapat dibatalkan.", + "dialogRemoveExtensionMessage": "Apakah Anda yakin ingin menghapus ekstensi ini? Ini tidak dapat dibatalkan.", "@dialogRemoveExtensionMessage": { "description": "Dialog message - uninstall confirmation" }, - "dialogUninstallExtension": "Copot Ekstensi?", + "dialogUninstallExtension": "Uninstal Ekstensi?", "@dialogUninstallExtension": { "description": "Dialog title - uninstall extension" }, @@ -772,15 +772,15 @@ "@dialogClearHistoryTitle": { "description": "Dialog title - clear download history" }, - "dialogClearHistoryMessage": "Apakah Anda yakin ingin menghapus semua riwayat unduhan? Ini tidak dapat dibatalkan.", + "dialogClearHistoryMessage": "Apakah Anda yakin ingin menghapus semua histori download? Ini tidak dapat dibatalkan.", "@dialogClearHistoryMessage": { "description": "Dialog message - clear history confirmation" }, - "dialogDeleteSelectedTitle": "Hapus yang Dipilih", + "dialogDeleteSelectedTitle": "Hapus Terpilih", "@dialogDeleteSelectedTitle": { "description": "Dialog title - delete selected items" }, - "dialogDeleteSelectedMessage": "Hapus {count} {count, plural, =1{lagu} other{lagu}} dari riwayat?\n\nIni juga akan menghapus file dari penyimpanan.", + "dialogDeleteSelectedMessage": "Hapus {count} {count, plural, =1{lagu} other{lagu}} dari histori?\n\nIni juga akan menghapus file dari penyimpanan.", "@dialogDeleteSelectedMessage": { "description": "Dialog message - delete selected tracks", "placeholders": { @@ -794,7 +794,7 @@ "description": "Dialog title - import CSV playlist" }, "dialogImportPlaylistMessage": "Menemukan {count} lagu di file playlist. Tambahkan ke antrean download?", - "csvImportTracks": "{count} trek dari CSV", + "csvImportTracks": "{count} lagu dari CSV", "@csvImportTracks": { "description": "Label shown in quality picker for CSV import", "placeholders": { @@ -855,11 +855,11 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "duplicatesKeepBestAll": "Keep best for all", + "duplicatesKeepBestAll": "Simpan kualitas terbaik", "@duplicatesKeepBestAll": { "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" }, - "duplicatesKeepBestAllMessage": "Keep the best copy of {groupCount} {groupCount, plural, =1{track} other{tracks}} and delete {count} lower-quality {count, plural, =1{copy} other{copies}}?\n\nThe deleted files will be removed from storage.", + "duplicatesKeepBestAllMessage": "Simpan kualitas terbaik dari {groupCount} {groupCount, plural, =1{lagu} other{lagu}} dan hapus {count} kualitas terendah dari {count, plural, =1{lagu} other{lagu}}?\n\nFile terhapus akan dihapus dari penyimpanan.", "@duplicatesKeepBestAllMessage": { "description": "Confirmation message for keeping the best copy across every duplicate group", "placeholders": { @@ -900,7 +900,7 @@ } } }, - "snackbarAddedToQueue": "Menambahkan \"{trackName}\" ke antrian", + "snackbarAddedToQueue": "Menambahkan \"{trackName}\" ke antrean", "@snackbarAddedToQueue": { "description": "Snackbar - track added to download queue", "placeholders": { @@ -909,7 +909,7 @@ } } }, - "snackbarAddedTracksToQueue": "Menambahkan {count} lagu ke antrian", + "snackbarAddedTracksToQueue": "Menambahkan {count} lagu ke antrean", "@snackbarAddedTracksToQueue": { "description": "Snackbar - multiple tracks added to queue", "placeholders": { @@ -918,7 +918,7 @@ } } }, - "snackbarAlreadyDownloaded": "\"{trackName}\" sudah diunduh", + "snackbarAlreadyDownloaded": "\"{trackName}\" sudah terdownload", "@snackbarAlreadyDownloaded": { "description": "Snackbar - track already exists", "placeholders": { @@ -927,7 +927,7 @@ } } }, - "snackbarAlreadyInLibrary": "\"{trackName}\" sudah ada di perpustakaan Anda", + "snackbarAlreadyInLibrary": "\"{trackName}\" sudah ada di Koleksi Anda", "@snackbarAlreadyInLibrary": { "description": "Snackbar - track already exists in local library", "placeholders": { @@ -936,7 +936,7 @@ } } }, - "snackbarHistoryCleared": "Riwayat dihapus", + "snackbarHistoryCleared": "Histori dihapus", "@snackbarHistoryCleared": { "description": "Snackbar - history deleted" }, @@ -958,7 +958,7 @@ } } }, - "snackbarViewQueue": "Lihat Antrian", + "snackbarViewQueue": "Lihat Antrean", "@snackbarViewQueue": { "description": "Snackbar action - view download queue" }, @@ -988,7 +988,7 @@ "@snackbarMetadataProviderSaved": { "description": "Snackbar - metadata provider order saved" }, - "snackbarExtensionInstalled": "{extensionName} terpasang.", + "snackbarExtensionInstalled": "{extensionName} terinstal.", "@snackbarExtensionInstalled": { "description": "Snackbar - extension installed successfully", "placeholders": { @@ -997,7 +997,7 @@ } } }, - "snackbarExtensionUpdated": "{extensionName} diperbarui.", + "snackbarExtensionUpdated": "{extensionName} terupdate.", "@snackbarExtensionUpdated": { "description": "Snackbar - extension updated successfully", "placeholders": { @@ -1006,11 +1006,11 @@ } } }, - "snackbarFailedToInstall": "Gagal memasang ekstensi", + "snackbarFailedToInstall": "Gagal menginstal ekstensi", "@snackbarFailedToInstall": { "description": "Snackbar - extension install error" }, - "snackbarFailedToUpdate": "Gagal memperbarui ekstensi", + "snackbarFailedToUpdate": "Gagal mengupdate ekstensi", "@snackbarFailedToUpdate": { "description": "Snackbar - extension update error" }, @@ -1018,7 +1018,7 @@ "@errorRateLimited": { "description": "Error title - too many requests" }, - "errorRateLimitedMessage": "Terlalu banyak permintaan. Harap tunggu sebentar sebelum mencari lagi.", + "errorRateLimitedMessage": "Terlalu banyak permintaan. Tunggu sebentar sebelum menelusuri lagi.", "@errorRateLimitedMessage": { "description": "Error message - rate limit explanation" }, @@ -1030,15 +1030,15 @@ "@searchEmptyResultSubtitle": { "description": "Subtitle shown under the empty search result state on the home screen" }, - "errorUrlNotRecognized": "Tautan tidak dikenali", + "errorUrlNotRecognized": "Link tidak dikenali", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "errorUrlNotRecognizedMessage": "Tautan ini tidak didukung. Pastikan URL sudah benar dan ekstensi yang kompatibel telah terpasang.", + "errorUrlNotRecognizedMessage": "Link ini tidak didukung. Pastikan URL sudah benar dan ekstensi yang kompatibel telah terpasang.", "@errorUrlNotRecognizedMessage": { "description": "Error message - URL not recognized explanation" }, - "errorUrlFetchFailed": "Konten dari tautan ini gagal dimuat. Silakan coba lagi.", + "errorUrlFetchFailed": "Konten dari link ini gagal dimuat. Silakan coba lagi.", "@errorUrlFetchFailed": { "description": "Error message - generic URL fetch failure" }, @@ -1120,7 +1120,7 @@ "@searchPlaylists": { "description": "Search result category - playlists" }, - "searchSortTitle": "Urutkan hasil", + "searchSortTitle": "Urutkan Hasil", "@searchSortTitle": { "description": "Bottom sheet title for search sort options" }, @@ -1152,11 +1152,11 @@ "@searchSortDurationLong": { "description": "Sort option - longest duration first" }, - "searchSortDateOldest": "Tanggal rilis (Terlama)", + "searchSortDateOldest": "Tanggal Rilis (Terlama)", "@searchSortDateOldest": { "description": "Sort option - oldest release first" }, - "searchSortDateNewest": "Tanggal rilis (Terbaru)", + "searchSortDateNewest": "Tanggal Rilis (Terbaru)", "@searchSortDateNewest": { "description": "Sort option - newest release first" }, @@ -1172,7 +1172,7 @@ "@filenameShowAdvancedTags": { "description": "Toggle label for showing advanced filename tags" }, - "filenameShowAdvancedTagsDescription": "Aktifkan tag yang diformat untuk padding trek dan pola tanggal", + "filenameShowAdvancedTagsDescription": "Aktifkan tag yang diformat untuk padding lagu dan pola tanggal", "@filenameShowAdvancedTagsDescription": { "description": "Description for advanced filename tag toggle" }, @@ -1180,47 +1180,47 @@ "@folderOrganizationNone": { "description": "Folder option - flat structure" }, - "folderOrganizationByPlaylist": "Berdasarkan Daftar Putar", + "folderOrganizationByPlaylist": "Menurut Playlist", "@folderOrganizationByPlaylist": { "description": "Folder option - playlist folders" }, - "folderOrganizationByPlaylistSubtitle": "Setiap daftar putar memerlukan folder terpisah", + "folderOrganizationByPlaylistSubtitle": "Pisahkan folder untuk setiap playlist ", "@folderOrganizationByPlaylistSubtitle": { "description": "Subtitle for playlist folder option" }, - "folderOrganizationByArtist": "Berdasarkan Artis", + "folderOrganizationByArtist": "Menurut Artis", "@folderOrganizationByArtist": { "description": "Folder option - artist folders" }, - "folderOrganizationByAlbum": "Berdasarkan Album", + "folderOrganizationByAlbum": "Menurut Album", "@folderOrganizationByAlbum": { "description": "Folder option - album folders" }, - "folderOrganizationByArtistAlbum": "Berdasarkan Artis & Album", + "folderOrganizationByArtistAlbum": "Menurut Artis/Album", "@folderOrganizationByArtistAlbum": { "description": "Folder option - nested folders" }, - "folderOrganizationDescription": "Atur file yang diunduh ke dalam folder", + "folderOrganizationDescription": "Atur file terdownload ke dalam folder", "@folderOrganizationDescription": { "description": "Folder organization sheet description" }, - "folderOrganizationNoneSubtitle": "Semua file di folder unduhan", + "folderOrganizationNoneSubtitle": "Semua file di folder download", "@folderOrganizationNoneSubtitle": { "description": "Subtitle for no organization option" }, - "folderOrganizationByArtistSubtitle": "Folder terpisah untuk setiap artis", + "folderOrganizationByArtistSubtitle": "Pisahkan folder untuk setiap artis", "@folderOrganizationByArtistSubtitle": { "description": "Subtitle for artist folder option" }, - "folderOrganizationByAlbumSubtitle": "Folder terpisah untuk setiap album", + "folderOrganizationByAlbumSubtitle": "Pisahkan folder untuk setiap album", "@folderOrganizationByAlbumSubtitle": { "description": "Subtitle for album folder option" }, - "folderOrganizationByArtistAlbumSubtitle": "Folder bersarang untuk artis dan album", + "folderOrganizationByArtistAlbumSubtitle": "Satukan folder untuk artis dan album", "@folderOrganizationByArtistAlbumSubtitle": { "description": "Subtitle for nested folder option" }, - "updateAvailable": "Pembaruan Tersedia", + "updateAvailable": "Update Tersedia", "@updateAvailable": { "description": "Update dialog title" }, @@ -1228,19 +1228,19 @@ "@updateLater": { "description": "Update button - dismiss" }, - "updateStartingDownload": "Memulai unduhan...", + "updateStartingDownload": "Download dimulai...", "@updateStartingDownload": { "description": "Update status - initializing" }, - "updateDownloadFailed": "Unduhan gagal", + "updateDownloadFailed": "Download gagal", "@updateDownloadFailed": { "description": "Update error title" }, - "updateFailedMessage": "Gagal mengunduh pembaruan", + "updateFailedMessage": "Gagal mendownload update", "@updateFailedMessage": { "description": "Update error message" }, - "updateNewVersionReady": "Versi baru sudah siap", + "updateNewVersionReady": "Versi baru tersedia", "@updateNewVersionReady": { "description": "Update subtitle" }, @@ -1248,7 +1248,7 @@ "@updateRequiredTitle": { "description": "Title of the mandatory update dialog shown when the installed version is too old" }, - "updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.", + "updateRequiredNotice": "Versi yang Anda gunakan, {count} sudah tidak didukung. Update untuk terus menggunakan aplikasi.", "@updateRequiredNotice": { "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", "placeholders": { @@ -1265,15 +1265,15 @@ "@updateNew": { "description": "Label for new version" }, - "updateDownloading": "Mengunduh...", + "updateDownloading": "Mendownload...", "@updateDownloading": { "description": "Update status - downloading" }, - "updateWhatsNew": "Apa yang baru", + "updateWhatsNew": "Yang baru", "@updateWhatsNew": { "description": "Changelog section title" }, - "updateDownloadInstall": "Unduh & Pasang", + "updateDownloadInstall": "Download & Instal", "@updateDownloadInstall": { "description": "Update button - download and install" }, @@ -1285,7 +1285,7 @@ "@providerPriorityTitle": { "description": "Provider priority page title" }, - "providerPriorityDescription": "Seret untuk mengatur ulang urutan provider unduhan. Aplikasi akan mencoba provider dari atas ke bawah saat mengunduh lagu.", + "providerPriorityDescription": "Seret untuk mengatur ulang urutan provider download. Aplikasi akan mencoba provider dari atas ke bawah saat mendownload lagu.", "@providerPriorityDescription": { "description": "Provider priority page description" }, @@ -1293,11 +1293,11 @@ "@providerPriorityInfo": { "description": "Info tip about fallback behavior" }, - "providerPriorityFallbackExtensionsDescription": "Pilih ekstensi unduhan terpasang mana yang dapat digunakan selama fallback otomatis.", + "providerPriorityFallbackExtensionsDescription": "Pilih ekstensi download terinstal yang digunakan selama fallback otomatis.", "@providerPriorityFallbackExtensionsDescription": { "description": "Section description for extension fallback selection" }, - "providerPriorityFallbackExtensionsHint": "Hanya ekstensi yang diaktifkan dengan kemampuan penyedia unduhan yang tercantum di sini.", + "providerPriorityFallbackExtensionsHint": "Hanya ekstensi dengan provider download yang sudah aktif yang ada di sini.", "@providerPriorityFallbackExtensionsHint": { "description": "Hint below the extension fallback selection list" }, @@ -1309,11 +1309,11 @@ "@metadataProviderPriorityTitle": { "description": "Metadata priority page title" }, - "metadataProviderPriorityDescription": "Seret untuk mengatur ulang urutan provider metadata. Aplikasi akan mencoba provider dari atas ke bawah saat mencari lagu dan mengambil metadata.", + "metadataProviderPriorityDescription": "Seret untuk mengatur urutan provider metadata. Aplikasi akan mencoba provider dari atas ke bawah saat mencari lagu dan mengambil metadata.", "@metadataProviderPriorityDescription": { "description": "Metadata priority page description" }, - "metadataProviderPriorityInfo": "Deezer tidak memiliki batas rate dan direkomendasikan sebagai utama. Spotify mungkin membatasi rate setelah banyak permintaan.", + "metadataProviderPriorityInfo": "Deezer tidak ada rate limit dan direkomendasikan jadi utama. Spotify mungkin ada bila banyak permintaan.", "@metadataProviderPriorityInfo": { "description": "Info tip about rate limits" }, @@ -1325,7 +1325,7 @@ "@logCopied": { "description": "Snackbar - logs copied" }, - "logSearchHint": "Cari log...", + "logSearchHint": "Telusuri log...", "@logSearchHint": { "description": "Log search placeholder" }, @@ -1353,11 +1353,11 @@ "@logClearLogsMessage": { "description": "Clear logs confirmation message" }, - "logFilterBySeverity": "Filter log berdasarkan tingkat keparahan", + "logFilterBySeverity": "Filter log menurut keparahan", "@logFilterBySeverity": { "description": "Filter dialog title" }, - "logNoLogsYet": "Belum ada log", + "logNoLogsYet": "Tidak ada log", "@logNoLogsYet": { "description": "Empty state title" }, @@ -1391,11 +1391,11 @@ "@channelPreview": { "description": "Update channel - beta/preview releases" }, - "sectionSearchSource": "Sumber Pencarian", + "sectionSearchSource": "Sumber Penelusuran", "@sectionSearchSource": { "description": "Settings section header" }, - "sectionDownload": "Unduhan", + "sectionDownload": "Download", "@sectionDownload": { "description": "Settings section header" }, @@ -1423,7 +1423,7 @@ "@sectionAudioQuality": { "description": "Settings section header" }, - "sectionFileSettings": "Pengaturan File", + "sectionFileSettings": "Setelan File", "@sectionFileSettings": { "description": "Settings section header" }, @@ -1435,15 +1435,15 @@ "@lyricsMode": { "description": "Setting - how to save lyrics" }, - "lyricsModeDescription": "Pilih cara lirik disimpan bersama unduhan Anda", + "lyricsModeDescription": "Pilih cara lirik disimpan di lagu Anda", "@lyricsModeDescription": { "description": "Lyrics mode picker description" }, - "lyricsModeEmbed": "Sematkan dalam file", + "lyricsModeEmbed": "Tersemat di file", "@lyricsModeEmbed": { "description": "Lyrics mode option - embed in audio file" }, - "lyricsModeEmbedSubtitle": "Lirik tersimpan di dalam metadata FLAC", + "lyricsModeEmbedSubtitle": "Lirik disimpan di dalam metadata FLAC", "@lyricsModeEmbedSubtitle": { "description": "Subtitle for embed option" }, @@ -1451,7 +1451,7 @@ "@lyricsModeExternal": { "description": "Lyrics mode option - separate LRC file" }, - "lyricsModeExternalSubtitle": "File .lrc terpisah untuk pemutar musik seperti Samsung Music", + "lyricsModeExternalSubtitle": "File .lrc dipisah untuk pemutar seperti Samsung Music", "@lyricsModeExternalSubtitle": { "description": "Subtitle for external option" }, @@ -1459,7 +1459,7 @@ "@lyricsModeBoth": { "description": "Lyrics mode option - embed and external" }, - "lyricsModeBothSubtitle": "Sematkan dan simpan file .lrc", + "lyricsModeBothSubtitle": "Sematkan lalu simpan file .lrc", "@lyricsModeBothSubtitle": { "description": "Subtitle for both option" }, @@ -1491,7 +1491,7 @@ "@settingsDownloadSubtitle": { "description": "Download settings description" }, - "settingsExtensionsSubtitle": "Kelola provider unduhan", + "settingsExtensionsSubtitle": "Kelola provider download", "@settingsExtensionsSubtitle": { "description": "Extensions settings description" }, @@ -1507,7 +1507,7 @@ "@pressBackAgainToExit": { "description": "Exit confirmation message" }, - "downloadAllCount": "Unduh Semua ({count})", + "downloadAllCount": "Download Semua ({count})", "@downloadAllCount": { "description": "Download all button with count", "placeholders": { @@ -1593,7 +1593,7 @@ "@trackAudioQuality": { "description": "Metadata label - audio quality" }, - "libraryQualityLabelFileFormat": "File format", + "libraryQualityLabelFileFormat": "Format file", "@libraryQualityLabelFileFormat": { "description": "Library audio quality label mode that shows the detected file format" }, @@ -1613,7 +1613,7 @@ "@trackCopyright": { "description": "Metadata label - copyright information" }, - "trackDownloaded": "Diunduh", + "trackDownloaded": "Terdownload", "@trackDownloaded": { "description": "Metadata label - download date" }, @@ -1662,7 +1662,7 @@ "@trackInstrumental": { "description": "Message when track is instrumental (no lyrics)" }, - "trackCopiedToClipboard": "Disalin ke clipboard", + "trackCopiedToClipboard": "Tersalin ke clipboard", "@trackCopiedToClipboard": { "description": "Snackbar - content copied" }, @@ -1737,7 +1737,7 @@ "@storeClearFilters": { "description": "Button to clear all filters" }, - "storeAddRepoTitle": "Tambahkan Repositori Ekstensi", + "storeAddRepoTitle": "Tambah Repositori Ekstensi", "@storeAddRepoTitle": { "description": "Store setup screen - heading when no repo is configured" }, @@ -1745,7 +1745,7 @@ "@storeAddRepoDescription": { "description": "Store setup screen - explanatory text" }, - "storeRepoUrlLabel": "Tautan Repositori", + "storeRepoUrlLabel": "URL Repositori", "@storeRepoUrlLabel": { "description": "Label for the repository URL input field" }, @@ -1753,7 +1753,7 @@ "@storeRepoUrlHint": { "description": "Hint/placeholder for the repository URL input field" }, - "storeAddRepoButton": "Tambahkan Repositori", + "storeAddRepoButton": "Tambah Repositori", "@storeAddRepoButton": { "description": "Button to submit a new repository URL" }, @@ -1777,7 +1777,7 @@ "@storeLoadError": { "description": "Error heading when the store cannot be loaded" }, - "storeEmptyNoExtensions": "Tidak ada ekstensi yang tersedia", + "storeEmptyNoExtensions": "Tidak ada ekstensi tersedia", "@storeEmptyNoExtensions": { "description": "Message when store has no extensions" }, @@ -1789,7 +1789,7 @@ "@extensionId": { "description": "Extension detail - unique ID" }, - "extensionError": "Terjadi kesalahan", + "extensionError": "Eror", "@extensionError": { "description": "Extension detail - error message" }, @@ -1801,7 +1801,7 @@ "@extensionMetadataProvider": { "description": "Capability - provides metadata" }, - "extensionDownloadProvider": "Provider Unduhan", + "extensionDownloadProvider": "Provider Download", "@extensionDownloadProvider": { "description": "Capability - provides downloads" }, @@ -1817,7 +1817,7 @@ "@extensionQualityOptions": { "description": "Capability - quality selection" }, - "extensionPostProcessingHooks": "Hook Pasca-Pemrosesan", + "extensionPostProcessingHooks": "Hook Post-Processing", "@extensionPostProcessingHooks": { "description": "Capability - post-processing" }, @@ -1825,7 +1825,7 @@ "@extensionPermissions": { "description": "Section header - required permissions" }, - "extensionSettings": "Pengaturan", + "extensionSettings": "Setelan", "@extensionSettings": { "description": "Section header - extension settings" }, @@ -1833,11 +1833,11 @@ "@extensionRemoveButton": { "description": "Button to uninstall extension" }, - "extensionUpdated": "Diperbarui", + "extensionUpdated": "Terupdate", "@extensionUpdated": { "description": "Extension detail - last update" }, - "extensionMinAppVersion": "Versi App Minimum", + "extensionMinAppVersion": "Versi App Min", "@extensionMinAppVersion": { "description": "Extension detail - minimum app version" }, @@ -1845,7 +1845,7 @@ "@extensionCustomTrackMatching": { "description": "Capability - custom track matching algorithm" }, - "extensionPostProcessing": "Pasca-Pemrosesan", + "extensionPostProcessing": "Post-Processing", "@extensionPostProcessing": { "description": "Capability - post-download processing" }, @@ -1880,11 +1880,11 @@ "@extensionsProviderPrioritySection": { "description": "Section header - provider priority" }, - "extensionsInstalledSection": "Ekstensi Terpasang", + "extensionsInstalledSection": "Ekstensi Terinstal", "@extensionsInstalledSection": { "description": "Section header - installed extensions" }, - "extensionsNoExtensions": "Tidak ada ekstensi terpasang", + "extensionsNoExtensions": "Tidak ada ekstensi terinstal", "@extensionsNoExtensions": { "description": "Empty state - no extensions" }, @@ -1892,19 +1892,19 @@ "@extensionsNoExtensionsSubtitle": { "description": "Empty state subtitle" }, - "extensionsInstallButton": "Pasang Ekstensi", + "extensionsInstallButton": "Instal Ekstensi", "@extensionsInstallButton": { "description": "Button to install extension from file" }, - "extensionsInfoTip": "Ekstensi dapat menambahkan provider metadata dan unduhan baru. Hanya pasang ekstensi dari sumber terpercaya.", + "extensionsInfoTip": "Ekstensi dapat menambahkan provider metadata dan download baru. Hanya instal ekstensi dari sumber terpercaya.", "@extensionsInfoTip": { "description": "Security warning about extensions" }, - "extensionsInstalledSuccess": "Ekstensi berhasil dipasang", + "extensionsInstalledSuccess": "Ekstensi berhasil diinstal", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "extensionsInstalledCount": "{count} ekstensi berhasil terpasang", + "extensionsInstalledCount": "{count} ekstensi berhasil diinstal", "@extensionsInstalledCount": { "description": "Success message after installing multiple extensions", "placeholders": { @@ -1914,7 +1914,7 @@ } } }, - "extensionsInstallPartialSuccess": "Ekstensi yang terpasang berjumlah {installed} dari {attempted}", + "extensionsInstallPartialSuccess": "{installed} dari {attempted ekstensi terinstal}", "@extensionsInstallPartialSuccess": { "description": "Message when installing multiple extensions partially succeeds", "placeholders": { @@ -1928,11 +1928,11 @@ } } }, - "extensionsDownloadPriority": "Prioritas Unduhan", + "extensionsDownloadPriority": "Prioritas Download", "@extensionsDownloadPriority": { "description": "Setting - download provider order" }, - "extensionsDownloadPrioritySubtitle": "Atur urutan layanan unduhan", + "extensionsDownloadPrioritySubtitle": "Atur urutan layanan download", "@extensionsDownloadPrioritySubtitle": { "description": "Subtitle for download priority" }, @@ -1940,11 +1940,11 @@ "@extensionsFallbackTitle": { "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "extensionsFallbackSubtitle": "Pilih ekstensi unduhan terpasang mana yang dapat digunakan sebagai cadangan", + "extensionsFallbackSubtitle": "Pilih ekstensi download terinstal mana yang dapat digunakan sebagai cadangan", "@extensionsFallbackSubtitle": { "description": "Subtitle for download fallback extensions menu" }, - "extensionsNoDownloadProvider": "Tidak ada ekstensi dengan provider unduhan", + "extensionsNoDownloadProvider": "Tidak ada ekstensi dengan provider download", "@extensionsNoDownloadProvider": { "description": "Empty state - no download providers" }, @@ -1952,7 +1952,7 @@ "@extensionsMetadataPriority": { "description": "Setting - metadata provider order" }, - "extensionsMetadataPrioritySubtitle": "Atur urutan sumber pencarian & metadata", + "extensionsMetadataPrioritySubtitle": "Atur urutan sumber penelusuran & metadata", "@extensionsMetadataPrioritySubtitle": { "description": "Subtitle for metadata priority" }, @@ -1960,19 +1960,19 @@ "@extensionsNoMetadataProvider": { "description": "Empty state - no metadata providers" }, - "extensionsSearchProvider": "Provider Pencarian", + "extensionsSearchProvider": "Provider Penelusuran", "@extensionsSearchProvider": { "description": "Setting - search provider selection" }, - "extensionsNoCustomSearch": "Tidak ada ekstensi dengan pencarian kustom", + "extensionsNoCustomSearch": "Tidak ada ekstensi dengan penelusuran kustom", "@extensionsNoCustomSearch": { "description": "Empty state - no search providers" }, - "extensionsSearchProviderDescription": "Pilih layanan yang digunakan untuk mencari lagu", + "extensionsSearchProviderDescription": "Pilih layanan yang digunakan untuk menelusuri lagu", "@extensionsSearchProviderDescription": { "description": "Search provider setting description" }, - "extensionsCustomSearch": "Pencarian kustom", + "extensionsCustomSearch": "Penelusuran kustom", "@extensionsCustomSearch": { "description": "Label for custom search provider" }, @@ -2012,39 +2012,39 @@ "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadAutoConvert": "Auto-convert after download", + "downloadAutoConvert": "Ubah format setelah terdownload", "@downloadAutoConvert": { "description": "Toggle for automatic post-download audio conversion" }, - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "downloadAutoConvertSubtitle": "Mengubah format ke lossy akan mengecilkan ukuran file. File asli akan dihapus setelah perubahan format selesai.", "@downloadAutoConvertSubtitle": { "description": "Explanation of safe automatic post-download conversion" }, - "downloadAutoConvertFormat": "Output format", + "downloadAutoConvertFormat": "Format output", "@downloadAutoConvertFormat": { "description": "Automatic conversion output format setting" }, - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "downloadAutoConvertFormatSubtitle": "Pilih format lossy yang digunakan untuk download selanjutnya.", "@downloadAutoConvertFormatSubtitle": { "description": "Automatic conversion format picker explanation" }, - "downloadAutoConvertBitrate": "Output quality", + "downloadAutoConvertBitrate": "Kualitas output", "@downloadAutoConvertBitrate": { "description": "Automatic conversion bitrate setting" }, - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "downloadAutoConvertBitrateSubtitle": "Bitrate yang tinggi menjaga banyak detail tapi ukuran file akan besar", "@downloadAutoConvertBitrateSubtitle": { "description": "Automatic conversion bitrate picker explanation" }, - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "downloadAutoConvertMp3Subtitle": "Dapat diputar di berbagai pemutar dan perangkat", "@downloadAutoConvertMp3Subtitle": { "description": "MP3 automatic conversion option description" }, - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "downloadAutoConvertM4aSubtitle": "Audio AAC dalam format file M4A", "@downloadAutoConvertM4aSubtitle": { "description": "M4A AAC automatic conversion option description" }, - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "downloadAutoConvertOpusSubtitle": "Bagus untuk pemutar terbaru", "@downloadAutoConvertOpusSubtitle": { "description": "Opus automatic conversion option description" }, @@ -2052,7 +2052,7 @@ "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" }, - "downloadLossy320FormatDesc": "Pilih format output untuk unduhan lossy 320kbps. Aliran data asli akan dikonversi ke format yang Anda pilih bila diperlukan.", + "downloadLossy320FormatDesc": "Pilih format output untuk download lossy 320kbps. Data stream asli akan dikonversi ke format yang Anda pilih bila diperlukan.", "@downloadLossy320FormatDesc": { "description": "Description in the lossy format picker" }, @@ -2060,7 +2060,7 @@ "@downloadLossyMp3": { "description": "Lossy format option - MP3 320kbps" }, - "downloadLossyMp3Subtitle": "Kompatibilitas terbaik, ~10MB per trek", + "downloadLossyMp3Subtitle": "Putar di mana saja, ~10MB per trek", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, @@ -2068,7 +2068,7 @@ "@downloadLossyAac": { "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "downloadLossyAacSubtitle": "Kompatibilitas seluler terbaik, kontainer M4A", + "downloadLossyAacSubtitle": "Putar di perangkat mobile, format M4A", "@downloadLossyAacSubtitle": { "description": "Subtitle for AAC/M4A 320kbps lossy option" }, @@ -2076,7 +2076,7 @@ "@downloadLossyOpus256": { "description": "Lossy format option - Opus 256kbps" }, - "downloadLossyOpus256Subtitle": "Opus kualitas terbaik, ~8MB per trek", + "downloadLossyOpus256Subtitle": "Opus kualitas terbaik, ~8MB per lagu", "@downloadLossyOpus256Subtitle": { "description": "Subtitle for Opus 256kbps lossy option" }, @@ -2084,19 +2084,19 @@ "@downloadLossyOpus128": { "description": "Lossy format option - Opus 128kbps" }, - "downloadLossyOpus128Subtitle": "Ukuran terkecil, ~4MB per trek", + "downloadLossyOpus128Subtitle": "Ukuran terkecil, ~4MB per lagu", "@downloadLossyOpus128Subtitle": { "description": "Subtitle for Opus 128kbps lossy option" }, - "downloadAskBeforeDownload": "Tanya Sebelum Unduh", + "downloadAskBeforeDownload": "Tanya Sebelum Download", "@downloadAskBeforeDownload": { "description": "Setting - show quality picker" }, - "downloadDirectory": "Direktori Unduhan", + "downloadDirectory": "Folder Download", "@downloadDirectory": { "description": "Setting - download folder" }, - "downloadSeparateSinglesFolder": "Folder Singles Terpisah", + "downloadSeparateSinglesFolder": "Folder Single Terpisah", "@downloadSeparateSinglesFolder": { "description": "Setting - separate folder for singles" }, @@ -2104,7 +2104,7 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, - "albumFolderStructureDescription": "Pilih bagaimana struktur folder album akan dibuat", + "albumFolderStructureDescription": "Pilih struktur folder album", "@albumFolderStructureDescription": { "description": "Album folder structure picker description" }, @@ -2116,7 +2116,7 @@ "@downloadUsePrimaryArtistOnly": { "description": "Setting - strip featured artists from folder name" }, - "downloadUsePrimaryArtistOnlyEnabled": "Artis unggulan dihapus dari nama folder (misalnya Justin Bieber, Quavo → Justin Bieber)", + "downloadUsePrimaryArtistOnlyEnabled": "Artis featuring dihapus dari nama folder (misalnya Justin Bieber, Quavo → Justin Bieber)", "@downloadUsePrimaryArtistOnlyEnabled": { "description": "Subtitle when primary artist only is enabled" }, @@ -2128,7 +2128,7 @@ "@downloadSelectQuality": { "description": "Dialog title - choose audio quality" }, - "downloadFrom": "Unduh Dari", + "downloadFrom": "Download Dari", "@downloadFrom": { "description": "Label - download source" }, @@ -2140,11 +2140,11 @@ "@appearanceAmoledDarkSubtitle": { "description": "Subtitle for AMOLED dark" }, - "appearanceHeroAnimations": "Animasi hero", + "appearanceHeroAnimations": "Transisi halus", "@appearanceHeroAnimations": { "description": "Toggle for shared-element (Hero) transitions" }, - "appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player", + "appearanceHeroAnimationsSubtitle": "Transisikan cover art antar layar, cont. membuka pemutar", "@appearanceHeroAnimationsSubtitle": { "description": "Subtitle for the Hero animations toggle" }, @@ -2152,7 +2152,7 @@ "@appearanceForceBlur": { "description": "Toggle that forces backdrop blur on even when the device profile disabled it" }, - "appearanceForceBlurSubtitle": "Aktifkan efek buram bilah navigasi bahkan pada perangkat yang dinonaktifkan secara bawaan. Dapat memengaruhi performa.", + "appearanceForceBlurSubtitle": "Aktifkan blur bar navigasi di perangkat yang dimatikan secara default. Dapat memengaruhi performa.", "@appearanceForceBlurSubtitle": { "description": "Subtitle for the force-blur toggle" }, @@ -2160,19 +2160,19 @@ "@queueClearAll": { "description": "Button - clear all queue items" }, - "queueClearAllMessage": "Apakah Anda yakin ingin menghapus semua unduhan?", + "queueClearAllMessage": "Anda yakin ingin menghapus semua download?", "@queueClearAllMessage": { "description": "Clear queue confirmation" }, - "settingsAutoExportFailed": "Unduhan yang gagal diekspor otomatis", + "settingsAutoExportFailed": "Ekspor otomatis download gagal", "@settingsAutoExportFailed": { "description": "Setting toggle for auto-export" }, - "settingsAutoExportFailedSubtitle": "Simpan unduhan yang gagal ke file TXT secara otomatis", + "settingsAutoExportFailedSubtitle": "Otomatis simpan download gagal ke file TXT", "@settingsAutoExportFailedSubtitle": { "description": "Subtitle for auto-export setting" }, - "settingsDownloadNetwork": "Jaringan Unduhan", + "settingsDownloadNetwork": "Koneksi Download", "@settingsDownloadNetwork": { "description": "Setting for network type preference" }, @@ -2184,15 +2184,15 @@ "@settingsDownloadNetworkWifiOnly": { "description": "Network option - only use WiFi" }, - "settingsDownloadNetworkSubtitle": "Pilih jaringan mana yang akan digunakan untuk mengunduh. Jika diatur ke Hanya WiFi, unduhan akan berhenti sementara dan menggunakan data seluler.", + "settingsDownloadNetworkSubtitle": "Koneksi yang akan digunakan untuk mendownload. Jika diatur ke Hanya WiFi, download dihentikan saat menggunakan data seluler.", "@settingsDownloadNetworkSubtitle": { "description": "Subtitle explaining network preference" }, - "settingsConcurrentDownloads": "Unduhan bersamaan", + "settingsConcurrentDownloads": "Download bersamaan", "@settingsConcurrentDownloads": { "description": "Setting title - how many tracks download at the same time" }, - "settingsConcurrentDownloadsSubtitle": "Mengunduh beberapa lagu sekaligus lebih cepat, tetapi beberapa penyedia mungkin membatasi permintaan paralel.", + "settingsConcurrentDownloadsSubtitle": "Mendownload beberapa lagu sekaligus lebih cepat, tetapi beberapa penyedia mungkin membatasi permintaan paralel.", "@settingsConcurrentDownloadsSubtitle": { "description": "Subtitle explaining the concurrent downloads picker" }, @@ -2318,11 +2318,11 @@ "@recentTypeSong": { "description": "Recent access item type - song/track" }, - "recentTypePlaylist": "Daftar putar", + "recentTypePlaylist": "Playlist", "@recentTypePlaylist": { "description": "Recent access item type - playlist" }, - "recentEmpty": "Belum ada item terbaru", + "recentEmpty": "Tidak ada baru-baru ini", "@recentEmpty": { "description": "Empty state text for recent access list" }, @@ -2330,11 +2330,11 @@ "@recentClearAllMessage": { "description": "Confirmation message before clearing all recent activity" }, - "recentShowAllDownloads": "Tampilkan Semua Unduhan", + "recentShowAllDownloads": "Tampilkan Semua Download", "@recentShowAllDownloads": { "description": "Button label to unhide hidden downloads in recent access" }, - "recentPlaylistInfo": "Daftar Putar: {name}", + "recentPlaylistInfo": "Download: {name}", "@recentPlaylistInfo": { "description": "Snackbar message when tapping playlist in recent access", "placeholders": { @@ -2344,11 +2344,11 @@ } } }, - "discographyDownload": "Unduh Diskografi", + "discographyDownload": "Download Diskografi", "@discographyDownload": { "description": "Button - download artist discography" }, - "discographyDownloadAll": "Unduh Semua", + "discographyDownloadAll": "Download Semua", "@discographyDownloadAll": { "description": "Option - download entire discography" }, @@ -2429,7 +2429,7 @@ } } }, - "discographyDownloadSelected": "Unduh yang Dipilih", + "discographyDownloadSelected": "Download Terpilih", "@discographyDownloadSelected": { "description": "Button - download selected albums" }, @@ -2494,7 +2494,7 @@ "@settingsLocalLibrary": { "description": "Settings menu item - local library" }, - "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", + "settingsLocalLibrarySubtitle": "Pindai musik & deteksi file ganda", "@settingsLocalLibrarySubtitle": { "description": "Subtitle for local library settings" }, @@ -2506,7 +2506,7 @@ "@settingsCacheSubtitle": { "description": "Subtitle for cache management menu" }, - "libraryTitle": "Local Library", + "libraryTitle": "Koleksi Lokal", "@libraryTitle": { "description": "Library settings page title" }, @@ -2522,7 +2522,7 @@ "@libraryEnableLocalLibrarySubtitle": { "description": "Subtitle for enable toggle" }, - "libraryFolder": "Library Folder", + "libraryFolder": "Folder Koleksi", "@libraryFolder": { "description": "Folder selection setting" }, @@ -2903,7 +2903,7 @@ "@tutorialDownloadDesc": { "description": "Tutorial download page description" }, - "tutorialLibraryTitle": "Perpustakaan Anda", + "tutorialLibraryTitle": "Koleksi Anda", "@tutorialLibraryTitle": { "description": "Tutorial library page title" }, @@ -2975,15 +2975,15 @@ "@libraryForceFullScanSubtitle": { "description": "Subtitle for force full scan button" }, - "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", + "cleanupOrphanedDownloads": "Bersihkan Sampah Download", "@cleanupOrphanedDownloads": { "description": "Button to remove history entries for deleted files" }, - "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", + "cleanupOrphanedDownloadsSubtitle": "Hapus sampah download dari histori", "@cleanupOrphanedDownloadsSubtitle": { "description": "Subtitle for orphaned cleanup button" }, - "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", + "cleanupOrphanedDownloadsResult": "Menghapus {count} sampah download dari histori", "@cleanupOrphanedDownloadsResult": { "description": "Snackbar after orphan cleanup", "placeholders": { @@ -2992,7 +2992,7 @@ } } }, - "cleanupOrphanedDownloadsNone": "Tidak ada histori ", + "cleanupOrphanedDownloadsNone": "Tidak ada histori sampah", "@cleanupOrphanedDownloadsNone": { "description": "Snackbar when no orphans found" }, @@ -3021,7 +3021,7 @@ "@cacheSectionStorage": { "description": "Section header for cache entries" }, - "cacheSectionMaintenance": "Maintenance", + "cacheSectionMaintenance": "Perawatan", "@cacheSectionMaintenance": { "description": "Section header for cleanup actions" }, @@ -3061,43 +3061,43 @@ "@libraryPlaybackNormalization": { "description": "Toggle title for ReplayGain playback normalization in the built-in player" }, - "libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present", + "libraryPlaybackNormalizationSubtitle": "Atur kenyaringan antar lagu menggunakan tag ReplayGain atau R128, jika ada", "@libraryPlaybackNormalizationSubtitle": { "description": "Subtitle explaining playback volume normalization" }, - "cacheAudioAnalysis": "Audio analysis cache", + "cacheAudioAnalysis": "Cache analisis audio", "@cacheAudioAnalysis": { "description": "Cache item title for saved audio analysis results" }, - "cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.", + "cacheAudioAnalysisDesc": "Spektogram dan hasil analisis yang tersimpan. Akan dianalisis lagi jika dibuka.", "@cacheAudioAnalysisDesc": { "description": "Description of what audio analysis cache contains" }, - "cacheExploreFeed": "Explore feed cache", + "cacheExploreFeed": "Cache penjelajahan", "@cacheExploreFeed": { "description": "Cache item title for explore home feed cache" }, - "cacheExploreFeedDesc": "Explore tab content (new releases, trending). Will refresh on next visit.", + "cacheExploreFeedDesc": "Cache dari konten termuat (rilis baru, trending). Akan direfresh setiap dibuka.", "@cacheExploreFeedDesc": { "description": "Description of what explore feed cache contains" }, - "cacheTrackLookup": "Track lookup cache", + "cacheTrackLookup": "Cache penelusuran lagu", "@cacheTrackLookup": { "description": "Cache item title for track ID lookup cache" }, - "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", + "cacheTrackLookupDesc": "ID penelusuran lagu Spotify/Deezer. Dapat memperlambat penelusuran bila dibersihkan.", "@cacheTrackLookupDesc": { "description": "Description of what track lookup cache contains" }, - "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", + "cacheCleanupUnusedDesc": "Menghapus sisa-sisa histori download dan file hilang di koleksi", "@cacheCleanupUnusedDesc": { "description": "Description of what cleanup unused data does" }, - "cacheNoData": "No cached data", + "cacheNoData": "Tidak ada cache", "@cacheNoData": { "description": "Label when cache category has no data" }, - "cacheSizeWithFiles": "{size} in {count} files", + "cacheSizeWithFiles": "{size} di {count} file", "@cacheSizeWithFiles": { "description": "Cache size and file count", "placeholders": { @@ -3118,7 +3118,7 @@ } } }, - "cacheEntries": "{count} entries", + "cacheEntries": "{count} item", "@cacheEntries": { "description": "Track cache entry count", "placeholders": { @@ -3127,7 +3127,7 @@ } } }, - "cacheClearSuccess": "Cleared: {target}", + "cacheClearSuccess": "Terhapus: {target}", "@cacheClearSuccess": { "description": "Snackbar after clearing selected cache", "placeholders": { @@ -3136,11 +3136,11 @@ } } }, - "cacheClearConfirmTitle": "Clear cache?", + "cacheClearConfirmTitle": "Hapus cache?", "@cacheClearConfirmTitle": { "description": "Dialog title before clearing one cache category" }, - "cacheClearConfirmMessage": "This will clear cached data for {target}. Downloaded music files will not be deleted.", + "cacheClearConfirmMessage": "Akan menghapus cache {target}. File musik terdownload tidak akan dihapus.", "@cacheClearConfirmMessage": { "description": "Dialog message before clearing selected cache", "placeholders": { @@ -3149,27 +3149,27 @@ } } }, - "cacheClearAllConfirmTitle": "Clear all cache?", + "cacheClearAllConfirmTitle": "Hapus semua cache?", "@cacheClearAllConfirmTitle": { "description": "Dialog title before clearing all caches" }, - "cacheClearAllConfirmMessage": "This will clear all cache categories on this page. Downloaded music files will not be deleted.", + "cacheClearAllConfirmMessage": "Akan menghapus semua jenis cache. File musik terdownload tidak akan dihapus.", "@cacheClearAllConfirmMessage": { "description": "Dialog message before clearing all caches" }, - "cacheClearAll": "Clear all cache", + "cacheClearAll": "Hapus semua cache", "@cacheClearAll": { "description": "Button label to clear all caches" }, - "cacheCleanupUnused": "Cleanup unused data", + "cacheCleanupUnused": "Bersihkan data tak terpakai", "@cacheCleanupUnused": { "description": "Action title for cleaning unused entries" }, - "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", + "cacheCleanupUnusedSubtitle": "Menghapus sisa-sisa histori download dan file hilang di koleksi", "@cacheCleanupUnusedSubtitle": { "description": "Subtitle for cleanup unused data action" }, - "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", + "cacheCleanupResult": "Pembersihan selesai: {downloadCount} sisa-sisa download, {libraryCount} file hilang di koleksi", "@cacheCleanupResult": { "description": "Snackbar after unused data cleanup", "placeholders": { @@ -3181,31 +3181,31 @@ } } }, - "cacheRefreshStats": "Refresh stats", + "cacheRefreshStats": "Refresh", "@cacheRefreshStats": { "description": "Button label to refresh cache statistics" }, - "trackSaveCoverArt": "Save Cover Art", + "trackSaveCoverArt": "Simpan Cover Art", "@trackSaveCoverArt": { "description": "Menu action - save album cover art as file" }, - "trackSaveLyrics": "Save Lyrics (.lrc)", + "trackSaveLyrics": "Simpan Lirik (.lrc)", "@trackSaveLyrics": { "description": "Menu action - save lyrics as .lrc file" }, - "trackSaveLyricsProgress": "Saving lyrics...", + "trackSaveLyricsProgress": "Menyimpan lirik...", "@trackSaveLyricsProgress": { "description": "Snackbar while saving lyrics to file" }, - "trackReEnrich": "Re-enrich", + "trackReEnrich": "Update Metadata", "@trackReEnrich": { "description": "Menu action - re-embed metadata into audio file" }, - "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", + "trackReEnrichOnlineSubtitle": "Telusuri metadata di internet lalu sematkan ke file", "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, - "trackReEnrichBatchSubtitle": "Choose an online or manual update, then review every change before writing", + "trackReEnrichBatchSubtitle": "Pilih update online atau offline, lalu tinjau setiap perubahan sebelum diubah", "@trackReEnrichBatchSubtitle": { "description": "Subtitle for batch metadata update choices" }, @@ -3213,83 +3213,83 @@ "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" }, - "trackReEnrichFieldLyrics": "Lyrics", + "trackReEnrichFieldLyrics": "Lirik", "@trackReEnrichFieldLyrics": { "description": "Checkbox label for lyrics field in re-enrich" }, - "trackReEnrichFieldBasicTags": "Album, Album Artist", + "trackReEnrichFieldBasicTags": "Album, Artis Album", "@trackReEnrichFieldBasicTags": { "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "trackReEnrichFieldTrackInfo": "Track & Disc Number", + "trackReEnrichFieldTrackInfo": "Lagu & Nomor Disk", "@trackReEnrichFieldTrackInfo": { "description": "Checkbox label for track info in re-enrich" }, - "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "trackReEnrichFieldReleaseInfo": "Tanggal & ISRC", "@trackReEnrichFieldReleaseInfo": { "description": "Checkbox label for release info in re-enrich" }, - "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "trackReEnrichFieldExtra": "Genre, Label, Hak Cipta", "@trackReEnrichFieldExtra": { "description": "Checkbox label for extra metadata in re-enrich" }, - "trackReEnrichSelectAll": "Select All", + "trackReEnrichSelectAll": "Pilih Semua", "@trackReEnrichSelectAll": { "description": "Select all fields checkbox in re-enrich" }, - "trackReEnrichModeIsrc": "ISRC only", + "trackReEnrichModeIsrc": "Hanya ISRC", "@trackReEnrichModeIsrc": { "description": "Batch metadata mode that only writes ISRC" }, - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "trackReEnrichModeIsrcSubtitle": "Telusuri dan tambahkan identifier rekaman tanpa mengubah tag lain", "@trackReEnrichModeIsrcSubtitle": { "description": "Explanation for the ISRC-only batch metadata mode" }, - "trackReEnrichModeMissing": "Fill missing tags", + "trackReEnrichModeMissing": "Isi tag yang hilang", "@trackReEnrichModeMissing": { "description": "Batch metadata mode that fills only empty tags" }, - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "trackReEnrichModeMissingSubtitle": "Biarkan tag yang ada dan isi tag yang kosong", "@trackReEnrichModeMissingSubtitle": { "description": "Explanation for the fill-missing batch metadata mode" }, - "trackReEnrichModeReplace": "Update selected tags", + "trackReEnrichModeReplace": "Update tag terpilih", "@trackReEnrichModeReplace": { "description": "Batch metadata mode that replaces selected tag groups" }, - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "trackReEnrichModeReplaceSubtitle": "Pilih metadata yang akan diubah dengan metadata internet", "@trackReEnrichModeReplaceSubtitle": { "description": "Explanation for the selected-tag batch metadata mode" }, - "trackReEnrichModeManual": "Set common values", + "trackReEnrichModeManual": "Pilih tag yang umum", "@trackReEnrichModeManual": { "description": "Batch metadata mode that applies shared values to every selected track" }, - "trackReEnrichModeManualSubtitle": "Apply the same values to every selected track", + "trackReEnrichModeManualSubtitle": "Gunakan tag yang sama untuk lagu terpilih", "@trackReEnrichModeManualSubtitle": { "description": "Explanation for the manual shared-value batch metadata mode" }, - "trackReEnrichManualFieldsTitle": "Values to apply", + "trackReEnrichManualFieldsTitle": "Tag untuk diterapkan", "@trackReEnrichManualFieldsTitle": { "description": "Heading above manual batch metadata inputs" }, - "trackReEnrichManualHint": "Leave a field empty to keep its current value. Track titles, numbers, and ISRCs stay unchanged.", + "trackReEnrichManualHint": "Biarkan kosong jika tidak ingin mengubahnya. Judul lagu, nomor, dan ISRC tidak akan diubah.", "@trackReEnrichManualHint": { "description": "Safety explanation for manual batch metadata inputs" }, - "trackReEnrichFieldsTitle": "Tags to update", + "trackReEnrichFieldsTitle": "Tag untuk diupdate", "@trackReEnrichFieldsTitle": { "description": "Heading above batch re-enrich field checkboxes" }, - "trackReEnrichReview": "Review changes", + "trackReEnrichReview": "Tinjau perubahan", "@trackReEnrichReview": { "description": "Button that searches metadata and opens the batch change review" }, - "trackReEnrichReviewTitle": "Review metadata changes", + "trackReEnrichReviewTitle": "Tinjau perubahan metadata", "@trackReEnrichReviewTitle": { "description": "Title of the batch metadata review sheet" }, - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "trackReEnrichReviewSubtitle": "{changeCount} perubahan ke {trackCount} lagu", "@trackReEnrichReviewSubtitle": { "description": "Summary shown above proposed batch metadata changes", "placeholders": { @@ -3301,15 +3301,15 @@ } } }, - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "trackReEnrichNoChanges": "Tidak ada perubahan metadata pada lagu terpilih.", "@trackReEnrichNoChanges": { "description": "Message when batch metadata preview has no proposed changes" }, - "trackReEnrichApplyChanges": "Apply changes", + "trackReEnrichApplyChanges": "Terapkan perubahan", "@trackReEnrichApplyChanges": { "description": "Confirmation button in the batch metadata review sheet" }, - "trackReEnrichRefreshOnline": "Refresh from online", + "trackReEnrichRefreshOnline": "Refresh dari internet", "@trackReEnrichRefreshOnline": { "description": "Proposed value when lyrics will be refreshed during re-enrich" }, @@ -3317,7 +3317,7 @@ "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" }, - "trackCoverSaved": "Cover art saved to {fileName}", + "trackCoverSaved": "Cover art disimpan ke {fileName}", "@trackCoverSaved": { "description": "Snackbar after cover art saved", "placeholders": { @@ -3326,11 +3326,11 @@ } } }, - "trackCoverNoSource": "No cover art source available", + "trackCoverNoSource": "Tidak ada sumber cover art", "@trackCoverNoSource": { "description": "Snackbar when no cover art URL or embedded cover" }, - "trackLyricsSaved": "Lyrics saved to {fileName}", + "trackLyricsSaved": "Lirik disimpan ke {fileName}", "@trackLyricsSaved": { "description": "Snackbar after lyrics saved", "placeholders": { @@ -3339,31 +3339,31 @@ } } }, - "trackReEnrichProgress": "Re-enriching metadata...", + "trackReEnrichProgress": "Mengupdate metadata...", "@trackReEnrichProgress": { "description": "Snackbar while re-enriching metadata" }, - "trackReEnrichSearching": "Searching metadata online...", + "trackReEnrichSearching": "Mencari metadata di internet...", "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, - "trackReEnrichPreparing": "Preparing metadata changes...", + "trackReEnrichPreparing": "Menyiapkan perubahan metadata...", "@trackReEnrichPreparing": { "description": "Progress message while preparing manual batch metadata changes" }, - "trackReEnrichSuccess": "Metadata re-enriched successfully", + "trackReEnrichSuccess": "Metadata berhasil diupdate", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" }, - "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", + "trackReEnrichFfmpegFailed": "Gagal menyematkan metadata FFmpeg", "@trackReEnrichFfmpegFailed": { "description": "Snackbar when FFmpeg embed fails for MP3/Opus" }, - "queueFlacAction": "Queue FLAC", + "queueFlacAction": "Antrean FLAC", "@queueFlacAction": { "description": "Action/button label for queueing FLAC redownloads for local tracks" }, - "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", + "queueFlacConfirmMessage": "Menelusuri internet untuk mencari kecocokan lagu terpilih dan download antrean FLAC.\n\nFile yang sudah ada tidak akan dimodifikasi atau dihapus\n\nHanya kecocokan terbaik yang akan diantrekan.\n\n{count} terpilih", "@queueFlacConfirmMessage": { "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { @@ -3372,11 +3372,11 @@ } } }, - "queueFlacNoReliableMatches": "No reliable online matches found for the selection", + "queueFlacNoReliableMatches": "Tidak ada kecocokan yang ditemukan untuk lagu terpilih", "@queueFlacNoReliableMatches": { "description": "Snackbar when no safe FLAC redownload matches were found" }, - "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", + "queueFlacQueuedWithSkipped": "Menambahkan {addedCount} lagu ke antrean, {skippedCount} dilewati", "@queueFlacQueuedWithSkipped": { "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", "placeholders": { @@ -3388,7 +3388,7 @@ } } }, - "trackSaveFailed": "Failed: {error}", + "trackSaveFailed": "Gagal: {error}", "@trackSaveFailed": { "description": "Snackbar when save operation fails", "placeholders": { @@ -3397,15 +3397,15 @@ } } }, - "trackConvertFormat": "Convert Format", + "trackConvertFormat": "Ubah Format", "@trackConvertFormat": { "description": "Menu item - convert audio format" }, - "trackConvertTitle": "Convert Audio", + "trackConvertTitle": "Ubah Audio", "@trackConvertTitle": { "description": "Title of convert bottom sheet" }, - "trackConvertTargetFormat": "Target Format", + "trackConvertTargetFormat": "Format Pilihan", "@trackConvertTargetFormat": { "description": "Label for format selection" }, @@ -3413,19 +3413,19 @@ "@trackConvertBitrate": { "description": "Label for bitrate selection" }, - "trackConvertKeepOriginal": "Keep original file", + "trackConvertKeepOriginal": "Simpan file asli", "@trackConvertKeepOriginal": { "description": "Toggle to preserve the source file during conversion" }, - "trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry", + "trackConvertKeepOriginalDescription": "Tambah format baru ke koleksi yang terpisah", "@trackConvertKeepOriginalDescription": { "description": "Description for preserving the source file during conversion" }, - "trackConvertConfirmTitle": "Confirm Conversion", + "trackConvertConfirmTitle": "Konfirmasi Perubahan", "@trackConvertConfirmTitle": { "description": "Confirmation dialog title" }, - "trackConvertConfirmMessage": "Convert from {sourceFormat} to {targetFormat} at {bitrate}?\n\nThe original file will be deleted after conversion.", + "trackConvertConfirmMessage": "Ubah format {sourceFormat} ke {targetFormat} dengan bitrate {bitrate}?\n\nFile asli akan dihapus setelah ini.", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", "placeholders": { @@ -3440,7 +3440,7 @@ } } }, - "trackConvertConfirmMessageLossless": "Convert from {sourceFormat} to {targetFormat}? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.", + "trackConvertConfirmMessageLossless": "Ubah format {sourceFormat} ke {targetFormat} dengan kualitas loseless?\n\nFile asli akan dihapus setelah ini.", "@trackConvertConfirmMessageLossless": { "description": "Confirmation dialog message for lossless-to-lossless conversion", "placeholders": { @@ -3452,7 +3452,7 @@ } } }, - "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", + "trackConvertConfirmKeepOriginal": "Ubah format {sourceFormat} ke {targetFormat}?\n\nFile asli akan tetap disimpan dan file format baru akan ditambahkan ke koleksi terpisah.", "@trackConvertConfirmKeepOriginal": { "description": "Confirmation message when the source file will be preserved", "placeholders": { @@ -3464,15 +3464,15 @@ } } }, - "trackConvertLosslessHint": "Lossless conversion — no quality loss", + "trackConvertLosslessHint": "Kualitas loseless — kualitas tidak diturunkan", "@trackConvertLosslessHint": { "description": "Hint shown when converting between lossless formats" }, - "trackConvertConverting": "Converting audio...", + "trackConvertConverting": "Mengubah format...", "@trackConvertConverting": { "description": "Snackbar while converting" }, - "trackConvertSuccess": "Converted to {format} successfully", + "trackConvertSuccess": "Berhasil mengubah format ke {format}", "@trackConvertSuccess": { "description": "Snackbar after successful conversion", "placeholders": { @@ -3481,15 +3481,15 @@ } } }, - "trackConvertFailed": "Conversion failed", + "trackConvertFailed": "Perubahan format gagal", "@trackConvertFailed": { "description": "Snackbar when conversion fails" }, - "cueSplitTitle": "Split CUE Sheet", + "cueSplitTitle": "Pisahkan Lembar CUE", "@cueSplitTitle": { "description": "Title for CUE split bottom sheet" }, - "cueSplitAlbum": "Album: {album}", + "cueSplitAlbum": "Album {album}", "@cueSplitAlbum": { "description": "Album name in CUE split sheet", "placeholders": { @@ -3498,7 +3498,7 @@ } } }, - "cueSplitArtist": "Artist: {artist}", + "cueSplitArtist": "Artis: {artist}", "@cueSplitArtist": { "description": "Artist name in CUE split sheet", "placeholders": { @@ -3507,7 +3507,7 @@ } } }, - "cueSplitTrackCount": "{count} tracks", + "cueSplitTrackCount": "{count} lagu", "@cueSplitTrackCount": { "description": "Number of tracks in CUE sheet", "placeholders": { @@ -3516,11 +3516,11 @@ } } }, - "cueSplitConfirmTitle": "Split CUE Album", + "cueSplitConfirmTitle": "Pisahkan Album CUE", "@cueSplitConfirmTitle": { "description": "CUE split confirmation dialog title" }, - "cueSplitConfirmMessage": "Split \"{album}\" into {count} individual FLAC files?\n\nFiles will be saved to the same directory.", + "cueSplitConfirmMessage": "Pisahkan \"{album}\" menjadi {count} file FLAC?\n\nFile akan disimpan ke folder yang sama.", "@cueSplitConfirmMessage": { "description": "CUE split confirmation dialog message", "placeholders": { @@ -3532,7 +3532,7 @@ } } }, - "cueSplitSplitting": "Splitting CUE sheet... ({current}/{total})", + "cueSplitSplitting": "Memisahkan lembar CUE... ({current}/{total})", "@cueSplitSplitting": { "description": "Snackbar while splitting CUE", "placeholders": { @@ -3544,7 +3544,7 @@ } } }, - "cueSplitSuccess": "Split into {count} tracks successfully", + "cueSplitSuccess": "Berhasil memisah menjadi {count} lagu", "@cueSplitSuccess": { "description": "Snackbar after successful CUE split", "placeholders": { @@ -3553,23 +3553,23 @@ } } }, - "cueSplitFailed": "CUE split failed", + "cueSplitFailed": "Gagal memisahkan CUE", "@cueSplitFailed": { "description": "Snackbar when CUE split fails" }, - "cueSplitNoAudioFile": "Audio file not found for this CUE sheet", + "cueSplitNoAudioFile": "Tidak menemukan lagu untuk lembar CUE ini", "@cueSplitNoAudioFile": { "description": "Error when CUE audio file is missing" }, - "cueSplitButton": "Split into Tracks", + "cueSplitButton": "Pisah menjadi Lagu", "@cueSplitButton": { "description": "Button text to start CUE splitting" }, - "actionCreate": "Create", + "actionCreate": "Buat", "@actionCreate": { "description": "Generic action button - create" }, - "collectionFoldersTitle": "My folders", + "collectionFoldersTitle": "Folder saya", "@collectionFoldersTitle": { "description": "Library section title for custom folders" }, @@ -3577,11 +3577,11 @@ "@collectionWishlist": { "description": "Custom folder for saved tracks to download later" }, - "collectionLoved": "Loved", + "collectionLoved": "Disukai", "@collectionLoved": { "description": "Custom folder for favorite tracks" }, - "collectionFavoriteArtists": "Favorite Artists", + "collectionFavoriteArtists": "Artis Favorit", "@collectionFavoriteArtists": { "description": "Custom folder for favorite artists" }, @@ -3589,19 +3589,19 @@ "@collectionPlaylist": { "description": "Single playlist label" }, - "collectionAddToPlaylist": "Add to playlist", + "collectionAddToPlaylist": "Tambah ke playlist", "@collectionAddToPlaylist": { "description": "Action to add a track to user playlist" }, - "collectionCreatePlaylist": "Create playlist", + "collectionCreatePlaylist": "Buat playlist", "@collectionCreatePlaylist": { "description": "Action to create a new playlist" }, - "collectionNoPlaylistsYet": "No playlists yet", + "collectionNoPlaylistsYet": "Tidak ada playlist", "@collectionNoPlaylistsYet": { "description": "Empty state title when user has no playlists" }, - "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", + "collectionPlaylistTracks": "{count, plural,=1{1 lagu} other{{count} lagu}}", "@collectionPlaylistTracks": { "description": "Track count label for custom playlists", "placeholders": { @@ -3610,7 +3610,7 @@ } } }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "collectionArtistCount": "{count, plural,=1{1 artis}other{{count} artis}}", "@collectionArtistCount": { "description": "Artist count label for favorite artists", "placeholders": { @@ -3619,7 +3619,7 @@ } } }, - "collectionAddedToPlaylist": "Added to \"{playlistName}\"", + "collectionAddedToPlaylist": "Ditambahkan ke \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", "placeholders": { @@ -3628,7 +3628,7 @@ } } }, - "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", + "collectionAlreadyInPlaylist": "Sudah ada di \"{playlistName}\"", "@collectionAlreadyInPlaylist": { "description": "Snackbar when track already exists in playlist", "placeholders": { @@ -3637,67 +3637,67 @@ } } }, - "collectionPlaylistNameHint": "Playlist name", + "collectionPlaylistNameHint": "Nama playlist", "@collectionPlaylistNameHint": { "description": "Hint text for playlist name input" }, - "collectionPlaylistNameRequired": "Playlist name is required", + "collectionPlaylistNameRequired": "Butuh nama playlist", "@collectionPlaylistNameRequired": { "description": "Validation error for empty playlist name" }, - "collectionRenamePlaylist": "Rename playlist", + "collectionRenamePlaylist": "Ubah nama playlist", "@collectionRenamePlaylist": { "description": "Action to rename playlist" }, - "collectionDeletePlaylist": "Delete playlist", + "collectionDeletePlaylist": "Hapus playlist", "@collectionDeletePlaylist": { "description": "Action to delete playlist" }, - "collectionPlaylistRenamed": "Playlist renamed", + "collectionPlaylistRenamed": "Playlist diubah nama", "@collectionPlaylistRenamed": { "description": "Snackbar after renaming playlist" }, - "collectionWishlistEmptyTitle": "Wishlist is empty", + "collectionWishlistEmptyTitle": "Wishlist kosong", "@collectionWishlistEmptyTitle": { "description": "Wishlist empty state title" }, - "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", + "collectionWishlistEmptySubtitle": "Ketuk + di lagu untuk menyimpan lagu yang ingin Anda download nanti", "@collectionWishlistEmptySubtitle": { "description": "Wishlist empty state subtitle" }, - "collectionLovedEmptyTitle": "Loved folder is empty", + "collectionLovedEmptyTitle": "Folder disukai kosong", "@collectionLovedEmptyTitle": { "description": "Loved empty state title" }, - "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", + "collectionLovedEmptySubtitle": "Ketuk hati di lagu untuk menyimpan lagu favorit Anda", "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "collectionFavoriteArtistsEmptyTitle": "Tidak ada artis favorit", "@collectionFavoriteArtistsEmptyTitle": { "description": "Favorite artists empty state title" }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "collectionFavoriteArtistsEmptySubtitle": "Ketuk hati di halaman artist untuk menyimpannya di sini", "@collectionFavoriteArtistsEmptySubtitle": { "description": "Favorite artists empty state subtitle" }, - "collectionPlaylistEmptyTitle": "Playlist is empty", + "collectionPlaylistEmptyTitle": "Playlist kosong", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" }, - "collectionPlaylistEmptySubtitle": "Long-press + on any track to add it here", + "collectionPlaylistEmptySubtitle": "Tekan lama + untuk menambahkan lagu ke sini", "@collectionPlaylistEmptySubtitle": { "description": "Playlist empty state subtitle" }, - "collectionRemoveFromPlaylist": "Remove from playlist", + "collectionRemoveFromPlaylist": "Hapus dari playlist", "@collectionRemoveFromPlaylist": { "description": "Tooltip for removing track from playlist" }, - "collectionRemoveFromFolder": "Remove from folder", + "collectionRemoveFromFolder": "Hapus dari folder", "@collectionRemoveFromFolder": { "description": "Tooltip for removing track from wishlist/loved folder" }, - "collectionAddedToLoved": "\"{trackName}\" added to Loved", + "collectionAddedToLoved": "\"{trackName}\" ditambahkan ke Disukai", "@collectionAddedToLoved": { "description": "Snackbar after adding track to loved folder", "placeholders": { @@ -3706,7 +3706,7 @@ } } }, - "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", + "collectionRemovedFromLoved": "\"{trackName}\" dihapus dari Disukai", "@collectionRemovedFromLoved": { "description": "Snackbar after removing track from loved folder", "placeholders": { @@ -3715,7 +3715,7 @@ } } }, - "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", + "collectionAddedToWishlist": "\"{trackName}\" ditambahkan ke Wishlist", "@collectionAddedToWishlist": { "description": "Snackbar after adding track to wishlist", "placeholders": { @@ -3724,7 +3724,7 @@ } } }, - "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", + "collectionRemovedFromWishlist": "\"{trackName}\" dihapus dari Wishlist", "@collectionRemovedFromWishlist": { "description": "Snackbar after removing track from wishlist", "placeholders": { @@ -3733,7 +3733,7 @@ } } }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "collectionAddedToFavoriteArtists": "\"{artistName}\" ditambahkan ke Artis Favorit", "@collectionAddedToFavoriteArtists": { "description": "Snackbar after adding artist to favorite artists", "placeholders": { @@ -3742,7 +3742,7 @@ } } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" dihapus dari Artis Favorit", "@collectionRemovedFromFavoriteArtists": { "description": "Snackbar after removing artist from favorite artists", "placeholders": { @@ -3751,39 +3751,39 @@ } } }, - "trackOptionAddToLoved": "Add to Loved", + "trackOptionAddToLoved": "Tambah ke Disukai", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" }, - "trackOptionRemoveFromLoved": "Remove from Loved", + "trackOptionRemoveFromLoved": "Hapus dari Disukai", "@trackOptionRemoveFromLoved": { "description": "Bottom sheet action label - remove track from loved folder" }, - "trackOptionAddToWishlist": "Add to Wishlist", + "trackOptionAddToWishlist": "Tambah ke Wishlist", "@trackOptionAddToWishlist": { "description": "Bottom sheet action label - add track to wishlist" }, - "trackOptionRemoveFromWishlist": "Remove from Wishlist", + "trackOptionRemoveFromWishlist": "Hapus dari Wishlist", "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, - "artistOptionAddToFavorites": "Add to Favorite Artists", + "artistOptionAddToFavorites": "Tambah ke Artis Favorit", "@artistOptionAddToFavorites": { "description": "Action label - add artist to favorite artists" }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "artistOptionRemoveFromFavorites": "Hapus dari Artis Favorit", "@artistOptionRemoveFromFavorites": { "description": "Action label - remove artist from favorite artists" }, - "collectionPlaylistChangeCover": "Change cover image", + "collectionPlaylistChangeCover": "Ubah foto cover", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "collectionPlaylistRemoveCover": "Remove cover image", + "collectionPlaylistRemoveCover": "Hapus foto cover", "@collectionPlaylistRemoveCover": { "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", + "selectionShareCount": "Bagikan {count}{count, plural,=1{lagu} other{ lagu}}", "@selectionShareCount": { "description": "Share button text with count in selection mode", "placeholders": { @@ -3792,11 +3792,11 @@ } } }, - "selectionShareNoFiles": "No shareable files found", + "selectionShareNoFiles": "Tidak ditemukan file untuk dibagikan", "@selectionShareNoFiles": { "description": "Snackbar when no selected files exist on disk" }, - "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", + "selectionConvertCount": "Ubah format {count}{count, plural,=1{lagu}other{ lagu}}", "@selectionConvertCount": { "description": "Convert button text with count in selection mode", "placeholders": { @@ -3805,15 +3805,15 @@ } } }, - "selectionConvertNoConvertible": "No convertible tracks selected", + "selectionConvertNoConvertible": "Tidak ada lagu yang dapat diubah", "@selectionConvertNoConvertible": { "description": "Snackbar when no selected tracks support conversion" }, - "selectionBatchConvertConfirmTitle": "Batch Convert", + "selectionBatchConvertConfirmTitle": "Ubah Format Massal", "@selectionBatchConvertConfirmTitle": { "description": "Confirmation dialog title for batch conversion" }, - "selectionBatchConvertConfirmMessage": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} at {bitrate}?\n\nOriginal files will be deleted after conversion.", + "selectionBatchConvertConfirmMessage": "Ubah format {count}{count, plural,=1{lagu}other{ lagu}} ke format {format} dengan bitrate {bitrate}?\n\nFile asli akan dihapus setelah perubahan.", "@selectionBatchConvertConfirmMessage": { "description": "Confirmation dialog message for batch conversion", "placeholders": { @@ -3828,7 +3828,7 @@ } } }, - "selectionBatchConvertConfirmMessageLossless": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}? (Lossless — no quality loss)\n\nOriginal files will be deleted after conversion.", + "selectionBatchConvertConfirmMessageLossless": "Ubah format {count}{count, plural,=1{lagu}other{ lagu}} ke format {format} dengan kualitas loseless?\n\nFile asli akan dihapus setelah perubahan.", "@selectionBatchConvertConfirmMessageLossless": { "description": "Confirmation dialog message for lossless batch conversion", "placeholders": { @@ -3840,7 +3840,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": "Ubah format {count} {count, plural, =1{lagu} other{lagu}} ke format {format}?\n\nFile asli akan disimpan dan file format baru akan ditambah ke koleksi baru.", "@selectionBatchConvertConfirmKeepOriginal": { "description": "Batch conversion confirmation when source files will be preserved", "placeholders": { @@ -3852,7 +3852,7 @@ } } }, - "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", + "selectionBatchConvertSuccess": "Berhasil mengubah format {success} dari {total} lagu ke format {format}", "@selectionBatchConvertSuccess": { "description": "Snackbar after batch conversion completes", "placeholders": { @@ -3867,7 +3867,7 @@ } } }, - "downloadedAlbumDownloadedCount": "{count} diunduh", + "downloadedAlbumDownloadedCount": "{count} terdownload", "@downloadedAlbumDownloadedCount": { "description": "Downloaded tracks count badge", "placeholders": { @@ -3876,27 +3876,27 @@ } } }, - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Beri nama folder setelah tag Artis Album", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { "description": "Subtitle when album artist is used for folder names" }, - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Beri nama folder setelah tag Artis Lagu", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { "description": "Subtitle when track artist is used for folder names" }, - "lyricsProvidersTitle": "Lyrics Provider Priority", + "lyricsProvidersTitle": "Prioritas Provider Lirik", "@lyricsProvidersTitle": { "description": "Settings item title for lyrics provider order" }, - "lyricsProvidersDescription": "Enable, disable and reorder lyrics sources. Providers are tried top-to-bottom until lyrics are found.", + "lyricsProvidersDescription": "Hidupkan, matikan, dan atur sumber lirik. Provider akan diperiksa dari atas ke bawah hingga lirik ditemukan.", "@lyricsProvidersDescription": { "description": "Description on the lyrics provider priority page" }, - "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", + "lyricsProvidersInfoText": "Provider lirik ekstensi berjalan sebelum provider lirik bawaan. Setidaknya ada satu provider yang hidup.", "@lyricsProvidersInfoText": { "description": "Info tip on lyrics provider priority page" }, - "lyricsProvidersEnabledSection": "Enabled ({count})", + "lyricsProvidersEnabledSection": "Dihidupkan ({count})", "@lyricsProvidersEnabledSection": { "description": "Section header for enabled providers", "placeholders": { @@ -3905,7 +3905,7 @@ } } }, - "lyricsProvidersDisabledSection": "Disabled ({count})", + "lyricsProvidersDisabledSection": "Dimatikan ({count})", "@lyricsProvidersDisabledSection": { "description": "Section header for disabled providers", "placeholders": { @@ -3914,151 +3914,151 @@ } } }, - "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", + "lyricsProvidersAtLeastOne": "Setidaknya ada satu provider yang hidup", "@lyricsProvidersAtLeastOne": { "description": "Snackbar when user tries to disable the last enabled provider" }, - "lyricsProvidersSaved": "Lyrics provider priority saved", + "lyricsProvidersSaved": "Prioritas provider lirik disimpan", "@lyricsProvidersSaved": { "description": "Snackbar after saving lyrics provider priority" }, - "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", + "lyricsProvidersDiscardContent": "Ada perubahan yang belum disimpan yang akan hilang.", "@lyricsProvidersDiscardContent": { "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "lyricsProviderLrclibDesc": "Open-source synced lyrics database", + "lyricsProviderLrclibDesc": "Database lirik berjalan open-source", "@lyricsProviderLrclibDesc": { "description": "Description for LRCLIB provider" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (bagus untuk lagu Asia)", "@lyricsProviderNeteaseDesc": { "description": "Description for Netease provider" }, - "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", + "lyricsProviderMusixmatchDesc": "Database lirik terbesar (banyak bahasa)", "@lyricsProviderMusixmatchDesc": { "description": "Description for Musixmatch provider" }, - "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", + "lyricsProviderAppleMusicDesc": "Lirik berjalan per kata (lewat proxy)", "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "lyricsProviderQqMusicDesc": "QQ Music (bagus untuk lagu Cina, API langsung)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "lyricsProviderLyricsPlusDesc": "Lirik karaoke per kata (Apple/Musixmatch/Spotify/QQ, lewat proxy)", "@lyricsProviderLyricsPlusDesc": { "description": "Description for LyricsPlus provider" }, - "lyricsProviderExtensionDesc": "Extension provider", + "lyricsProviderExtensionDesc": "Provider ekstensi", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" }, - "safMigrationTitle": "Storage Update Required", + "safMigrationTitle": "Butuh Update Penyimpanan", "@safMigrationTitle": { "description": "Title of SAF migration dialog" }, - "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", + "safMigrationMessage1": "SpotiFLAC kini menggunakan Android Storage Access (SAF) untuk mendownload. Ini memperbaiki eror \"izin ditolak\" di Android 10+.", "@safMigrationMessage1": { "description": "First paragraph of SAF migration dialog" }, - "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", + "safMigrationMessage2": "Harap pilih folder download Anda lagi untuk pindah ke sistem penyimpanan baru.", "@safMigrationMessage2": { "description": "Second paragraph of SAF migration dialog" }, - "safMigrationSuccess": "Download folder updated to SAF mode", + "safMigrationSuccess": "Folder download terupdate ke mode SAF", "@safMigrationSuccess": { "description": "Snackbar after successfully migrating to SAF" }, - "settingsDonate": "Support Development", + "settingsDonate": "Dukung Kami", "@settingsDonate": { "description": "Settings menu item - donate page" }, - "settingsDonateSubtitle": "Buy the developer a coffee", + "settingsDonateSubtitle": "Belikan developer kami kopi", "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, - "settingsBackup": "Backup & Restore", + "settingsBackup": "Cadangan & Pemulihan", "@settingsBackup": { "description": "Settings menu item - backup and restore page" }, - "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "settingsBackupSubtitle": "Pindahkan koleksi, histori, dan setelan Anda ke perangkat baru", "@settingsBackupSubtitle": { "description": "Subtitle for backup and restore settings item" }, - "backupTitle": "Backup & Restore", + "backupTitle": "Cadangan & Pemulihan", "@backupTitle": { "description": "App bar title for the backup and restore page" }, - "backupExportSectionTitle": "Create backup", + "backupExportSectionTitle": "Buat cadangan", "@backupExportSectionTitle": { "description": "Section title for the export/backup card" }, - "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", + "backupExportSectionDescription": "Simpan setelan, histori download, lagu disukai, wishlist, artis favorit, dan playlist dalam satu file yang dapat disimpan maupun dikirim ke ponsel lain.", "@backupExportSectionDescription": { "description": "Description of what a backup contains" }, - "backupExportButton": "Create backup file", + "backupExportButton": "Buat file cadangan", "@backupExportButton": { "description": "Button to create and share a backup file" }, - "backupImportSectionTitle": "Restore backup", + "backupImportSectionTitle": "Pulihkan cadangan", "@backupImportSectionTitle": { "description": "Section title for the import/restore card" }, - "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", + "backupImportSectionDescription": "Pilih file cadangan untuk memulihkan data Anda. Ini akan mengubah setelan sekarang, histori, dan koleksi di perangkat ini.", "@backupImportSectionDescription": { "description": "Description for the restore action" }, - "backupImportButton": "Choose backup file", + "backupImportButton": "Pilih file cadangan", "@backupImportButton": { "description": "Button to pick a backup file to restore" }, - "backupCreated": "Backup created", + "backupCreated": "Cadangan dibuat", "@backupCreated": { "description": "Snackbar after a backup file is created" }, - "backupCreateFailed": "Failed to create backup", + "backupCreateFailed": "Gagal membuat cadangan", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "backupRestoreConfirmTitle": "Restore this backup?", + "backupRestoreConfirmTitle": "Pulihkan cadangan ini?", "@backupRestoreConfirmTitle": { "description": "Confirmation dialog title before restoring a backup" }, - "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", + "backupRestoreConfirmMessage": "Ini akan mengubah setelan sekarang, histori download, lagu yang disukai, wishlist, dan playlist Anda dengan isi cadangan ini. Tindakan tidak dapat dipulihkan.", "@backupRestoreConfirmMessage": { "description": "Confirmation dialog message before restoring a backup" }, - "backupRestoreConfirmButton": "Restore", + "backupRestoreConfirmButton": "Pulihkan", "@backupRestoreConfirmButton": { "description": "Confirm button to proceed with restore" }, - "backupRestored": "Backup restored successfully", + "backupRestored": "Cadangan berhasil dipulihkan", "@backupRestored": { "description": "Snackbar after a successful restore" }, - "backupRestoreFailed": "Failed to restore backup", + "backupRestoreFailed": "Gagal memulihkan cadangan", "@backupRestoreFailed": { "description": "Snackbar when restore fails" }, - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "backupInvalidFile": "File ini bukan cadangan SpotiFLAC yang valid", "@backupInvalidFile": { "description": "Snackbar when the chosen file is not a valid backup" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "backupRestoreRestartHint": "Restart aplikasi untuk memastikan setiap perubahan diterapkan.", "@backupRestoreRestartHint": { "description": "Hint shown after restoring that an app restart is recommended" }, - "backupContentsTitle": "Backup contents", + "backupContentsTitle": "Akan dipulihkan", "@backupContentsTitle": { "description": "Header above the list summarizing what the backup contains" }, - "backupContentsSettings": "App settings", + "backupContentsSettings": "Setelan aplikasi", "@backupContentsSettings": { "description": "Backup contents row label for settings" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "backupContentsHistory": "{count} {count, plural, =1{histori} other{histori}}", "@backupContentsHistory": { "description": "Backup contents row for history count", "placeholders": { @@ -4067,7 +4067,7 @@ } } }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "backupContentsLiked": "{count} lagu {count, plural, =1{disukai} other{disukai}}", "@backupContentsLiked": { "description": "Backup contents row for liked tracks count", "placeholders": { @@ -4076,7 +4076,7 @@ } } }, - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "backupContentsWishlist": "{count} lagu di {count, plural, =1{wishlist} other{wishlist}}", "@backupContentsWishlist": { "description": "Backup contents row for wishlist tracks count", "placeholders": { @@ -4085,7 +4085,7 @@ } } }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlist}}", "@backupContentsPlaylists": { "description": "Backup contents row for playlist count", "placeholders": { @@ -4094,7 +4094,7 @@ } } }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "backupContentsArtists": "{count, plural, =1{1 artis favorit} other{{count} artis favorit}}", "@backupContentsArtists": { "description": "Backup contents row for favorite artists count", "placeholders": { @@ -4103,7 +4103,7 @@ } } }, - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "backupContentsExtensions": "{count, plural, =1{1 ekstensi} other{{count} ekstensi}}", "@backupContentsExtensions": { "description": "Backup contents row for installed extensions count", "placeholders": { @@ -4112,15 +4112,15 @@ } } }, - "backupIncludeSecrets": "Include extension credentials", + "backupIncludeSecrets": "Masukkan kredensial ekstensi", "@backupIncludeSecrets": { "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, - "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", + "backupIncludeSecretsDescription": "Token dan kunci API dari ekstensi disimpan ke dalam file cadangan. Jangan bagikan file ini. Jika dimatikan, Anda harus memasukkannya setelah memulihkan.", "@backupIncludeSecretsDescription": { "description": "Explanation for the include-credentials toggle" }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{ekstensi} other{ekstensi}} tidak dapat diinstal ulang. Instal manual lewat repo.", "@backupExtensionsRestoreFailed": { "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { @@ -4129,15 +4129,15 @@ } } }, - "tooltipLoveAll": "Love All", + "tooltipLoveAll": "Sukai Semua", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" }, - "tooltipAddToPlaylist": "Add to Playlist", + "tooltipAddToPlaylist": "Tambah ke Playlist", "@tooltipAddToPlaylist": { "description": "Tooltip for the Add to Playlist button" }, - "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", + "snackbarRemovedTracksFromLoved": "Menghapus {count} lagu dari Disukai", "@snackbarRemovedTracksFromLoved": { "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { @@ -4146,7 +4146,7 @@ } } }, - "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", + "snackbarAddedTracksToLoved": "Menambahkan {count} lagu ke Disukai", "@snackbarAddedTracksToLoved": { "description": "Snackbar after adding multiple tracks to Loved folder", "placeholders": { @@ -4155,11 +4155,11 @@ } } }, - "dialogDownloadAllTitle": "Download All", + "dialogDownloadAllTitle": "Download Semua", "@dialogDownloadAllTitle": { "description": "Dialog title for bulk download confirmation" }, - "dialogDownloadAllMessage": "Download {count} tracks?", + "dialogDownloadAllMessage": "Download {count} lagu?", "@dialogDownloadAllMessage": { "description": "Body of the Download All confirmation dialog", "placeholders": { @@ -4168,35 +4168,35 @@ } } }, - "homeSkipAlreadyDownloaded": "Skip already downloaded songs", + "homeSkipAlreadyDownloaded": "Lewati lagu terdownload", "@homeSkipAlreadyDownloaded": { "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "homeGoToAlbum": "Go to Album", + "homeGoToAlbum": "Ke Album", "@homeGoToAlbum": { "description": "Context menu item to navigate to the album page" }, - "homeAlbumInfoUnavailable": "Album info not available", + "homeAlbumInfoUnavailable": "Info album tidak tersedia", "@homeAlbumInfoUnavailable": { "description": "Snackbar when album info cannot be loaded" }, - "snackbarLoadingCueSheet": "Loading CUE sheet...", + "snackbarLoadingCueSheet": "Memuat lembar CUE...", "@snackbarLoadingCueSheet": { "description": "Snackbar while loading a CUE sheet file" }, - "snackbarMetadataSaved": "Metadata saved successfully", + "snackbarMetadataSaved": "Berhasil menyimpan metadata", "@snackbarMetadataSaved": { "description": "Snackbar after successfully saving track metadata" }, - "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", + "snackbarFailedToEmbedLyrics": "Gagal menyematkan lirik", "@snackbarFailedToEmbedLyrics": { "description": "Snackbar when lyrics embedding fails" }, - "snackbarFailedToWriteStorage": "Failed to write back to storage", + "snackbarFailedToWriteStorage": "Gagal memodifikasi file", "@snackbarFailedToWriteStorage": { "description": "Snackbar when writing metadata back to file fails" }, - "snackbarError": "Error: {error}", + "snackbarError": "Eror: {error}", "@snackbarError": { "description": "Generic error snackbar with error detail", "placeholders": { @@ -4205,159 +4205,159 @@ } } }, - "snackbarNoActionDefined": "No action defined for this button", + "snackbarNoActionDefined": "Tidak ada tindakan yang diatur untuk tombol ini", "@snackbarNoActionDefined": { "description": "Snackbar when an extension button has no action configured" }, - "noTracksFoundForAlbum": "No tracks found for this album", + "noTracksFoundForAlbum": "Tidak ada lagu di album ini", "@noTracksFoundForAlbum": { "description": "Empty state message when an album has no tracks" }, - "downloadLocationSubtitle": "Choose where to save your downloaded tracks", + "downloadLocationSubtitle": "Pilih lokasi penyimpanan lagu terdownload", "@downloadLocationSubtitle": { "description": "Subtitle shown in the download location picker sheet" }, - "storageModeAppFolder": "App Folder (Recommended)", + "storageModeAppFolder": "Folder Aplikasi (Direkomendasikan)", "@storageModeAppFolder": { "description": "Storage mode option - app-managed folder" }, - "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", + "storageModeAppFolderSubtitle": "Disimpan ke Music/SpotiFLAC secara default", "@storageModeAppFolderSubtitle": { "description": "Subtitle for app folder storage mode" }, - "storageModeSaf": "Custom Folder (SAF)", + "storageModeSaf": "Pilih Folder (SAF)", "@storageModeSaf": { "description": "Storage mode option - Storage Access Framework" }, - "storageModeSafSubtitle": "Pick any folder, including SD card", + "storageModeSafSubtitle": "Pilih folder apapun, termasuk kartu SD", "@storageModeSafSubtitle": { "description": "Subtitle for SAF storage mode" }, - "downloadFolderAccessLostTitle": "Download folder access lost", + "downloadFolderAccessLostTitle": "Akses folder download hilang", "@downloadFolderAccessLostTitle": { "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" }, - "downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder", + "downloadFolderAccessLostSubtitle": "Download akan gagal hingga Anda memilih folder baru", "@downloadFolderAccessLostSubtitle": { "description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid" }, - "downloadFolderReselect": "Re-select folder", + "downloadFolderReselect": "Pilih Folder Baru", "@downloadFolderReselect": { "description": "Button that reopens the folder picker to restore download folder access" }, - "downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.", + "downloadErrorSafPermissionLost": "Izin SAF tidak valid atau dicabut. Mohon pilih folder download baru di Setelan.", "@downloadErrorSafPermissionLost": { "description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid" }, - "downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.", + "downloadErrorFolderAccessLost": "Akses folder download hilang, mohon pilih folder download baru di Setelan.", "@downloadErrorFolderAccessLost": { "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, - "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", + "downloadFilenameDescription": "Gunakan {artist}, {title}, {album}, {track}, {year}, {date}, {disc} untuk sementara.", "@downloadFilenameDescription": { "description": "Description shown in filename format editor" }, - "downloadFilenameInsertTag": "Tap to insert tag:", + "downloadFilenameInsertTag": "Ketuk untuk memasukkan tag:", "@downloadFilenameInsertTag": { "description": "Label above filename tag chips" }, - "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", + "downloadSeparateSinglesEnabled": "Single dan EP disimpan di folder terpisah", "@downloadSeparateSinglesEnabled": { "description": "Subtitle when separate singles folder is on" }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", + "downloadSeparateSinglesDisabled": "Single dan EP disimpan di folder yang sama", "@downloadSeparateSinglesDisabled": { "description": "Subtitle when separate singles folder is off" }, - "downloadArtistNameFilters": "Artist Name Filters", + "downloadArtistNameFilters": "Filter Nama Artis", "@downloadArtistNameFilters": { "description": "Setting title for artist folder filter options" }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", + "downloadCreatePlaylistSourceFolder": "Folder Sumber Playlist", "@downloadCreatePlaylistSourceFolder": { "description": "Setting to create a subfolder per playlist source" }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", + "downloadCreatePlaylistSourceFolderEnabled": "Subfolder dibuat untuk setiap playlist", "@downloadCreatePlaylistSourceFolderEnabled": { "description": "Subtitle when playlist folder is enabled" }, - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", + "downloadCreatePlaylistSourceFolderDisabled": "Semua lagu disimpan ke folder download", "@downloadCreatePlaylistSourceFolderDisabled": { "description": "Subtitle when playlist folder is disabled" }, - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", + "downloadCreatePlaylistSourceFolderRedundant": "Dipegang oleh setelan pengatur folder", "@downloadCreatePlaylistSourceFolderRedundant": { "description": "Subtitle when folder organization is already set to playlist" }, - "downloadSongLinkRegion": "SongLink Region", + "downloadSongLinkRegion": "Wilayah SongLink", "@downloadSongLinkRegion": { "description": "Setting for SongLink region used during fallback resolution" }, - "downloadNetworkCompatibilityMode": "Network Compatibility Mode", + "downloadNetworkCompatibilityMode": "Mode Kompatibilitas Koneksi", "@downloadNetworkCompatibilityMode": { "description": "Setting for legacy TLS/network handling" }, - "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "downloadNetworkCompatibilityModeEnabled": "Mengizinkan endpoint HTTP lama; verifikasi TLS tetap hidup", "@downloadNetworkCompatibilityModeEnabled": { "description": "Subtitle when network compatibility mode is on" }, - "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", + "downloadNetworkCompatibilityModeDisabled": "Menggunakan setelan koneksi standar", "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, - "downloadAllowLocalNetwork": "Allow Local Network Access", + "downloadAllowLocalNetwork": "Izinkan Akses Koneksi Lokal", "@downloadAllowLocalNetwork": { "description": "Setting title for allowing requests to private/local network targets" }, - "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", + "downloadAllowLocalNetworkEnabled": "Permintaan ke alamat lokal/pribadi diizinkan (untuk proxy lokal atau DNS kustom)", "@downloadAllowLocalNetworkEnabled": { "description": "Subtitle when allow local network access is on" }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "downloadAllowLocalNetworkDisabled": "Alamat lokal/pribadi diblokir untuk keamanan", "@downloadAllowLocalNetworkDisabled": { "description": "Subtitle when allow local network access is off" }, - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "downloadSelectServiceToEnable": "Pilih provider dengan opsi kualitas untuk menghidupkan opsi ini", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" }, - "downloadEmbedLyricsDisabled": "Enable metadata embedding first", + "downloadEmbedLyricsDisabled": "Hidupkan penyematan metadata dulu", "@downloadEmbedLyricsDisabled": { "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "downloadNeteaseIncludeTranslation": "Netease: Include Translation", + "downloadNeteaseIncludeTranslation": "NetEase: Termasuk Terjemahan", "@downloadNeteaseIncludeTranslation": { "description": "Setting to include translated lyrics from Netease" }, - "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", + "downloadNeteaseIncludeTranslationEnabled": "Lirik terjemahan tionghoa dimasukkan", "@downloadNeteaseIncludeTranslationEnabled": { "description": "Subtitle when Netease translation is on" }, - "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", + "downloadNeteaseIncludeTranslationDisabled": "Lirik asli saja", "@downloadNeteaseIncludeTranslationDisabled": { "description": "Subtitle when Netease translation is off" }, - "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", + "downloadNeteaseIncludeRomanization": "NetEase: Termasuk Romanisasi", "@downloadNeteaseIncludeRomanization": { "description": "Setting to include romanized lyrics from Netease" }, - "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", + "downloadNeteaseIncludeRomanizationEnabled": "Lirik romanisasi dimasukkan", "@downloadNeteaseIncludeRomanizationEnabled": { "description": "Subtitle when Netease romanization is on" }, - "downloadNeteaseIncludeRomanizationDisabled": "No romanization", + "downloadNeteaseIncludeRomanizationDisabled": "Tidak ada romanisasi", "@downloadNeteaseIncludeRomanizationDisabled": { "description": "Subtitle when Netease romanization is off" }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", + "downloadAppleQqMultiPerson": "Apple/QQ: Lirik Per-Orang", "@downloadAppleQqMultiPerson": { "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, - "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", + "downloadAppleQqMultiPersonEnabled": "Label penyanyi untuk lagu duet dan grup dimasukkan", "@downloadAppleQqMultiPersonEnabled": { "description": "Subtitle when multi-person lyrics is on" }, - "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", + "downloadAppleQqMultiPersonDisabled": "Lirik standar tanpa label penyanyi", "@downloadAppleQqMultiPersonDisabled": { "description": "Subtitle when multi-person lyrics is off" }, @@ -4365,67 +4365,67 @@ "@downloadAppleElrcWordSync": { "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "downloadAppleElrcWordSyncEnabled": "Timestamp per kata mentah dimasukkan", "@downloadAppleElrcWordSyncEnabled": { "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "downloadAppleElrcWordSyncDisabled": "Lirik per kata Apple Music yang lebih aman", "@downloadAppleElrcWordSyncDisabled": { "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "downloadMusixmatchLanguage": "Musixmatch Language", + "downloadMusixmatchLanguage": "Bahasa Musixmatch", "@downloadMusixmatchLanguage": { "description": "Setting for Musixmatch lyrics translation language" }, - "downloadMusixmatchLanguageAuto": "Auto (original language)", + "downloadMusixmatchLanguageAuto": "Oto (bahasa aasli)", "@downloadMusixmatchLanguageAuto": { "description": "Subtitle when no language is set" }, - "downloadFilterContributing": "Filter Contributing Artists", + "downloadFilterContributing": "Filter Artis Kontributor", "@downloadFilterContributing": { "description": "Setting to strip contributing artists from Album Artist folder name" }, - "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", + "downloadFilterContributingEnabled": "Artis kontributor dihapus dari nama folder Artis Album", "@downloadFilterContributingEnabled": { "description": "Subtitle when contributing artist filter is on" }, - "downloadFilterContributingDisabled": "Full Album Artist string used", + "downloadFilterContributingDisabled": "Menggunakan nama penuh Artis Album", "@downloadFilterContributingDisabled": { "description": "Subtitle when contributing artist filter is off" }, - "downloadProvidersNoneEnabled": "No providers enabled", + "downloadProvidersNoneEnabled": "Tidak ada provider dihidupkan", "@downloadProvidersNoneEnabled": { "description": "Shown when no lyrics providers are active" }, - "downloadMusixmatchLanguageCode": "Language code", + "downloadMusixmatchLanguageCode": "Kode bahasa", "@downloadMusixmatchLanguageCode": { "description": "Label for Musixmatch language input field" }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "downloadMusixmatchLanguageHint": "cont. en, de, ja", "@downloadMusixmatchLanguageHint": { "description": "Placeholder for Musixmatch language input" }, - "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", + "downloadMusixmatchLanguageDesc": "Masukkan kode bahasa BCP-47 (cont. en, de, ja) untuk meminta lirik terjemahan dari Musixmatch.", "@downloadMusixmatchLanguageDesc": { "description": "Description in Musixmatch language picker" }, - "downloadMusixmatchAuto": "Auto", + "downloadMusixmatchAuto": "Oto", "@downloadMusixmatchAuto": { "description": "Button to clear Musixmatch language (use auto)" }, - "downloadNetworkAnySubtitle": "Use WiFi or mobile data", + "downloadNetworkAnySubtitle": "Gunakan WiFi atau data seluler", "@downloadNetworkAnySubtitle": { "description": "Subtitle for any-network option in picker" }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "downloadNetworkWifiOnlySubtitle": "Download dijeda saat menggunakan data seluler", "@downloadNetworkWifiOnlySubtitle": { "description": "Subtitle for WiFi-only option in picker" }, - "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", + "downloadSongLinkRegionDesc": "Wilayah digunakan untuk resolve link lagu lewat SongLink. Pilih wilayah layanan streaming yang sama dengan wilayah Anda.", "@downloadSongLinkRegionDesc": { "description": "Description in SongLink region picker" }, - "snackbarUnsupportedAudioFormat": "Unsupported audio format", + "snackbarUnsupportedAudioFormat": "Format audio tidak didukung", "@snackbarUnsupportedAudioFormat": { "description": "Snackbar when the audio format is not supported for the requested operation" }, @@ -4433,7 +4433,7 @@ "@cacheRefresh": { "description": "Tooltip for refresh button on cache management page" }, - "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", + "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{lagu} other{lagu}} dari {playlistCount} {playlistCount, plural, =1{playlist} other{playlist}}?", "@dialogDownloadPlaylistsMessage": { "description": "Dialog message for bulk playlist download confirmation", "placeholders": { @@ -4445,7 +4445,7 @@ } } }, - "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", + "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlist}}", "@bulkDownloadPlaylistsButton": { "description": "Button label for bulk downloading selected playlists", "placeholders": { @@ -4454,15 +4454,15 @@ } } }, - "bulkDownloadSelectPlaylists": "Select playlists to download", + "bulkDownloadSelectPlaylists": "Pilih playlist untuk didownload", "@bulkDownloadSelectPlaylists": { "description": "Button label when no playlists are selected for download" }, - "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", + "snackbarSelectedPlaylistsEmpty": "Playlist terpilih tidak memiliki lagu", "@snackbarSelectedPlaylistsEmpty": { "description": "Snackbar when selected playlists contain no tracks" }, - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlist}}", "@playlistsCount": { "description": "Playlist count display", "placeholders": { @@ -4471,27 +4471,27 @@ } } }, - "editMetadataAutoFill": "Auto-fill from online", + "editMetadataAutoFill": "Isi otomatis dari internet", "@editMetadataAutoFill": { "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", + "editMetadataAutoFillDesc": "Pilih ekstensi metadata, pilih tag, lalu tinjau data baru sebelum menerapkan", "@editMetadataAutoFillDesc": { "description": "Description for the auto-fill section" }, - "editMetadataAutoFillSource": "Metadata source", + "editMetadataAutoFillSource": "Sumber metadata", "@editMetadataAutoFillSource": { "description": "Label for the metadata extension selector in online auto-fill" }, - "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", + "editMetadataAutoFillSourceAutomatic": "Otomatis (prioritas provider)", "@editMetadataAutoFillSourceAutomatic": { "description": "Automatic source option that follows configured metadata provider priority" }, - "editMetadataAutoFillFind": "Find metadata", + "editMetadataAutoFillFind": "Cari metadata", "@editMetadataAutoFillFind": { "description": "Button label for finding an online metadata candidate" }, - "editMetadataAutoFillPreview": "Data from {source}", + "editMetadataAutoFillPreview": "Data dari {source}", "@editMetadataAutoFillPreview": { "description": "Title for the online metadata preview", "placeholders": { @@ -4500,7 +4500,7 @@ } } }, - "editMetadataAutoFillCoverAvailable": "Cover artwork available", + "editMetadataAutoFillCoverAvailable": "Cover artwork tersedia", "@editMetadataAutoFillCoverAvailable": { "description": "Preview value when the selected metadata source provides cover artwork" }, From 951ae44dc0c02983e8ebfe0fd437bb7b7e07c541 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 14 Sep 2026 05:34:25 +0700 Subject: [PATCH 56/59] New translations app_en.arb (Italian) [ci skip] --- lib/l10n/arb/app_it.arb | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/lib/l10n/arb/app_it.arb b/lib/l10n/arb/app_it.arb index fc371d718..e88ace12a 100644 --- a/lib/l10n/arb/app_it.arb +++ b/lib/l10n/arb/app_it.arb @@ -520,7 +520,7 @@ "@trackMetadataDelete": { "description": "Action button - delete track" }, - "setupGrantPermission": "Grant Permission", + "setupGrantPermission": "Concedi autorizzazione", "@setupGrantPermission": { "description": "Button to request permission" }, @@ -607,7 +607,7 @@ "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "setupDownloadInFlac": "Scarica musica in qualità lossless e Hi-Res", "@setupDownloadInFlac": { "description": "App tagline in setup" }, @@ -855,7 +855,7 @@ "@duplicatesKeepBest": { "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "duplicatesKeepBestAll": "Keep best for all", + "duplicatesKeepBestAll": "Mantieni la versione migliore", "@duplicatesKeepBestAll": { "description": "Button that keeps the highest-quality copy in every duplicate group and deletes the rest" }, @@ -1184,7 +1184,7 @@ "@folderOrganizationByPlaylist": { "description": "Folder option - playlist folders" }, - "folderOrganizationByPlaylistSubtitle": "Separate folder for each playlist", + "folderOrganizationByPlaylistSubtitle": "Cartella separata per ogni playlist", "@folderOrganizationByPlaylistSubtitle": { "description": "Subtitle for playlist folder option" }, @@ -1196,7 +1196,7 @@ "@folderOrganizationByAlbum": { "description": "Folder option - album folders" }, - "folderOrganizationByArtistAlbum": "Artist/Album", + "folderOrganizationByArtistAlbum": "Artista/Album", "@folderOrganizationByArtistAlbum": { "description": "Folder option - nested folders" }, @@ -1208,11 +1208,11 @@ "@folderOrganizationNoneSubtitle": { "description": "Subtitle for no organization option" }, - "folderOrganizationByArtistSubtitle": "Separate folder for each artist", + "folderOrganizationByArtistSubtitle": "Cartella separata per ogni artista", "@folderOrganizationByArtistSubtitle": { "description": "Subtitle for artist folder option" }, - "folderOrganizationByAlbumSubtitle": "Separate folder for each album", + "folderOrganizationByAlbumSubtitle": "Cartella separata per ogni album", "@folderOrganizationByAlbumSubtitle": { "description": "Subtitle for album folder option" }, @@ -1220,7 +1220,7 @@ "@folderOrganizationByArtistAlbumSubtitle": { "description": "Subtitle for nested folder option" }, - "updateAvailable": "Update Available", + "updateAvailable": "Aggiornamento disponibile", "@updateAvailable": { "description": "Update dialog title" }, @@ -1273,7 +1273,7 @@ "@updateWhatsNew": { "description": "Changelog section title" }, - "updateDownloadInstall": "Download & Install", + "updateDownloadInstall": "Scarica e installa", "@updateDownloadInstall": { "description": "Update button - download and install" }, @@ -1329,27 +1329,27 @@ "@logSearchHint": { "description": "Log search placeholder" }, - "logFilterLevel": "Level", + "logFilterLevel": "Livello", "@logFilterLevel": { "description": "Filter by log level" }, - "logFilterSection": "Filter", + "logFilterSection": "Filtro", "@logFilterSection": { "description": "Filter section title" }, - "logShareLogs": "Share logs", + "logShareLogs": "Condividi i log", "@logShareLogs": { "description": "Share button tooltip" }, - "logClearLogs": "Clear logs", + "logClearLogs": "Cancella i log", "@logClearLogs": { "description": "Clear button tooltip" }, - "logClearLogsTitle": "Clear Logs", + "logClearLogsTitle": "Cancella i log", "@logClearLogsTitle": { "description": "Clear logs dialog title" }, - "logClearLogsMessage": "Are you sure you want to clear all logs?", + "logClearLogsMessage": "Sei sicuro di voler cancellare tutti i log?", "@logClearLogsMessage": { "description": "Clear logs confirmation message" }, @@ -1589,7 +1589,7 @@ "@trackDuration": { "description": "Metadata label - track length" }, - "trackAudioQuality": "Audio quality", + "trackAudioQuality": "Qualità audio", "@trackAudioQuality": { "description": "Metadata label - audio quality" }, From 121c6045c5dd81d8242974b7db523fda6e02172c Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 15 Sep 2026 10:10:56 +0700 Subject: [PATCH 57/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 92 ++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 7889ffc2b..0bd70ea36 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -4504,11 +4504,11 @@ "@editMetadataAutoFillCoverAvailable": { "description": "Preview value when the selected metadata source provides cover artwork" }, - "editMetadataAutoFillApply": "Apply selected data", + "editMetadataAutoFillApply": "Terapkan data yang dipilih", "@editMetadataAutoFillApply": { "description": "Button label for applying the previewed metadata" }, - "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", + "editMetadataAutoFillDoneFromSource": "Berhasil mengisi {count} {count, plural, =1{kolom} other{kolom}} dari {source}", "@editMetadataAutoFillDoneFromSource": { "description": "Snackbar confirming fields applied from a selected metadata source", "placeholders": { @@ -4520,19 +4520,19 @@ } } }, - "editMetadataAutoFillFetch": "Fetch & Fill", + "editMetadataAutoFillFetch": "Cari & Isi", "@editMetadataAutoFillFetch": { "description": "Button label to fetch online metadata and fill selected fields" }, - "editMetadataAutoFillSearching": "Searching online...", + "editMetadataAutoFillSearching": "Mencari online...", "@editMetadataAutoFillSearching": { "description": "Snackbar shown while searching for online metadata" }, - "editMetadataAutoFillNoResults": "No matching metadata found online", + "editMetadataAutoFillNoResults": "Metadata yang sesuai tidak ditemukan di internet", "@editMetadataAutoFillNoResults": { "description": "Snackbar when online metadata search returns no results" }, - "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", + "editMetadataAutoFillDone": "Berhasil mengisi {count} {count, plural, =1{kolom} other{kolom}} dari metadata online", "@editMetadataAutoFillDone": { "description": "Snackbar confirming how many fields were auto-filled", "placeholders": { @@ -4541,15 +4541,15 @@ } } }, - "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", + "editMetadataAutoFillNoneSelected": "Pilih minimal satu kolom untuk diisi otomatis", "@editMetadataAutoFillNoneSelected": { "description": "Snackbar when user taps Fetch without selecting any fields" }, - "editMetadataFieldTitle": "Title", + "editMetadataFieldTitle": "Judul", "@editMetadataFieldTitle": { "description": "Chip label for title field in auto-fill selector" }, - "editMetadataFieldArtist": "Artist", + "editMetadataFieldArtist": "Artis", "@editMetadataFieldArtist": { "description": "Chip label for artist field in auto-fill selector" }, @@ -4557,19 +4557,19 @@ "@editMetadataFieldAlbum": { "description": "Chip label for album field in auto-fill selector" }, - "editMetadataFieldAlbumArtist": "Album Artist", + "editMetadataFieldAlbumArtist": "Album Artis", "@editMetadataFieldAlbumArtist": { "description": "Chip label for album artist field in auto-fill selector" }, - "editMetadataFieldDate": "Date", + "editMetadataFieldDate": "Tanggal", "@editMetadataFieldDate": { "description": "Chip label for date field in auto-fill selector" }, - "editMetadataFieldTrackNum": "Track #", + "editMetadataFieldTrackNum": "Trek #", "@editMetadataFieldTrackNum": { "description": "Chip label for track number field in auto-fill selector" }, - "editMetadataFieldDiscNum": "Disc #", + "editMetadataFieldDiscNum": "Disk #", "@editMetadataFieldDiscNum": { "description": "Chip label for disc number field in auto-fill selector" }, @@ -4585,23 +4585,23 @@ "@editMetadataFieldLabel": { "description": "Chip label for label field in auto-fill selector" }, - "editMetadataFieldCopyright": "Copyright", + "editMetadataFieldCopyright": "Hak Cipta", "@editMetadataFieldCopyright": { "description": "Chip label for copyright field in auto-fill selector" }, - "editMetadataFieldCover": "Cover Art", + "editMetadataFieldCover": "Sampul Album", "@editMetadataFieldCover": { "description": "Chip label for cover art field in auto-fill selector" }, - "editMetadataSelectAll": "All", + "editMetadataSelectAll": "Semua", "@editMetadataSelectAll": { "description": "Button to select all fields for auto-fill" }, - "editMetadataSelectEmpty": "Empty only", + "editMetadataSelectEmpty": "Hanya kolom kosong", "@editMetadataSelectEmpty": { "description": "Button to select only fields that are currently empty" }, - "queueDownloadingCount": "Downloading ({count})", + "queueDownloadingCount": "Mengunduh ({count})", "@queueDownloadingCount": { "description": "Header for active downloads section with count", "placeholders": { @@ -4610,11 +4610,11 @@ } } }, - "queueFilteringIndicator": "Filtering...", + "queueFilteringIndicator": "Menyaring...", "@queueFilteringIndicator": { "description": "Shown while filter results are being computed" }, - "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "queueTrackCount": "{count, plural, =1{1 lagu} other{{count} lagu}}", "@queueTrackCount": { "description": "Track count label with plural support", "placeholders": { @@ -4623,7 +4623,7 @@ } } }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "queueAlbumCount": "{count, plural, =1{1 album} other{{count} album}}", "@queueAlbumCount": { "description": "Album count label with plural support", "placeholders": { @@ -4632,23 +4632,23 @@ } } }, - "queueEmptyAlbums": "No album downloads", + "queueEmptyAlbums": "Belum ada unduhan album", "@queueEmptyAlbums": { "description": "Empty state title when no album downloads exist" }, - "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", + "queueEmptyAlbumsSubtitle": "Unduh beberapa trek dari sebuah album untuk melihatnya di sini", "@queueEmptyAlbumsSubtitle": { "description": "Empty state subtitle for album downloads" }, - "queueEmptySingles": "No single downloads", + "queueEmptySingles": "Tidak ada unduhan single", "@queueEmptySingles": { "description": "Empty state title when no single track downloads exist" }, - "queueEmptySinglesSubtitle": "Single track downloads will appear here", + "queueEmptySinglesSubtitle": "Unduhan trek single akan muncul di sini", "@queueEmptySinglesSubtitle": { "description": "Empty state subtitle for single track downloads" }, - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "queuePlaylistCount": "{count, plural, =1{1 daftar putar} other{{count} daftar putar}}", "@queuePlaylistCount": { "description": "Playlist count label with plural support", "placeholders": { @@ -4657,47 +4657,47 @@ } } }, - "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", + "queueEmptyPlaylistsSubtitle": "Buat daftar putar untuk mengatur trek Anda", "@queueEmptyPlaylistsSubtitle": { "description": "Empty state subtitle for the playlists library view" }, - "libraryDefaultView": "Default view", + "libraryDefaultView": "Tampilan bawaan", "@libraryDefaultView": { "description": "Setting title - which library view opens when switching to the Library tab" }, - "libraryDefaultViewLastUsed": "Last used", + "libraryDefaultViewLastUsed": "Terakhir digunakan", "@libraryDefaultViewLastUsed": { "description": "Default view option - keep the last used library view" }, - "queueEmptyHistory": "No download history", + "queueEmptyHistory": "Tidak ada riwayat unduhan", "@queueEmptyHistory": { "description": "Empty state title when download history is empty" }, - "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", + "queueEmptyHistorySubtitle": "Trek yang diunduh akan muncul di sini", "@queueEmptyHistorySubtitle": { "description": "Empty state subtitle for download history" }, - "selectionAllPlaylistsSelected": "All playlists selected", + "selectionAllPlaylistsSelected": "Semua daftar putar dipilih", "@selectionAllPlaylistsSelected": { "description": "Shown when all playlists are selected in selection mode" }, - "selectionTapPlaylistsToSelect": "Tap playlists to select", + "selectionTapPlaylistsToSelect": "Ketuk daftar putar untuk memilih", "@selectionTapPlaylistsToSelect": { "description": "Hint shown in playlist selection mode" }, - "selectionSelectPlaylistsToDelete": "Select playlists to delete", + "selectionSelectPlaylistsToDelete": "Pilih daftar putar untuk dihapus", "@selectionSelectPlaylistsToDelete": { "description": "Hint shown when no playlists are selected for deletion" }, - "audioAnalysisTitle": "Audio Quality Analysis", + "audioAnalysisTitle": "Analisis Kualitas Audio", "@audioAnalysisTitle": { "description": "Title for audio analysis section" }, - "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", + "audioAnalysisDescription": "Verifikasi kualitas lossless dengan analisis spektrum", "@audioAnalysisDescription": { "description": "Description for audio analysis tap-to-analyze prompt" }, - "audioAnalysisAnalyzing": "Analyzing audio...", + "audioAnalysisAnalyzing": "Menganalisis audio...", "@audioAnalysisAnalyzing": { "description": "Loading text while analyzing audio" }, @@ -4705,27 +4705,27 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, - "audioAnalysisCodec": "Codec", + "audioAnalysisCodec": "Kodek", "@audioAnalysisCodec": { "description": "Audio codec metric label" }, - "audioAnalysisContainer": "Container", + "audioAnalysisContainer": "Wadah", "@audioAnalysisContainer": { "description": "Audio container metric label" }, - "audioAnalysisDecodedFormat": "Decoded Format", + "audioAnalysisDecodedFormat": "Format Dekode", "@audioAnalysisDecodedFormat": { "description": "Decoded sample format metric label" }, - "audioAnalysisBitDepth": "Bit Depth", + "audioAnalysisBitDepth": "Kedalaman Bit", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" }, - "audioAnalysisChannels": "Channels", + "audioAnalysisChannels": "Saluran", "@audioAnalysisChannels": { "description": "Channels metric label" }, - "audioAnalysisDuration": "Duration", + "audioAnalysisDuration": "Durasi", "@audioAnalysisDuration": { "description": "Duration metric label" }, @@ -4733,15 +4733,15 @@ "@audioAnalysisNyquist": { "description": "Nyquist frequency metric label" }, - "audioAnalysisFileSize": "Size", + "audioAnalysisFileSize": "Ukuran", "@audioAnalysisFileSize": { "description": "File size metric label" }, - "audioAnalysisDynamicRange": "Dynamic Range", + "audioAnalysisDynamicRange": "Rentang Dinamis", "@audioAnalysisDynamicRange": { "description": "Dynamic range metric label" }, - "audioAnalysisPeak": "Peak", + "audioAnalysisPeak": "Puncak", "@audioAnalysisPeak": { "description": "Peak amplitude metric label" }, From 3ad3374ec3d899420bea2e7be7029f7922c804b1 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 15 Sep 2026 15:38:15 +0700 Subject: [PATCH 58/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 448 ++++++++++++++++++++-------------------- 1 file changed, 224 insertions(+), 224 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 0bd70ea36..0d1aa2c91 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -4504,7 +4504,7 @@ "@editMetadataAutoFillCoverAvailable": { "description": "Preview value when the selected metadata source provides cover artwork" }, - "editMetadataAutoFillApply": "Terapkan data yang dipilih", + "editMetadataAutoFillApply": "Terapkan data terpilih", "@editMetadataAutoFillApply": { "description": "Button label for applying the previewed metadata" }, @@ -4520,15 +4520,15 @@ } } }, - "editMetadataAutoFillFetch": "Cari & Isi", + "editMetadataAutoFillFetch": "Gunakan metadata online", "@editMetadataAutoFillFetch": { "description": "Button label to fetch online metadata and fill selected fields" }, - "editMetadataAutoFillSearching": "Mencari online...", + "editMetadataAutoFillSearching": "Menelusuri internet...", "@editMetadataAutoFillSearching": { "description": "Snackbar shown while searching for online metadata" }, - "editMetadataAutoFillNoResults": "Metadata yang sesuai tidak ditemukan di internet", + "editMetadataAutoFillNoResults": "Tidak ada metadata yang cocok di internet", "@editMetadataAutoFillNoResults": { "description": "Snackbar when online metadata search returns no results" }, @@ -4541,7 +4541,7 @@ } } }, - "editMetadataAutoFillNoneSelected": "Pilih minimal satu kolom untuk diisi otomatis", + "editMetadataAutoFillNoneSelected": "Pilih setidaknya satu tag untuk diisi otomatis", "@editMetadataAutoFillNoneSelected": { "description": "Snackbar when user taps Fetch without selecting any fields" }, @@ -4557,7 +4557,7 @@ "@editMetadataFieldAlbum": { "description": "Chip label for album field in auto-fill selector" }, - "editMetadataFieldAlbumArtist": "Album Artis", + "editMetadataFieldAlbumArtist": "Artis Album", "@editMetadataFieldAlbumArtist": { "description": "Chip label for album artist field in auto-fill selector" }, @@ -4589,7 +4589,7 @@ "@editMetadataFieldCopyright": { "description": "Chip label for copyright field in auto-fill selector" }, - "editMetadataFieldCover": "Sampul Album", + "editMetadataFieldCover": "Cover Art", "@editMetadataFieldCover": { "description": "Chip label for cover art field in auto-fill selector" }, @@ -4597,11 +4597,11 @@ "@editMetadataSelectAll": { "description": "Button to select all fields for auto-fill" }, - "editMetadataSelectEmpty": "Hanya kolom kosong", + "editMetadataSelectEmpty": "Kosong saja", "@editMetadataSelectEmpty": { "description": "Button to select only fields that are currently empty" }, - "queueDownloadingCount": "Mengunduh ({count})", + "queueDownloadingCount": "Mendownload ({count})", "@queueDownloadingCount": { "description": "Header for active downloads section with count", "placeholders": { @@ -4632,23 +4632,23 @@ } } }, - "queueEmptyAlbums": "Belum ada unduhan album", + "queueEmptyAlbums": "Tidak ada album terdownload", "@queueEmptyAlbums": { "description": "Empty state title when no album downloads exist" }, - "queueEmptyAlbumsSubtitle": "Unduh beberapa trek dari sebuah album untuk melihatnya di sini", + "queueEmptyAlbumsSubtitle": "Download beberapa lagu dari sebuah album untuk melihatnya di sini", "@queueEmptyAlbumsSubtitle": { "description": "Empty state subtitle for album downloads" }, - "queueEmptySingles": "Tidak ada unduhan single", + "queueEmptySingles": "Tidak ada single terdownload", "@queueEmptySingles": { "description": "Empty state title when no single track downloads exist" }, - "queueEmptySinglesSubtitle": "Unduhan trek single akan muncul di sini", + "queueEmptySinglesSubtitle": "Lagu single terdownload akan muncul di sini", "@queueEmptySinglesSubtitle": { "description": "Empty state subtitle for single track downloads" }, - "queuePlaylistCount": "{count, plural, =1{1 daftar putar} other{{count} daftar putar}}", + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlist}}", "@queuePlaylistCount": { "description": "Playlist count label with plural support", "placeholders": { @@ -4657,11 +4657,11 @@ } } }, - "queueEmptyPlaylistsSubtitle": "Buat daftar putar untuk mengatur trek Anda", + "queueEmptyPlaylistsSubtitle": "Buat playlist untuk menata lagu Anda", "@queueEmptyPlaylistsSubtitle": { "description": "Empty state subtitle for the playlists library view" }, - "libraryDefaultView": "Tampilan bawaan", + "libraryDefaultView": "Tampilan default", "@libraryDefaultView": { "description": "Setting title - which library view opens when switching to the Library tab" }, @@ -4669,23 +4669,23 @@ "@libraryDefaultViewLastUsed": { "description": "Default view option - keep the last used library view" }, - "queueEmptyHistory": "Tidak ada riwayat unduhan", + "queueEmptyHistory": "Tidak ada histori download", "@queueEmptyHistory": { "description": "Empty state title when download history is empty" }, - "queueEmptyHistorySubtitle": "Trek yang diunduh akan muncul di sini", + "queueEmptyHistorySubtitle": "Lagu yang terdownload akan muncul di sini", "@queueEmptyHistorySubtitle": { "description": "Empty state subtitle for download history" }, - "selectionAllPlaylistsSelected": "Semua daftar putar dipilih", + "selectionAllPlaylistsSelected": "Semua playlist terpilih", "@selectionAllPlaylistsSelected": { "description": "Shown when all playlists are selected in selection mode" }, - "selectionTapPlaylistsToSelect": "Ketuk daftar putar untuk memilih", + "selectionTapPlaylistsToSelect": "Ketuk playlist untuk memilih", "@selectionTapPlaylistsToSelect": { "description": "Hint shown in playlist selection mode" }, - "selectionSelectPlaylistsToDelete": "Pilih daftar putar untuk dihapus", + "selectionSelectPlaylistsToDelete": "Pilih playlist untuk dihapus", "@selectionSelectPlaylistsToDelete": { "description": "Hint shown when no playlists are selected for deletion" }, @@ -4705,23 +4705,23 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, - "audioAnalysisCodec": "Kodek", + "audioAnalysisCodec": "Codec", "@audioAnalysisCodec": { "description": "Audio codec metric label" }, - "audioAnalysisContainer": "Wadah", + "audioAnalysisContainer": "Container", "@audioAnalysisContainer": { "description": "Audio container metric label" }, - "audioAnalysisDecodedFormat": "Format Dekode", + "audioAnalysisDecodedFormat": "Decoded Format", "@audioAnalysisDecodedFormat": { "description": "Decoded sample format metric label" }, - "audioAnalysisBitDepth": "Kedalaman Bit", + "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" }, - "audioAnalysisChannels": "Saluran", + "audioAnalysisChannels": "Channel", "@audioAnalysisChannels": { "description": "Channels metric label" }, @@ -4741,7 +4741,7 @@ "@audioAnalysisDynamicRange": { "description": "Dynamic range metric label" }, - "audioAnalysisPeak": "Puncak", + "audioAnalysisPeak": "Peak", "@audioAnalysisPeak": { "description": "Peak amplitude metric label" }, @@ -4761,59 +4761,59 @@ "@audioAnalysisClipping": { "description": "Clipping metric label" }, - "audioAnalysisNoClipping": "No clipping", + "audioAnalysisNoClipping": "Tak clipping", "@audioAnalysisNoClipping": { "description": "Displayed when no clipped samples were detected" }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "audioAnalysisSpectralCutoff": "Cutoff Spectral", "@audioAnalysisSpectralCutoff": { "description": "Estimated spectral cutoff metric label" }, - "audioAnalysisCutoffNotDetected": "Not detected", + "audioAnalysisCutoffNotDetected": "Tak terdeteksi", "@audioAnalysisCutoffNotDetected": { "description": "Displayed when no reliable broadband spectral cutoff can be detected" }, - "audioAnalysisChannelStats": "Per-channel Stats", + "audioAnalysisChannelStats": "Stat Per-channel", "@audioAnalysisChannelStats": { "description": "Per-channel audio analysis section label" }, - "audioAnalysisSamples": "Samples", + "audioAnalysisSamples": "Sampel", "@audioAnalysisSamples": { "description": "Total samples metric label" }, - "audioAnalysisRescan": "Re-analyze", + "audioAnalysisRescan": "Analisis Ulang", "@audioAnalysisRescan": { "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" }, - "audioAnalysisRescanning": "Re-analyzing audio...", + "audioAnalysisRescanning": "Menganalisis ulang audio...", "@audioAnalysisRescanning": { "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "extensionsHomeFeedProvider": "Home Feed Provider", + "extensionsHomeFeedProvider": "Provider Feed Beranda", "@extensionsHomeFeedProvider": { "description": "Extensions page - label for home feed provider selector" }, - "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", + "extensionsHomeFeedDescription": "Pilih ekstensi provider feed beranda di layar utama", "@extensionsHomeFeedDescription": { "description": "Extensions page - description for home feed provider picker" }, - "extensionsHomeFeedAuto": "Auto", + "extensionsHomeFeedAuto": "Oto", "@extensionsHomeFeedAuto": { "description": "Label for auto-selected search provider" }, - "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", + "extensionsHomeFeedAutoSubtitle": "Pilih otomatis yang terbaik", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, - "extensionsHomeFeedOff": "Off", + "extensionsHomeFeedOff": "Mati", "@extensionsHomeFeedOff": { "description": "Extensions page - home feed provider option: off" }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "extensionsHomeFeedOffSubtitle": "Jangan tampilkan feed beranda di layar utama", "@extensionsHomeFeedOffSubtitle": { "description": "Extensions page - subtitle for off home feed option" }, - "extensionsHomeFeedUse": "Use {extensionName} home feed", + "extensionsHomeFeedUse": "Pakai feed beranda {extensionName}", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", "placeholders": { @@ -4822,15 +4822,15 @@ } } }, - "extensionsNoHomeFeedExtensions": "No extensions with home feed", + "extensionsNoHomeFeedExtensions": "Tak ada ekstensi feed beranda", "@extensionsNoHomeFeedExtensions": { "description": "Extensions page - shown when no installed extension has home feed" }, - "cancelDownloadTitle": "Cancel download?", + "cancelDownloadTitle": "Batalkan download?", "@cancelDownloadTitle": { "description": "Dialog title when confirming cancellation of an active download" }, - "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", + "cancelDownloadContent": "Ini akan membatalkan download \"{trackName}\".", "@cancelDownloadContent": { "description": "Dialog body when confirming cancellation of an active download", "placeholders": { @@ -4839,27 +4839,27 @@ } } }, - "cancelDownloadKeep": "Keep", + "cancelDownloadKeep": "Urung", "@cancelDownloadKeep": { "description": "Dialog button - keep the active download (do not cancel)" }, - "queueCancelledTitle": "Download cancelled", + "queueCancelledTitle": "Download dibatalkan", "@queueCancelledTitle": { "description": "Dialog title when opening a cancelled queue item" }, - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "queueCancelledMessage": "Download sudah dibatalkan. Ulang atau hapus dari antrean.", "@queueCancelledMessage": { "description": "Dialog body when opening a cancelled queue item" }, - "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", + "metadataSaveFailedFfmpeg": "Gagal menyimpan metadata lewat FFmpeg", "@metadataSaveFailedFfmpeg": { "description": "Snackbar error when FFmpeg fails to write metadata" }, - "metadataSaveFailedStorage": "Failed to write metadata back to storage", + "metadataSaveFailedStorage": "Gagal mengedit metadata ke penyimpanan", "@metadataSaveFailedStorage": { "description": "Snackbar error when writing metadata file back to storage fails" }, - "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", + "snackbarFolderPickerFailed": "Gagal membuka pemilih folder: {error}", "@snackbarFolderPickerFailed": { "description": "Snackbar shown when folder picker fails to open", "placeholders": { @@ -4868,7 +4868,7 @@ } } }, - "notifDownloadingTrack": "Downloading {trackName}", + "notifDownloadingTrack": "Mendownload {trackName}", "@notifDownloadingTrack": { "description": "Notification title while downloading a track", "placeholders": { @@ -4877,7 +4877,7 @@ } } }, - "notifFinalizingTrack": "Finalizing {trackName}", + "notifFinalizingTrack": "Menyelesaikan {trackName}", "@notifFinalizingTrack": { "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { @@ -4886,11 +4886,11 @@ } } }, - "notifEmbeddingMetadata": "Embedding metadata...", + "notifEmbeddingMetadata": "Menyematkan metadata...", "@notifEmbeddingMetadata": { "description": "Notification body while embedding metadata into a downloaded track" }, - "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", + "notifAlreadyInLibraryCount": "Sudah ada di Koleksi ({completed}/{total})", "@notifAlreadyInLibraryCount": { "description": "Notification title when track is already in library, with count", "placeholders": { @@ -4902,11 +4902,11 @@ } } }, - "notifAlreadyInLibrary": "Already in Library", + "notifAlreadyInLibrary": "Sudah ada di Koleksi", "@notifAlreadyInLibrary": { "description": "Notification title when track is already in library" }, - "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", + "notifDownloadCompleteCount": "Download Berhasil ({completed}/{total})", "@notifDownloadCompleteCount": { "description": "Notification title when download is complete, with count", "placeholders": { @@ -4918,11 +4918,11 @@ } } }, - "notifDownloadComplete": "Download Complete", + "notifDownloadComplete": "Download Berhasil", "@notifDownloadComplete": { "description": "Notification title when a single download is complete" }, - "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", + "notifDownloadsFinished": "Download Selesai ({completed} selesai, {failed} gagal)", "@notifDownloadsFinished": { "description": "Notification title when queue finishes with some failures", "placeholders": { @@ -4934,19 +4934,19 @@ } } }, - "notifVerificationRequiredTitle": "Verification required", + "notifVerificationRequiredTitle": "Butuh verifikasi", "@notifVerificationRequiredTitle": { "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" }, - "notifVerificationRequiredBody": "Open the app to complete verification and resume downloads", + "notifVerificationRequiredBody": "Buka aplikasi untuk menyelesaikan verifikasi dan lanjut download", "@notifVerificationRequiredBody": { "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, - "notifAllDownloadsComplete": "All Downloads Complete", + "notifAllDownloadsComplete": "Semua Download Selesai", "@notifAllDownloadsComplete": { "description": "Notification title when all downloads finish successfully" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", + "notifTracksDownloadedSuccess": "{count, plural, =1{1 lagu berhasil terdownload} other{{count} lagu berhasil terdownload}}", "@notifTracksDownloadedSuccess": { "description": "Notification body for queue complete - how many tracks were downloaded", "placeholders": { @@ -4955,7 +4955,7 @@ } } }, - "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", + "notifDownloadsFinishedBody": "{completed, plural, =1{1 lagu terdownload} other{{completed} lagu terdownload}}, {failed, plural, =1{1 gagal} other{{failed} gagal}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -4967,11 +4967,11 @@ } } }, - "notifDownloadsCanceledTitle": "Downloads canceled", + "notifDownloadsCanceledTitle": "Download dibatalkan", "@notifDownloadsCanceledTitle": { "description": "Notification title when downloads are canceled by the user" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 download canceled by user} other{{count} downloads canceled by user}}", + "notifDownloadsCanceledBody": "{count, plural, =1{1 download dibatalkan manual} other{{count} download dibatalkan manual}}", "@notifDownloadsCanceledBody": { "description": "Notification body when downloads are canceled by the user", "placeholders": { @@ -4980,11 +4980,11 @@ } } }, - "notifScanningLibrary": "Scanning local library", + "notifScanningLibrary": "Memindai koleksi lokal", "@notifScanningLibrary": { "description": "Notification title while scanning local library" }, - "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} file • {percentage}%", "@notifLibraryScanProgressWithTotal": { "description": "Notification body for library scan progress when total is known", "placeholders": { @@ -4999,7 +4999,7 @@ } } }, - "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", + "notifLibraryScanProgressNoTotal": "{scanned} file terpindai • {percentage}%", "@notifLibraryScanProgressNoTotal": { "description": "Notification body for library scan progress when total is unknown", "placeholders": { @@ -5011,11 +5011,11 @@ } } }, - "notifLibraryScanComplete": "Library scan complete", + "notifLibraryScanComplete": "Pindai koleksi selesai", "@notifLibraryScanComplete": { "description": "Notification title when library scan finishes" }, - "notifLibraryScanCompleteBody": "{count} tracks indexed", + "notifLibraryScanCompleteBody": "{count} lagu terpindai", "@notifLibraryScanCompleteBody": { "description": "Notification body for library scan complete - number of indexed tracks", "placeholders": { @@ -5024,7 +5024,7 @@ } } }, - "notifLibraryScanExcluded": "{count} excluded", + "notifLibraryScanExcluded": "{count} dikecualikan", "@notifLibraryScanExcluded": { "description": "Library scan complete suffix - excluded track count", "placeholders": { @@ -5033,7 +5033,7 @@ } } }, - "notifLibraryScanErrors": "{count} errors", + "notifLibraryScanErrors": "{count} eror", "@notifLibraryScanErrors": { "description": "Library scan complete suffix - error count", "placeholders": { @@ -5042,19 +5042,19 @@ } } }, - "notifLibraryScanFailed": "Library scan failed", + "notifLibraryScanFailed": "Pindai koleksi gagal", "@notifLibraryScanFailed": { "description": "Notification title when library scan fails" }, - "notifLibraryScanCancelled": "Library scan cancelled", + "notifLibraryScanCancelled": "Pindai koleksi dibatalkan", "@notifLibraryScanCancelled": { "description": "Notification title when library scan is cancelled by the user" }, - "notifLibraryScanStopped": "Scan stopped before completion.", + "notifLibraryScanStopped": "Pindai dihentikan sebelum selesai.", "@notifLibraryScanStopped": { "description": "Notification body when library scan is cancelled" }, - "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", + "notifDownloadingUpdate": "Mendownload SpotiFLAC Mobile v{version}", "@notifDownloadingUpdate": { "description": "Notification title while downloading an app update", "placeholders": { @@ -5063,7 +5063,7 @@ } } }, - "notifUpdateProgress": "{received} / {total} MB • {percentage}%", + "notifUpdateProgress": "{received}/{total}MB • {percentage}%", "@notifUpdateProgress": { "description": "Notification body showing update download progress", "placeholders": { @@ -5078,11 +5078,11 @@ } } }, - "notifUpdateReady": "Update Ready", + "notifUpdateReady": "Update Siap", "@notifUpdateReady": { "description": "Notification title when app update download is complete" }, - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} terdownload. Ketuk untuk instal.", "@notifUpdateReadyBody": { "description": "Notification body when app update is ready to install", "placeholders": { @@ -5091,23 +5091,23 @@ } } }, - "notifUpdateFailed": "Update Failed", + "notifUpdateFailed": "Update Gagal", "@notifUpdateFailed": { "description": "Notification title when app update download fails" }, - "notifUpdateFailedBody": "Could not download update. Try again later.", + "notifUpdateFailedBody": "Tidak dapat mendownload update. Coba lagi nanti.", "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "searchTracks": "Tracks", + "searchTracks": "Lagu", "@searchTracks": { "description": "Search filter label - tracks" }, - "homeSearchHintDefault": "Paste supported URL or search...", + "homeSearchHintDefault": "Tempel URL yang didukung atau telusuri...", "@homeSearchHintDefault": { "description": "Default placeholder for the main search field on Home" }, - "homeSearchHintProvider": "Search with {providerName}...", + "homeSearchHintProvider": "Telusuri dengan {providerName}...", "@homeSearchHintProvider": { "description": "Placeholder for the main search field when a provider is selected", "placeholders": { @@ -5116,83 +5116,83 @@ } } }, - "homeImportCsvTooltip": "Import playlist (CSV, M3U)", + "homeImportCsvTooltip": "Impor playlist (CSV, M3U)", "@homeImportCsvTooltip": { "description": "Tooltip for importing a CSV or M3U playlist file into Home search" }, - "homeChangeSearchProviderTooltip": "Change search provider", + "homeChangeSearchProviderTooltip": "Ubah provider penelusuran", "@homeChangeSearchProviderTooltip": { "description": "Tooltip for the Home search provider picker" }, - "actionPaste": "Paste", + "actionPaste": "Tempel", "@actionPaste": { "description": "Generic action - paste from clipboard" }, - "tutorialSearchHint": "Paste or search...", + "tutorialSearchHint": "Tempel atau telusuri", "@tutorialSearchHint": { "description": "Placeholder shown in the tutorial search demo" }, - "tutorialDownloadCompletedSemantics": "Download completed", + "tutorialDownloadCompletedSemantics": "Download selesai", "@tutorialDownloadCompletedSemantics": { "description": "Accessibility label for completed download state in tutorial demo" }, - "tutorialDownloadInProgressSemantics": "Download in progress", + "tutorialDownloadInProgressSemantics": "Sedang download", "@tutorialDownloadInProgressSemantics": { "description": "Accessibility label for active download state in tutorial demo" }, - "tutorialStartDownloadSemantics": "Start download", + "tutorialStartDownloadSemantics": "Mulai download", "@tutorialStartDownloadSemantics": { "description": "Accessibility label for idle download button in tutorial demo" }, - "optionsEmbedMetadata": "Embed Metadata", + "optionsEmbedMetadata": "Metadata Tersemat", "@optionsEmbedMetadata": { "description": "Settings toggle title for writing metadata into downloaded files" }, - "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", + "optionsEmbedMetadataSubtitleOn": "Edit metadata, foto cover, dan lirik tersemat ke file", "@optionsEmbedMetadataSubtitleOn": { "description": "Subtitle when metadata embedding is enabled" }, - "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", + "optionsEmbedMetadataSubtitleOff": "Mati (lanjutan): lewati semua penyematan metadata", "@optionsEmbedMetadataSubtitleOff": { "description": "Subtitle when metadata embedding is disabled" }, - "trackCoverNoEmbeddedArt": "No embedded album art found", + "trackCoverNoEmbeddedArt": "Tidak ada foto cover tersemat", "@trackCoverNoEmbeddedArt": { "description": "Message shown when a track file has no embedded cover art" }, - "trackCoverReplace": "Replace Cover", + "trackCoverReplace": "Ubah Cover", "@trackCoverReplace": { "description": "Button label for replacing selected cover art" }, - "trackCoverPick": "Pick Cover", + "trackCoverPick": "Pilih Cover", "@trackCoverPick": { "description": "Button label for selecting cover art" }, - "trackCoverClearSelected": "Clear selected cover", + "trackCoverClearSelected": "Hapus cover terpilih", "@trackCoverClearSelected": { "description": "Tooltip for clearing the newly selected cover art" }, - "trackCoverCurrent": "Current cover", + "trackCoverCurrent": "Cover sekarang", "@trackCoverCurrent": { "description": "Label for the currently embedded cover preview" }, - "trackCoverSelected": "Selected cover", + "trackCoverSelected": "Cover terpilih", "@trackCoverSelected": { "description": "Label for the newly selected cover preview" }, - "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", + "trackCoverReplaceNotice": "Cover terpilih akan mengganti cover tersemat bila Anda mengetuk Simpan.", "@trackCoverReplaceNotice": { "description": "Notice shown when a new cover has been selected but not saved yet" }, - "trackCoverResolution": "Cover resolution", + "trackCoverResolution": "Resolusi cover", "@trackCoverResolution": { "description": "Label for selecting the embedded cover art resolution" }, - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "trackCoverResolutionHint": "Atur sudut terpanjang saat disimpan. Melebarkan tidak menambah detail foto.", "@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": "Tidak dapat mengatur ukuran cover. Harap gunakan ukuran atau foto lain.", "@trackCoverResizeFailed": { "description": "Error shown when resizing cover art before saving metadata fails" }, @@ -5200,51 +5200,51 @@ "@actionStop": { "description": "Generic action - stop" }, - "queueFinalizingDownload": "Finalizing download", + "queueFinalizingDownload": "Menyelesaikan download", "@queueFinalizingDownload": { "description": "Accessibility label for a queue item that is finalizing" }, - "queueDownloadNext": "Download next", + "queueDownloadNext": "Download selanjutnya", "@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": "Pindah ke atas", "@queueMoveUp": { "description": "Queue item menu action - move the queued item one position earlier" }, - "queueMoveDown": "Move down", + "queueMoveDown": "Pindah ke bawah", "@queueMoveDown": { "description": "Queue item menu action - move the queued item one position later" }, - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "editMetadataMusicBrainzButton": "Ambil dari MusicBrainz", "@editMetadataMusicBrainzButton": { "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" }, - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", + "editMetadataMusicBrainzFilled": "Terupdate dari MusicBrainz", "@editMetadataMusicBrainzFilled": { "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" }, - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", + "editMetadataMusicBrainzNothing": "Tidak ditemukan dari MusicBrainz", "@editMetadataMusicBrainzNothing": { "description": "Snackbar when the MusicBrainz lookup returns no data" }, - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", + "editMetadataMusicBrainzNeedsIsrc": "Butuh tag ISRC", "@editMetadataMusicBrainzNeedsIsrc": { "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" }, - "nowPlayingRepeatOff": "Repeat off", + "nowPlayingRepeatOff": "Ulangi mati", "@nowPlayingRepeatOff": { "description": "Repeat toggle tooltip when repeat is disabled" }, - "nowPlayingRepeatAll": "Repeat all", + "nowPlayingRepeatAll": "Ulangi semua", "@nowPlayingRepeatAll": { "description": "Repeat toggle tooltip when the whole queue repeats" }, - "nowPlayingRepeatOne": "Repeat one", + "nowPlayingRepeatOne": "Ulangi ini", "@nowPlayingRepeatOne": { "description": "Repeat toggle tooltip when the current track repeats" }, - "queueNetworkFailedOffline": "{count} downloads failed while offline", + "queueNetworkFailedOffline": "{count} download gagal karena offline", "@queueNetworkFailedOffline": { "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", "placeholders": { @@ -5253,27 +5253,27 @@ } } }, - "queueDownloadedFileMissing": "Downloaded file missing", + "queueDownloadedFileMissing": "File terdownload hilang", "@queueDownloadedFileMissing": { "description": "Accessibility label when a downloaded file is missing from disk" }, - "queueCheckingDownloadedFile": "Checking downloaded file...", + "queueCheckingDownloadedFile": "Memeriksa file terdownload...", "@queueCheckingDownloadedFile": { "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." }, - "queueDownloadCompleted": "Download completed", + "queueDownloadCompleted": "Download selesai", "@queueDownloadCompleted": { "description": "Accessibility label for completed download state in queue" }, - "queueRateLimitTitle": "Service rate limited", + "queueRateLimitTitle": "Layanan dibatasi", "@queueRateLimitTitle": { "description": "Title shown on a failed queue item when the download service rate limits requests" }, - "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", + "queueRateLimitMessage": "Lagu ini mungkin masih tersedia. Tunggu sebentar, kurangi download bersamaan, lalu coba lagi.", "@queueRateLimitMessage": { "description": "Explanation shown on a failed queue item when the download service rate limits requests" }, - "appearanceSelectAccentColor": "Select accent color {hex}", + "appearanceSelectAccentColor": "Pilih warna aksen {hex}", "@appearanceSelectAccentColor": { "description": "Accessibility label for picking an accent color", "placeholders": { @@ -5282,75 +5282,75 @@ } } }, - "logAutoScrollOn": "Auto-scroll ON", + "logAutoScrollOn": "Gulir oto HIDUP", "@logAutoScrollOn": { "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "logAutoScrollOff": "Auto-scroll OFF", + "logAutoScrollOff": "Gulir oto MATI", "@logAutoScrollOff": { "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "logCopyLogs": "Copy logs", + "logCopyLogs": "Salin log", "@logCopyLogs": { "description": "Tooltip for copying logs" }, - "logClearSearch": "Clear search", + "logClearSearch": "Hapus penelusuran", "@logClearSearch": { "description": "Tooltip for clearing the log search field" }, - "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", + "logIssueIspBlockingLabel": "TERDETEKSI PEMBLOKIRAN ISP", "@logIssueIspBlockingLabel": { "description": "Diagnostic badge label when ISP blocking is detected" }, - "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", + "logIssueIspBlockingDescription": "ISP Anda mungkin memblokir akses ke layanan download", "@logIssueIspBlockingDescription": { "description": "Diagnostic badge description for ISP blocking" }, - "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", + "logIssueIspBlockingSuggestion": "Coba gunakan VPN atau ubah DNS ke 1.1.1.1 atau 8.8.8.8", "@logIssueIspBlockingSuggestion": { "description": "Diagnostic badge suggestion for ISP blocking" }, - "logIssueRateLimitedLabel": "RATE LIMITED", + "logIssueRateLimitedLabel": "DIBATASI", "@logIssueRateLimitedLabel": { "description": "Diagnostic badge label when the service rate limits requests" }, - "logIssueRateLimitedDescription": "Too many requests to the service", + "logIssueRateLimitedDescription": "Terlalu banyak permintaan ke layanan", "@logIssueRateLimitedDescription": { "description": "Diagnostic badge description for rate limiting" }, - "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", + "logIssueRateLimitedSuggestion": "Tunggu sebentar sebelum mencoba lagi", "@logIssueRateLimitedSuggestion": { "description": "Diagnostic badge suggestion for rate limiting" }, - "logIssueNetworkErrorLabel": "NETWORK ERROR", + "logIssueNetworkErrorLabel": "KONEKSI EROR", "@logIssueNetworkErrorLabel": { "description": "Diagnostic badge label for generic network errors" }, - "logIssueNetworkErrorDescription": "Connection issues detected", + "logIssueNetworkErrorDescription": "Terdeteksi masalah koneksi", "@logIssueNetworkErrorDescription": { "description": "Diagnostic badge description for generic network errors" }, - "logIssueNetworkErrorSuggestion": "Check your internet connection", + "logIssueNetworkErrorSuggestion": "Periksa koneksi internet Anda", "@logIssueNetworkErrorSuggestion": { "description": "Diagnostic badge suggestion for generic network errors" }, - "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", + "logIssueTrackNotFoundLabel": "LAGU TIDAK DITEMUKAN", "@logIssueTrackNotFoundLabel": { "description": "Diagnostic badge label when a track is unavailable" }, - "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", + "logIssueTrackNotFoundDescription": "Beberapa lagu tidak dapat ditemukan di layanan download", "@logIssueTrackNotFoundDescription": { "description": "Diagnostic badge description when a track is unavailable" }, - "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", + "logIssueTrackNotFoundSuggestion": "Lagu mungkin tidak tersedia dalam kualitas loseless", "@logIssueTrackNotFoundSuggestion": { "description": "Diagnostic badge suggestion when a track is unavailable" }, - "clickableLookingUpArtist": "Looking up artist...", + "clickableLookingUpArtist": "Menelusuri artis...", "@clickableLookingUpArtist": { "description": "Snackbar shown while clickable artist metadata is being resolved" }, - "clickableInformationUnavailable": "{type} information not available", + "clickableInformationUnavailable": "{type} informasi tidak tersedia", "@clickableInformationUnavailable": { "description": "Snackbar shown when clickable metadata cannot open a destination", "placeholders": { @@ -5359,27 +5359,27 @@ } } }, - "extensionDetailsTags": "Tags", + "extensionDetailsTags": "Tag", "@extensionDetailsTags": { "description": "Section title for extension tags" }, - "extensionDetailsInformation": "Information", + "extensionDetailsInformation": "Informasi", "@extensionDetailsInformation": { "description": "Section title for extension metadata information" }, - "extensionUtilityFunctions": "Utility Functions", + "extensionUtilityFunctions": "Fungsi Utilitas", "@extensionUtilityFunctions": { "description": "Capability label for utility-only extensions" }, - "actionDismiss": "Dismiss", + "actionDismiss": "Abaikan", "@actionDismiss": { "description": "Generic action - dismiss" }, - "setupChangeFolderTooltip": "Change folder", + "setupChangeFolderTooltip": "Ubah folder", "@setupChangeFolderTooltip": { "description": "Tooltip for editing the selected download folder" }, - "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", + "a11yOpenTrackByArtist": "Buka lagu {trackName} oleh ", "@a11yOpenTrackByArtist": { "description": "Accessibility label for opening a track item", "placeholders": { @@ -5391,7 +5391,7 @@ } } }, - "a11yOpenItem": "Open {itemType} {name}", + "a11yOpenItem": "Buka {itemType} {name}", "@a11yOpenItem": { "description": "Accessibility label for opening a generic item", "placeholders": { @@ -5403,7 +5403,7 @@ } } }, - "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", + "a11yOpenItemCount": "Buka {title}, {count} {count, plural, =1{item} other{item}}", "@a11yOpenItemCount": { "description": "Accessibility label for opening a grouped item with count", "placeholders": { @@ -5415,7 +5415,7 @@ } } }, - "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", + "a11yOpenAlbumByArtistTrackCount": "Buka album {albumName} oleh {artistName}, {trackCount} lagu", "@a11yOpenAlbumByArtistTrackCount": { "description": "Accessibility label for opening an album item with track count", "placeholders": { @@ -5430,7 +5430,7 @@ } } }, - "a11yTrackByArtist": "{trackName} by {artistName}", + "a11yTrackByArtist": "{trackName} oleh {artistName}", "@a11yTrackByArtist": { "description": "Accessibility label for a queue or list track item", "placeholders": { @@ -5442,7 +5442,7 @@ } } }, - "a11ySelectAlbum": "Select album {albumName}", + "a11ySelectAlbum": "Pilih album {albumName}", "@a11ySelectAlbum": { "description": "Accessibility label for selecting an album", "placeholders": { @@ -5451,7 +5451,7 @@ } } }, - "a11yOpenAlbum": "Open album {albumName}", + "a11yOpenAlbum": "Buka album {albumName}", "@a11yOpenAlbum": { "description": "Accessibility label for opening an album", "placeholders": { @@ -5460,11 +5460,11 @@ } } }, - "settingsFiles": "Files & Folders", + "settingsFiles": "File & Folder", "@settingsFiles": { "description": "Settings menu item - file and folder settings" }, - "settingsFilesSubtitle": "Download location, filename, folder structure", + "settingsFilesSubtitle": "Folder download, nama file, struktur folder", "@settingsFilesSubtitle": { "description": "Subtitle for files & folders settings" }, @@ -5472,159 +5472,159 @@ "@settingsMetadata": { "description": "Settings menu item - metadata settings" }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "settingsMetadataSubtitle": "Foto cover, tag, ReplayGain, provider", "@settingsMetadataSubtitle": { "description": "Subtitle for metadata settings" }, - "settingsLyrics": "Lyrics", + "settingsLyrics": "Lirik", "@settingsLyrics": { "description": "Settings menu item - lyrics settings" }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "settingsLyricsSubtitle": "Tersemat, mode, provider, opsi bahasa", "@settingsLyricsSubtitle": { "description": "Subtitle for lyrics settings" }, - "settingsApp": "App", + "settingsApp": "Aplikasi", "@settingsApp": { "description": "Settings menu item - app settings" }, - "settingsAppSubtitle": "Updates, data, extension repo, debug", + "settingsAppSubtitle": "Update, data, repo ekstensi, debug", "@settingsAppSubtitle": { "description": "Subtitle for app settings" }, - "sectionMetadataProviders": "Providers", + "sectionMetadataProviders": "Provider", "@sectionMetadataProviders": { "description": "Settings section header for metadata providers" }, - "sectionDuplicates": "Duplicates", + "sectionDuplicates": "Duplikat", "@sectionDuplicates": { "description": "Settings section header for deduplication" }, - "sectionLyricsProviderOptions": "Provider Options", + "sectionLyricsProviderOptions": "Opsi Provider", "@sectionLyricsProviderOptions": { "description": "Settings section header for per-provider lyrics options" }, - "metadataProvidersTitle": "Metadata Provider Priority", + "metadataProvidersTitle": "Prioritas Provider Metadata", "@metadataProvidersTitle": { "description": "Settings item title for metadata provider order" }, - "metadataProvidersSubtitle": "Drag to set search and metadata source order", + "metadataProvidersSubtitle": "Geser untuk mengatur urutan sumber penelusuran dan metadata", "@metadataProvidersSubtitle": { "description": "Subtitle for metadata provider priority item" }, - "downloadDeduplication": "Skip Duplicate Downloads", + "downloadDeduplication": "Lewati Lagu Terdownload", "@downloadDeduplication": { "description": "Setting - skip tracks already in download history" }, - "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", + "downloadDeduplicationEnabled": "Lagu yang sudah ada akan dilewati", "@downloadDeduplicationEnabled": { "description": "Subtitle when deduplication is on" }, - "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", + "downloadDeduplicationWithQualityVariants": "File yang sudah ada pada kualitas terpilih akan dilewati", "@downloadDeduplicationWithQualityVariants": { "description": "Deduplication subtitle when separate quality versions are allowed" }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "downloadDeduplicationDisabled": "Lagu akan tetap didownload walau sudah ada di perangkat", "@downloadDeduplicationDisabled": { "description": "Subtitle when deduplication is off" }, - "downloadQualityVariants": "Allow different quality versions", + "downloadQualityVariants": "Izinkan kualitas berbeda", "@downloadQualityVariants": { "description": "Setting to retain multiple quality versions of the same track" }, - "downloadQualityVariantsDescription": "Keep every quality version; add its measured quality to the filename only when the name is already used", + "downloadQualityVariantsDescription": "Simpan versi setiap kualitas; tambahkan akhiran kualitas di nama file jika namanya sudah digunakan", "@downloadQualityVariantsDescription": { "description": "Description for retaining multiple quality versions" }, - "trackOptionDownloadQualityVariant": "Download another quality", + "trackOptionDownloadQualityVariant": "Download kualitas lain", "@trackOptionDownloadQualityVariant": { "description": "Track menu action to download another quality version" }, - "downloadFallbackExtensions": "Fallback Extensions", + "downloadFallbackExtensions": "Ekstensi Cadangan", "@downloadFallbackExtensions": { "description": "Settings item for configuring fallback extension providers" }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "downloadFallbackExtensionsSubtitle": "Pilih ekstensi yang digunakan sebagai cadangan", "@downloadFallbackExtensionsSubtitle": { "description": "Subtitle for fallback extensions item" }, - "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", + "editMetadataFieldDateHint": "HH-BB-TTTT atau TTTT", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" }, - "editMetadataFieldTrackTotal": "Track Total", + "editMetadataFieldTrackTotal": "Total Lagu", "@editMetadataFieldTrackTotal": { "description": "Label for total tracks field in the edit metadata sheet" }, - "editMetadataFieldDiscTotal": "Disc Total", + "editMetadataFieldDiscTotal": "Total Disk", "@editMetadataFieldDiscTotal": { "description": "Label for total discs field in the edit metadata sheet" }, - "editMetadataFieldComposer": "Composer", + "editMetadataFieldComposer": "Komposer", "@editMetadataFieldComposer": { "description": "Label for composer field in the edit metadata sheet" }, - "editMetadataFieldComment": "Comment", + "editMetadataFieldComment": "Komentar", "@editMetadataFieldComment": { "description": "Label for comment field in the edit metadata sheet" }, - "trackAlbumType": "Release Type", + "trackAlbumType": "Jenis Rilisan", "@trackAlbumType": { "description": "Label for an album or release type metadata value" }, - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "editMetadataFieldAlbumTypeHint": "Album, single, EP, kompilasi...", "@editMetadataFieldAlbumTypeHint": { "description": "Hint for the release type metadata field" }, - "editMetadataFieldExplicit": "Explicit", + "editMetadataFieldExplicit": "Eksplisit", "@editMetadataFieldExplicit": { "description": "Label for the explicit content metadata field" }, - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "editMetadataFieldExplicitHint": "Tandai lagu bila mengandung konten eksplisit", "@editMetadataFieldExplicitHint": { "description": "Description for the explicit content metadata switch" }, - "metadataExplicitValue": "Explicit", + "metadataExplicitValue": "Eksplisit", "@metadataExplicitValue": { "description": "Displayed value when a track is marked explicit" }, - "editMetadataFieldUpc": "UPC / Barcode", + "editMetadataFieldUpc": "UPC/Barcode", "@editMetadataFieldUpc": { "description": "Label for the release barcode metadata field" }, - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "editMetadataFieldUpcHint": "Numerik UPC, EAN, atau GTIN", "@editMetadataFieldUpcHint": { "description": "Hint for the release barcode metadata field" }, - "editMetadataAdvanced": "Advanced", + "editMetadataAdvanced": "Lanjutan", "@editMetadataAdvanced": { "description": "Expandable section label for advanced metadata fields" }, - "libraryFilterMetadataMissingTrackNumber": "Missing track number", + "libraryFilterMetadataMissingTrackNumber": "Nomor lagu hilang", "@libraryFilterMetadataMissingTrackNumber": { "description": "Filter option - items missing track number" }, - "libraryFilterMetadataMissingDiscNumber": "Missing disc number", + "libraryFilterMetadataMissingDiscNumber": "Nomor disk hilang", "@libraryFilterMetadataMissingDiscNumber": { "description": "Filter option - items missing disc number" }, - "libraryFilterMetadataMissingArtist": "Missing artist", + "libraryFilterMetadataMissingArtist": "Nama artis hilang", "@libraryFilterMetadataMissingArtist": { "description": "Filter option - items missing artist" }, - "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", + "libraryFilterMetadataIncorrectIsrcFormat": "Format ISRC salah", "@libraryFilterMetadataIncorrectIsrcFormat": { "description": "Filter option - items with an invalid ISRC format" }, - "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "libraryFilterMetadataMissingIsrc": "ISRC hilang", "@libraryFilterMetadataMissingIsrc": { "description": "Filter option - items without any ISRC tag" }, - "libraryFilterMetadataMissingLabel": "Missing label", + "libraryFilterMetadataMissingLabel": "Nama label hilang", "@libraryFilterMetadataMissingLabel": { "description": "Filter option - items missing record label" }, - "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", + "collectionDeletePlaylistsMessage": "Hapus {count} {count, plural, =1{playlist} other{playlist}}?", "@collectionDeletePlaylistsMessage": { "description": "Confirmation message for deleting selected playlists", "placeholders": { @@ -5633,7 +5633,7 @@ } } }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", + "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlist}} terhapus", "@collectionPlaylistsDeleted": { "description": "Snackbar after deleting selected playlists", "placeholders": { @@ -5642,7 +5642,7 @@ } } }, - "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", + "collectionAddedTracksToPlaylist": "Menambahkan {count} {count, plural, =1{lagu} other{lagu}} ke {playlistName}", "@collectionAddedTracksToPlaylist": { "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { @@ -5654,7 +5654,7 @@ } } }, - "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", + "collectionAddedTracksToPlaylistWithExisting": "Menambahkan {count} {count, plural, =1{lagu} other{lagu}} ke {playlistName} ({alreadyCount} sudah ada di playlist)", "@collectionAddedTracksToPlaylistWithExisting": { "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { @@ -5669,7 +5669,7 @@ } } }, - "itemCount": "{count} {count, plural, =1{item} other{items}}", + "itemCount": "{count} {count, plural, =1{item} other{item}}", "@itemCount": { "description": "Generic item count label", "placeholders": { @@ -5678,7 +5678,7 @@ } } }, - "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", + "trackReEnrichSuccessWithFailures": "Metadata berhasil diupdate ulang ({successCount}/{total}) - Gagal: {failedCount}", "@trackReEnrichSuccessWithFailures": { "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", "placeholders": { @@ -5693,7 +5693,7 @@ } } }, - "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "selectionDeleteTracksCount": "Hapus {count} {count, plural, =1{lagu} other{lagu}}", "@selectionDeleteTracksCount": { "description": "Button label for deleting selected tracks", "placeholders": { @@ -5702,7 +5702,7 @@ } } }, - "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", + "queueDownloadSpeedStatus": "Mendownload - {speed}MB/d", "@queueDownloadSpeedStatus": { "description": "Queue status while downloading with speed", "placeholders": { @@ -5711,27 +5711,27 @@ } } }, - "queueDownloadStarting": "Starting...", - "queueCheckingDownloadSession": "Checking download session...", - "queueResolvingDownloadMetadata": "Resolving track metadata...", - "queueResolvingDownloadStream": "Preparing audio stream...", - "queueWaitingForVerification": "Waiting for verification...", - "queueResumingAfterVerification": "Resuming after verification...", + "queueDownloadStarting": "Memulai...", + "queueCheckingDownloadSession": "Memeriksa sesi download...", + "queueResolvingDownloadMetadata": "Menelusuri metadata lagu...", + "queueResolvingDownloadStream": "Menyiapkan stream audio...", + "queueWaitingForVerification": "Menunggu veridikasi...", + "queueResumingAfterVerification": "Melanjutkan setelah verifikasi...", "@queueDownloadStarting": { "description": "Queue status before download progress is available" }, "@queueCheckingDownloadSession": { "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." }, - "a11ySelectTrack": "Select track", + "a11ySelectTrack": "Pilih lagu", "@a11ySelectTrack": { "description": "Accessibility label for selecting a track" }, - "a11yDeselectTrack": "Deselect track", + "a11yDeselectTrack": "Batal pilih lagu", "@a11yDeselectTrack": { "description": "Accessibility label for deselecting a track" }, - "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", + "a11yPlayTrackByArtist": "Putar {trackName} oleh {artistName}", "@a11yPlayTrackByArtist": { "description": "Accessibility label for playing a local library track", "placeholders": { @@ -5743,7 +5743,7 @@ } } }, - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", + "storeExtensionsCount": "{count} {count, plural, =1{ekstensi} other{ekstensi}}", "@storeExtensionsCount": { "description": "Store extension result count", "placeholders": { @@ -5752,7 +5752,7 @@ } } }, - "storeRequiresVersion": "Requires v{version}+", + "storeRequiresVersion": "Harus v{version}+", "@storeRequiresVersion": { "description": "Store compatibility badge for minimum app version", "placeholders": { @@ -5761,15 +5761,15 @@ } } }, - "actionGo": "Go", + "actionGo": "Mulai", "@actionGo": { "description": "Generic action button label" }, - "logIssueSummary": "Issue Summary", + "logIssueSummary": "Ringkasan Masalah", "@logIssueSummary": { "description": "Header for log issue analysis summary" }, - "logTotalErrors": "Total errors: {count}", + "logTotalErrors": "Total eror: {count}", "@logTotalErrors": { "description": "Total error count in log issue analysis", "placeholders": { @@ -5778,7 +5778,7 @@ } } }, - "logAffectedDomains": "Affected: {domains}", + "logAffectedDomains": "Memengaruhi: {domains}", "@logAffectedDomains": { "description": "Affected domains in log issue analysis", "placeholders": { @@ -5787,15 +5787,15 @@ } } }, - "libraryScanCancelled": "Scan cancelled", + "libraryScanCancelled": "Pindai dibatalkan", "@libraryScanCancelled": { "description": "Library scan status when a scan was cancelled" }, - "libraryScanCancelledSubtitle": "You can retry the scan when ready.", + "libraryScanCancelledSubtitle": "Anda dapat mencoba lagi saat siap.", "@libraryScanCancelledSubtitle": { "description": "Library scan status subtitle after cancellation" }, - "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", + "libraryDownloadsHistoryExcluded": "{count} dari histori Download (dikecualikan dari daftar)", "@libraryDownloadsHistoryExcluded": { "description": "Library count note for downloaded history items excluded from the local list", "placeholders": { @@ -5804,19 +5804,19 @@ } } }, - "downloadNativeWorker": "Native download worker", + "downloadNativeWorker": "Worker download native", "@downloadNativeWorker": { "description": "Setting title for Android native download worker" }, - "downloadNativeWorkerSubtitle": "Android background service for extension downloads", + "downloadNativeWorkerSubtitle": "Layanan latar belakang Android untuk download ekstensi", "@downloadNativeWorkerSubtitle": { "description": "Setting subtitle for Android native download worker" }, - "extensionServiceStatus": "Service Status", + "extensionServiceStatus": "Status Layanan", "@extensionServiceStatus": { "description": "Extension detail section header for service status" }, - "extensionServiceHealth": "Service health", + "extensionServiceHealth": "Kondisi layanan", "@extensionServiceHealth": { "description": "Extension capability label for service health checks" }, @@ -5829,11 +5829,11 @@ } } }, - "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", + "extensionOauthConnectHint": "Ketuk Hubungkan ke Spotify untuk isi kolom.", "@extensionOauthConnectHint": { "description": "Hint for an OAuth login link field before connecting Spotify" }, - "extensionLastChecked": "Last checked {time}", + "extensionLastChecked": "Terakhir diperiksa {time}", "@extensionLastChecked": { "description": "Timestamp for the latest extension service health check", "placeholders": { From 782e699b1255c13f8b5437d6b4f9ef13447dc134 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 15 Sep 2026 18:08:06 +0700 Subject: [PATCH 59/59] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 278 ++++++++++++++++++++-------------------- 1 file changed, 139 insertions(+), 139 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 0d1aa2c91..fd544991d 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -5820,7 +5820,7 @@ "@extensionServiceHealth": { "description": "Extension capability label for service health checks" }, - "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", + "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{pemeriksaaan}} berhasil", "@extensionHealthChecksConfigured": { "description": "Extension service health check count", "placeholders": { @@ -5846,19 +5846,19 @@ "@extensionRefreshStatus": { "description": "Tooltip for refreshing extension service health status" }, - "extensionCustomUrlHandling": "Custom URL Handling", + "extensionCustomUrlHandling": "Penanganan URL Kustom", "@extensionCustomUrlHandling": { "description": "Extension detail section title for custom URL handling" }, - "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", + "extensionCustomUrlHandlingSubtitle": "Ekstensi ini dapat menangani link dari situs ini", "@extensionCustomUrlHandlingSubtitle": { "description": "Extension detail subtitle for custom URL handling" }, - "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", + "extensionCustomUrlHandlingShareHint": "Bagikan link dari situs ini ke SpotiFLAC Mobile dan ekstensi ini akan menanganinya.", "@extensionCustomUrlHandlingShareHint": { "description": "Extension detail hint explaining share-to-app URL handling" }, - "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", + "extensionSettingsCount": "{count} {count, plural, =1{setelan} other{setelan}}", "@extensionSettingsCount": { "description": "Count of settings exposed by an extension quality option", "placeholders": { @@ -5871,51 +5871,51 @@ "@extensionHealthOnline": { "description": "Extension service health status - online" }, - "extensionHealthDegraded": "Degraded", + "extensionHealthDegraded": "Sedang Down", "@extensionHealthDegraded": { "description": "Extension service health status - degraded" }, - "extensionHealthOffline": "Offline", + "extensionHealthOffline": "Ofline", "@extensionHealthOffline": { "description": "Extension service health status - offline" }, - "extensionHealthNotConfigured": "Not configured", + "extensionHealthNotConfigured": "Belum diatur", "@extensionHealthNotConfigured": { "description": "Extension service health status - not configured" }, - "extensionHealthUnknown": "Unknown", + "extensionHealthUnknown": "Tidak Tahu", "@extensionHealthUnknown": { "description": "Extension service health status - unknown" }, - "extensionHealthRequired": "required", + "extensionHealthRequired": "dibutuhkan", "@extensionHealthRequired": { "description": "Label for a required extension service health check" }, - "extensionSettingNotSet": "Not set", + "extensionSettingNotSet": "Tidak diatur", "@extensionSettingNotSet": { "description": "Value shown when an extension setting has no value" }, - "extensionActionFailed": "Action failed", + "extensionActionFailed": "Tindakan gagal", "@extensionActionFailed": { "description": "Fallback error when an extension action fails without details" }, - "extensionEnterValue": "Enter value", + "extensionEnterValue": "Masukkan isi", "@extensionEnterValue": { "description": "Hint for editing an extension setting value" }, - "extensionHealthServiceOnline": "Service online", + "extensionHealthServiceOnline": "Layanan online", "@extensionHealthServiceOnline": { "description": "Tooltip for online extension service" }, - "extensionHealthServiceDegraded": "Service degraded", + "extensionHealthServiceDegraded": "Layanan sedang down", "@extensionHealthServiceDegraded": { "description": "Tooltip for degraded extension service" }, - "extensionHealthServiceOffline": "Service offline", + "extensionHealthServiceOffline": "Layanan offline", "@extensionHealthServiceOffline": { "description": "Tooltip for offline extension service" }, - "extensionHealthServiceUnknown": "Service status unknown", + "extensionHealthServiceUnknown": "Status layanan tidak diketahui", "@extensionHealthServiceUnknown": { "description": "Tooltip for unknown extension service health" }, @@ -5927,7 +5927,7 @@ "@audioAnalysisMono": { "description": "Audio channel layout label - mono" }, - "trackOpenInService": "Open in {serviceName}", + "trackOpenInService": "Buka {serviceName}", "@trackOpenInService": { "description": "Button label to open a track in a named music service", "placeholders": { @@ -5936,15 +5936,15 @@ } } }, - "trackLyricsEmbeddedSource": "Embedded", + "trackLyricsEmbeddedSource": "Tersemat", "@trackLyricsEmbeddedSource": { "description": "Lyrics source label for embedded lyrics" }, - "unknownAlbum": "Unknown Album", + "unknownAlbum": "Album Tak Dikenal", "@unknownAlbum": { "description": "Fallback album name when metadata is missing" }, - "unknownArtist": "Unknown Artist", + "unknownArtist": "Artis Tak Dikenal", "@unknownArtist": { "description": "Fallback artist name when metadata is missing" }, @@ -5952,19 +5952,19 @@ "@permissionAudio": { "description": "Audio permission type label" }, - "permissionStorage": "Storage", + "permissionStorage": "Penyimpanan", "@permissionStorage": { "description": "Storage permission type label" }, - "permissionNotification": "Notification", + "permissionNotification": "Notifikasi", "@permissionNotification": { "description": "Notification permission type label" }, - "errorInvalidFolderSelected": "Invalid folder selected", + "errorInvalidFolderSelected": "Folder tidak valid", "@errorInvalidFolderSelected": { "description": "Error when the selected folder is invalid" }, - "storeAnyVersion": "Any", + "storeAnyVersion": "Mana saja", "@storeAnyVersion": { "description": "Store detail value when any app version is accepted" }, @@ -5976,27 +5976,27 @@ "@storeCategoryDownload": { "description": "Store extension category - download" }, - "storeCategoryUtility": "Utility", + "storeCategoryUtility": "Utilitas", "@storeCategoryUtility": { "description": "Store extension category - utility" }, - "storeCategoryLyrics": "Lyrics", + "storeCategoryLyrics": "Lirik", "@storeCategoryLyrics": { "description": "Store extension category - lyrics" }, - "storeCategoryIntegration": "Integration", + "storeCategoryIntegration": "Integrasi", "@storeCategoryIntegration": { "description": "Store extension category - integration" }, - "artistReleases": "Releases", + "artistReleases": "Rilis", "@artistReleases": { "description": "Section header for all artist releases" }, - "editMetadataSelectNone": "None", + "editMetadataSelectNone": "Kosong", "@editMetadataSelectNone": { "description": "Button to clear selected fields for auto-fill" }, - "queueRetryAllFailed": "Retry {count} failed", + "queueRetryAllFailed": "Percobaan {count} gagal", "@queueRetryAllFailed": { "description": "Button to retry every failed download in the queue", "placeholders": { @@ -6005,106 +6005,106 @@ } } }, - "settingsSaveDownloadHistory": "Save download history", + "settingsSaveDownloadHistory": "Simpan histori download", "@settingsSaveDownloadHistory": { "description": "Settings switch title for storing completed downloads in history" }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "settingsSaveDownloadHistorySubtitle": "Simpan download selesai di tampilan histori dan koleksi", "@settingsSaveDownloadHistorySubtitle": { "description": "Settings switch subtitle for storing completed downloads in history" }, - "dialogDisableHistoryTitle": "Turn off download history?", + "dialogDisableHistoryTitle": "Matikan histori download?", "@dialogDisableHistoryTitle": { "description": "Confirmation dialog title shown before disabling download history" }, - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "dialogDisableHistoryMessage": "Histori yang sudah ada akan dihapus. File terdownload akan tetap ada.", "@dialogDisableHistoryMessage": { "description": "Confirmation dialog message shown before disabling download history" }, - "dialogDisableAndClear": "Turn off and clear", + "dialogDisableAndClear": "Matikan dan hapus", "@dialogDisableAndClear": { "description": "Confirmation action to disable download history and clear existing entries" }, - "openInOtherServices": "Open in Other Services", + "openInOtherServices": "Buka di Layanan Lain", "@openInOtherServices": { "description": "Title and tooltip for finding the current collection in other services" }, - "shareSheetNoExtensions": "No other compatible services", + "shareSheetNoExtensions": "Tidak ada layanan yang kompatibel", "@shareSheetNoExtensions": { "description": "Empty state when no extensions can be searched for cross-service links" }, - "shareSheetNotFound": "Not found", + "shareSheetNotFound": "Tidak ditemukan", "@shareSheetNotFound": { "description": "Cross-service share sheet row subtitle when a service has no match" }, - "shareSheetCopyLink": "Copy Link", + "shareSheetCopyLink": "Salin Link", "@shareSheetCopyLink": { "description": "Tooltip for copying a cross-service link" }, - "shareSheetLinkCopied": "{service} link copied", + "shareSheetLinkCopied": "{service} link tersalin", "@shareSheetLinkCopied": { "description": "Snackbar after copying a cross-service link", "placeholders": { "service": {} } }, - "libraryPlayback": "Playback", + "libraryPlayback": "Pemutaran", "@libraryPlayback": { "description": "Section header for playback settings in library settings" }, - "libraryExternalPlayer": "External player", + "libraryExternalPlayer": "Pemutar eksternal", "@libraryExternalPlayer": { "description": "Setting option to use an external music player" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "libraryExternalPlayerSubtitle": "Bagus untuk mendengarkan harian, kualitas terbaik, pemutaran lancar, EQ, dan dukungan format luas", "@libraryExternalPlayerSubtitle": { "description": "Subtitle for external player option" }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", + "libraryBuiltInPreviewPlayer": "Pemutar bawaan beta", "@libraryBuiltInPreviewPlayer": { "description": "Setting option to use the built-in preview player" }, - "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "libraryBuiltInPreviewPlayerSubtitle": "Hanya untuk dengar pratinjau lagu di SpotiFLAC Mobile, tidak bagus untuk mendengarkan sehari-hari", "@libraryBuiltInPreviewPlayerSubtitle": { "description": "Subtitle for built-in preview player option" }, - "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "libraryBuiltInPlayerInfo": "Pemutar built-in masih tahap beta untuk memeriksa lagu dengan cepat. Gunakan pemutar musik eksternal untuk mendengarkan.", "@libraryBuiltInPlayerInfo": { "description": "Info note explaining the built-in player is for previews only" }, - "nowPlayingTitle": "Now Playing", + "nowPlayingTitle": "Sedang Memutar", "@nowPlayingTitle": { "description": "Title for the now playing screen" }, - "nowPlayingNothingPlaying": "Nothing is playing", + "nowPlayingNothingPlaying": "Tidak memutar apapun", "@nowPlayingNothingPlaying": { "description": "Empty state when no track is currently playing" }, - "nowPlayingMinimize": "Minimize", + "nowPlayingMinimize": "Perkecil", "@nowPlayingMinimize": { "description": "Tooltip for minimizing the now playing screen" }, - "nowPlayingUpNext": "Up next", + "nowPlayingUpNext": "Selanjutnya", "@nowPlayingUpNext": { "description": "Title for the playback queue sheet" }, - "nowPlayingPreviousTrack": "Previous track", + "nowPlayingPreviousTrack": "Lagu Sebelumnya", "@nowPlayingPreviousTrack": { "description": "Tooltip for the previous-track playback control" }, - "nowPlayingNextTrack": "Next track", + "nowPlayingNextTrack": "Lagu Selanjutnya", "@nowPlayingNextTrack": { "description": "Tooltip for the next-track playback control" }, - "nowPlayingDetails": "Details", + "nowPlayingDetails": "Detail", "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, - "nowPlayingSleepTimer": "Sleep timer", + "nowPlayingSleepTimer": "Timer Tidur", "@nowPlayingSleepTimer": { "description": "Menu item and sheet title for the playback sleep timer" }, - "nowPlayingSleepTimerActive": "Ends at {time}", + "nowPlayingSleepTimerActive": "Berhenti pada {time}", "@nowPlayingSleepTimerActive": { "description": "Active sleep timer deadline shown in the player menu", "placeholders": { @@ -6113,7 +6113,7 @@ } } }, - "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 menit} other{{minutes} menit}}", "@nowPlayingSleepTimerMinutes": { "description": "Duration choice for the playback sleep timer", "placeholders": { @@ -6122,11 +6122,11 @@ } } }, - "nowPlayingSleepTimerOff": "Turn off sleep timer", + "nowPlayingSleepTimerOff": "Matikan timer tidur", "@nowPlayingSleepTimerOff": { "description": "Action to cancel the active playback sleep timer" }, - "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "nowPlayingSleepTimerSet": "Timer tidur diatur selama", "@nowPlayingSleepTimerSet": { "description": "Confirmation after setting the playback sleep timer", "placeholders": { @@ -6135,31 +6135,31 @@ } } }, - "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "nowPlayingSleepTimerCancelled": "Timer tidur dimatikan", "@nowPlayingSleepTimerCancelled": { "description": "Confirmation after cancelling the playback sleep timer" }, - "nowPlayingOpenInExternalPlayer": "Open in external player", + "nowPlayingOpenInExternalPlayer": "Buka di pemutar eksternal", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" }, - "nowPlayingTabPlayer": "Player", + "nowPlayingTabPlayer": "Pemutar", "@nowPlayingTabPlayer": { "description": "Tab label for the player view" }, - "nowPlayingTabLyrics": "Lyrics", + "nowPlayingTabLyrics": "Lirik", "@nowPlayingTabLyrics": { "description": "Tab label for the lyrics view" }, - "nowPlayingNoLyrics": "No lyrics in this file", + "nowPlayingNoLyrics": "Tidak ada lirik", "@nowPlayingNoLyrics": { "description": "Empty state when the playing file has no embedded lyrics" }, - "nowPlayingLibraryEmpty": "Your library is empty", + "nowPlayingLibraryEmpty": "Koleksi Anda kosong", "@nowPlayingLibraryEmpty": { "description": "Snackbar when shuffle library is requested but library has no tracks" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "nowPlayingShuffleLibraryFailed": "Tidak dapat mengacak koleksi: {error}", "@nowPlayingShuffleLibraryFailed": { "description": "Snackbar when shuffling the library fails", "placeholders": { @@ -6168,31 +6168,31 @@ } } }, - "nowPlayingShuffleOn": "Shuffle on", + "nowPlayingShuffleOn": "Acak hidup", "@nowPlayingShuffleOn": { "description": "Tooltip when shuffle mode is enabled" }, - "nowPlayingPlayInOrder": "Play in order", + "nowPlayingPlayInOrder": "Putar berurutan", "@nowPlayingPlayInOrder": { "description": "Tooltip when shuffle mode is disabled" }, - "nowPlayingShuffleLibrary": "Shuffle library", + "nowPlayingShuffleLibrary": "Acak koleksi", "@nowPlayingShuffleLibrary": { "description": "Button label to shuffle and play the entire local library" }, - "nowPlayingQueueEmpty": "Queue is empty", + "nowPlayingQueueEmpty": "Antrean kosong", "@nowPlayingQueueEmpty": { "description": "Empty state when the playback queue has no items" }, - "nowPlayingNoMetadata": "No metadata available", + "nowPlayingNoMetadata": "Metadata tidak tersedia", "@nowPlayingNoMetadata": { "description": "Empty state when track metadata cannot be loaded" }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "announcementUnableToOpenLink": "Tidak dapat membuka link. Coba lagi.", "@announcementUnableToOpenLink": { "description": "Snackbar shown when an announcement CTA link cannot be opened" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "trackConvertLosslessOutputWithCap": "Output loseless dengan batas {quality}", "@trackConvertLosslessOutputWithCap": { "description": "Hint shown when lossless conversion will cap bit depth or sample rate", "placeholders": { @@ -6201,7 +6201,7 @@ } } }, - "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "trackConvertConfirmMessageLosslessCapped": "Ubah format {sourceFormat} ke {targetFormat} ({quality})?\n\nOutput tetap menggunakan codec loseless, tapi bit depth/laju sampel akan dibatasi. File asli akan dihapus setelah diubah.", "@trackConvertConfirmMessageLosslessCapped": { "description": "Confirmation dialog message for capped lossless conversion of a single file", "placeholders": { @@ -6216,7 +6216,7 @@ } } }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "selectionBatchConvertConfirmMessageLosslessCapped": "Ubah format {count} {count, plural, =1{lagu} other{lagu}} ke {format} ({quality})?\n\nOutput tetap menggunakan codec loseless, tapi bit depth/laju sampel akan dibatasi. File asli akan dihapus setelah diubah.", "@selectionBatchConvertConfirmMessageLosslessCapped": { "description": "Confirmation dialog message for capped lossless batch conversion", "placeholders": { @@ -6261,19 +6261,19 @@ } } }, - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "aboutPaxsenixSubtitle": "Proxy lirik untuk Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, dan Genius", "@aboutPaxsenixSubtitle": { "description": "Subtitle for Paxsenix special thanks entry on the about page" }, - "snackbarPlayingNext": "Playing next", + "snackbarPlayingNext": "Memutar lagu berikutnya", "@snackbarPlayingNext": { "description": "Snackbar when a track is inserted as the next queue item" }, - "snackbarAddedToQueueGeneric": "Added to queue", + "snackbarAddedToQueueGeneric": "Ditambahkan ke antrean", "@snackbarAddedToQueueGeneric": { "description": "Snackbar when a track is added to the playback queue without naming it" }, - "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "selectionDeletePlaylistsCount": "Hapus {count} {count, plural, =1{playlist} other{playlist}}", "@selectionDeletePlaylistsCount": { "description": "Button label for deleting multiple selected playlists", "placeholders": { @@ -6282,35 +6282,35 @@ } } }, - "actionShuffle": "Shuffle", + "actionShuffle": "Acak", "@actionShuffle": { "description": "Tooltip for shuffle playback action" }, - "downloadPrimaryArtistOnlyOn": "Primary only: On", + "downloadPrimaryArtistOnlyOn": "Utama saja: Hidup", "@downloadPrimaryArtistOnlyOn": { "description": "Status label when primary-artist-only folder naming is enabled" }, - "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "downloadPrimaryArtistOnlyOff": "Utama saja: Mati", "@downloadPrimaryArtistOnlyOff": { "description": "Status label when primary-artist-only folder naming is disabled" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "downloadAlbumArtistMetadataPrimaryOnly": "Metadata Artis Album: Utama saja", "@downloadAlbumArtistMetadataPrimaryOnly": { "description": "Status label when album-artist folder filtering uses primary artist only" }, - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "downloadAlbumArtistMetadataFull": "Metadata Artis Album: Semua", "@downloadAlbumArtistMetadataFull": { "description": "Status label when album-artist folder filtering uses full metadata" }, - "trackConvertOriginal": "Original", + "trackConvertOriginal": "Asli", "@trackConvertOriginal": { "description": "Label for keeping original bit depth or sample rate during conversion" }, - "trackConvertOriginalQuality": "Original quality", + "trackConvertOriginalQuality": "Kualitas asli", "@trackConvertOriginalQuality": { "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" }, - "trackConvertLosslessSuffix": "Lossless", + "trackConvertLosslessSuffix": "Loseless", "@trackConvertLosslessSuffix": { "description": "Suffix used in converted lossless quality labels" }, @@ -6322,7 +6322,7 @@ "@trackConvertResampler": { "description": "Section label for lossless conversion resampler options" }, - "trackConvertDitherNone": "None", + "trackConvertDitherNone": "Tidak Ada", "@trackConvertDitherNone": { "description": "Lossless conversion dither option with no dithering applied" }, @@ -6330,7 +6330,7 @@ "@trackConvertDitherTriangular": { "description": "Lossless conversion triangular probability density function dither option" }, - "trackConvertDitherTriangularHp": "Triangular HP", + "trackConvertDitherTriangularHp": "HP Triangular", "@trackConvertDitherTriangularHp": { "description": "Lossless conversion high-pass triangular dither option" }, @@ -6338,27 +6338,27 @@ "@trackConvertResamplerSwr": { "description": "Lossless conversion default FFmpeg swresample resampler option" }, - "trackConvertResamplerSoxr": "SoXr", + "trackConvertResamplerSoxr": "SoXR", "@trackConvertResamplerSoxr": { "description": "Lossless conversion SoX resampler option" }, - "updateSeeReleaseNotes": "See release notes for details.", + "updateSeeReleaseNotes": "Lihat catatan yang baru untuk detail", "@updateSeeReleaseNotes": { "description": "Fallback changelog text when release notes cannot be parsed" }, - "unknownTitle": "Unknown title", + "unknownTitle": "Judul tidak diketahui", "@unknownTitle": { "description": "Fallback track title when metadata is missing" }, - "trackPlayNext": "Play next", + "trackPlayNext": "Putar selanjutnya", "@trackPlayNext": { "description": "Menu action to play a track as the next queue item" }, - "trackAddToQueue": "Add to queue", + "trackAddToQueue": "Tambah ke antrean", "@trackAddToQueue": { "description": "Menu action to add a track to the playback queue" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "snackbarExtensionInstalledEnable": "{extensionName} terinstal. Hidupkan di Setelan > Ekstensi", "@snackbarExtensionInstalledEnable": { "description": "Snackbar after installing an extension from the repo tab", "placeholders": { @@ -6367,7 +6367,7 @@ } } }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "snackbarExtensionUpdatedVersion": "{extensionName} diupdate ke v{version}", "@snackbarExtensionUpdatedVersion": { "description": "Snackbar after updating an extension from the repo tab", "placeholders": { @@ -6379,7 +6379,7 @@ } } }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "snackbarFailedToInstallNamed": "Gagal menginstal {extensionName}", "@snackbarFailedToInstallNamed": { "description": "Snackbar when extension install fails in the repo tab", "placeholders": { @@ -6388,7 +6388,7 @@ } } }, - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "snackbarFailedToUpdateNamed": "Gagal mengupdate {extensionName}", "@snackbarFailedToUpdateNamed": { "description": "Snackbar when extension update fails in the repo tab", "placeholders": { @@ -6401,35 +6401,35 @@ "@releaseTypeEp": { "description": "Badge label for EP releases" }, - "releaseTypeSingle": "Single", + "releaseTypeSingle": "SIngle", "@releaseTypeSingle": { "description": "Badge label for single releases" }, - "trackCoverOnline": "Online cover", + "trackCoverOnline": "Cover internet", "@trackCoverOnline": { "description": "Label shown when metadata autofill downloaded cover art from the internet" }, - "regionCountryUS": "United States", + "regionCountryUS": "Amerika Serikat", "@regionCountryUS": { "description": "Country name for SongLink region picker" }, - "regionCountryGB": "United Kingdom", + "regionCountryGB": "Inggris Raya", "@regionCountryGB": { "description": "Country name for SongLink region picker" }, - "regionCountryFR": "France", + "regionCountryFR": "Prancis", "@regionCountryFR": { "description": "Country name for SongLink region picker" }, - "regionCountryDE": "Germany", + "regionCountryDE": "Jerman", "@regionCountryDE": { "description": "Country name for SongLink region picker" }, - "regionCountryJP": "Japan", + "regionCountryJP": "Jepang", "@regionCountryJP": { "description": "Country name for SongLink region picker" }, - "regionCountryKR": "South Korea", + "regionCountryKR": "Korea Selatan", "@regionCountryKR": { "description": "Country name for SongLink region picker" }, @@ -6445,7 +6445,7 @@ "@regionCountryBR": { "description": "Country name for SongLink region picker" }, - "regionCountryMX": "Mexico", + "regionCountryMX": "Meksiko", "@regionCountryMX": { "description": "Country name for SongLink region picker" }, @@ -6453,7 +6453,7 @@ "@regionCountryAU": { "description": "Country name for SongLink region picker" }, - "regionCountryCA": "Canada", + "regionCountryCA": "Kanada", "@regionCountryCA": { "description": "Country name for SongLink region picker" }, @@ -6461,27 +6461,27 @@ "@regionCountryXK": { "description": "Country name for SongLink region picker" }, - "extensionVerificationBrowserTitle": "Verification browser", + "extensionVerificationBrowserTitle": "Browser verifikasi", "@extensionVerificationBrowserTitle": { "description": "Settings option title for extension verification browser preference" }, - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "extensionVerificationBrowserSubtitleExternal": "Buka verifikasi di browser default dulu", "@extensionVerificationBrowserSubtitleExternal": { "description": "Subtitle when external browser is preferred for extension verification" }, - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "extensionVerificationBrowserSubtitleInApp": "Buka verifikasi di browser aplikasi dulu", "@extensionVerificationBrowserSubtitleInApp": { "description": "Subtitle when in-app browser is preferred for extension verification" }, - "extensionVerificationBrowserExternal": "External", + "extensionVerificationBrowserExternal": "Eksternal", "@extensionVerificationBrowserExternal": { "description": "Chip label for external browser verification mode" }, - "extensionVerificationBrowserInApp": "In-app", + "extensionVerificationBrowserInApp": "Aplikasi", "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, - "extensionVerificationUnavailable": "No verification page is available for {extension}. Retry the download to request a new challenge.", + "extensionVerificationUnavailable": "Tidak ada halaman verifikasi untuk {extension}. Ulang download untuk meminta verifikasi baru.", "@extensionVerificationUnavailable": { "description": "Shown when the app cannot retrieve a pending verification challenge", "placeholders": { @@ -6490,43 +6490,43 @@ } } }, - "extensionVerificationHelpTitleManual": "Open verification manually", + "extensionVerificationHelpTitleManual": "Buka verifikasi secara manual", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", + "extensionVerificationHelpTitleWaiting": "Menunggu verifikasi", "@extensionVerificationHelpTitleWaiting": { "description": "Dialog title when verification is taking longer than expected" }, - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", + "extensionVerificationHelpMessageManual": "SpotiFLAC mobile tidak dapat membuka browser secara otomatis. Buka link ini di browser Anda, atau salin manual.", "@extensionVerificationHelpMessageManual": { "description": "Dialog message when automatic browser launch for verification fails" }, - "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", + "extensionVerificationHelpMessageWaiting": "Jika browser tidak terbuka, atau verifikasi berhasil tapi tidak langsung kembali ke SpotiFLAC Mobile, buka link ini lagu atau salin manual.", "@extensionVerificationHelpMessageWaiting": { "description": "Dialog message when verification may need manual browser help" }, - "extensionVerificationClose": "Close", + "extensionVerificationClose": "Tutup", "@extensionVerificationClose": { "description": "Button to dismiss the extension verification help dialog" }, - "extensionVerificationCopyLink": "Copy link", + "extensionVerificationCopyLink": "Salin link", "@extensionVerificationCopyLink": { "description": "Button to copy the extension verification URL" }, - "extensionVerificationLinkCopied": "Verification link copied", + "extensionVerificationLinkCopied": "Link verifikasi disalin", "@extensionVerificationLinkCopied": { "description": "Snackbar after copying the extension verification URL" }, - "extensionVerificationOpenBrowser": "Open browser", + "extensionVerificationOpenBrowser": "Buka browser", "@extensionVerificationOpenBrowser": { "description": "Button to open the extension verification URL in a browser" }, - "settingsSearchHint": "Search settings", + "settingsSearchHint": "Telusuri setelan", "@settingsSearchHint": { "description": "Placeholder of the search field on the Settings tab" }, - "settingsSearchNoResults": "No settings match \"{query}\"", + "settingsSearchNoResults": "Tidak ada setelan \"{query}\"", "@settingsSearchNoResults": { "description": "Shown when a Settings search returns nothing", "placeholders": { @@ -6535,63 +6535,63 @@ } } }, - "settingsGroupInterface": "Extensions & appearance", + "settingsGroupInterface": "Ekstensi & tampilan", "@settingsGroupInterface": { "description": "Settings group covering look and feel" }, - "settingsGroupContent": "Content & metadata", + "settingsGroupContent": "Konten & metadata", "@settingsGroupContent": { "description": "Settings group covering the library, metadata and lyrics" }, - "settingsGroupDownloads": "Downloads & files", + "settingsGroupDownloads": "Download & file", "@settingsGroupDownloads": { "description": "Settings group covering download behaviour and storage" }, - "settingsGroupSystem": "System", + "settingsGroupSystem": "Sistem", "@settingsGroupSystem": { "description": "Settings group covering app-level data, cache and logs" }, - "settingsGroupHelp": "About & support", + "settingsGroupHelp": "Tentang & dukungan", "@settingsGroupHelp": { "description": "Settings group covering the about page and donations" }, - "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "libraryFilterMetadataMissingLyrics": "Lirik hilang", "@libraryFilterMetadataMissingLyrics": { "description": "Filter option for tracks without embedded or sidecar lyrics" }, - "trackOptionCopyTrackName": "Copy track name", + "trackOptionCopyTrackName": "Salin nama lagu", "@trackOptionCopyTrackName": { "description": "Track menu action that copies the track title" }, - "trackOptionCopyArtist": "Copy artist", + "trackOptionCopyArtist": "Salin artis", "@trackOptionCopyArtist": { "description": "Track menu action that copies the artist name" }, - "trackOptionCopyTrackAndArtist": "Copy track and artist", + "trackOptionCopyTrackAndArtist": "Salin lagu dan artis", "@trackOptionCopyTrackAndArtist": { "description": "Track menu action that copies the track title and artist" }, - "metadataCopyValue": "Copy value", + "metadataCopyValue": "Salin isi", "@metadataCopyValue": { "description": "Metadata menu action that copies only the selected value" }, - "metadataCopyField": "Copy field and value", + "metadataCopyField": "Salin isi kolom", "@metadataCopyField": { "description": "Metadata menu action that copies the selected key and value" }, - "metadataCopyAll": "Copy all metadata", + "metadataCopyAll": "Salin semua metadata", "@metadataCopyAll": { "description": "Metadata menu action that copies every visible key and value" }, - "optionsEmbeddedCoverSize": "Embedded Cover Size", + "optionsEmbeddedCoverSize": "Ukuran Cover Tersemat", "@optionsEmbeddedCoverSize": { "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" }, - "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "optionsEmbeddedCoverSizeDescription": "Downscale foto cover terdownload sebelum menyematkannya. Foto yang berada di batasnya tidak akan dimodifikasi.", "@optionsEmbeddedCoverSizeDescription": { "description": "Description shown in the embedded cover size picker" }, - "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "optionsEmbeddedCoverSizeOriginal": "Resolusi asli", "@optionsEmbeddedCoverSizeOriginal": { "description": "Option that preserves the provider artwork at its original resolution" }