From 680e0e09769f0b96bf976ec5e77367deeca4d5db Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:02 +0700 Subject: [PATCH 001/137] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 704 ++++++++++++++++++++++------------------ 1 file changed, 383 insertions(+), 321 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index 0fdaaf6c..2e86614a 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "Aucun moteur de recherche pour le moment", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Installez une extension pour continuer.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Prise en charge : URL de titres, d’albums, de playlists et d’artistes", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Titres", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Mode « Artiste »", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choisir la langue", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "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" + }, + "setupLanguageSystemDefault": "Paramètres par défaut du système", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Annuler", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source : {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Les paroles de ce morceau ne sont pas disponibles", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "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" + } + } + }, + "extensionsInstallPartialSuccess": "{installed} extensions sur {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" + } + } + }, "extensionsDownloadPriority": "Priorité de téléchargement", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320 kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Compatibilité optimale, environ 10 Mo par piste", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320 kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Compatibilité optimale avec les appareils mobiles, format M4A", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256 kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Opus en qualité optimale, environ 8 Mo par piste", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128 kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Taille minimale : environ 4 Mo par piste", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Artistes Favoris", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artiste} other{{count} artistes}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Ajouté à « {playlistName} »", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "Pas encore d'artistes préférés", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Appuyez sur le cœur sur la page d'un artiste pour le garder ici", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "La playlist est vide", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "« {artistName} » a été ajouté à vos artistes préférés", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "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" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Ajouter aux Artistes Favoris", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Supprimer des Artistes Favoris", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Changer l'image de couverture", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Dossier nommé d'après la balise « Artiste de l'album »", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Dossier nommé d'après la balise « Artiste » de la piste", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Priorité au fournisseur de paroles", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "description": "Settings item title for lyrics provider order" }, "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": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Fournisseur d'extensions", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Soutien au développement", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Offrez un café au développeur", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choisissez l'emplacement où enregistrer vos morceaux téléchargés", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "Dossier « Applications » (recommandé)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Enregistrement par défaut dans le dossier « Musique/SpotiFLAC »", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Dossier personnalisé (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Choisissez n'importe quel dossier, y compris la carte SD", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Utilisez {artist}, {title}, {album}, {track}, {year}, {date} et {disc} comme variables de remplacement.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Appuyez pour insérer une balise :", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Les singles et les EP sont enregistrés dans un dossier séparé", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Les singles et les albums sont enregistrés dans le même dossier", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Filtres par nom d'artiste", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Dossier source de la playlist", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "Un sous-dossier est créé pour chaque playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "Tous les morceaux sont enregistrés directement dans le dossier de téléchargement", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Géré par les paramètres d'organisation des dossiers", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "Région SongLink", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Mode de compatibilité réseau", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Utilisation des paramètres TLS hérités pour les réseaux plus anciens", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Utilisation des paramètres réseau par défaut", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Activez d'abord l'intégration des métadonnées", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease : inclure la traduction", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Lignes de traduction en chinois incluses", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Paroles originales uniquement", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease : inclure la romanisation", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Lignes de romanisation incluses", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "Pas de romanisation", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ : Paroles pour plusieurs personnes", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, "downloadAppleQqMultiPersonEnabled": "Étiquettes d'intervenants incluses pour les duos et les morceaux en groupe", "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Paroles standard sans indication du haut-parleur", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Synchronisation des paroles Apple Music eLRC", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Conservation des horodatages bruts mot à mot", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Paroles d'Apple Music, ligne par ligne, en toute sécurité", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Langue Musixmatch", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (langue d'origine)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filtrer les artistes participants", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "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 enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Chaîne « Artiste » de l'album complet utilisée", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "Aucun fournisseur n'est activé", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Code de langue", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "par exemple : en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "description": "Placeholder for Musixmatch language input" }, "downloadMusixmatchLanguageDesc": "Saisissez un code de langue BCP-47 (par exemple : en, de, ja) pour demander les paroles traduites à Musixmatch.", "@downloadMusixmatchLanguageDesc": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Utilisez le Wi-Fi ou les données mobiles", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Les téléchargements sont mis en pause lors de l'utilisation des données mobiles", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "description": "Subtitle for WiFi-only option in picker" }, "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 the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Format audio non pris en charge", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Conteneur", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Format décodé", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Nombre de bits", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Coupure", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "Pas de coupure", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Limite spectrale", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Statistiques par chaîne", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Échantillons", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "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": "Off", + "@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", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Téléchargements annulés", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" + }, + "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" + } + } + }, "notifScanningLibrary": "Numérisation de la bibliothèque locale", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "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" - }, - "downloadDeduplicationDisabled": "Tous les morceaux seront téléchargés, quel que soit l'historique", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "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" - }, - "homeEmptyTitle": "Aucun moteur de recherche pour le moment", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Installez une extension pour continuer.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choisir la langue", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "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" - }, - "setupLanguageSystemDefault": "Paramètres par défaut du système", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Essayez un autre mot-clé", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source : {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "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" - } - } - }, - "extensionsInstallPartialSuccess": "{installed} extensions sur {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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320 kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Compatibilité optimale avec les appareils mobiles, format M4A", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Artistes Favoris", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artiste} other{{count} artistes}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "Pas encore d'artistes préférés", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Appuyez sur le cœur sur la page d'un artiste pour le garder ici", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "« {artistName} » a été ajouté à vos artistes préférés", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "« {artistName} » a été supprimé de vos artistes favoris", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Ajouter aux Artistes Favoris", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Supprimer des Artistes Favoris", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Synchronisation des paroles Apple Music eLRC", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Conservation des horodatages bruts mot à mot", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Paroles d'Apple Music, ligne par ligne, en toute sécurité", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Conteneur", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Format décodé", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Coupure", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "Pas de coupure", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Limite spectrale", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Statistiques par chaîne", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@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" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Téléchargements annulés", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" - }, - "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" - } - } - }, "searchTracks": "Titres", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Titres", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "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" + }, + "downloadDeduplicationDisabled": "Tous les morceaux seront téléchargés, quel que soit l'historique", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "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" + }, "editMetadataFieldDateHint": "AAAA-MM-JJ ou AAAA", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From b9142bc40c1a433cfe361af1f240a1089cbddfbe Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:04 +0700 Subject: [PATCH 002/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 706 ++++++++++++++++++++----------------- 1 file changed, 384 insertions(+), 322 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 48ce81a5..e6d8f13f 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 Mobile", "@appName": { @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "J", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Instalar una extensión para continuar.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Soporte de URL: pista, álbum, listas de reproducción, artistas", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Álbumes", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Pistas", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Modo de etiqueta de artista", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Elegir idioma", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Selecciona tu idioma preferido para la aplicación. Puedes cambiar esto luego en Configuración.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "Idioma predeterminado", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Cancelar", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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": "Enlace no reconocido", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Fuente: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Letras no disponibles para este tema", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} Extensiones instaladas correctamente", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "extensionsInstallPartialSuccess": "{installed} Instalados de {attempted} extensiones", + "@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" + } + } + }, "extensionsDownloadPriority": "Prioridad de descarga", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 (320 kbps)", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Mejor compatibilidad, ~10 MB por pista", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A (320 kbps)", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "La mejor compatibilidad con dispositivos móviles, formato M4A", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "OPUS (256 kbps)", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Mejor calidad de OPUS, ~8 MB por pista", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "OPUS (128 kbps)", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Tamaño mínimo: ~4 MB por pista", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Artistas favoritos", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Listas de reproducción", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Añadida a \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "Aún no hay artistas favoritos", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "La lista de reproducción está vacía", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Añadir a artistas favoritos", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Cambiar imagen de portada", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Prioridad de proveedores de letras", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Proveedor de extensiones", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Apoya el desarrollo", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Compra un café al desarrollador", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Carpeta personalizada (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Escoge cualquier carpeta, incluyendo la tarjeta SD", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Usa {artist}, {title}, {album}, {track}, {year}, {date}, {disc} como marcadores de posición.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tap to insert tag:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "Región de SongLink", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Modo de compatibilidad de red", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Utilizando ajustes de red estándar", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Solo letras originales", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Idioma de Musixmatch", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No hay proveedores activos", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Código de idioma", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Usar Wi-Fi o datos móviles", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Formato de audio no soportado", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Códec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Contenedor", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Formato decodificado", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Profundidad de bits", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Muestras", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Seleccionar automáticamente la mejor disponible", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Desactivado", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Descargas canceladas", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Escaneando biblioteca local", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Archivos y carpetas", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Directorio de descarga, nombre de archivo y estructura de carpetas", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Información", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Carátula, etiquetas, ReplayGain, proveedores", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Letra", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Insertar, modo, proveedores, opciones de idioma", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "settingsApp": "Aplicación", - "@settingsApp": { - "description": "Settings menu item - app settings" - }, - "settingsAppSubtitle": "Actualizaciones, datos, extensiones repo, depuración", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "sectionMetadataProviders": "Proveedores", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "sectionDuplicates": "Duplicados", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" - }, - "sectionLyricsProviderOptions": "Opciones del proveedor", - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" - }, - "metadataProvidersTitle": "Prioridad de proveedor de información", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "metadataProvidersSubtitle": "Arrastre para establecer orden de búsqueda y origen de información", - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "downloadDeduplication": "Saltar descargas duplicadas", - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" - }, - "downloadDeduplicationEnabled": "Las pistas previamente descargadas se omitirán", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" - }, - "downloadDeduplicationDisabled": "Todas las pistas se descargarán independientemente del historial", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Reslpado de extensiones", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Elige qué extensiones se pueden utilizar como alternativa", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "J", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Instalar una extensión para continuar.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Elegir idioma", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Selecciona tu idioma preferido para la aplicación. Puedes cambiar esto luego en Configuración.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "Idioma predeterminado", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Fuente: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} Extensiones instaladas correctamente", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "extensionsInstallPartialSuccess": "{installed} Instalados de {attempted} extensiones", - "@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" - } - } - }, - "downloadLossyAac": "AAC/M4A (320 kbps)", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "La mejor compatibilidad con dispositivos móviles, formato M4A", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Artistas favoritos", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "Aún no hay artistas favoritos", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Añadir a artistas favoritos", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Códec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Contenedor", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Formato decodificado", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Desactivado", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Descargas canceladas", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Pistas", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Álbumes", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Pistas", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Archivos y carpetas", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Directorio de descarga, nombre de archivo y estructura de carpetas", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Información", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Carátula, etiquetas, ReplayGain, proveedores", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Letra", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Insertar, modo, proveedores, opciones de idioma", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "settingsApp": "Aplicación", + "@settingsApp": { + "description": "Settings menu item - app settings" + }, + "settingsAppSubtitle": "Actualizaciones, datos, extensiones repo, depuración", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" + }, + "sectionMetadataProviders": "Proveedores", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" + }, + "sectionDuplicates": "Duplicados", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" + }, + "sectionLyricsProviderOptions": "Opciones del proveedor", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" + }, + "metadataProvidersTitle": "Prioridad de proveedor de información", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" + }, + "metadataProvidersSubtitle": "Arrastre para establecer orden de búsqueda y origen de información", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" + }, + "downloadDeduplication": "Saltar descargas duplicadas", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" + }, + "downloadDeduplicationEnabled": "Las pistas previamente descargadas se omitirán", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" + }, + "downloadDeduplicationDisabled": "Todas las pistas se descargarán independientemente del historial", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Reslpado de extensiones", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Elige qué extensiones se pueden utilizar como alternativa", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "AAA-MM-DD o AAAA", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From f33ee40779b5f0da1c871717333bbb2076a7c896 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:05 +0700 Subject: [PATCH 003/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 70 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 1deae2bc..9a56032c 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Artist Tag Mode", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -1987,7 +2045,7 @@ }, "downloadLossyMp3": "MP3 320kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", "@downloadLossyMp3Subtitle": { @@ -1995,7 +2053,7 @@ }, "downloadLossyAac": "AAC/M4A 320kbps", "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" + "description": "Lossy format option - AAC in M4A container at 320kbps" }, "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", "@downloadLossyAacSubtitle": { @@ -2003,7 +2061,7 @@ }, "downloadLossyOpus256": "Opus 256kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", "@downloadLossyOpus256Subtitle": { @@ -2011,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", "@downloadLossyOpus128Subtitle": { @@ -3737,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" From 7c2b87f49ad8f5fdd2e5f77c2a0ad6aaeda3d6aa Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:07 +0700 Subject: [PATCH 004/137] New translations app_en.arb (German) [ci skip] --- lib/l10n/arb/app_de.arb | 704 ++++++++++++++++++++++------------------ 1 file changed, 383 insertions(+), 321 deletions(-) diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb index 4cc48adc..c3ed22de 100644 --- a/lib/l10n/arb/app_de.arb +++ b/lib/l10n/arb/app_de.arb @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "Noch keine Suchanbieter", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Installiere eine Erweiterung um fortzufahren.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Unterstützt: Titel, Album, Playlist, Künstler-URLs", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Alben", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Titel", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Künstler Tag-Modus", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Sprache auswählen", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "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" + }, + "setupLanguageSystemDefault": "Systemstandard", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Abbrechen", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Quelle: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Lyrics sind für diesen Titel nicht verfügbar", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} Erweiterungen erfolgreich installiert", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Download-Priorität", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Beste Kompatibilität, ~10MB pro Titel", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Beste mobile Kompatibilität, M4A Container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Beste Qualität, ~8MB pro Titel", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Kleinste Größe, ~4MB pro Track", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Lieblingskünstler", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 Künstler} other{{count} Künstler}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Zu \"{playlistName} \" hinzugefügt", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "Noch keine Lieblingskünstler", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tippe auf das Herz auf einer Künstlerseite, um sie hier zu sehen", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Die Playlist ist leer", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" zu Lieblingskünstlern hinzugefügt", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" entfernt aus Lieblingskünstlern", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Zu Lieblingssongs hinzufügen", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Zu Favoriten hinzufügen", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Aus Favoriten entfernen", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Coverbild ändern", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Ordner benannt nach dem Tag des Albumkünstlers", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Ordner benannt nach dem Tag des Künstlers", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Priorität des Lyrics-Anbieters", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "description": "Settings item title for lyrics provider order" }, "lyricsProvidersDescription": "Lyrics aktivieren, deaktivieren und neu ordnen. Anbieter werden von oben nach unten ausprobiert, bis Lyrics gefunden werden.", "@lyricsProvidersDescription": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Erweiterungsanbieter", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Unterstütze die Entwicklung", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Kaufe dem Entwickler einen Kaffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Wählen Sie den Speicherort für Ihre heruntergeladenen Titel", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App-Ordner (empfohlen)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Standardmäßig in Music/SpotiFLAC speichern", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Benutzerdefinierter Ordner (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Wähle einen beliebigen Ordner, inklusive SD-Karte", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Verwende {artist}, {title}, {album}, {track}, {year}, {date}, {disc} als Platzhalter.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tippe, um Tag einzufügen:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles und EPs werden in einem separaten Ordner gespeichert", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles und Alben im selben Ordner gespeichert", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Künstlernamen-Filter", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist-Quellordner", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "Für jede Playlist wird ein Unterordner erstellt", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "Alle Titel direkt im Download-Ordner gespeichert", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Wird durch die Ordnerorganisationseinstellung verarbeitet", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "SongLink-Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Netzwerkkompatibilitätsmodus", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Verwendung der Legacy-TLS-Einstellungen für ältere Netzwerke", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Standard-Netzwerkeinstellungen verwenden", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Metadaten-Einbettung zuerst aktivieren", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Übersetzung einschließen", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinesische Übersetzungszeilen enthalten", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original Lyrics verwenden", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Romanisierung einschließen", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanisierungszeilen enthalten", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "Keine Romanisierung", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Personen-Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" }, "downloadAppleQqMultiPersonEnabled": "Sängerlabel für Duette und Gruppentitel enthalten", "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standardlyrics ohne Lautsprecher-Labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Rohe Zeitstempel erhalten", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Sichere Line-by-line Apple Music Texte", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Sprache", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (Originalsprache)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Mitwirkende Künstler filtern", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Mitwirkende Künstler vom Albumname des Künstlers entfernt", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Volle Album Künstler String verwendet", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "Keine Anbieter aktiviert", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Sprach-Code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "description": "Placeholder for Musixmatch language input" }, "downloadMusixmatchLanguageDesc": "Gib einen BCP-47 Sprachcode ein (z.B. en, de, ja), um übersetzte Lyrics von Musixmatch anzufordern.", "@downloadMusixmatchLanguageDesc": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "WLAN oder mobile Daten verwenden", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads bei mobilen Daten pausieren", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "description": "Subtitle for WiFi-only option in 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 the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Nicht unterstütztes Audioformat", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Dekodiertes Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit-Tiefe", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "Kein Clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spektralschnitt", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Pro Kanal Statistik", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Proben", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatisch die besten verfügbaren auswählen", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Aus", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Start-Feed nicht auf dem Hauptbildschirm anzeigen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "{extensionName} Home Feed verwenden", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads abgebrochen", + "@notifDownloadsCanceledTitle": { + "description": "Notification title when downloads are canceled by the user" + }, + "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" + } + } + }, "notifScanningLibrary": "Scanne lokale Bibliothek", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Dateien & Ordner", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Speicherort, Dateiname, Ordnerstruktur", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadaten", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover Art, Tags, ReplayGain, Anbieter", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Einbetten, Modus, Anbieter, Sprachoptionen", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "settingsApp": "App", - "@settingsApp": { - "description": "Settings menu item - app settings" - }, - "settingsAppSubtitle": "Updates, Daten, Erweiterungsrepo, Debug", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "sectionMetadataProviders": "Anbieter", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "sectionDuplicates": "Duplikate", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" - }, - "sectionLyricsProviderOptions": "Anbieter-Optionen", - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" - }, - "metadataProvidersTitle": "Priorität des Metadaten-Anbieters", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "metadataProvidersSubtitle": "Zieh, um Such- und Metadatenquellenreihenfolge zu setzen", - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" - }, - "downloadDeduplication": "Doppelte Downloads überspringen", - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" - }, - "downloadDeduplicationEnabled": "Bereits heruntergeladene Titel werden übersprungen", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" - }, - "downloadDeduplicationDisabled": "Alle Titel werden unabhängig vom Verlauf heruntergeladen", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback-Erweiterungen", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Wähle, welche Erweiterungen als Fallback verwendet werden können", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "Noch keine Suchanbieter", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Installiere eine Erweiterung um fortzufahren.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Sprache auswählen", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "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" - }, - "setupLanguageSystemDefault": "Systemstandard", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Quelle: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} Erweiterungen erfolgreich installiert", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Beste mobile Kompatibilität, M4A Container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Lieblingskünstler", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 Künstler} other{{count} Künstler}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "Noch keine Lieblingskünstler", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tippe auf das Herz auf einer Künstlerseite, um sie hier zu sehen", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" zu Lieblingskünstlern hinzugefügt", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" entfernt aus Lieblingskünstlern", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Zu Favoriten hinzufügen", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Aus Favoriten entfernen", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Rohe Zeitstempel erhalten", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Sichere Line-by-line Apple Music Texte", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Dekodiertes Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "Kein Clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spektralschnitt", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Pro Kanal Statistik", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Aus", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Start-Feed nicht auf dem Hauptbildschirm anzeigen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads abgebrochen", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" - }, - "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" - } - } - }, "searchTracks": "Titel", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Alben", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Titel", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Dateien & Ordner", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Speicherort, Dateiname, Ordnerstruktur", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadaten", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover Art, Tags, ReplayGain, Anbieter", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Einbetten, Modus, Anbieter, Sprachoptionen", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "settingsApp": "App", + "@settingsApp": { + "description": "Settings menu item - app settings" + }, + "settingsAppSubtitle": "Updates, Daten, Erweiterungsrepo, Debug", + "@settingsAppSubtitle": { + "description": "Subtitle for app settings" + }, + "sectionMetadataProviders": "Anbieter", + "@sectionMetadataProviders": { + "description": "Settings section header for metadata providers" + }, + "sectionDuplicates": "Duplikate", + "@sectionDuplicates": { + "description": "Settings section header for deduplication" + }, + "sectionLyricsProviderOptions": "Anbieter-Optionen", + "@sectionLyricsProviderOptions": { + "description": "Settings section header for per-provider lyrics options" + }, + "metadataProvidersTitle": "Priorität des Metadaten-Anbieters", + "@metadataProvidersTitle": { + "description": "Settings item title for metadata provider order" + }, + "metadataProvidersSubtitle": "Zieh, um Such- und Metadatenquellenreihenfolge zu setzen", + "@metadataProvidersSubtitle": { + "description": "Subtitle for metadata provider priority item" + }, + "downloadDeduplication": "Doppelte Downloads überspringen", + "@downloadDeduplication": { + "description": "Setting - skip tracks already in download history" + }, + "downloadDeduplicationEnabled": "Bereits heruntergeladene Titel werden übersprungen", + "@downloadDeduplicationEnabled": { + "description": "Subtitle when deduplication is on" + }, + "downloadDeduplicationDisabled": "Alle Titel werden unabhängig vom Verlauf heruntergeladen", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback-Erweiterungen", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Wähle, welche Erweiterungen als Fallback verwendet werden können", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "JJJJ-MM-TT oder JJJJJ", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From 60175108df382f31470c116ad237e515b6e2468d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:08 +0700 Subject: [PATCH 005/137] New translations app_en.arb (Japanese) [ci skip] --- lib/l10n/arb/app_ja.arb | 1502 ++++++++++++++++++++------------------- 1 file changed, 782 insertions(+), 720 deletions(-) diff --git a/lib/l10n/arb/app_ja.arb b/lib/l10n/arb/app_ja.arb index 668b2bac..87923b8f 100644 --- a/lib/l10n/arb/app_ja.arb +++ b/lib/l10n/arb/app_ja.arb @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "No search providers yet", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "サポート: トラック、アルバム、プレイリスト、アーティスト、URL", "@homeSupports": { "description": "Info text about supported URL types" @@ -89,6 +97,14 @@ "@downloadFilenameFormat": { "description": "Setting for output filename pattern" }, + "downloadSingleFilenameFormat": "Single Filename Format", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" + }, + "downloadSingleFilenameFormatDescription": "Filename pattern for singles and EPs. Uses the same tags as the album format.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" + }, "downloadFolderOrganization": "フォルダ構成", "@downloadFolderOrganization": { "description": "Title of the folder organization picker bottom sheet" @@ -150,6 +166,14 @@ } } }, + "optionsDefaultSearchTab": "Default Search Tab", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" + }, + "optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" + }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -190,6 +214,100 @@ "@optionsMaxQualityCoverSubtitle": { "description": "Subtitle for max quality cover" }, + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" + }, + "optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" + }, + "optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" + }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "optionsArtistTagMode": "Artist Tag Mode", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" + }, + "optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" + }, + "optionsArtistTagModeJoined": "Single joined value", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" + }, + "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" + }, + "optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + }, + "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", + "@optionsArtistTagModeSplitVorbisSubtitle": { + "description": "Subtitle for split Vorbis artist tag mode" + }, "optionsExtensionStore": "Extension Repo", "@optionsExtensionStore": { "description": "Show/hide store tab" @@ -610,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "キャンセル", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -638,6 +768,10 @@ "@dialogImport": { "description": "Dialog button - import data" }, + "dialogDownload": "Download", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, "dialogDiscard": "破棄", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -864,6 +998,10 @@ "@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" @@ -962,6 +1100,46 @@ "@searchPlaylists": { "description": "Search result category - playlists" }, + "searchSortTitle": "Sort Results", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" + }, + "searchSortDefault": "Default", + "@searchSortDefault": { + "description": "Sort option - default API order" + }, + "searchSortTitleAZ": "Title (A-Z)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" + }, + "searchSortTitleZA": "Title (Z-A)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" + }, + "searchSortArtistAZ": "Artist (A-Z)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" + }, + "searchSortArtistZA": "Artist (Z-A)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" + }, + "searchSortDurationShort": "Duration (Shortest)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" + }, + "searchSortDurationLong": "Duration (Longest)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" + }, + "searchSortDateOldest": "Release Date (Oldest)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" + }, + "searchSortDateNewest": "Release Date (Newest)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" + }, "tooltipPlay": "再生", "@tooltipPlay": { "description": "Tooltip - play button" @@ -1082,6 +1260,18 @@ "@providerPriorityInfo": { "description": "Info tip about fallback behavior" }, + "providerPriorityFallbackExtensionsTitle": "Extension Fallback", + "@providerPriorityFallbackExtensionsTitle": { + "description": "Section title for choosing which download extensions can be used as fallback providers" + }, + "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" + }, + "providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" + }, "providerBuiltIn": "Legacy", "@providerBuiltIn": { "description": "Legacy label retained for old generated localization compatibility" @@ -1438,10 +1628,27 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "このトラックの歌詞は利用できません", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" }, + "trackLyricsNotInFile": "No lyrics found in this file", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" + }, + "trackFetchOnlineLyrics": "Fetch from Online", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" + }, "trackLyricsTimeout": "リクエストがタイムアウトしました。後ほどお試しください。", "@trackLyricsTimeout": { "description": "Message when lyrics request times out" @@ -1537,6 +1744,58 @@ "@storeClearFilters": { "description": "Button to clear all filters" }, + "storeAddRepoTitle": "Add Extension Repository", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" + }, + "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" + }, + "storeRepoUrlLabel": "Repository URL", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" + }, + "storeRepoUrlHint": "https://github.com/user/repo", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" + }, + "storeRepoUrlHelper": "e.g. https://github.com/user/extensions-repo", + "@storeRepoUrlHelper": { + "description": "Helper text below the repository URL input field" + }, + "storeAddRepoButton": "Add Repository", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" + }, + "storeChangeRepoTooltip": "Change repository", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" + }, + "storeRepoDialogTitle": "Extension Repository", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" + }, + "storeRepoDialogCurrent": "Current repository:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" + }, + "storeNewRepoUrlLabel": "New Repository URL", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" + }, + "storeLoadError": "Failed to load repository", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" + }, + "storeEmptyNoExtensions": "No extensions available", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" + }, + "storeEmptyNoResults": "No extensions found", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" + }, "extensionDefaultProvider": "Default Search", "@extensionDefaultProvider": { "description": "Default search provider option" @@ -1668,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "ダウンロードの優先度", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1676,6 +1959,14 @@ "@extensionsDownloadPrioritySubtitle": { "description": "Subtitle for download priority" }, + "extensionsFallbackTitle": "Fallback Extensions", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" + }, + "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" + }, "extensionsNoDownloadProvider": "ダウンロードプロバイダーの拡張はありません", "@extensionsNoDownloadProvider": { "description": "Empty state - no download providers" @@ -1736,6 +2027,54 @@ "@qualityHiResFlacMaxSubtitle": { "description": "Technical spec for hi-res max" }, + "downloadLossy320": "Lossy 320kbps", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" + }, + "downloadLossyFormat": "Lossy Format", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" + }, + "downloadLossy320Format": "Lossy 320kbps Format", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" + }, + "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" + }, + "downloadLossyMp3": "MP3 320kbps", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" + }, + "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" + }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, + "downloadLossyOpus256": "Opus 256kbps", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" + }, + "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" + }, + "downloadLossyOpus128": "Opus 128kbps", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" + }, + "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" + }, "qualityNote": "実際の品質はサービスからのトラックの可用性に依存します", "@qualityNote": { "description": "Note about quality availability" @@ -1860,6 +2199,14 @@ "@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" @@ -2141,6 +2488,30 @@ "@libraryShowDuplicateIndicatorSubtitle": { "description": "Subtitle for duplicate indicator toggle" }, + "libraryAutoScan": "Auto Scan", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" + }, + "libraryAutoScanSubtitle": "Automatically scan your library for new files", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" + }, + "libraryAutoScanOff": "Off", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" + }, + "libraryAutoScanOnOpen": "Every app open", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" + }, + "libraryAutoScanDaily": "Daily", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" + }, + "libraryAutoScanWeekly": "Weekly", + "@libraryAutoScanWeekly": { + "description": "Auto scan once per week" + }, "libraryActions": "アクション", "@libraryActions": { "description": "Section header for library actions" @@ -2198,6 +2569,15 @@ } } }, + "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } + }, "libraryLastScanned": "最終スキャン: {time}", "@libraryLastScanned": { "description": "Last scan time display", @@ -2215,6 +2595,10 @@ "@libraryScanning": { "description": "Status during scan" }, + "libraryScanFinalizing": "Finalizing library...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, "libraryScanProgress": "{progress}% of {total} files", "@libraryScanProgress": { "description": "Scan progress display", @@ -2312,6 +2696,30 @@ "@libraryFilterFormat": { "description": "Filter section - file format" }, + "libraryFilterMetadata": "Metadata", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" + }, + "libraryFilterMetadataComplete": "Complete metadata", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" + }, + "libraryFilterMetadataMissingAny": "Missing any metadata", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Missing year", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Missing genre", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, "libraryFilterSort": "Sort", "@libraryFilterSort": { "description": "Filter section - sort order" @@ -2324,6 +2732,22 @@ "@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" @@ -2676,6 +3100,38 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichFieldsTitle": "Fields to update", + "@trackReEnrichFieldsTitle": { + "description": "Section title for field selection in re-enrich dialog" + }, + "trackReEnrichFieldCover": "Cover Art", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" + }, + "trackReEnrichFieldLyrics": "Lyrics", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" + }, + "trackReEnrichFieldBasicTags": "Album, Album Artist", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + }, + "trackReEnrichFieldTrackInfo": "Track & Disc Number", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Select All", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, "trackEditMetadata": "メタデータを編集", "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" @@ -2718,6 +3174,47 @@ "@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" + } + } + }, + "queueFlacFindingProgress": "Finding FLAC matches... ({current}/{total})", + "@queueFlacFindingProgress": { + "description": "Snackbar while resolving remote matches for local FLAC redownloads", + "placeholders": { + "current": { + "type": "int" + }, + "total": { + "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", @@ -2766,6 +3263,22 @@ } } }, + "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" + } + } + }, + "trackConvertLosslessHint": "Lossless conversion — no quality loss", + "@trackConvertLosslessHint": { + "description": "Hint shown when converting between lossless formats" + }, "trackConvertConverting": "オーディオを変換中...", "@trackConvertConverting": { "description": "Snackbar while converting" @@ -2883,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -2916,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Added to \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -2987,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Playlist is empty", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3048,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3064,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "カバー画像を変更", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3117,6 +3677,18 @@ } } }, + "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" + } + } + }, "selectionBatchConvertProgress": "Converting {current} of {total}...", "@selectionBatchConvertProgress": { "description": "Snackbar during batch conversion progress", @@ -3155,425 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" - }, - "downloadSingleFilenameFormat": "Single Filename Format", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "downloadSingleFilenameFormatDescription": "Filename pattern for singles and EPs. Uses the same tags as the album format.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" - }, - "optionsDefaultSearchTab": "Default Search Tab", - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" - }, - "optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" - }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" - }, - "optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" - }, - "optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" - }, - "optionsArtistTagMode": "Artist Tag Mode", - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" - }, - "optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" - }, - "optionsArtistTagModeJoined": "Single joined value", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" - }, - "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" - }, - "optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus", - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" - }, - "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" - }, - "dialogDownload": "Download", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" - }, - "searchSortTitle": "Sort Results", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" - }, - "searchSortDefault": "Default", - "@searchSortDefault": { - "description": "Sort option - default API order" - }, - "searchSortTitleAZ": "Title (A-Z)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "searchSortTitleZA": "Title (Z-A)", - "@searchSortTitleZA": { - "description": "Sort option - title descending" - }, - "searchSortArtistAZ": "Artist (A-Z)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" - }, - "searchSortArtistZA": "Artist (Z-A)", - "@searchSortArtistZA": { - "description": "Sort option - artist descending" - }, - "searchSortDurationShort": "Duration (Shortest)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" - }, - "searchSortDurationLong": "Duration (Longest)", - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" - }, - "searchSortDateOldest": "Release Date (Oldest)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "searchSortDateNewest": "Release Date (Newest)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" - }, - "providerPriorityFallbackExtensionsTitle": "Extension Fallback", - "@providerPriorityFallbackExtensionsTitle": { - "description": "Section title for choosing which download extensions can be used as fallback providers" - }, - "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" - }, - "providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.", - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "trackLyricsNotInFile": "No lyrics found in this file", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" - }, - "trackFetchOnlineLyrics": "Fetch from Online", - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" - }, - "storeAddRepoTitle": "Add Extension Repository", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" - }, - "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" - }, - "storeRepoUrlLabel": "Repository URL", - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" - }, - "storeRepoUrlHint": "https://github.com/user/repo", - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" - }, - "storeRepoUrlHelper": "e.g. https://github.com/user/extensions-repo", - "@storeRepoUrlHelper": { - "description": "Helper text below the repository URL input field" - }, - "storeAddRepoButton": "Add Repository", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "storeChangeRepoTooltip": "Change repository", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" - }, - "storeRepoDialogTitle": "Extension Repository", - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" - }, - "storeRepoDialogCurrent": "Current repository:", - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" - }, - "storeNewRepoUrlLabel": "New Repository URL", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" - }, - "storeLoadError": "Failed to load repository", - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" - }, - "storeEmptyNoExtensions": "No extensions available", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" - }, - "storeEmptyNoResults": "No extensions found", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" - }, - "extensionsFallbackTitle": "Fallback Extensions", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" - }, - "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" - }, - "downloadLossy320": "Lossy 320kbps", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" - }, - "downloadLossyFormat": "Lossy Format", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" - }, - "downloadLossy320Format": "Lossy 320kbps Format", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" - }, - "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" - }, - "downloadLossyMp3": "MP3 320kbps", - "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" - }, - "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" - }, - "downloadLossyOpus256": "Opus 256kbps", - "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" - }, - "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" - }, - "downloadLossyOpus128": "Opus 128kbps", - "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" - }, - "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" - }, - "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" - }, - "libraryAutoScan": "Auto Scan", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" - }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" - }, - "libraryAutoScanOff": "Off", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" - }, - "libraryAutoScanOnOpen": "Every app open", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "libraryAutoScanDaily": "Daily", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" - }, - "libraryAutoScanWeekly": "Weekly", - "@libraryAutoScanWeekly": { - "description": "Auto scan once per week" - }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "libraryScanFinalizing": "Finalizing library...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" - }, - "libraryFilterMetadata": "Metadata", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" - }, - "libraryFilterMetadataComplete": "Complete metadata", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" - }, - "libraryFilterMetadataMissingAny": "Missing any metadata", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" - }, - "libraryFilterMetadataMissingYear": "Missing year", - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" - }, - "libraryFilterMetadataMissingGenre": "Missing genre", - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" - }, - "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" - }, - "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" - }, - "trackReEnrichFieldsTitle": "Fields to update", - "@trackReEnrichFieldsTitle": { - "description": "Section title for field selection in re-enrich dialog" - }, - "trackReEnrichFieldCover": "Cover Art", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" - }, - "trackReEnrichFieldLyrics": "Lyrics", - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" - }, - "trackReEnrichFieldBasicTags": "Album, Album Artist", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" - }, - "trackReEnrichFieldTrackInfo": "Track & Disc Number", - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" - }, - "trackReEnrichFieldReleaseInfo": "Date & ISRC", - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" - }, - "trackReEnrichFieldExtra": "Genre, Label, Copyright", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" - }, - "trackReEnrichSelectAll": "Select All", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" - }, - "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" - } - } - }, - "queueFlacFindingProgress": "Finding FLAC matches... ({current}/{total})", - "@queueFlacFindingProgress": { - "description": "Snackbar while resolving remote matches for local FLAC redownloads", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "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" - } - } - }, - "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" - } - } - }, - "trackConvertLosslessHint": "Lossless conversion — no quality loss", - "@trackConvertLosslessHint": { - "description": "Hint shown when converting between lossless formats" - }, - "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" - } - } + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tap to insert tag:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "SongLink Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Language", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Language code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Unsupported audio format", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Samples", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Scanning local library", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "No search providers yet", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Install an extension to continue.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From 13c46d0f5e41752900c66d2211791a171e4d95ce Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:10 +0700 Subject: [PATCH 006/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 704 ++++++++++++++++++++++------------------ 1 file changed, 383 insertions(+), 321 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index ec613a16..1e1e4add 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "No search providers yet", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "지원 항목: 트랙, 앨범, 플레이리스트, 아티스트 URLs", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Artist Tag Mode", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "취소", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Lyrics not available for this track", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Download Priority", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Added to \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Playlist is empty", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Change cover image", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tap to insert tag:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "SongLink Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Language", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Language code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Unsupported audio format", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Samples", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Scanning local library", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "No search providers yet", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Install an extension to continue.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From 0189f576c7c2ea2641c8c1bd483ab6a5d3a5aa95 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:11 +0700 Subject: [PATCH 007/137] New translations app_en.arb (Dutch) [ci skip] --- lib/l10n/arb/app_nl.arb | 704 ++++++++++++++++++++++------------------ 1 file changed, 383 insertions(+), 321 deletions(-) diff --git a/lib/l10n/arb/app_nl.arb b/lib/l10n/arb/app_nl.arb index 1b3e1529..f0e0e5b2 100644 --- a/lib/l10n/arb/app_nl.arb +++ b/lib/l10n/arb/app_nl.arb @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "No search providers yet", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Supports: Track, Album, Playlist, Artist URLs", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Artist Tag Mode", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Cancel", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Lyrics not available for this track", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Download Priority", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Added to \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Playlist is empty", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Change cover image", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tap to insert tag:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "SongLink Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Language", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Language code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Unsupported audio format", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Samples", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Scanning local library", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "No search providers yet", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Install an extension to continue.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From c886d553176ff0d9f202243ac277d0ebe6c6440b Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:13 +0700 Subject: [PATCH 008/137] New translations app_en.arb (Portuguese) [ci skip] --- lib/l10n/arb/app_pt_PT.arb | 706 ++++++++++++++++++++----------------- 1 file changed, 384 insertions(+), 322 deletions(-) diff --git a/lib/l10n/arb/app_pt_PT.arb b/lib/l10n/arb/app_pt_PT.arb index db8f84ac..2a110347 100644 --- a/lib/l10n/arb/app_pt_PT.arb +++ b/lib/l10n/arb/app_pt_PT.arb @@ -1,5 +1,5 @@ { - "@@locale": "pt_PT", + "@@locale": "pt-PT", "@@last_modified": "2026-04-28", "appName": "SpotiFLAC Mobile", "@appName": { @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "No search providers yet", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Suporte: Faixas, Álbuns, Playlists, URLs de Artista", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Artist Tag Mode", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Cancelar", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Letra não disponível para esta faixa", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Prioridade de Download", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Added to \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Playlist is empty", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Change cover image", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tap to insert tag:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "SongLink Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Language", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Language code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Unsupported audio format", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Samples", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Scanning local library", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "No search providers yet", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Install an extension to continue.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From e827a26458dab704737aa2779780bd51d0387631 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:14 +0700 Subject: [PATCH 009/137] New translations app_en.arb (Russian) [ci skip] --- lib/l10n/arb/app_ru.arb | 726 ++++++++++++++++++++++------------------ 1 file changed, 394 insertions(+), 332 deletions(-) diff --git a/lib/l10n/arb/app_ru.arb b/lib/l10n/arb/app_ru.arb index 464a34dd..560b48ad 100644 --- a/lib/l10n/arb/app_ru.arb +++ b/lib/l10n/arb/app_ru.arb @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "No search providers yet", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Поддерживается: Трек, Альбом, Плейлист, URL исполнителя", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Альбомы", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Треки", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Artist Tag Mode", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Отмена", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -759,7 +829,7 @@ "@dialogDeleteSelectedTitle": { "description": "Dialog title - delete selected items" }, - "dialogDeleteSelectedMessage": "Удалить {count} {count, plural, one{трек} few{трека} many{треков} other{треков}} из истории?\n\nЭто также удалит файлы из хранилища.", + "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": { @@ -838,7 +908,7 @@ "@snackbarCredentialsCleared": { "description": "Snackbar - Spotify credentials removed" }, - "snackbarDeletedTracks": "Удалено {count} {count, plural, one{трек} few{трека} many{треков} other{треков}}", + "snackbarDeletedTracks": "Deleted {count} {count, plural, =1{track} other{tracks}}", "@snackbarDeletedTracks": { "description": "Snackbar - tracks deleted", "placeholders": { @@ -928,6 +998,10 @@ "@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" @@ -1453,7 +1527,7 @@ } } }, - "tracksCount": "{count, plural, one{{count} трек} few{{count} трека} many{{count} треков} other{{count} треков}}", + "tracksCount": "{count, plural, =1{1 track} other{{count} tracks}}", "@tracksCount": { "description": "Track count display", "placeholders": { @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Текст песни недоступен для этого трека", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Приоритет скачивания", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320 кбит/с", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Наилучшая совместимость, ~10 Мб на трек", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256 кбит/с", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128 кбит/с", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Минимальный размер, ~4 Мб на трек", "@downloadLossyOpus128Subtitle": { @@ -2096,7 +2211,7 @@ "@downloadedAlbumDeleteSelected": { "description": "Button - delete selected tracks" }, - "downloadedAlbumDeleteMessage": "Удалить {count} {count, plural, one{трек} few{трека} many{треков} other{треков}} из этого альбома?\n\nЭто также удалит файлы из хранилища.", + "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": { @@ -2122,7 +2237,7 @@ "@downloadedAlbumTapToSelect": { "description": "Selection hint" }, - "downloadedAlbumDeleteCount": "Удалить {count} {count, plural, one{трек} few{трека} many{треков} other{треков}}", + "downloadedAlbumDeleteCount": "Delete {count} {count, plural, =1{track} other{tracks}}", "@downloadedAlbumDeleteCount": { "description": "Delete button text with count", "placeholders": { @@ -2445,7 +2560,7 @@ "@libraryAboutDescription": { "description": "Description of local library feature" }, - "libraryTracksUnit": "{count, plural, one{трек} few{трека} many{треков} other{треков}}", + "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", "@libraryTracksUnit": { "description": "Unit label for tracks count (without the number itself)", "placeholders": { @@ -2637,7 +2752,7 @@ "@timeJustNow": { "description": "Relative time - less than a minute ago" }, - "timeMinutesAgo": "{count, plural, one{{count} минуту} few{{count} минуты} many{{count} минут} other{{count} минут}} назад", + "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", "@timeMinutesAgo": { "description": "Relative time - minutes ago", "placeholders": { @@ -2646,7 +2761,7 @@ } } }, - "timeHoursAgo": "{count, plural, one{{count} час} few{{count} часа} many{{count} часов} other{{count} часов}} назад", + "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", "@timeHoursAgo": { "description": "Relative time - hours ago", "placeholders": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Плейлисты", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3305,7 +3424,7 @@ "@collectionNoPlaylistsSubtitle": { "description": "Empty state subtitle when user has no playlists" }, - "collectionPlaylistTracks": "{count, plural, one{{count} трек} few{{count} трека} many{{count} треков} other{{count} треков}}", + "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", "@collectionPlaylistTracks": { "description": "Track count label for custom playlists", "placeholders": { @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Добавлено в \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Плейлист пуст", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Добавить в Любимое", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Изменить обложку", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3470,7 +3632,7 @@ "@collectionPlaylistRemoveCover": { "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "selectionShareCount": "Отправить {count} {count, plural, one{трек} few{трека} many{треков} other{треков}}", + "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", "@selectionShareCount": { "description": "Share button text with count in selection mode", "placeholders": { @@ -3483,7 +3645,7 @@ "@selectionShareNoFiles": { "description": "Snackbar when no selected files exist on disk" }, - "selectionConvertCount": "Конвертировать {count} {count, plural, one{трек} few{трека} many{треков} other{треков}}", + "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", "@selectionConvertCount": { "description": "Convert button text with count in selection mode", "placeholders": { @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Папка названная в честь тега Альбома Артиста", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Папка названная в честь тега Трека Артиста", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Приоритет к поставщику текста песни", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "description": "Settings item title for lyrics provider order" }, "lyricsProvidersDescription": "Включайте, выключайте, переупорядочивайте источники текстов. Поставщики связаны сверху вниз пока проводится поиск текста.", "@lyricsProvidersDescription": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Поставщик расширений", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Нажмите для вставки тега:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "Регион SongLink", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: включение перевода", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Язык Musixmatch", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Код языка", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Авто", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Неподдерживаемый аудио формат", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Разрядность", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Сэмплы", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Авто", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Сканирование локальной библиотеки", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "No search providers yet", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Install an extension to continue.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Альбомы", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Треки", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From 2f54fe6cf61474619c28b1774128fa102eb5796d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:15 +0700 Subject: [PATCH 010/137] New translations app_en.arb (Turkish) [ci skip] --- lib/l10n/arb/app_tr.arb | 1038 +++++++++++++++++++++------------------ 1 file changed, 548 insertions(+), 490 deletions(-) diff --git a/lib/l10n/arb/app_tr.arb b/lib/l10n/arb/app_tr.arb index 6a0a1c5e..b93547fa 100644 --- a/lib/l10n/arb/app_tr.arb +++ b/lib/l10n/arb/app_tr.arb @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "Henüz arama sağlayıcısı yok", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Devam etmek için bir eklenti yükleyin.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Desteklenen linkler: Şarkı, Albüm, Çalma Listesi, Sanatçı linkleri", "@homeSupports": { "description": "Info text about supported URL types" @@ -89,6 +97,14 @@ "@downloadFilenameFormat": { "description": "Setting for output filename pattern" }, + "downloadSingleFilenameFormat": "Single Dosya Adı Formatı", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" + }, + "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" + }, "downloadFolderOrganization": "Dosya Organizasyonu", "@downloadFolderOrganization": { "description": "Title of the folder organization picker bottom sheet" @@ -150,6 +166,14 @@ } } }, + "optionsDefaultSearchTab": "Varsayılan Arama Sekmesi", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" + }, + "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" + }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -190,6 +214,100 @@ "@optionsMaxQualityCoverSubtitle": { "description": "Subtitle for max quality cover" }, + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" + }, + "optionsReplayGainSubtitleOn": "Ses yüksekliğini tara ve ReplayGain etiketlerini göm (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" + }, + "optionsReplayGainSubtitleOff": "Devre dışı: Ses normalleştirme etiketi yok", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" + }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "optionsArtistTagMode": "Sanatçı Etiketi Modu", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" + }, + "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" + }, + "optionsArtistTagModeJoined": "Birleşik tek değer", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" + }, + "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" + }, + "optionsArtistTagModeSplitVorbis": "FLAC/Opus için ayrılmış etiketler", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" + }, + "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" + }, "optionsExtensionStore": "Eklenti Deposu", "@optionsExtensionStore": { "description": "Show/hide store tab" @@ -610,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Dil Seçin", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "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" + }, + "setupLanguageSystemDefault": "Sistem Varsayılanı", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "İptal", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -868,6 +998,10 @@ "@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" @@ -1126,6 +1260,18 @@ "@providerPriorityInfo": { "description": "Info tip about fallback behavior" }, + "providerPriorityFallbackExtensionsTitle": "Uzantı Yedeği", + "@providerPriorityFallbackExtensionsTitle": { + "description": "Section title for choosing which download extensions can be used as fallback providers" + }, + "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" + }, + "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" + }, "providerBuiltIn": "Legacy", "@providerBuiltIn": { "description": "Legacy label retained for old generated localization compatibility" @@ -1482,10 +1628,27 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Kaynak: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Bu parça için şarkı sözü mevcut değil", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" }, + "trackLyricsNotInFile": "Bu dosyada şarkı sözü bulunamadı", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" + }, + "trackFetchOnlineLyrics": "İnternetten Getir", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" + }, "trackLyricsTimeout": "İstek zaman aşımına uğradı. Daha sonra tekrar deneyin.", "@trackLyricsTimeout": { "description": "Message when lyrics request times out" @@ -1764,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "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" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "İndirme Önceliği", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1772,6 +1959,14 @@ "@extensionsDownloadPrioritySubtitle": { "description": "Subtitle for download priority" }, + "extensionsFallbackTitle": "Yedekleme Uzantıları", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" + }, + "extensionsFallbackSubtitle": "Hangi yüklü indirme uzantılarının yedekleme olarak kullanılabileceğini seçin", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" + }, "extensionsNoDownloadProvider": "İndirme sağlayıcısı olan uzantı yok", "@extensionsNoDownloadProvider": { "description": "Empty state - no download providers" @@ -1850,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "En iyi uyumluluk, parça başına ~10 Mb", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "En iyi mobil uyumluluk, M4A konteyner", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "En iyi Opus kalitesi, parça başına ~8 Mb", "@downloadLossyOpus256Subtitle": { @@ -1866,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "En küçük boyut, parça başına ~4 Mb", "@downloadLossyOpus128Subtitle": { @@ -2366,6 +2569,15 @@ } } }, + "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": { "description": "Last scan time display", @@ -2383,6 +2595,10 @@ "@libraryScanning": { "description": "Status during scan" }, + "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", @@ -2480,6 +2696,30 @@ "@libraryFilterFormat": { "description": "Filter section - file format" }, + "libraryFilterMetadata": "Meta veriler", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" + }, + "libraryFilterMetadataComplete": "Tam meta veriler", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" + }, + "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" @@ -2492,6 +2732,22 @@ "@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" @@ -2844,6 +3100,38 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichFieldsTitle": "Fields to update", + "@trackReEnrichFieldsTitle": { + "description": "Section title for field selection in re-enrich dialog" + }, + "trackReEnrichFieldCover": "Cover Art", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" + }, + "trackReEnrichFieldLyrics": "Lyrics", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" + }, + "trackReEnrichFieldBasicTags": "Album, Album Artist", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + }, + "trackReEnrichFieldTrackInfo": "Track & Disc Number", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Select All", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, "trackEditMetadata": "Edit Metadata", "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" @@ -3108,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favori Sanatçılar", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Çalma listeleri", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3141,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 sanatçı} other{{count} sanatçı}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "\"{playlistName}\"e eklendi", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3212,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "Henüz favori sanatçım yok", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Bir sanatçının sayfasındaki kalbe dokunarak onu burada tutmaya devam edin", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Çalma listesi boş", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3273,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3289,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Change cover image", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3392,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3440,10 +3775,6 @@ "@lyricsProvidersDiscardContent": { "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "lyricsProviderSpotifyApiDesc": "Topluluk API'si üzerinden senkronize Spotify sözleri", - "@lyricsProviderSpotifyApiDesc": { - "description": "Description for Spotify Lyrics API provider" - }, "lyricsProviderLrclibDesc": "Open-source synced lyrics database", "@lyricsProviderLrclibDesc": { "description": "Description for LRCLIB provider" @@ -3464,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3486,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3578,11 +3913,11 @@ }, "downloadLocationSubtitle": "İndirdiğiniz parçaları nereye kaydedeceğinizi seçin", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "Uygulama Klasörü (Önerilir)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Varsayılan olarak Müzik/SpotiFLAC klasörüne kaydeder", "@storageModeAppFolderSubtitle": { @@ -3590,7 +3925,7 @@ }, "storageModeSaf": "Özel Klasör (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "SD kart dahil herhangi bir klasörü seçin", "@storageModeSafSubtitle": { @@ -3598,7 +3933,7 @@ }, "downloadFilenameDescription": "Yer tutucu olarak {artist}, {title}, {album}, {track}, {year}, {date}, {disc} ifadelerini kullanın.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Etiket eklemek için dokunun:", "@downloadFilenameInsertTag": { @@ -3606,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Single şarkılar ve EP'ler ayrı bir klasöre kaydedildi", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3618,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "SongLink Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Language", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Language code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Unsupported audio format", "@snackbarUnsupportedAudioFormat": { @@ -3970,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4002,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Samples", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4014,179 +4397,6 @@ "@audioAnalysisRescanning": { "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "downloadSingleFilenameFormat": "Single Dosya Adı Formatı", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "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" - }, - "optionsDefaultSearchTab": "Varsayılan Arama Sekmesi", - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" - }, - "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" - }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" - }, - "optionsReplayGainSubtitleOn": "Ses yüksekliğini tara ve ReplayGain etiketlerini göm (EBU R128)", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" - }, - "optionsReplayGainSubtitleOff": "Devre dışı: Ses normalleştirme etiketi yok", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" - }, - "optionsArtistTagMode": "Sanatçı Etiketi Modu", - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" - }, - "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" - }, - "optionsArtistTagModeJoined": "Birleşik tek değer", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" - }, - "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" - }, - "optionsArtistTagModeSplitVorbis": "FLAC/Opus için ayrılmış etiketler", - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" - }, - "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" - }, - "providerPriorityFallbackExtensionsTitle": "Uzantı Yedeği", - "@providerPriorityFallbackExtensionsTitle": { - "description": "Section title for choosing which download extensions can be used as fallback providers" - }, - "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" - }, - "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" - }, - "trackLyricsNotInFile": "Bu dosyada şarkı sözü bulunamadı", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" - }, - "trackFetchOnlineLyrics": "İnternetten Getir", - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" - }, - "extensionsFallbackTitle": "Yedekleme Uzantıları", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" - }, - "extensionsFallbackSubtitle": "Hangi yüklü indirme uzantılarının yedekleme olarak kullanılabileceğini seçin", - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" - }, - "libraryFilesUnit": "{count, plural, =1{dosya} other{dosyalar}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "libraryScanFinalizing": "Kütüphane sonlandırılıyor...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" - }, - "libraryFilterMetadata": "Meta veriler", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" - }, - "libraryFilterMetadataComplete": "Tam meta veriler", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" - }, - "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" - }, - "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" - }, - "trackReEnrichFieldsTitle": "Fields to update", - "@trackReEnrichFieldsTitle": { - "description": "Section title for field selection in re-enrich dialog" - }, - "trackReEnrichFieldCover": "Cover Art", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" - }, - "trackReEnrichFieldLyrics": "Lyrics", - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" - }, - "trackReEnrichFieldBasicTags": "Album, Album Artist", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" - }, - "trackReEnrichFieldTrackInfo": "Track & Disc Number", - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" - }, - "trackReEnrichFieldReleaseInfo": "Date & ISRC", - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" - }, - "trackReEnrichFieldExtra": "Genre, Label, Copyright", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" - }, - "trackReEnrichSelectAll": "Select All", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" - }, "extensionsSearchWith": "Search with {providerName}", "@extensionsSearchWith": { "description": "Extensions page - subtitle for default metadata search provider option", @@ -4206,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4374,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Scanning local library", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4493,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "Henüz arama sağlayıcısı yok", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Devam etmek için bir eklenti yükleyin.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Dil Seçin", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "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" - }, - "setupLanguageSystemDefault": "Sistem Varsayılanı", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Kaynak: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "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" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "En iyi mobil uyumluluk, M4A konteyner", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favori Sanatçılar", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 sanatçı} other{{count} sanatçı}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "Henüz favori sanatçım yok", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Bir sanatçının sayfasındaki kalbe dokunarak onu burada tutmaya devam edin", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5070,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5538,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From 0c0f2d54adf4c7e538b7f5eefb3fb9e7a7e631bb Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:17 +0700 Subject: [PATCH 011/137] New translations app_en.arb (Ukrainian) [ci skip] --- lib/l10n/arb/app_uk.arb | 704 ++++++++++++++++++++++------------------ 1 file changed, 383 insertions(+), 321 deletions(-) diff --git a/lib/l10n/arb/app_uk.arb b/lib/l10n/arb/app_uk.arb index 56210bf5..806840ec 100644 --- a/lib/l10n/arb/app_uk.arb +++ b/lib/l10n/arb/app_uk.arb @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "No search providers yet", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Підтримує: URL-адреси треків, альбомів, списків відтворення, виконавців", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Режим тегу виконавця", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Скасувати", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Текст пісні для цього треку недоступний", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Пріоритет завантаження", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320 кбіт/с", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Найкраща сумісність, ~10 МБ на доріжку", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256 кбіт/с", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Opus найкращої якості, ~8 МБ на трек", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128 кбіт/с", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Найменший розмір, ~4 МБ на доріжку", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Списки відтворення", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Додано до \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Список відтворення порожній", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Додати до улюблених", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Змінити зображення обкладинки", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "description": "Settings item title for lyrics provider order" }, "lyricsProvidersDescription": "Увімкнення, вимкнення та зміна порядку джерел текстів пісень. Постачальники перевірятимуть зверху вниз, доки не буде знайдено текст пісні.", "@lyricsProvidersDescription": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Постачальник розширень", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Натисніть, щоб вставити тег:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Фільтри імені виконавця", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "Регіон SongLink", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Включити переклад", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Включити романізацію", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Мова Musixmatch", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Код мови", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Авто", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Непідтримуваний аудіоформат", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Глибина бітів", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Семпли", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Авто", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Автоматично вибирати найкращий доступний", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Використовувати {extensionName} головну стрічку", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Сканування локальної бібліотеки", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "No search providers yet", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Install an extension to continue.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From 5f3928399cd4f9d2a9f3e4af74e0349ede7b8711 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:18 +0700 Subject: [PATCH 012/137] New translations app_en.arb (Chinese Simplified) [ci skip] --- lib/l10n/arb/app_zh_CN.arb | 706 ++++++++++++++++++++----------------- 1 file changed, 384 insertions(+), 322 deletions(-) diff --git a/lib/l10n/arb/app_zh_CN.arb b/lib/l10n/arb/app_zh_CN.arb index a8a5259a..a273ef8c 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 Mobile", "@appName": { @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "暂无搜索提供商", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "安装一个拓展以继续。", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "支持:歌曲、专辑、播放列表、艺人网址", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "艺术家标签模式", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Cancel", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Lyrics not available for this track", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Download Priority", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Added to \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Playlist is empty", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Change cover image", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tap to insert tag:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "SongLink Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Language", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Language code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Unsupported audio format", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Samples", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Scanning local library", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "暂无搜索提供商", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "安装一个拓展以继续。", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From 0eb4e15a8fe82795736f3134ce1341585caeb649 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:20 +0700 Subject: [PATCH 013/137] New translations app_en.arb (Chinese Traditional) [ci skip] --- lib/l10n/arb/app_zh_TW.arb | 706 ++++++++++++++++++++----------------- 1 file changed, 384 insertions(+), 322 deletions(-) diff --git a/lib/l10n/arb/app_zh_TW.arb b/lib/l10n/arb/app_zh_TW.arb index 1f71c18c..e158fb3b 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 Mobile", "@appName": { @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "No search providers yet", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Supports: Track, Album, Playlist, Artist URLs", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Artist Tag Mode", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Cancel", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Lyrics not available for this track", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Download Priority", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Added to \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Playlist is empty", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Change cover image", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tap to insert tag:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "SongLink Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Language", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Language code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Unsupported audio format", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Samples", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Scanning local library", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "No search providers yet", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Install an extension to continue.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From 439418e419a345e533c451ee8083cfb406f9ee3e Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:21 +0700 Subject: [PATCH 014/137] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 1410 ++++++++++++++++++++------------------- 1 file changed, 736 insertions(+), 674 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 14418a9d..0913b8ce 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -97,6 +97,14 @@ "@downloadFilenameFormat": { "description": "Setting for output filename pattern" }, + "downloadSingleFilenameFormat": "Format Nama Berkas Tunggal", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" + }, + "downloadSingleFilenameFormatDescription": "Pola nama file untuk single dan EP. Menggunakan tag yang sama dengan format album.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" + }, "downloadFolderOrganization": "Organisasi Folder", "@downloadFolderOrganization": { "description": "Title of the folder organization picker bottom sheet" @@ -206,6 +214,100 @@ "@optionsMaxQualityCoverSubtitle": { "description": "Subtitle for max quality cover" }, + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" + }, + "optionsReplayGainSubtitleOn": "Pindai kenyaringan dan sematkan tag ReplayGain (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" + }, + "optionsReplayGainSubtitleOff": "Dinonaktifkan: tidak ada tag normalisasi kenyaringan", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" + }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "optionsArtistTagMode": "Mode Tag Artis", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" + }, + "optionsArtistTagModeDescription": "Pilih bagaimana beberapa artis dicantumkan dalam tag yang disematkan.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" + }, + "optionsArtistTagModeJoined": "Nilai gabungan tunggal", + "@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": { + "description": "Subtitle for joined artist tag mode" + }, + "optionsArtistTagModeSplitVorbis": "Tag terpisah untuk 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": { + "description": "Subtitle for split Vorbis artist tag mode" + }, "optionsExtensionStore": "Extension Repo", "@optionsExtensionStore": { "description": "Show/hide store tab" @@ -317,10 +419,6 @@ "@storeTitle": { "description": "Store screen title" }, - "storeLoadError": "Failed to load repository", - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" - }, "storeSearch": "Cari ekstensi...", "@storeSearch": { "description": "Store search placeholder" @@ -630,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Batal", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -658,6 +768,10 @@ "@dialogImport": { "description": "Dialog button - import data" }, + "dialogDownload": "Download", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, "dialogDiscard": "Buang", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -986,6 +1100,46 @@ "@searchPlaylists": { "description": "Search result category - playlists" }, + "searchSortTitle": "Sort Results", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" + }, + "searchSortDefault": "Default", + "@searchSortDefault": { + "description": "Sort option - default API order" + }, + "searchSortTitleAZ": "Title (A-Z)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" + }, + "searchSortTitleZA": "Title (Z-A)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" + }, + "searchSortArtistAZ": "Artist (A-Z)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" + }, + "searchSortArtistZA": "Artist (Z-A)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" + }, + "searchSortDurationShort": "Duration (Shortest)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" + }, + "searchSortDurationLong": "Duration (Longest)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" + }, + "searchSortDateOldest": "Release Date (Oldest)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" + }, + "searchSortDateNewest": "Release Date (Newest)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" + }, "tooltipPlay": "Putar", "@tooltipPlay": { "description": "Tooltip - play button" @@ -1474,10 +1628,27 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Lirik tidak tersedia untuk lagu ini", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" }, + "trackLyricsNotInFile": "No lyrics found in this file", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" + }, + "trackFetchOnlineLyrics": "Fetch from Online", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" + }, "trackLyricsTimeout": "Permintaan timeout. Coba lagi nanti.", "@trackLyricsTimeout": { "description": "Message when lyrics request times out" @@ -1573,6 +1744,58 @@ "@storeClearFilters": { "description": "Button to clear all filters" }, + "storeAddRepoTitle": "Add Extension Repository", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" + }, + "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" + }, + "storeRepoUrlLabel": "Repository URL", + "@storeRepoUrlLabel": { + "description": "Label for the repository URL input field" + }, + "storeRepoUrlHint": "https://github.com/user/repo", + "@storeRepoUrlHint": { + "description": "Hint/placeholder for the repository URL input field" + }, + "storeRepoUrlHelper": "e.g. https://github.com/user/extensions-repo", + "@storeRepoUrlHelper": { + "description": "Helper text below the repository URL input field" + }, + "storeAddRepoButton": "Add Repository", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" + }, + "storeChangeRepoTooltip": "Change repository", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" + }, + "storeRepoDialogTitle": "Extension Repository", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" + }, + "storeRepoDialogCurrent": "Current repository:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" + }, + "storeNewRepoUrlLabel": "New Repository URL", + "@storeNewRepoUrlLabel": { + "description": "Label for the new repository URL field inside the dialog" + }, + "storeLoadError": "Failed to load repository", + "@storeLoadError": { + "description": "Error heading when the store cannot be loaded" + }, + "storeEmptyNoExtensions": "No extensions available", + "@storeEmptyNoExtensions": { + "description": "Message when store has no extensions" + }, + "storeEmptyNoResults": "No extensions found", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" + }, "extensionDefaultProvider": "Default Search", "@extensionDefaultProvider": { "description": "Default search provider option" @@ -1704,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Prioritas Unduhan", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1780,6 +2027,54 @@ "@qualityHiResFlacMaxSubtitle": { "description": "Technical spec for hi-res max" }, + "downloadLossy320": "Lossy 320kbps", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" + }, + "downloadLossyFormat": "Lossy Format", + "@downloadLossyFormat": { + "description": "Setting title to pick output format for lossy downloads" + }, + "downloadLossy320Format": "Lossy 320kbps Format", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" + }, + "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" + }, + "downloadLossyMp3": "MP3 320kbps", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" + }, + "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" + }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, + "downloadLossyOpus256": "Opus 256kbps", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" + }, + "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" + }, + "downloadLossyOpus128": "Opus 128kbps", + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" + }, + "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" + }, "qualityNote": "Kualitas sebenarnya tergantung ketersediaan lagu dari layanan", "@qualityNote": { "description": "Note about quality availability" @@ -1804,22 +2099,6 @@ "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" - }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" - }, - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" - }, - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" - }, "downloadUsePrimaryArtistOnly": "Hanya artis utama untuk folder", "@downloadUsePrimaryArtistOnly": { "description": "Setting - strip featured artists from folder name" @@ -1920,6 +2199,14 @@ "@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": "Hapus yang Dipilih", "@downloadedAlbumDeleteSelected": { "description": "Button - delete selected tracks" @@ -2201,6 +2488,30 @@ "@libraryShowDuplicateIndicatorSubtitle": { "description": "Subtitle for duplicate indicator toggle" }, + "libraryAutoScan": "Auto Scan", + "@libraryAutoScan": { + "description": "Setting for automatic library scanning" + }, + "libraryAutoScanSubtitle": "Automatically scan your library for new files", + "@libraryAutoScanSubtitle": { + "description": "Subtitle for auto scan setting" + }, + "libraryAutoScanOff": "Off", + "@libraryAutoScanOff": { + "description": "Auto scan disabled" + }, + "libraryAutoScanOnOpen": "Every app open", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" + }, + "libraryAutoScanDaily": "Daily", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" + }, + "libraryAutoScanWeekly": "Weekly", + "@libraryAutoScanWeekly": { + "description": "Auto scan once per week" + }, "libraryActions": "Actions", "@libraryActions": { "description": "Section header for library actions" @@ -2258,6 +2569,15 @@ } } }, + "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "@libraryFilesUnit": { + "description": "Unit label for files count during library scanning", + "placeholders": { + "count": { + "type": "int" + } + } + }, "libraryLastScanned": "Last scanned: {time}", "@libraryLastScanned": { "description": "Last scan time display", @@ -2275,6 +2595,10 @@ "@libraryScanning": { "description": "Status during scan" }, + "libraryScanFinalizing": "Finalizing library...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, "libraryScanProgress": "{progress}% of {total} files", "@libraryScanProgress": { "description": "Scan progress display", @@ -2372,6 +2696,30 @@ "@libraryFilterFormat": { "description": "Filter section - file format" }, + "libraryFilterMetadata": "Metadata", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" + }, + "libraryFilterMetadataComplete": "Complete metadata", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" + }, + "libraryFilterMetadataMissingAny": "Missing any metadata", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Missing year", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Missing genre", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, "libraryFilterSort": "Sort", "@libraryFilterSort": { "description": "Filter section - sort order" @@ -2384,6 +2732,22 @@ "@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" @@ -2736,6 +3100,38 @@ "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, + "trackReEnrichFieldsTitle": "Fields to update", + "@trackReEnrichFieldsTitle": { + "description": "Section title for field selection in re-enrich dialog" + }, + "trackReEnrichFieldCover": "Cover Art", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" + }, + "trackReEnrichFieldLyrics": "Lyrics", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" + }, + "trackReEnrichFieldBasicTags": "Album, Album Artist", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + }, + "trackReEnrichFieldTrackInfo": "Track & Disc Number", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Select All", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, "trackEditMetadata": "Edit Metadata", "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" @@ -3000,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3033,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Added to \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3104,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Playlist is empty", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3165,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3181,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Change cover image", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3234,6 +3677,18 @@ } } }, + "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" + } + } + }, "selectionBatchConvertProgress": "Converting {current} of {total}...", "@selectionBatchConvertProgress": { "description": "Snackbar during batch conversion progress", @@ -3272,336 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" - }, - "downloadSingleFilenameFormat": "Format Nama Berkas Tunggal", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "downloadSingleFilenameFormatDescription": "Pola nama file untuk single dan EP. Menggunakan tag yang sama dengan format album.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" - }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" - }, - "optionsReplayGainSubtitleOn": "Pindai kenyaringan dan sematkan tag ReplayGain (EBU R128)", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" - }, - "optionsReplayGainSubtitleOff": "Dinonaktifkan: tidak ada tag normalisasi kenyaringan", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" - }, - "optionsArtistTagMode": "Mode Tag Artis", - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" - }, - "optionsArtistTagModeDescription": "Pilih bagaimana beberapa artis dicantumkan dalam tag yang disematkan.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" - }, - "optionsArtistTagModeJoined": "Nilai gabungan tunggal", - "@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": { - "description": "Subtitle for joined artist tag mode" - }, - "optionsArtistTagModeSplitVorbis": "Tag terpisah untuk 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": { - "description": "Subtitle for split Vorbis artist tag mode" - }, - "dialogDownload": "Download", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" - }, - "searchSortTitle": "Sort Results", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" - }, - "searchSortDefault": "Default", - "@searchSortDefault": { - "description": "Sort option - default API order" - }, - "searchSortTitleAZ": "Title (A-Z)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "searchSortTitleZA": "Title (Z-A)", - "@searchSortTitleZA": { - "description": "Sort option - title descending" - }, - "searchSortArtistAZ": "Artist (A-Z)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" - }, - "searchSortArtistZA": "Artist (Z-A)", - "@searchSortArtistZA": { - "description": "Sort option - artist descending" - }, - "searchSortDurationShort": "Duration (Shortest)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" - }, - "searchSortDurationLong": "Duration (Longest)", - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" - }, - "searchSortDateOldest": "Release Date (Oldest)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "searchSortDateNewest": "Release Date (Newest)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" - }, - "trackLyricsNotInFile": "No lyrics found in this file", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" - }, - "trackFetchOnlineLyrics": "Fetch from Online", - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" - }, - "storeAddRepoTitle": "Add Extension Repository", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" - }, - "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" - }, - "storeRepoUrlLabel": "Repository URL", - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" - }, - "storeRepoUrlHint": "https://github.com/user/repo", - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" - }, - "storeRepoUrlHelper": "e.g. https://github.com/user/extensions-repo", - "@storeRepoUrlHelper": { - "description": "Helper text below the repository URL input field" - }, - "storeAddRepoButton": "Add Repository", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "storeChangeRepoTooltip": "Change repository", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" - }, - "storeRepoDialogTitle": "Extension Repository", - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" - }, - "storeRepoDialogCurrent": "Current repository:", - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" - }, - "storeNewRepoUrlLabel": "New Repository URL", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" - }, - "storeEmptyNoExtensions": "No extensions available", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" - }, - "storeEmptyNoResults": "No extensions found", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" - }, - "downloadLossy320": "Lossy 320kbps", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" - }, - "downloadLossyFormat": "Lossy Format", - "@downloadLossyFormat": { - "description": "Setting title to pick output format for lossy downloads" - }, - "downloadLossy320Format": "Lossy 320kbps Format", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" - }, - "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" - }, - "downloadLossyMp3": "MP3 320kbps", - "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" - }, - "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" - }, - "downloadLossyOpus256": "Opus 256kbps", - "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" - }, - "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" - }, - "downloadLossyOpus128": "Opus 128kbps", - "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" - }, - "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" - }, - "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" - }, - "libraryAutoScan": "Auto Scan", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" - }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" - }, - "libraryAutoScanOff": "Off", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" - }, - "libraryAutoScanOnOpen": "Every app open", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" - }, - "libraryAutoScanDaily": "Daily", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" - }, - "libraryAutoScanWeekly": "Weekly", - "@libraryAutoScanWeekly": { - "description": "Auto scan once per week" - }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "libraryScanFinalizing": "Finalizing library...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" - }, - "libraryFilterMetadata": "Metadata", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" - }, - "libraryFilterMetadataComplete": "Complete metadata", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" - }, - "libraryFilterMetadataMissingAny": "Missing any metadata", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" - }, - "libraryFilterMetadataMissingYear": "Missing year", - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" - }, - "libraryFilterMetadataMissingGenre": "Missing genre", - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" - }, - "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" - }, - "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" - }, - "trackReEnrichFieldsTitle": "Fields to update", - "@trackReEnrichFieldsTitle": { - "description": "Section title for field selection in re-enrich dialog" - }, - "trackReEnrichFieldCover": "Cover Art", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" - }, - "trackReEnrichFieldLyrics": "Lyrics", - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" - }, - "trackReEnrichFieldBasicTags": "Album, Album Artist", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" - }, - "trackReEnrichFieldTrackInfo": "Track & Disc Number", - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" - }, - "trackReEnrichFieldReleaseInfo": "Date & ISRC", - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" - }, - "trackReEnrichFieldExtra": "Genre, Label, Copyright", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" - }, - "trackReEnrichSelectAll": "Select All", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" - }, - "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" - } - } + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3661,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3683,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3775,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3787,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3795,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tap to insert tag:", "@downloadFilenameInsertTag": { @@ -3803,131 +3941,159 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { "description": "Setting title for artist folder filter options" }, + "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", + "@downloadCreatePlaylistSourceFolder": { + "description": "Setting to create a subfolder per playlist source" + }, + "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", + "@downloadCreatePlaylistSourceFolderEnabled": { + "description": "Subtitle when playlist folder is enabled" + }, + "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", + "@downloadCreatePlaylistSourceFolderDisabled": { + "description": "Subtitle when playlist folder is disabled" + }, + "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", + "@downloadCreatePlaylistSourceFolderRedundant": { + "description": "Subtitle when folder organization is already set to playlist" + }, "downloadSongLinkRegion": "SongLink Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Language", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Language code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Unsupported audio format", "@snackbarUnsupportedAudioFormat": { @@ -4151,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4183,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Samples", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4214,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4526,298 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "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" - }, - "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": {} - } - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -4935,6 +4853,14 @@ "@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", @@ -5122,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5533,5 +5539,61 @@ "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": {} + } } -} +} \ No newline at end of file From 87131ad633c76e8ca611b927ea67f1461d46e9c5 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:33:23 +0700 Subject: [PATCH 015/137] New translations app_en.arb (Hindi) [ci skip] --- lib/l10n/arb/app_hi.arb | 704 ++++++++++++++++++++++------------------ 1 file changed, 383 insertions(+), 321 deletions(-) diff --git a/lib/l10n/arb/app_hi.arb b/lib/l10n/arb/app_hi.arb index aaadbfce..a765d76f 100644 --- a/lib/l10n/arb/app_hi.arb +++ b/lib/l10n/arb/app_hi.arb @@ -29,6 +29,14 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, + "homeEmptyTitle": "No search providers yet", + "@homeEmptyTitle": { + "description": "Title shown on home when no providers are available yet" + }, + "homeEmptySubtitle": "Install an extension to continue.", + "@homeEmptySubtitle": { + "description": "Subtitle shown on home when no providers are available yet" + }, "homeSupports": "Supports: Track, Album, Playlist, Artist URLs", "@homeSupports": { "description": "Info text about supported URL types" @@ -166,14 +174,6 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsDefaultSearchTabAlbums": "Albums", - "@optionsDefaultSearchTabAlbums": { - "description": "Default search tab option - Albums tab" - }, - "optionsDefaultSearchTabTracks": "Tracks", - "@optionsDefaultSearchTabTracks": { - "description": "Default search tab option - Tracks tab" - }, "optionsSwitchBack": "Choose the default search provider to switch back from an extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" @@ -226,6 +226,64 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, + "trackReplayGain": "Rescan ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "@trackReplayGainSubtitle": { + "description": "Subtitle for the rescan ReplayGain menu option" + }, + "trackReplayGainScanning": "Analyzing loudness...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "ReplayGain tags added", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Failed to add ReplayGain tags", + "@trackReplayGainFailed": { + "description": "Snackbar message when ReplayGain scan/write fails" + }, + "selectionReplayGainCount": "ReplayGain ({count})", + "@selectionReplayGainCount": { + "description": "Batch selection action button label for ReplayGain", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchConfirmTitle": "Add ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" + }, + "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "@replayGainBatchConfirmMessage": { + "description": "Message of the batch ReplayGain confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" + }, + "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "@replayGainBatchSuccess": { + "description": "Snackbar after batch ReplayGain completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, "optionsArtistTagMode": "Artist Tag Mode", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" @@ -670,6 +728,18 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, + "setupLanguageTitle": "Choose Language", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" + }, + "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" + }, + "setupLanguageSystemDefault": "System Default", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" + }, "dialogCancel": "Cancel", "@dialogCancel": { "description": "Dialog button - cancel action" @@ -928,6 +998,10 @@ "@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" @@ -1554,6 +1628,15 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, + "trackLyricsSource": "Source: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, "trackLyricsNotAvailable": "Lyrics not available for this track", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" @@ -1844,6 +1927,30 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, + "extensionsInstalledCount": "{count} extensions installed successfully", + "@extensionsInstalledCount": { + "description": "Success message after installing multiple extensions", + "placeholders": { + "count": { + "type": "int", + "description": "Number of installed extensions" + } + } + }, + "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" + } + } + }, "extensionsDownloadPriority": "Download Priority", "@extensionsDownloadPriority": { "description": "Setting - download provider order" @@ -1938,15 +2045,23 @@ }, "downloadLossyMp3": "MP3 320kbps", "@downloadLossyMp3": { - "description": "lossy format option - MP3 320kbps" + "description": "Lossy format option - MP3 320kbps" }, "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" + }, + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" + }, "downloadLossyOpus256": "Opus 256kbps", "@downloadLossyOpus256": { - "description": "lossy format option - Opus 256kbps" + "description": "Lossy format option - Opus 256kbps" }, "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", "@downloadLossyOpus256Subtitle": { @@ -1954,7 +2069,7 @@ }, "downloadLossyOpus128": "Opus 128kbps", "@downloadLossyOpus128": { - "description": "lossy format option - Opus 128kbps" + "description": "Lossy format option - Opus 128kbps" }, "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", "@downloadLossyOpus128Subtitle": { @@ -3281,6 +3396,10 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, + "collectionFavoriteArtists": "Favorite Artists", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, "collectionPlaylists": "Playlists", "@collectionPlaylists": { "description": "Custom user playlists folder" @@ -3314,6 +3433,15 @@ } } }, + "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "@collectionArtistCount": { + "description": "Artist count label for favorite artists", + "placeholders": { + "count": { + "type": "int" + } + } + }, "collectionAddedToPlaylist": "Added to \"{playlistName}\"", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", @@ -3385,6 +3513,14 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, + "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, "collectionPlaylistEmptyTitle": "Playlist is empty", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" @@ -3446,6 +3582,24 @@ } } }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "@collectionRemovedFromFavoriteArtists": { + "description": "Snackbar after removing artist from favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, "trackOptionAddToLoved": "Add to Loved", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" @@ -3462,6 +3616,14 @@ "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, + "artistOptionAddToFavorites": "Add to Favorite Artists", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, "collectionPlaylistChangeCover": "Change cover image", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" @@ -3565,15 +3727,15 @@ }, "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when Album Artist is used for folder naming" + "description": "Subtitle when album artist is used for folder names" }, "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when Track Artist is used for folder naming" + "description": "Subtitle when track artist is used for folder names" }, "lyricsProvidersTitle": "Lyrics Provider Priority", "@lyricsProvidersTitle": { - "description": "Title for the lyrics provider priority page" + "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": { @@ -3633,6 +3795,10 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, + "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "@lyricsProviderLyricsPlusDesc": { + "description": "Description for LyricsPlus provider" + }, "lyricsProviderExtensionDesc": "Extension provider", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" @@ -3655,7 +3821,7 @@ }, "settingsDonate": "Support Development", "@settingsDonate": { - "description": "Settings menu item - donate" + "description": "Settings menu item - donate page" }, "settingsDonateSubtitle": "Buy the developer a coffee", "@settingsDonateSubtitle": { @@ -3747,11 +3913,11 @@ }, "downloadLocationSubtitle": "Choose where to save your downloaded tracks", "@downloadLocationSubtitle": { - "description": "Subtitle text in Android download location bottom sheet" + "description": "Subtitle shown in the download location picker sheet" }, "storageModeAppFolder": "App Folder (Recommended)", "@storageModeAppFolder": { - "description": "Storage mode option - use legacy app folder" + "description": "Storage mode option - app-managed folder" }, "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", "@storageModeAppFolderSubtitle": { @@ -3759,7 +3925,7 @@ }, "storageModeSaf": "Custom Folder (SAF)", "@storageModeSaf": { - "description": "Storage mode option - use Android SAF picker" + "description": "Storage mode option - Storage Access Framework" }, "storageModeSafSubtitle": "Pick any folder, including SD card", "@storageModeSafSubtitle": { @@ -3767,7 +3933,7 @@ }, "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", "@downloadFilenameDescription": { - "description": "Description text in filename format bottom sheet" + "description": "Description shown in filename format editor" }, "downloadFilenameInsertTag": "Tap to insert tag:", "@downloadFilenameInsertTag": { @@ -3775,11 +3941,11 @@ }, "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is enabled" + "description": "Subtitle when separate singles folder is on" }, "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is disabled" + "description": "Subtitle when separate singles folder is off" }, "downloadArtistNameFilters": "Artist Name Filters", "@downloadArtistNameFilters": { @@ -3787,135 +3953,147 @@ }, "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", "@downloadCreatePlaylistSourceFolder": { - "description": "Setting title for adding a playlist folder prefix before the normal organization structure" + "description": "Setting to create a subfolder per playlist source" }, "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist source folder prefix is enabled" + "description": "Subtitle when playlist folder is enabled" }, "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist source folder prefix is disabled" + "description": "Subtitle when playlist folder is disabled" }, "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when playlist folder prefix setting is redundant because folder organization is already by playlist" + "description": "Subtitle when folder organization is already set to playlist" }, "downloadSongLinkRegion": "SongLink Region", "@downloadSongLinkRegion": { - "description": "Setting title for SongLink country region" + "description": "Setting for SongLink region used during fallback resolution" }, "downloadNetworkCompatibilityMode": "Network Compatibility Mode", "@downloadNetworkCompatibilityMode": { - "description": "Setting title for network compatibility toggle" + "description": "Setting for legacy TLS/network handling" }, "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is enabled" + "description": "Subtitle when network compatibility mode is on" }, "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is disabled" + "description": "Subtitle when network compatibility mode is off" }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { - "description": "Hint shown instead of Ask-quality subtitle when selected provider has no quality options" + "description": "Subtitle when quality picker is disabled due to extension service" }, "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", "@downloadSelectTidalQobuz": { - "description": "Info hint when non-Tidal/Qobuz service is selected" + "description": "Legacy info shown when a provider does not expose quality options" }, "downloadEmbedLyricsDisabled": "Enable metadata embedding first", "@downloadEmbedLyricsDisabled": { - "description": "Subtitle for Embed Lyrics when Embed Metadata is disabled" + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, "downloadNeteaseIncludeTranslation": "Netease: Include Translation", "@downloadNeteaseIncludeTranslation": { - "description": "Toggle title for including Netease translated lyrics" + "description": "Setting to include translated lyrics from Netease" }, "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is enabled" + "description": "Subtitle when Netease translation is on" }, "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is disabled" + "description": "Subtitle when Netease translation is off" }, "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", "@downloadNeteaseIncludeRomanization": { - "description": "Toggle title for including Netease romanized lyrics" + "description": "Setting to include romanized lyrics from Netease" }, "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is enabled" + "description": "Subtitle when Netease romanization is on" }, "downloadNeteaseIncludeRomanizationDisabled": "No romanization", "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is disabled" + "description": "Subtitle when Netease romanization is off" }, "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", "@downloadAppleQqMultiPerson": { - "description": "Toggle title for Apple/QQ multi-person word-by-word lyrics" + "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": { - "description": "Subtitle when multi-person word-by-word is enabled" + "description": "Subtitle when multi-person lyrics is on" }, "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person word-by-word is disabled" + "description": "Subtitle when multi-person lyrics is off" + }, + "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "@downloadAppleElrcWordSync": { + "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" + }, + "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "@downloadAppleElrcWordSyncEnabled": { + "description": "Subtitle when Apple Music eLRC word sync is enabled" + }, + "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "@downloadAppleElrcWordSyncDisabled": { + "description": "Subtitle when Apple Music eLRC word sync is disabled" }, "downloadMusixmatchLanguage": "Musixmatch Language", "@downloadMusixmatchLanguage": { - "description": "Setting title for Musixmatch language preference" + "description": "Setting for Musixmatch lyrics translation language" }, "downloadMusixmatchLanguageAuto": "Auto (original language)", "@downloadMusixmatchLanguageAuto": { - "description": "Option label when Musixmatch uses original language" + "description": "Subtitle when no language is set" }, "downloadFilterContributing": "Filter Contributing Artists", "@downloadFilterContributing": { - "description": "Toggle title for filtering contributing artists in Album Artist metadata" + "description": "Setting to strip contributing artists from Album Artist folder name" }, "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is enabled" + "description": "Subtitle when contributing artist filter is on" }, "downloadFilterContributingDisabled": "Full Album Artist string used", "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is disabled" + "description": "Subtitle when contributing artist filter is off" }, "downloadProvidersNoneEnabled": "No providers enabled", "@downloadProvidersNoneEnabled": { - "description": "Subtitle for lyrics providers setting when no providers are enabled" + "description": "Shown when no lyrics providers are active" }, "downloadMusixmatchLanguageCode": "Language code", "@downloadMusixmatchLanguageCode": { - "description": "Label for the Musixmatch language code text field" + "description": "Label for Musixmatch language input field" }, "downloadMusixmatchLanguageHint": "e.g. en, de, ja", "@downloadMusixmatchLanguageHint": { - "description": "Hint text for the Musixmatch language code field" + "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": { - "description": "Description in the Musixmatch language picker" + "description": "Description in Musixmatch language picker" }, "downloadMusixmatchAuto": "Auto", "@downloadMusixmatchAuto": { - "description": "Button to reset Musixmatch language to automatic" + "description": "Button to clear Musixmatch language (use auto)" }, "downloadNetworkAnySubtitle": "Use WiFi or mobile data", "@downloadNetworkAnySubtitle": { - "description": "Subtitle for 'Any' network mode option" + "description": "Subtitle for any-network option in picker" }, "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for 'WiFi only' network mode option" + "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": { - "description": "Description in the SongLink region picker" + "description": "Description in SongLink region picker" }, "snackbarUnsupportedAudioFormat": "Unsupported audio format", "@snackbarUnsupportedAudioFormat": { @@ -4139,6 +4317,18 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, + "audioAnalysisCodec": "Codec", + "@audioAnalysisCodec": { + "description": "Audio codec metric label" + }, + "audioAnalysisContainer": "Container", + "@audioAnalysisContainer": { + "description": "Audio container metric label" + }, + "audioAnalysisDecodedFormat": "Decoded Format", + "@audioAnalysisDecodedFormat": { + "description": "Decoded sample format metric label" + }, "audioAnalysisBitDepth": "Bit Depth", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" @@ -4171,6 +4361,30 @@ "@audioAnalysisRms": { "description": "RMS level metric label" }, + "audioAnalysisLufs": "LUFS", + "@audioAnalysisLufs": { + "description": "Integrated loudness metric label" + }, + "audioAnalysisTruePeak": "True Peak", + "@audioAnalysisTruePeak": { + "description": "True peak metric label" + }, + "audioAnalysisClipping": "Clipping", + "@audioAnalysisClipping": { + "description": "Clipping metric label" + }, + "audioAnalysisNoClipping": "No clipping", + "@audioAnalysisNoClipping": { + "description": "Displayed when no clipped samples were detected" + }, + "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "@audioAnalysisSpectralCutoff": { + "description": "Estimated spectral cutoff metric label" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, "audioAnalysisSamples": "Samples", "@audioAnalysisSamples": { "description": "Total samples metric label" @@ -4202,12 +4416,20 @@ }, "extensionsHomeFeedAuto": "Auto", "@extensionsHomeFeedAuto": { - "description": "Extensions page - home feed provider option: auto" + "description": "Label for auto-selected search provider" }, "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, + "extensionsHomeFeedOff": "Off", + "@extensionsHomeFeedOff": { + "description": "Extensions page - home feed provider option: off" + }, + "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "@extensionsHomeFeedOffSubtitle": { + "description": "Extensions page - subtitle for off home feed option" + }, "extensionsHomeFeedUse": "Use {extensionName} home feed", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", @@ -4370,6 +4592,31 @@ } } }, + "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": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "notifDownloadsCanceledTitle": "Downloads canceled", + "@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": { + "description": "Notification body when downloads are canceled by the user", + "placeholders": { + "count": { + "type": "int" + } + } + }, "notifScanningLibrary": "Scanning local library", "@notifScanningLibrary": { "description": "Notification title while scanning local library" @@ -4489,271 +4736,6 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "settingsMetadata": "Metadata", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "settingsLyrics": "Lyrics", - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" - }, - "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" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" - }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "homeEmptyTitle": "No search providers yet", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "homeEmptySubtitle": "Install an extension to continue.", - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" - }, - "setupLanguageTitle": "Choose Language", - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "setupLanguageSystemDefault": "System Default", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "searchEmptyResultSubtitle": "Try another keyword", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "trackLyricsSource": "Source: {source}", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "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" - } - } - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@downloadLossyAac": { - "description": "lossy format option - AAC in M4A container at 320kbps" - }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "collectionFavoriteArtists": "Favorite Artists", - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "artistOptionAddToFavorites": "Add to Favorite Artists", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "audioAnalysisCodec": "Codec", - "@audioAnalysisCodec": { - "description": "Audio codec metric label" - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "audioAnalysisLufs": "LUFS", - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "audioAnalysisClipping": "Clipping", - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "audioAnalysisNoClipping": "No clipping", - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "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": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@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": { - "description": "Notification body when downloads are canceled by the user", - "placeholders": { - "count": { - "type": "int" - } - } - }, "searchTracks": "Tracks", "@searchTracks": { "description": "Search filter label - tracks" @@ -5066,6 +5048,86 @@ } } }, + "optionsDefaultSearchTabAlbums": "Albums", + "@optionsDefaultSearchTabAlbums": { + "description": "Default search tab option - Albums tab" + }, + "optionsDefaultSearchTabTracks": "Tracks", + "@optionsDefaultSearchTabTracks": { + "description": "Default search tab option - Tracks tab" + }, + "settingsFiles": "Files & Folders", + "@settingsFiles": { + "description": "Settings menu item - file and folder settings" + }, + "settingsFilesSubtitle": "Download location, filename, folder structure", + "@settingsFilesSubtitle": { + "description": "Subtitle for files & folders settings" + }, + "settingsMetadata": "Metadata", + "@settingsMetadata": { + "description": "Settings menu item - metadata settings" + }, + "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "@settingsMetadataSubtitle": { + "description": "Subtitle for metadata settings" + }, + "settingsLyrics": "Lyrics", + "@settingsLyrics": { + "description": "Settings menu item - lyrics settings" + }, + "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "@settingsLyricsSubtitle": { + "description": "Subtitle for lyrics settings" + }, + "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" + }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, + "downloadFallbackExtensions": "Fallback Extensions", + "@downloadFallbackExtensions": { + "description": "Settings item for configuring fallback extension providers" + }, + "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "@downloadFallbackExtensionsSubtitle": { + "description": "Subtitle for fallback extensions item" + }, "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" @@ -5534,4 +5596,4 @@ "service": {} } } -} +} \ No newline at end of file From bdf1626273aeddaf65b16603251e6fb3cc652122 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 22:50:25 +0700 Subject: [PATCH 016/137] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 52 ++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index 2e86614a..f30f6bb5 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -174,7 +174,7 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsSwitchBack": "Choose the default search provider to switch back from an extension", + "optionsSwitchBack": "Choisissez le moteur de recherche par défaut pour revenir à la configuration d'origine après avoir utilisé une extension", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" }, @@ -190,11 +190,11 @@ "@optionsUseExtensionProviders": { "description": "Legacy setting label for extension download providers" }, - "optionsUseExtensionProvidersOn": "Extension providers are enabled", + "optionsUseExtensionProvidersOn": "Les fournisseurs d'extensions sont activés", "@optionsUseExtensionProvidersOn": { "description": "Status when extension providers enabled" }, - "optionsUseExtensionProvidersOff": "Extension providers are required", + "optionsUseExtensionProvidersOff": "Les fournisseurs d'extensions sont requis", "@optionsUseExtensionProvidersOff": { "description": "Legacy status when extension providers would be disabled" }, @@ -226,23 +226,23 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, - "trackReplayGain": "Rescan ReplayGain", + "trackReplayGain": "Réanalyser ReplayGain", "@trackReplayGain": { "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "trackReplayGainSubtitle": "Analyser le niveau sonore et créer des balises ReplayGain", "@trackReplayGainSubtitle": { "description": "Subtitle for the rescan ReplayGain menu option" }, - "trackReplayGainScanning": "Analyzing loudness...", + "trackReplayGainScanning": "Analyse du volume sonore...", "@trackReplayGainScanning": { "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "trackReplayGainSuccess": "ReplayGain tags added", + "trackReplayGainSuccess": "Ajout des balises ReplayGain", "@trackReplayGainSuccess": { "description": "Snackbar message after ReplayGain tags written for a single track" }, - "trackReplayGainFailed": "Failed to add ReplayGain tags", + "trackReplayGainFailed": "Impossible d'ajouter les balises ReplayGain", "@trackReplayGainFailed": { "description": "Snackbar message when ReplayGain scan/write fails" }, @@ -255,11 +255,11 @@ } } }, - "replayGainBatchConfirmTitle": "Add ReplayGain", + "replayGainBatchConfirmTitle": "Ajouter ReplayGain", "@replayGainBatchConfirmTitle": { "description": "Title of the batch ReplayGain confirmation dialog" }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "replayGainBatchConfirmMessage": "Analyser le niveau sonore et ajouter des balises ReplayGain à {count} piste(s) ?", "@replayGainBatchConfirmMessage": { "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { @@ -268,11 +268,11 @@ } } }, - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "replayGainBatchAnalyzing": "Analyse de ReplayGain...", "@replayGainBatchAnalyzing": { "description": "Progress dialog title while batch scanning ReplayGain" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainBatchSuccess": "ReplayGain ajouté à {success} de {total} pistes", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -523,11 +523,11 @@ "@aboutVersion": { "description": "Version info label" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "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" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "aboutSachinsenalDesc": "Le créateur du projet HiFi original. Une base pour l'intégration de sources sans perte.", "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, @@ -1272,7 +1272,7 @@ "@providerPriorityFallbackExtensionsHint": { "description": "Hint below the extension fallback selection list" }, - "providerBuiltIn": "Legacy", + "providerBuiltIn": "Héritage", "@providerBuiltIn": { "description": "Legacy label retained for old generated localization compatibility" }, @@ -1796,11 +1796,11 @@ "@storeEmptyNoResults": { "description": "Message when search/filter returns no results" }, - "extensionDefaultProvider": "Default Search", + "extensionDefaultProvider": "Recherche par défaut", "@extensionDefaultProvider": { "description": "Default search provider option" }, - "extensionDefaultProviderSubtitle": "Use the default metadata search", + "extensionDefaultProviderSubtitle": "Utiliser la recherche par métadonnées par défaut", "@extensionDefaultProviderSubtitle": { "description": "Subtitle for default provider" }, @@ -1808,7 +1808,7 @@ "@extensionAuthor": { "description": "Extension detail - author" }, - "extensionId": "ID", + "extensionId": "Identifiant", "@extensionId": { "description": "Extension detail - unique ID" }, @@ -2039,7 +2039,7 @@ "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "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" }, @@ -2782,7 +2782,7 @@ "@tutorialWelcomeTip1": { "description": "Tutorial welcome tip 1" }, - "tutorialWelcomeTip2": "Get FLAC quality audio from installed download extensions", + "tutorialWelcomeTip2": "Obtenez un son de qualité FLAC grâce aux extensions de téléchargement installées", "@tutorialWelcomeTip2": { "description": "Tutorial welcome tip 2" }, @@ -3741,7 +3741,7 @@ "@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": "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" }, @@ -3795,7 +3795,7 @@ "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "lyricsProviderLyricsPlusDesc": "Paroles de karaoké mot à mot (Apple/Musixmatch/Spotify/QQ, via un proxy)", "@lyricsProviderLyricsPlusDesc": { "description": "Description for LyricsPlus provider" }, @@ -3983,11 +3983,11 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "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" }, - "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", + "downloadSelectTidalQobuz": "Choisissez un fournisseur proposant différentes options pour sélectionner la qualité audio", "@downloadSelectTidalQobuz": { "description": "Legacy info shown when a provider does not expose quality options" }, @@ -4132,7 +4132,7 @@ "@snackbarSelectedPlaylistsEmpty": { "description": "Snackbar when selected playlists contain no tracks" }, - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "playlistsCount": "{count, plural, one {}=1{1 playlist} other{{count} playlists}}", "@playlistsCount": { "description": "Playlist count display", "placeholders": { @@ -4256,7 +4256,7 @@ } } }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "queueAlbumCount": "{count, plural, one {}=1{1 album} other{{count} albums}}", "@queueAlbumCount": { "description": "Album count label with plural support", "placeholders": { From 1afe66cb66cd8b582952cf27270494e0d7777555 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 21 Jun 2026 23:58:16 +0700 Subject: [PATCH 017/137] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index f30f6bb5..f4accadd 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -4422,7 +4422,7 @@ "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, - "extensionsHomeFeedOff": "Off", + "extensionsHomeFeedOff": "Désactivé", "@extensionsHomeFeedOff": { "description": "Extensions page - home feed provider option: off" }, @@ -5283,7 +5283,7 @@ } } }, - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", + "storeExtensionsCount": "{count} {count, plural, one {}=1{extension} other{extensions}}", "@storeExtensionsCount": { "description": "Store extension result count", "placeholders": { From 136de952906dacfc66737dd42ae1acf818aaa34b Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 22 Jun 2026 19:25:42 +0700 Subject: [PATCH 018/137] 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 0913b8ce..f770e71e 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -25,7 +25,7 @@ "@homeTitle": { "description": "Home screen title" }, - "homeSubtitle": "Paste a supported URL or search by name", + "homeSubtitle": "Tempel URL yang didukung atau cari berdasarkan nama", "@homeSubtitle": { "description": "Subtitle shown below search box" }, @@ -166,7 +166,7 @@ } } }, - "optionsDefaultSearchTab": "Default Search Tab", + "optionsDefaultSearchTab": "Tab Pencarian Default", "@optionsDefaultSearchTab": { "description": "Title for the preferred default search tab setting" }, From e4b1d39c4ea08ca22e7d31d385943fc79737a892 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 22 Jun 2026 20:58:17 +0700 Subject: [PATCH 019/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 66 ++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 1e1e4add..5aa2dc02 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -5,23 +5,23 @@ "@appName": { "description": "App name - DO NOT TRANSLATE" }, - "navHome": "Home", + "navHome": "홈", "@navHome": { "description": "Bottom navigation - Home tab" }, - "navLibrary": "Library", + "navLibrary": "보관함", "@navLibrary": { "description": "Bottom navigation - Library tab" }, - "navSettings": "Settings", + "navSettings": "설정", "@navSettings": { "description": "Bottom navigation - Settings tab" }, - "navStore": "Repo", + "navStore": "저장소", "@navStore": { "description": "Bottom navigation - Extension store tab" }, - "homeTitle": "Home", + "homeTitle": "홈", "@homeTitle": { "description": "Home screen title" }, @@ -29,7 +29,7 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, - "homeEmptyTitle": "No search providers yet", + "homeEmptyTitle": "아직 검색 공급자가 없습니다", "@homeEmptyTitle": { "description": "Title shown on home when no providers are available yet" }, @@ -49,11 +49,11 @@ "@historyFilterAll": { "description": "Filter chip - show all items" }, - "historyFilterAlbums": "Albums", + "historyFilterAlbums": "앨범", "@historyFilterAlbums": { "description": "Filter chip - show albums only" }, - "historyFilterSingles": "Singles", + "historyFilterSingles": "싱글", "@historyFilterSingles": { "description": "Filter chip - show singles only" }, @@ -61,7 +61,7 @@ "@historySearchHint": { "description": "Search bar placeholder in history" }, - "settingsTitle": "Settings", + "settingsTitle": "설정", "@settingsTitle": { "description": "Settings screen title" }, @@ -97,7 +97,7 @@ "@downloadFilenameFormat": { "description": "Setting for output filename pattern" }, - "downloadSingleFilenameFormat": "Single Filename Format", + "downloadSingleFilenameFormat": "싱글 파일 이름 형식", "@downloadSingleFilenameFormat": { "description": "Setting for output filename pattern for singles/EPs" }, @@ -125,7 +125,7 @@ "@appearanceThemeDark": { "description": "Dark theme" }, - "appearanceDynamicColor": "Dynamic Color", + "appearanceDynamicColor": "동적 색상", "@appearanceDynamicColor": { "description": "Material You dynamic colors" }, @@ -137,11 +137,11 @@ "@appearanceHistoryView": { "description": "Layout style for history" }, - "appearanceHistoryViewList": "List", + "appearanceHistoryViewList": "리스트", "@appearanceHistoryViewList": { "description": "List layout option" }, - "appearanceHistoryViewGrid": "Grid", + "appearanceHistoryViewGrid": "그리드", "@appearanceHistoryViewGrid": { "description": "Grid layout option" }, @@ -166,7 +166,7 @@ } } }, - "optionsDefaultSearchTab": "Default Search Tab", + "optionsDefaultSearchTab": "기본 검색 탭", "@optionsDefaultSearchTab": { "description": "Title for the preferred default search tab setting" }, @@ -284,7 +284,7 @@ } } }, - "optionsArtistTagMode": "Artist Tag Mode", + "optionsArtistTagMode": "아티스트 태그 모드", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" }, @@ -300,7 +300,7 @@ "@optionsArtistTagModeJoinedSubtitle": { "description": "Subtitle for joined artist tag mode" }, - "optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus", + "optionsArtistTagModeSplitVorbis": "FLAC/Opus용 태그 분할", "@optionsArtistTagModeSplitVorbis": { "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, @@ -308,7 +308,7 @@ "@optionsArtistTagModeSplitVorbisSubtitle": { "description": "Subtitle for split Vorbis artist tag mode" }, - "optionsExtensionStore": "Extension Repo", + "optionsExtensionStore": "확장 프로그램 저장소", "@optionsExtensionStore": { "description": "Show/hide store tab" }, @@ -415,7 +415,7 @@ "@extensionsUninstall": { "description": "Uninstall extension button" }, - "storeTitle": "Extension Repo", + "storeTitle": "확장 프로그램 저장소", "@storeTitle": { "description": "Store screen title" }, @@ -1108,19 +1108,19 @@ "@searchSortDefault": { "description": "Sort option - default API order" }, - "searchSortTitleAZ": "Title (A-Z)", + "searchSortTitleAZ": "제목 (오름차순)", "@searchSortTitleAZ": { "description": "Sort option - title ascending" }, - "searchSortTitleZA": "Title (Z-A)", + "searchSortTitleZA": "제목 (내림차순)", "@searchSortTitleZA": { "description": "Sort option - title descending" }, - "searchSortArtistAZ": "Artist (A-Z)", + "searchSortArtistAZ": "아티스트 (오름차순)", "@searchSortArtistAZ": { "description": "Sort option - artist ascending" }, - "searchSortArtistZA": "Artist (Z-A)", + "searchSortArtistZA": "아티스트 (내림차순)", "@searchSortArtistZA": { "description": "Sort option - artist descending" }, @@ -1132,11 +1132,11 @@ "@searchSortDurationLong": { "description": "Sort option - longest duration first" }, - "searchSortDateOldest": "Release Date (Oldest)", + "searchSortDateOldest": "발매일자 (오래된순)", "@searchSortDateOldest": { "description": "Sort option - oldest release first" }, - "searchSortDateNewest": "Release Date (Newest)", + "searchSortDateNewest": "발매일자 (최신순)", "@searchSortDateNewest": { "description": "Sort option - newest release first" }, @@ -1144,7 +1144,7 @@ "@tooltipPlay": { "description": "Tooltip - play button" }, - "filenameFormat": "Filename Format", + "filenameFormat": "파일 이름 형식", "@filenameFormat": { "description": "Setting title - filename pattern" }, @@ -1200,7 +1200,7 @@ "@folderOrganizationByArtistAlbumSubtitle": { "description": "Subtitle for nested folder option" }, - "updateAvailable": "Update Available", + "updateAvailable": "업데이트 사용 가능", "@updateAvailable": { "description": "Update dialog title" }, @@ -1240,7 +1240,7 @@ "@updateWhatsNew": { "description": "Changelog section title" }, - "updateDownloadInstall": "Download & Install", + "updateDownloadInstall": "다운로드 & 설치", "@updateDownloadInstall": { "description": "Update button - download and install" }, @@ -1494,27 +1494,27 @@ "@settingsAppearanceSubtitle": { "description": "Appearance settings description" }, - "settingsDownloadSubtitle": "Service, quality, fallback", + "settingsDownloadSubtitle": "서비스, 품질, 대체", "@settingsDownloadSubtitle": { "description": "Download settings description" }, - "settingsOptionsSubtitle": "Fallback, metadata, lyrics, cover art", + "settingsOptionsSubtitle": "대체, 메타데이터, 가사, 표지 이미지", "@settingsOptionsSubtitle": { "description": "Options settings description" }, - "settingsExtensionsSubtitle": "Manage download providers", + "settingsExtensionsSubtitle": "다운로드 제공자 관리", "@settingsExtensionsSubtitle": { "description": "Extensions settings description" }, - "settingsLogsSubtitle": "View app logs for debugging", + "settingsLogsSubtitle": "디버깅을 위한 앱 로그 보기", "@settingsLogsSubtitle": { "description": "Logs settings description" }, - "loadingSharedLink": "Loading shared link...", + "loadingSharedLink": "공유된 링크를 불러오는 중...", "@loadingSharedLink": { "description": "Status when opening shared URL" }, - "pressBackAgainToExit": "Press back again to exit", + "pressBackAgainToExit": "종료하려면 뒤로가기 버튼을 다시 탭하세요", "@pressBackAgainToExit": { "description": "Exit confirmation message" }, From 41a1b9481142c97c3c8c3079dc126d02ac4e75c4 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:05:04 +0700 Subject: [PATCH 020/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 198 ++++++++++++++++++++-------------------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 5aa2dc02..7c3af7b4 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -33,7 +33,7 @@ "@homeEmptyTitle": { "description": "Title shown on home when no providers are available yet" }, - "homeEmptySubtitle": "Install an extension to continue.", + "homeEmptySubtitle": "계속하려면 확장 프로그램을 설치하세요.", "@homeEmptySubtitle": { "description": "Subtitle shown on home when no providers are available yet" }, @@ -45,7 +45,7 @@ "@homeRecent": { "description": "Section header for recent searches" }, - "historyFilterAll": "All", + "historyFilterAll": "모두", "@historyFilterAll": { "description": "Filter chip - show all items" }, @@ -101,7 +101,7 @@ "@downloadSingleFilenameFormat": { "description": "Setting for output filename pattern for singles/EPs" }, - "downloadSingleFilenameFormatDescription": "Filename pattern for singles and EPs. Uses the same tags as the album format.", + "downloadSingleFilenameFormatDescription": "싱글 및 EP용 파일 이름 패턴입니다. 앨범 형식과 동일한 태그를 사용합니다.", "@downloadSingleFilenameFormatDescription": { "description": "Subtitle description for single filename format setting" }, @@ -113,7 +113,7 @@ "@appearanceTitle": { "description": "Appearance settings page title" }, - "appearanceThemeSystem": "System", + "appearanceThemeSystem": "시스템", "@appearanceThemeSystem": { "description": "Follow system theme" }, @@ -170,7 +170,7 @@ "@optionsDefaultSearchTab": { "description": "Title for the preferred default search tab setting" }, - "optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.", + "optionsDefaultSearchTabSubtitle": "새 검색 결과를 표시할 탭을 먼저 선택하세요.", "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, @@ -190,11 +190,11 @@ "@optionsUseExtensionProviders": { "description": "Legacy setting label for extension download providers" }, - "optionsUseExtensionProvidersOn": "Extension providers are enabled", + "optionsUseExtensionProvidersOn": "확장 프로그램 제공자가 활성화되었습니다", "@optionsUseExtensionProvidersOn": { "description": "Status when extension providers enabled" }, - "optionsUseExtensionProvidersOff": "Extension providers are required", + "optionsUseExtensionProvidersOff": "확장 프로그램 제공자가 필요합니다", "@optionsUseExtensionProvidersOff": { "description": "Legacy status when extension providers would be disabled" }, @@ -226,7 +226,7 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, - "trackReplayGain": "Rescan ReplayGain", + "trackReplayGain": "ReplayGain 다시 스캔", "@trackReplayGain": { "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, @@ -234,7 +234,7 @@ "@trackReplayGainSubtitle": { "description": "Subtitle for the rescan ReplayGain menu option" }, - "trackReplayGainScanning": "Analyzing loudness...", + "trackReplayGainScanning": "음량을 분석하는 중...", "@trackReplayGainScanning": { "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, @@ -255,11 +255,11 @@ } } }, - "replayGainBatchConfirmTitle": "Add ReplayGain", + "replayGainBatchConfirmTitle": "ReplayGain 추가", "@replayGainBatchConfirmTitle": { "description": "Title of the batch ReplayGain confirmation dialog" }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "replayGainBatchConfirmMessage": "음량을 분석하고 {count} 개의 트랙에 ReplayGain 태그를 추가하시겠습니까?", "@replayGainBatchConfirmMessage": { "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { @@ -268,7 +268,7 @@ } } }, - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "replayGainBatchAnalyzing": "ReplayGain을 분석하는 중...", "@replayGainBatchAnalyzing": { "description": "Progress dialog title while batch scanning ReplayGain" }, @@ -292,7 +292,7 @@ "@optionsArtistTagModeDescription": { "description": "Bottom-sheet description for artist tag mode setting" }, - "optionsArtistTagModeJoined": "Single joined value", + "optionsArtistTagModeJoined": "단일 결합 값", "@optionsArtistTagModeJoined": { "description": "Artist tag mode option that joins multiple artists into one value" }, @@ -364,7 +364,7 @@ "@optionsSpotifyCredentials": { "description": "Spotify API credentials setting" }, - "optionsSpotifyCredentialsConfigured": "Client ID: {clientId}...", + "optionsSpotifyCredentialsConfigured": "클라이언트 ID: {clientId}...", "@optionsSpotifyCredentialsConfigured": { "description": "Shows configured client ID preview", "placeholders": { @@ -393,7 +393,7 @@ "@extensionsDisabled": { "description": "Extension status - inactive" }, - "extensionsVersion": "Version {version}", + "extensionsVersion": "버전 {version}", "@extensionsVersion": { "description": "Extension version display", "placeholders": { @@ -402,7 +402,7 @@ } } }, - "extensionsAuthor": "by {author}", + "extensionsAuthor": "작성자: {author}", "@extensionsAuthor": { "description": "Extension author credit", "placeholders": { @@ -467,7 +467,7 @@ "@aboutLinks": { "description": "Section for external links" }, - "aboutMobileSource": "Mobile source code", + "aboutMobileSource": "모바일 소스 코드", "@aboutMobileSource": { "description": "Link to mobile GitHub repo" }, @@ -495,7 +495,7 @@ "@aboutFeatureRequestSubtitle": { "description": "Subtitle for feature request" }, - "aboutTelegramChannel": "Telegram Channel", + "aboutTelegramChannel": "텔레그램 채널", "@aboutTelegramChannel": { "description": "Link to Telegram channel" }, @@ -503,7 +503,7 @@ "@aboutTelegramChannelSubtitle": { "description": "Subtitle for Telegram channel" }, - "aboutTelegramChat": "Telegram Community", + "aboutTelegramChat": "텔레그램 커뮤니티", "@aboutTelegramChat": { "description": "Link to Telegram chat group" }, @@ -515,11 +515,11 @@ "@aboutSocial": { "description": "Section for social links" }, - "aboutApp": "App", + "aboutApp": "앱", "@aboutApp": { "description": "Section for app info" }, - "aboutVersion": "Version", + "aboutVersion": "버전", "@aboutVersion": { "description": "Version info label" }, @@ -736,7 +736,7 @@ "@setupLanguageDescription": { "description": "Description for the language selection step in setup" }, - "setupLanguageSystemDefault": "System Default", + "setupLanguageSystemDefault": "시스템 기본값", "@setupLanguageSystemDefault": { "description": "Option to use the system language" }, @@ -768,7 +768,7 @@ "@dialogImport": { "description": "Dialog button - import data" }, - "dialogDownload": "Download", + "dialogDownload": "다운로드", "@dialogDownload": { "description": "Confirm button in Download All dialog" }, @@ -930,7 +930,7 @@ "@snackbarFillAllFields": { "description": "Snackbar - validation error" }, - "snackbarViewQueue": "View Queue", + "snackbarViewQueue": "대기목록 보기", "@snackbarViewQueue": { "description": "Snackbar action - view download queue" }, @@ -986,7 +986,7 @@ "@snackbarFailedToUpdate": { "description": "Snackbar - extension update error" }, - "errorRateLimited": "Rate Limited", + "errorRateLimited": "속도 제한됨", "@errorRateLimited": { "description": "Error title - too many requests" }, @@ -998,7 +998,7 @@ "@errorNoTracksFound": { "description": "Error - search returned no results" }, - "searchEmptyResultSubtitle": "Try another keyword", + "searchEmptyResultSubtitle": "다른 키워드를 검색해 보세요", "@searchEmptyResultSubtitle": { "description": "Subtitle shown under the empty search result state on the home screen" }, @@ -1100,11 +1100,11 @@ "@searchPlaylists": { "description": "Search result category - playlists" }, - "searchSortTitle": "Sort Results", + "searchSortTitle": "결과 정렬", "@searchSortTitle": { "description": "Bottom sheet title for search sort options" }, - "searchSortDefault": "Default", + "searchSortDefault": "기본값", "@searchSortDefault": { "description": "Sort option - default API order" }, @@ -1124,11 +1124,11 @@ "@searchSortArtistZA": { "description": "Sort option - artist descending" }, - "searchSortDurationShort": "Duration (Shortest)", + "searchSortDurationShort": "재생시간 (짧은순)", "@searchSortDurationShort": { "description": "Sort option - shortest duration first" }, - "searchSortDurationLong": "Duration (Longest)", + "searchSortDurationLong": "재생시간 (긴순)", "@searchSortDurationLong": { "description": "Sort option - longest duration first" }, @@ -1160,43 +1160,43 @@ "@folderOrganizationNone": { "description": "Folder option - flat structure" }, - "folderOrganizationByPlaylist": "By Playlist", + "folderOrganizationByPlaylist": "재생목록별", "@folderOrganizationByPlaylist": { "description": "Folder option - playlist folders" }, - "folderOrganizationByPlaylistSubtitle": "Separate folder for each playlist", + "folderOrganizationByPlaylistSubtitle": "각 재생목록별 별도 폴더", "@folderOrganizationByPlaylistSubtitle": { "description": "Subtitle for playlist folder option" }, - "folderOrganizationByArtist": "By Artist", + "folderOrganizationByArtist": "아티스트별", "@folderOrganizationByArtist": { "description": "Folder option - artist folders" }, - "folderOrganizationByAlbum": "By Album", + "folderOrganizationByAlbum": "앨범별", "@folderOrganizationByAlbum": { "description": "Folder option - album folders" }, - "folderOrganizationByArtistAlbum": "Artist/Album", + "folderOrganizationByArtistAlbum": "아티스트/앨범", "@folderOrganizationByArtistAlbum": { "description": "Folder option - nested folders" }, - "folderOrganizationDescription": "Organize downloaded files into folders", + "folderOrganizationDescription": "다운로드한 파일을 폴더로 정리", "@folderOrganizationDescription": { "description": "Folder organization sheet description" }, - "folderOrganizationNoneSubtitle": "All files in download folder", + "folderOrganizationNoneSubtitle": "다운로드 폴더의 모든 파일", "@folderOrganizationNoneSubtitle": { "description": "Subtitle for no organization option" }, - "folderOrganizationByArtistSubtitle": "Separate folder for each artist", + "folderOrganizationByArtistSubtitle": "각 아티스트별 별도 폴더", "@folderOrganizationByArtistSubtitle": { "description": "Subtitle for artist folder option" }, - "folderOrganizationByAlbumSubtitle": "Separate folder for each album", + "folderOrganizationByAlbumSubtitle": "각 앨범별 별도 폴더", "@folderOrganizationByAlbumSubtitle": { "description": "Subtitle for album folder option" }, - "folderOrganizationByArtistAlbumSubtitle": "Nested folders for artist and album", + "folderOrganizationByArtistAlbumSubtitle": "아티스트 및 앨범용 중첩 폴더", "@folderOrganizationByArtistAlbumSubtitle": { "description": "Subtitle for nested folder option" }, @@ -1204,7 +1204,7 @@ "@updateAvailable": { "description": "Update dialog title" }, - "updateLater": "Later", + "updateLater": "나중에", "@updateLater": { "description": "Update button - dismiss" }, @@ -1276,11 +1276,11 @@ "@providerBuiltIn": { "description": "Legacy label retained for old generated localization compatibility" }, - "providerExtension": "Extension", + "providerExtension": "확장 프로그램", "@providerExtension": { "description": "Label for extension-provided providers" }, - "metadataProviderPriorityTitle": "Metadata Priority", + "metadataProviderPriorityTitle": "메타데이터 우선순위", "@metadataProviderPriorityTitle": { "description": "Metadata priority page title" }, @@ -1300,7 +1300,7 @@ "@metadataMayRateLimit": { "description": "Spotify provider description" }, - "logTitle": "Logs", + "logTitle": "로그", "@logTitle": { "description": "Logs screen title" }, @@ -1312,11 +1312,11 @@ "@logSearchHint": { "description": "Log search placeholder" }, - "logFilterLevel": "Level", + "logFilterLevel": "레벨", "@logFilterLevel": { "description": "Filter by log level" }, - "logFilterSection": "Filter", + "logFilterSection": "필터", "@logFilterSection": { "description": "Filter section title" }, @@ -1486,11 +1486,11 @@ "@sectionLanguage": { "description": "Settings section header for language" }, - "appearanceLanguage": "App Language", + "appearanceLanguage": "앱 언어", "@appearanceLanguage": { "description": "Language setting title" }, - "settingsAppearanceSubtitle": "Theme, colors, display", + "settingsAppearanceSubtitle": "테마, 색상, 디스플레이", "@settingsAppearanceSubtitle": { "description": "Appearance settings description" }, @@ -1518,7 +1518,7 @@ "@pressBackAgainToExit": { "description": "Exit confirmation message" }, - "downloadAllCount": "Download All ({count})", + "downloadAllCount": "모두 다운로드 ({count})", "@downloadAllCount": { "description": "Download all button with count", "placeholders": { @@ -1536,87 +1536,87 @@ } } }, - "trackCopyFilePath": "Copy file path", + "trackCopyFilePath": "파일 경로 복사", "@trackCopyFilePath": { "description": "Action - copy file path" }, - "trackRemoveFromDevice": "Remove from device", + "trackRemoveFromDevice": "기기에서 제거", "@trackRemoveFromDevice": { "description": "Action - delete downloaded file" }, - "trackLoadLyrics": "Load Lyrics", + "trackLoadLyrics": "가사 불러오기", "@trackLoadLyrics": { "description": "Action - fetch lyrics" }, - "trackMetadata": "Metadata", + "trackMetadata": "메타데이터", "@trackMetadata": { "description": "Tab title - track metadata" }, - "trackFileInfo": "File Info", + "trackFileInfo": "파일 정보", "@trackFileInfo": { "description": "Tab title - file information" }, - "trackLyrics": "Lyrics", + "trackLyrics": "가사", "@trackLyrics": { "description": "Tab title - lyrics" }, - "trackFileNotFound": "File not found", + "trackFileNotFound": "파일을 찾을 수 없습니다", "@trackFileNotFound": { "description": "Error - file doesn't exist" }, - "trackOpenInDeezer": "Open in Deezer", + "trackOpenInDeezer": "Deezer에서 열기", "@trackOpenInDeezer": { "description": "Action - open track in Deezer app" }, - "trackOpenInSpotify": "Open in Spotify", + "trackOpenInSpotify": "Spotify에서 열기", "@trackOpenInSpotify": { "description": "Action - open track in Spotify app" }, - "trackTrackName": "Track name", + "trackTrackName": "트랙 이름", "@trackTrackName": { "description": "Metadata label - track title" }, - "trackArtist": "Artist", + "trackArtist": "아티스트", "@trackArtist": { "description": "Metadata label - artist name" }, - "trackAlbumArtist": "Album artist", + "trackAlbumArtist": "앨범 아티스트", "@trackAlbumArtist": { "description": "Metadata label - album artist" }, - "trackAlbum": "Album", + "trackAlbum": "앨범", "@trackAlbum": { "description": "Metadata label - album name" }, - "trackTrackNumber": "Track number", + "trackTrackNumber": "트랙 번호", "@trackTrackNumber": { "description": "Metadata label - track number" }, - "trackDiscNumber": "Disc number", + "trackDiscNumber": "디스크 번호", "@trackDiscNumber": { "description": "Metadata label - disc number" }, - "trackDuration": "Duration", + "trackDuration": "재생시간", "@trackDuration": { "description": "Metadata label - track length" }, - "trackAudioQuality": "Audio quality", + "trackAudioQuality": "오디오 품질", "@trackAudioQuality": { "description": "Metadata label - audio quality" }, - "trackReleaseDate": "Release date", + "trackReleaseDate": "발매일자", "@trackReleaseDate": { "description": "Metadata label - release date" }, - "trackGenre": "Genre", + "trackGenre": "장르", "@trackGenre": { "description": "Metadata label - music genre" }, - "trackLabel": "Label", + "trackLabel": "레이블", "@trackLabel": { "description": "Metadata label - record label" }, - "trackCopyright": "Copyright", + "trackCopyright": "저작권", "@trackCopyright": { "description": "Metadata label - copyright information" }, @@ -1624,11 +1624,11 @@ "@trackDownloaded": { "description": "Metadata label - download date" }, - "trackCopyLyrics": "Copy lyrics", + "trackCopyLyrics": "가사 복사", "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, - "trackLyricsSource": "Source: {source}", + "trackLyricsSource": "소스: {source}", "@trackLyricsSource": { "description": "Label showing the lyrics source/provider", "placeholders": { @@ -1641,11 +1641,11 @@ "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" }, - "trackLyricsNotInFile": "No lyrics found in this file", + "trackLyricsNotInFile": "이 파일에서 가사를 찾을 수 없습니다", "@trackLyricsNotInFile": { "description": "Message when no embedded lyrics in audio file" }, - "trackFetchOnlineLyrics": "Fetch from Online", + "trackFetchOnlineLyrics": "온라인에서 가져오기", "@trackFetchOnlineLyrics": { "description": "Action - fetch lyrics from online providers" }, @@ -1657,15 +1657,15 @@ "@trackLyricsLoadFailed": { "description": "Message when lyrics loading fails" }, - "trackEmbedLyrics": "Embed Lyrics", + "trackEmbedLyrics": "가사 삽입", "@trackEmbedLyrics": { "description": "Action - embed lyrics into audio file" }, - "trackLyricsEmbedded": "Lyrics embedded successfully", + "trackLyricsEmbedded": "가사를 성공적으로 삽입하였습니다", "@trackLyricsEmbedded": { "description": "Snackbar - lyrics saved to file" }, - "trackInstrumental": "Instrumental track", + "trackInstrumental": "반주 트랙", "@trackInstrumental": { "description": "Message when track is instrumental (no lyrics)" }, @@ -1673,7 +1673,7 @@ "@trackCopiedToClipboard": { "description": "Snackbar - content copied" }, - "trackDeleteConfirmTitle": "Remove from device?", + "trackDeleteConfirmTitle": "기기에서 제거하시겠습니까?", "@trackDeleteConfirmTitle": { "description": "Delete confirmation title" }, @@ -1681,15 +1681,15 @@ "@trackDeleteConfirmMessage": { "description": "Delete confirmation message" }, - "dateToday": "Today", + "dateToday": "오늘", "@dateToday": { "description": "Relative date - today" }, - "dateYesterday": "Yesterday", + "dateYesterday": "어제", "@dateYesterday": { "description": "Relative date - yesterday" }, - "dateDaysAgo": "{count} days ago", + "dateDaysAgo": "{count} 일 전", "@dateDaysAgo": { "description": "Relative date - days ago", "placeholders": { @@ -1698,7 +1698,7 @@ } } }, - "dateWeeksAgo": "{count} weeks ago", + "dateWeeksAgo": "{count} 주 전", "@dateWeeksAgo": { "description": "Relative date - weeks ago", "placeholders": { @@ -1707,7 +1707,7 @@ } } }, - "dateMonthsAgo": "{count} months ago", + "dateMonthsAgo": "{count} 달 전", "@dateMonthsAgo": { "description": "Relative date - months ago", "placeholders": { @@ -1716,43 +1716,43 @@ } } }, - "storeFilterAll": "All", + "storeFilterAll": "모두", "@storeFilterAll": { "description": "Store filter - all extensions" }, - "storeFilterMetadata": "Metadata", + "storeFilterMetadata": "메타데이터", "@storeFilterMetadata": { "description": "Store filter - metadata providers" }, - "storeFilterDownload": "Download", + "storeFilterDownload": "다운로드", "@storeFilterDownload": { "description": "Store filter - download providers" }, - "storeFilterUtility": "Utility", + "storeFilterUtility": "유틸리티", "@storeFilterUtility": { "description": "Store filter - utility extensions" }, - "storeFilterLyrics": "Lyrics", + "storeFilterLyrics": "가사", "@storeFilterLyrics": { "description": "Store filter - lyrics providers" }, - "storeFilterIntegration": "Integration", + "storeFilterIntegration": "통합", "@storeFilterIntegration": { "description": "Store filter - integrations" }, - "storeClearFilters": "Clear filters", + "storeClearFilters": "필터 지우기", "@storeClearFilters": { "description": "Button to clear all filters" }, - "storeAddRepoTitle": "Add Extension Repository", + "storeAddRepoTitle": "확장 프로그램 저장소 추가", "@storeAddRepoTitle": { "description": "Store setup screen - heading when no repo is configured" }, - "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", + "storeAddRepoDescription": "확장 프로그램을 찾아보고 설치하려면 registry.json 파일이 포함된 GitHub 저장소 URL을 입력하세요.", "@storeAddRepoDescription": { "description": "Store setup screen - explanatory text" }, - "storeRepoUrlLabel": "Repository URL", + "storeRepoUrlLabel": "저장소 URL", "@storeRepoUrlLabel": { "description": "Label for the repository URL input field" }, @@ -1760,27 +1760,27 @@ "@storeRepoUrlHint": { "description": "Hint/placeholder for the repository URL input field" }, - "storeRepoUrlHelper": "e.g. https://github.com/user/extensions-repo", + "storeRepoUrlHelper": "예: https://github.com/user/extensions-repo", "@storeRepoUrlHelper": { "description": "Helper text below the repository URL input field" }, - "storeAddRepoButton": "Add Repository", + "storeAddRepoButton": "저장소 추가", "@storeAddRepoButton": { "description": "Button to submit a new repository URL" }, - "storeChangeRepoTooltip": "Change repository", + "storeChangeRepoTooltip": "저장소 변경", "@storeChangeRepoTooltip": { "description": "Tooltip for the change-repository icon button in the app bar" }, - "storeRepoDialogTitle": "Extension Repository", + "storeRepoDialogTitle": "확장 프로그램 저장소", "@storeRepoDialogTitle": { "description": "Title of the change/remove repository dialog" }, - "storeRepoDialogCurrent": "Current repository:", + "storeRepoDialogCurrent": "현재 저장소:", "@storeRepoDialogCurrent": { "description": "Label shown above the current repository URL in the dialog" }, - "storeNewRepoUrlLabel": "New Repository URL", + "storeNewRepoUrlLabel": "새 저장소 URL", "@storeNewRepoUrlLabel": { "description": "Label for the new repository URL field inside the dialog" }, From 5f9822f726f9a1dffdf5271531cf331c8727cf25 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 22 Jun 2026 23:06:40 +0700 Subject: [PATCH 021/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 172 ++++++++++++++++++++-------------------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 7c3af7b4..65a62d4d 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -728,7 +728,7 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, - "setupLanguageTitle": "Choose Language", + "setupLanguageTitle": "언어 선택", "@setupLanguageTitle": { "description": "Title for the language selection step in setup" }, @@ -1002,7 +1002,7 @@ "@searchEmptyResultSubtitle": { "description": "Subtitle shown under the empty search result state on the home screen" }, - "errorUrlNotRecognized": "Link not recognized", + "errorUrlNotRecognized": "링크를 인식할 수 없습니다", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, @@ -1208,7 +1208,7 @@ "@updateLater": { "description": "Update button - dismiss" }, - "updateStartingDownload": "Starting download...", + "updateStartingDownload": "다운로드를 시작하는 중...", "@updateStartingDownload": { "description": "Update status - initializing" }, @@ -1220,15 +1220,15 @@ "@updateFailedMessage": { "description": "Update error message" }, - "updateNewVersionReady": "A new version is ready", + "updateNewVersionReady": "새 버전이 준비되었습니다", "@updateNewVersionReady": { "description": "Update subtitle" }, - "updateCurrent": "Current", + "updateCurrent": "현재", "@updateCurrent": { "description": "Label for current version" }, - "updateNew": "New", + "updateNew": "신규", "@updateNew": { "description": "Label for new version" }, @@ -1236,7 +1236,7 @@ "@updateDownloading": { "description": "Update status - downloading" }, - "updateWhatsNew": "What's New", + "updateWhatsNew": "새로운 기능", "@updateWhatsNew": { "description": "Changelog section title" }, @@ -1244,11 +1244,11 @@ "@updateDownloadInstall": { "description": "Update button - download and install" }, - "updateDontRemind": "Don't remind", + "updateDontRemind": "알림 안 함", "@updateDontRemind": { "description": "Update button - skip this version" }, - "providerPriorityTitle": "Provider Priority", + "providerPriorityTitle": "제공자 우선순위", "@providerPriorityTitle": { "description": "Provider priority page title" }, @@ -1260,19 +1260,19 @@ "@providerPriorityInfo": { "description": "Info tip about fallback behavior" }, - "providerPriorityFallbackExtensionsTitle": "Extension Fallback", + "providerPriorityFallbackExtensionsTitle": "확장 프로그램 대체", "@providerPriorityFallbackExtensionsTitle": { "description": "Section title for choosing which download extensions can be used as fallback providers" }, - "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", + "providerPriorityFallbackExtensionsDescription": "자동 대체 중에 사용할 수 있는 설치된 다운로드 확장 프로그램을 선택하세요.", "@providerPriorityFallbackExtensionsDescription": { "description": "Section description for extension fallback selection" }, - "providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.", + "providerPriorityFallbackExtensionsHint": "다운로드 공급자 기능이 활성화된 확장 프로그램만 여기에 나열됩니다.", "@providerPriorityFallbackExtensionsHint": { "description": "Hint below the extension fallback selection list" }, - "providerBuiltIn": "Legacy", + "providerBuiltIn": "레거시", "@providerBuiltIn": { "description": "Legacy label retained for old generated localization compatibility" }, @@ -1292,11 +1292,11 @@ "@metadataProviderPriorityInfo": { "description": "Info tip about rate limits" }, - "metadataNoRateLimits": "No rate limits", + "metadataNoRateLimits": "속도 제한 없음", "@metadataNoRateLimits": { "description": "Deezer provider description" }, - "metadataMayRateLimit": "May rate limit", + "metadataMayRateLimit": "속도 제한이 있을 수 있음", "@metadataMayRateLimit": { "description": "Spotify provider description" }, @@ -1308,7 +1308,7 @@ "@logCopied": { "description": "Snackbar - logs copied" }, - "logSearchHint": "Search logs...", + "logSearchHint": "로그를 검색하는 중...", "@logSearchHint": { "description": "Log search placeholder" }, @@ -1418,7 +1418,7 @@ "@sectionData": { "description": "Settings section header" }, - "sectionDebug": "Debug", + "sectionDebug": "디버그", "@sectionDebug": { "description": "Settings section header" }, @@ -1474,15 +1474,15 @@ "@sectionColor": { "description": "Settings section header" }, - "sectionTheme": "Theme", + "sectionTheme": "테마", "@sectionTheme": { "description": "Settings section header" }, - "sectionLayout": "Layout", + "sectionLayout": "레이아웃", "@sectionLayout": { "description": "Settings section header" }, - "sectionLanguage": "Language", + "sectionLanguage": "언어", "@sectionLanguage": { "description": "Settings section header for language" }, @@ -1840,19 +1840,19 @@ "@extensionQualityOptions": { "description": "Capability - quality selection" }, - "extensionPostProcessingHooks": "Post-Processing Hooks", + "extensionPostProcessingHooks": "후처리 후크", "@extensionPostProcessingHooks": { "description": "Capability - post-processing" }, - "extensionPermissions": "Permissions", + "extensionPermissions": "권한", "@extensionPermissions": { "description": "Section header - required permissions" }, - "extensionSettings": "Settings", + "extensionSettings": "설정", "@extensionSettings": { "description": "Section header - extension settings" }, - "extensionRemoveButton": "Remove Extension", + "extensionRemoveButton": "확장 프로그램 제거", "@extensionRemoveButton": { "description": "Button to uninstall extension" }, @@ -1860,19 +1860,19 @@ "@extensionUpdated": { "description": "Extension detail - last update" }, - "extensionMinAppVersion": "Min App Version", + "extensionMinAppVersion": "최소 앱 버전", "@extensionMinAppVersion": { "description": "Extension detail - minimum app version" }, - "extensionCustomTrackMatching": "Custom Track Matching", + "extensionCustomTrackMatching": "사용자 정의 트랙 매칭", "@extensionCustomTrackMatching": { "description": "Capability - custom track matching algorithm" }, - "extensionPostProcessing": "Post-Processing", + "extensionPostProcessing": "후처리", "@extensionPostProcessing": { "description": "Capability - post-download processing" }, - "extensionHooksAvailable": "{count} hook(s) available", + "extensionHooksAvailable": "{count} 개의 후크 사용 가능", "@extensionHooksAvailable": { "description": "Post-processing hooks count", "placeholders": { @@ -1881,7 +1881,7 @@ } } }, - "extensionPatternsCount": "{count} pattern(s)", + "extensionPatternsCount": "{count} 개의 패턴", "@extensionPatternsCount": { "description": "URL patterns count", "placeholders": { @@ -1890,7 +1890,7 @@ } } }, - "extensionStrategy": "Strategy: {strategy}", + "extensionStrategy": "전략: {strategy}", "@extensionStrategy": { "description": "Track matching strategy name", "placeholders": { @@ -1899,35 +1899,35 @@ } } }, - "extensionsProviderPrioritySection": "Provider Priority", + "extensionsProviderPrioritySection": "제공자 우선순위", "@extensionsProviderPrioritySection": { "description": "Section header - provider priority" }, - "extensionsInstalledSection": "Installed Extensions", + "extensionsInstalledSection": "설치된 확장 프로그램", "@extensionsInstalledSection": { "description": "Section header - installed extensions" }, - "extensionsNoExtensions": "No extensions installed", + "extensionsNoExtensions": "설치된 확장 프로그램이 없습니다", "@extensionsNoExtensions": { "description": "Empty state - no extensions" }, - "extensionsNoExtensionsSubtitle": "Install .spotiflac-ext files to add new providers", + "extensionsNoExtensionsSubtitle": "새 제공자를 추가하려면 .spotiflac-ext 파일을 설치하세요", "@extensionsNoExtensionsSubtitle": { "description": "Empty state subtitle" }, - "extensionsInstallButton": "Install Extension", + "extensionsInstallButton": "확장 프로그램 설치", "@extensionsInstallButton": { "description": "Button to install extension from file" }, - "extensionsInfoTip": "Extensions can add new metadata and download providers. Only install extensions from trusted sources.", + "extensionsInfoTip": "확장 프로그램은 새로운 메타데이터와 다운로드 제공자를 추가할 수 있습니다. 신뢰할 수 있는 출처에서만 확장 프로그램을 설치하세요.", "@extensionsInfoTip": { "description": "Security warning about extensions" }, - "extensionsInstalledSuccess": "Extension installed successfully", + "extensionsInstalledSuccess": "확장 프로그램을 성공적으로 설치하였습니다", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "extensionsInstalledCount": "{count} extensions installed successfully", + "extensionsInstalledCount": "{count} 개의 확장 프로그램을 성공적으로 설치하였습니다", "@extensionsInstalledCount": { "description": "Success message after installing multiple extensions", "placeholders": { @@ -1951,15 +1951,15 @@ } } }, - "extensionsDownloadPriority": "Download Priority", + "extensionsDownloadPriority": "다운로드 우선순위", "@extensionsDownloadPriority": { "description": "Setting - download provider order" }, - "extensionsDownloadPrioritySubtitle": "Set download service order", + "extensionsDownloadPrioritySubtitle": "다운로드 서비스 순서를 설정하세요", "@extensionsDownloadPrioritySubtitle": { "description": "Subtitle for download priority" }, - "extensionsFallbackTitle": "Fallback Extensions", + "extensionsFallbackTitle": "대체 확장 프로그램", "@extensionsFallbackTitle": { "description": "Setting and page title for choosing which download extensions can be used during fallback" }, @@ -1971,7 +1971,7 @@ "@extensionsNoDownloadProvider": { "description": "Empty state - no download providers" }, - "extensionsMetadataPriority": "Metadata Priority", + "extensionsMetadataPriority": "메타데이터 우선순위", "@extensionsMetadataPriority": { "description": "Setting - metadata provider order" }, @@ -1983,7 +1983,7 @@ "@extensionsNoMetadataProvider": { "description": "Empty state - no metadata providers" }, - "extensionsSearchProvider": "Search Provider", + "extensionsSearchProvider": "검색 제공자", "@extensionsSearchProvider": { "description": "Setting - search provider selection" }, @@ -1999,11 +1999,11 @@ "@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" }, @@ -2027,15 +2027,15 @@ "@qualityHiResFlacMaxSubtitle": { "description": "Technical spec for hi-res max" }, - "downloadLossy320": "Lossy 320kbps", + "downloadLossy320": "손실 압축 320kbps", "@downloadLossy320": { "description": "Quality option label for lossy 320kbps" }, - "downloadLossyFormat": "Lossy Format", + "downloadLossyFormat": "손실 압축 형식", "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadLossy320Format": "Lossy 320kbps Format", + "downloadLossy320Format": "손실 압축 320kbps 형식", "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" }, @@ -2047,7 +2047,7 @@ "@downloadLossyMp3": { "description": "Lossy format option - MP3 320kbps" }, - "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", + "downloadLossyMp3Subtitle": "최상의 호환성, 트랙당 약 10MB", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, @@ -2055,7 +2055,7 @@ "@downloadLossyAac": { "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "downloadLossyAacSubtitle": "최상의 모바일 호환성, M4A 컨테이너", "@downloadLossyAacSubtitle": { "description": "Subtitle for AAC/M4A 320kbps lossy option" }, @@ -2063,7 +2063,7 @@ "@downloadLossyOpus256": { "description": "Lossy format option - Opus 256kbps" }, - "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", + "downloadLossyOpus256Subtitle": "최고 음질 Opus, 트랙당 약 8MB", "@downloadLossyOpus256Subtitle": { "description": "Subtitle for Opus 256kbps lossy option" }, @@ -2250,7 +2250,7 @@ "@downloadedAlbumSelectToDelete": { "description": "Placeholder when nothing selected" }, - "downloadedAlbumDiscHeader": "Disc {discNumber}", + "downloadedAlbumDiscHeader": "디스크 {discNumber}", "@downloadedAlbumDiscHeader": { "description": "Header for disc separator in multi-disc albums", "placeholders": { @@ -2260,19 +2260,19 @@ } } }, - "recentTypeArtist": "Artist", + "recentTypeArtist": "아티스트", "@recentTypeArtist": { "description": "Recent access item type - artist" }, - "recentTypeAlbum": "Album", + "recentTypeAlbum": "앨범", "@recentTypeAlbum": { "description": "Recent access item type - album" }, - "recentTypeSong": "Song", + "recentTypeSong": "노래", "@recentTypeSong": { "description": "Recent access item type - song/track" }, - "recentTypePlaylist": "Playlist", + "recentTypePlaylist": "재생목록", "@recentTypePlaylist": { "description": "Recent access item type - playlist" }, @@ -2280,11 +2280,11 @@ "@recentEmpty": { "description": "Empty state text for recent access list" }, - "recentShowAllDownloads": "Show All Downloads", + "recentShowAllDownloads": "모든 다운로드 표시", "@recentShowAllDownloads": { "description": "Button label to unhide hidden downloads in recent access" }, - "recentPlaylistInfo": "Playlist: {name}", + "recentPlaylistInfo": "재생목록: {name}", "@recentPlaylistInfo": { "description": "Snackbar message when tapping playlist in recent access", "placeholders": { @@ -2298,7 +2298,7 @@ "@discographyDownload": { "description": "Button - download artist discography" }, - "discographyDownloadAll": "Download All", + "discographyDownloadAll": "모두 다운로드", "@discographyDownloadAll": { "description": "Option - download entire discography" }, @@ -2314,7 +2314,7 @@ } } }, - "discographyAlbumsOnly": "Albums Only", + "discographyAlbumsOnly": "앨범만", "@discographyAlbumsOnly": { "description": "Option - download only albums" }, @@ -2330,7 +2330,7 @@ } } }, - "discographySinglesOnly": "Singles & EPs Only", + "discographySinglesOnly": "싱글 & EP만", "@discographySinglesOnly": { "description": "Option - download only singles" }, @@ -2346,7 +2346,7 @@ } } }, - "discographySelectAlbums": "Select Albums...", + "discographySelectAlbums": "앨범 검색...", "@discographySelectAlbums": { "description": "Option - manually select albums to download" }, @@ -2412,19 +2412,19 @@ "@discographyFailedToFetch": { "description": "Error - some albums failed to load" }, - "sectionStorageAccess": "Storage Access", + "sectionStorageAccess": "기기 저장소 접근", "@sectionStorageAccess": { "description": "Section header for storage access settings" }, - "allFilesAccess": "All Files Access", + "allFilesAccess": "모든 파일 접근", "@allFilesAccess": { "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" }, - "allFilesAccessEnabledSubtitle": "Can write to any folder", + "allFilesAccessEnabledSubtitle": "모든 폴더에 쓰기 가능", "@allFilesAccessEnabledSubtitle": { "description": "Subtitle when all files access is enabled" }, - "allFilesAccessDisabledSubtitle": "Limited to media folders only", + "allFilesAccessDisabledSubtitle": "미디아 폴더에만 제한됨", "@allFilesAccessDisabledSubtitle": { "description": "Subtitle when all files access is disabled" }, @@ -2440,15 +2440,15 @@ "@allFilesAccessDisabledMessage": { "description": "Snackbar message when user disables all files access" }, - "settingsLocalLibrary": "Local Library", + "settingsLocalLibrary": "로컬 보관함", "@settingsLocalLibrary": { "description": "Settings menu item - local library" }, - "settingsLocalLibrarySubtitle": "Scan music & detect duplicates", + "settingsLocalLibrarySubtitle": "음악 스캔 & 중복 감지", "@settingsLocalLibrarySubtitle": { "description": "Subtitle for local library settings" }, - "settingsCache": "Storage & Cache", + "settingsCache": "기기 저장소 & 캐시", "@settingsCache": { "description": "Settings menu item - cache management" }, @@ -2456,15 +2456,15 @@ "@settingsCacheSubtitle": { "description": "Subtitle for cache management menu" }, - "libraryTitle": "Local Library", + "libraryTitle": "로컬 보관함", "@libraryTitle": { "description": "Library settings page title" }, - "libraryScanSettings": "Scan Settings", + "libraryScanSettings": "스캔 설정", "@libraryScanSettings": { "description": "Section header for scan settings" }, - "libraryEnableLocalLibrary": "Enable Local Library", + "libraryEnableLocalLibrary": "로컬 보관함 활성화", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, @@ -2472,15 +2472,15 @@ "@libraryEnableLocalLibrarySubtitle": { "description": "Subtitle for enable toggle" }, - "libraryFolder": "Library Folder", + "libraryFolder": "보관함 폴더", "@libraryFolder": { "description": "Folder selection setting" }, - "libraryFolderHint": "Tap to select folder", + "libraryFolderHint": "탭하여 폴더를 선택하세요", "@libraryFolderHint": { "description": "Placeholder when no folder selected" }, - "libraryShowDuplicateIndicator": "Show Duplicate Indicator", + "libraryShowDuplicateIndicator": "중복 표시기 표시", "@libraryShowDuplicateIndicator": { "description": "Toggle for duplicate indicator in search" }, @@ -2488,7 +2488,7 @@ "@libraryShowDuplicateIndicatorSubtitle": { "description": "Subtitle for duplicate indicator toggle" }, - "libraryAutoScan": "Auto Scan", + "libraryAutoScan": "자동 스캔", "@libraryAutoScan": { "description": "Setting for automatic library scanning" }, @@ -2496,7 +2496,7 @@ "@libraryAutoScanSubtitle": { "description": "Subtitle for auto scan setting" }, - "libraryAutoScanOff": "Off", + "libraryAutoScanOff": "끄기", "@libraryAutoScanOff": { "description": "Auto scan disabled" }, @@ -2504,7 +2504,7 @@ "@libraryAutoScanOnOpen": { "description": "Auto scan when app opens" }, - "libraryAutoScanDaily": "Daily", + "libraryAutoScanDaily": "매일", "@libraryAutoScanDaily": { "description": "Auto scan once per day" }, @@ -2648,7 +2648,7 @@ "@librarySourceLocal": { "description": "Badge for tracks from local library scan" }, - "libraryFilterAll": "All", + "libraryFilterAll": "모두", "@libraryFilterAll": { "description": "Filter chip - show all library items" }, @@ -2656,27 +2656,27 @@ "@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" }, @@ -2688,7 +2688,7 @@ "@libraryFilterQualityCD": { "description": "Filter option - CD quality audio" }, - "libraryFilterQualityLossy": "Lossy", + "libraryFilterQualityLossy": "손실 압축", "@libraryFilterQualityLossy": { "description": "Filter option - lossy compressed audio" }, From 84f784e53843733526d25843e61b34b81338867a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 23 Jun 2026 16:02:14 +0700 Subject: [PATCH 022/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 65a62d4d..6dd84198 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -69,7 +69,7 @@ "@settingsDownload": { "description": "Settings section - download options" }, - "settingsAppearance": "외관", + "settingsAppearance": "디자인", "@settingsAppearance": { "description": "Settings section - visual customization" }, @@ -77,7 +77,7 @@ "@settingsOptions": { "description": "Settings section - app options" }, - "settingsExtensions": "확장 기능", + "settingsExtensions": "확장 프로그램", "@settingsExtensions": { "description": "Settings section - extension management" }, @@ -109,7 +109,7 @@ "@downloadFolderOrganization": { "description": "Title of the folder organization picker bottom sheet" }, - "appearanceTitle": "외관", + "appearanceTitle": "디자인", "@appearanceTitle": { "description": "Appearance settings page title" }, @@ -121,7 +121,7 @@ "@appearanceThemeLight": { "description": "Light theme" }, - "appearanceThemeDark": "다크", + "appearanceThemeDark": "어두운", "@appearanceThemeDark": { "description": "Dark theme" }, @@ -157,7 +157,7 @@ "@optionsPrimaryProviderSubtitle": { "description": "Subtitle for primary provider" }, - "optionsUsingExtension": "확장 기능을 사용: {extensionName}", + "optionsUsingExtension": "확장 프로그램을 사용: {extensionName}", "@optionsUsingExtension": { "description": "Shows active extension name", "placeholders": { @@ -186,7 +186,7 @@ "@optionsAutoFallbackSubtitle": { "description": "Subtitle for auto fallback" }, - "optionsUseExtensionProviders": "확장 기능 사용", + "optionsUseExtensionProviders": "확장 프로그램 사용", "@optionsUseExtensionProviders": { "description": "Legacy setting label for extension download providers" }, @@ -385,7 +385,7 @@ "@optionsSpotifyDeprecationWarning": { "description": "Warning about Spotify API deprecation" }, - "extensionsTitle": "확장 기능", + "extensionsTitle": "확장 프로그램", "@extensionsTitle": { "description": "Extensions page title" }, @@ -419,7 +419,7 @@ "@storeTitle": { "description": "Store screen title" }, - "storeSearch": "확장 기능 검색", + "storeSearch": "확장 프로그램 검색...", "@storeSearch": { "description": "Store search placeholder" }, @@ -2119,11 +2119,11 @@ "@downloadFrom": { "description": "Label - download source" }, - "appearanceAmoledDark": "AMOLED Dark", + "appearanceAmoledDark": "아몰레드 블랙", "@appearanceAmoledDark": { "description": "Theme option - pure black" }, - "appearanceAmoledDarkSubtitle": "Pure black background", + "appearanceAmoledDarkSubtitle": "순수 검정 배경화면", "@appearanceAmoledDarkSubtitle": { "description": "Subtitle for AMOLED dark" }, From d7c4586358768bc9c0aadec9e8d41d4baa6a3fd8 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 23 Jun 2026 19:57:10 +0700 Subject: [PATCH 023/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 90 ++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 6dd84198..c56c9f40 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -1320,7 +1320,7 @@ "@logFilterSection": { "description": "Filter section title" }, - "logShareLogs": "Share logs", + "logShareLogs": "로그 공유", "@logShareLogs": { "description": "Share button tooltip" }, @@ -1374,7 +1374,7 @@ "@credentialsDescription": { "description": "Credentials dialog explanation" }, - "credentialsClientId": "Client ID", + "credentialsClientId": "클라이언트 ID", "@credentialsClientId": { "description": "Client ID field label - DO NOT TRANSLATE" }, @@ -1796,7 +1796,7 @@ "@storeEmptyNoResults": { "description": "Message when search/filter returns no results" }, - "extensionDefaultProvider": "Default Search", + "extensionDefaultProvider": "기본 검색", "@extensionDefaultProvider": { "description": "Default search provider option" }, @@ -1804,7 +1804,7 @@ "@extensionDefaultProviderSubtitle": { "description": "Subtitle for default provider" }, - "extensionAuthor": "Author", + "extensionAuthor": "작성자", "@extensionAuthor": { "description": "Extension detail - author" }, @@ -1812,31 +1812,31 @@ "@extensionId": { "description": "Extension detail - unique ID" }, - "extensionError": "Error", + "extensionError": "오류", "@extensionError": { "description": "Extension detail - error message" }, - "extensionCapabilities": "Capabilities", + "extensionCapabilities": "기능", "@extensionCapabilities": { "description": "Section header - extension features" }, - "extensionMetadataProvider": "Metadata Provider", + "extensionMetadataProvider": "메타데이터 제공자", "@extensionMetadataProvider": { "description": "Capability - provides metadata" }, - "extensionDownloadProvider": "Download Provider", + "extensionDownloadProvider": "다운로드 제공자", "@extensionDownloadProvider": { "description": "Capability - provides downloads" }, - "extensionLyricsProvider": "Lyrics Provider", + "extensionLyricsProvider": "가사 제공자", "@extensionLyricsProvider": { "description": "Capability - provides lyrics" }, - "extensionUrlHandler": "URL Handler", + "extensionUrlHandler": "URL 핸들러", "@extensionUrlHandler": { "description": "Capability - handles URLs" }, - "extensionQualityOptions": "Quality Options", + "extensionQualityOptions": "품질 옵션", "@extensionQualityOptions": { "description": "Capability - quality selection" }, @@ -2063,7 +2063,7 @@ "@downloadLossyOpus256": { "description": "Lossy format option - Opus 256kbps" }, - "downloadLossyOpus256Subtitle": "최고 음질 Opus, 트랙당 약 8MB", + "downloadLossyOpus256Subtitle": "최고 품질 Opus, 트랙당 약 8MB", "@downloadLossyOpus256Subtitle": { "description": "Subtitle for Opus 256kbps lossy option" }, @@ -2079,27 +2079,27 @@ "@qualityNote": { "description": "Note about quality availability" }, - "downloadAskBeforeDownload": "Ask Before Download", + "downloadAskBeforeDownload": "다운로드 전 확인", "@downloadAskBeforeDownload": { "description": "Setting - show quality picker" }, - "downloadDirectory": "Download Directory", + "downloadDirectory": "다운로드 디렉토리", "@downloadDirectory": { "description": "Setting - download folder" }, - "downloadSeparateSinglesFolder": "Separate Singles Folder", + "downloadSeparateSinglesFolder": "싱글 폴더 별도 다운로드", "@downloadSeparateSinglesFolder": { "description": "Setting - separate folder for singles" }, - "downloadAlbumFolderStructure": "Album Folder Structure", + "downloadAlbumFolderStructure": "앨범 폴더 구조", "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, - "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", + "downloadUseAlbumArtistForFolders": "폴더에 앨범 아티스트 사용", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "downloadUsePrimaryArtistOnly": "Primary artist only for folders", + "downloadUsePrimaryArtistOnly": "폴더에 기본 아티스트만 사용", "@downloadUsePrimaryArtistOnly": { "description": "Setting - strip featured artists from folder name" }, @@ -2111,11 +2111,11 @@ "@downloadUsePrimaryArtistOnlyDisabled": { "description": "Subtitle when primary artist only is disabled" }, - "downloadSelectQuality": "Select Quality", + "downloadSelectQuality": "품질 선택", "@downloadSelectQuality": { "description": "Dialog title - choose audio quality" }, - "downloadFrom": "Download From", + "downloadFrom": "다운로드 대상", "@downloadFrom": { "description": "Label - download source" }, @@ -2127,31 +2127,31 @@ "@appearanceAmoledDarkSubtitle": { "description": "Subtitle for AMOLED dark" }, - "queueClearAll": "Clear All", + "queueClearAll": "모두 지우기", "@queueClearAll": { "description": "Button - clear all queue items" }, - "queueClearAllMessage": "Are you sure you want to clear all downloads?", + "queueClearAllMessage": "모든 다운로드를 지우시겠습니까?", "@queueClearAllMessage": { "description": "Clear queue confirmation" }, - "settingsAutoExportFailed": "Auto-export failed downloads", + "settingsAutoExportFailed": "실패한 다운로드 자동 내보내기", "@settingsAutoExportFailed": { "description": "Setting toggle for auto-export" }, - "settingsAutoExportFailedSubtitle": "Save failed downloads to TXT file automatically", + "settingsAutoExportFailedSubtitle": "실패한 다운로드를 TXT 파일으로 자동 저장합니다", "@settingsAutoExportFailedSubtitle": { "description": "Subtitle for auto-export setting" }, - "settingsDownloadNetwork": "Download Network", + "settingsDownloadNetwork": "다운로드 네트워크", "@settingsDownloadNetwork": { "description": "Setting for network type preference" }, - "settingsDownloadNetworkAny": "WiFi + Mobile Data", + "settingsDownloadNetworkAny": "WiFi + 모바일 네트워크", "@settingsDownloadNetworkAny": { "description": "Network option - use any connection" }, - "settingsDownloadNetworkWifiOnly": "WiFi Only", + "settingsDownloadNetworkWifiOnly": "WiFi 전용", "@settingsDownloadNetworkWifiOnly": { "description": "Network option - only use WiFi" }, @@ -2159,31 +2159,31 @@ "@settingsDownloadNetworkSubtitle": { "description": "Subtitle explaining network preference" }, - "albumFolderArtistAlbum": "Artist / Album", + "albumFolderArtistAlbum": "아티스트 / 앨범", "@albumFolderArtistAlbum": { "description": "Album folder option" }, - "albumFolderArtistAlbumSubtitle": "Albums/Artist Name/Album Name/", + "albumFolderArtistAlbumSubtitle": "앨범/아티스트 이름/앨범 이름/", "@albumFolderArtistAlbumSubtitle": { "description": "Folder structure example" }, - "albumFolderArtistYearAlbum": "Artist / [Year] Album", + "albumFolderArtistYearAlbum": "아티스트 / [연도] 앨범", "@albumFolderArtistYearAlbum": { "description": "Album folder option with year" }, - "albumFolderArtistYearAlbumSubtitle": "Albums/Artist Name/[2005] Album Name/", + "albumFolderArtistYearAlbumSubtitle": "앨범/아티스트 이름/[2005] 앨범 이름/", "@albumFolderArtistYearAlbumSubtitle": { "description": "Folder structure example" }, - "albumFolderAlbumOnly": "Album Only", + "albumFolderAlbumOnly": "앨범만", "@albumFolderAlbumOnly": { "description": "Album folder option" }, - "albumFolderAlbumOnlySubtitle": "Albums/Album Name/", + "albumFolderAlbumOnlySubtitle": "앨범/앨범 이름/", "@albumFolderAlbumOnlySubtitle": { "description": "Folder structure example" }, - "albumFolderYearAlbum": "[Year] Album", + "albumFolderYearAlbum": "[연도] 앨범", "@albumFolderYearAlbum": { "description": "Album folder option with year" }, @@ -2246,7 +2246,7 @@ } } }, - "downloadedAlbumSelectToDelete": "Select tracks to delete", + "downloadedAlbumSelectToDelete": "삭제할 트랙 선택", "@downloadedAlbumSelectToDelete": { "description": "Placeholder when nothing selected" }, @@ -2276,7 +2276,7 @@ "@recentTypePlaylist": { "description": "Recent access item type - playlist" }, - "recentEmpty": "No recent items yet", + "recentEmpty": "최근 항목이 없습니다", "@recentEmpty": { "description": "Empty state text for recent access list" }, @@ -2294,7 +2294,7 @@ } } }, - "discographyDownload": "Download Discography", + "discographyDownload": "디스코그래피 다운로드", "@discographyDownload": { "description": "Button - download artist discography" }, @@ -2354,11 +2354,11 @@ "@discographySelectAlbumsSubtitle": { "description": "Subtitle for select albums option" }, - "discographyFetchingTracks": "Fetching tracks...", + "discographyFetchingTracks": "트랙을 가져오는 중...", "@discographyFetchingTracks": { "description": "Progress - fetching album tracks" }, - "discographyFetchingAlbum": "Fetching {current} of {total}...", + "discographyFetchingAlbum": "{total} 개 중에 {current} 개를 가져오는 중...", "@discographyFetchingAlbum": { "description": "Progress - fetching specific album", "placeholders": { @@ -2508,23 +2508,23 @@ "@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" }, @@ -2676,7 +2676,7 @@ "@libraryFilterSource": { "description": "Filter section - source type" }, - "libraryFilterQuality": "음질", + "libraryFilterQuality": "품질", "@libraryFilterQuality": { "description": "Filter section - audio quality" }, From 68e742b670bd3ff6f9258d6b73871c4270be828d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 24 Jun 2026 10:55:05 +0700 Subject: [PATCH 024/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index c56c9f40..56dbae1b 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -1232,7 +1232,7 @@ "@updateNew": { "description": "Label for new version" }, - "updateDownloading": "Downloading...", + "updateDownloading": "다운로드하는 중...", "@updateDownloading": { "description": "Update status - downloading" }, @@ -2640,7 +2640,7 @@ "@libraryFolderNotExist": { "description": "Error when folder doesn't exist" }, - "librarySourceDownloaded": "Downloaded", + "librarySourceDownloaded": "다운로드 완료", "@librarySourceDownloaded": { "description": "Badge for tracks downloaded via SpotiFLAC" }, @@ -2652,7 +2652,7 @@ "@libraryFilterAll": { "description": "Filter chip - show all library items" }, - "libraryFilterDownloaded": "Downloaded", + "libraryFilterDownloaded": "다운로드 완료", "@libraryFilterDownloaded": { "description": "Filter chip - show only downloaded items" }, @@ -2770,23 +2770,23 @@ } } }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC!", + "tutorialWelcomeTitle": "SpotiFLAC에 오신 것을 환영합니다!", "@tutorialWelcomeTitle": { "description": "Tutorial welcome page title" }, - "tutorialWelcomeDesc": "Let's learn how to download your favorite music in lossless quality. This quick tutorial will show you the basics.", + "tutorialWelcomeDesc": "좋아하는 음악을 무손실 음질로 다운로드하는 방법을 알아보겠습니다. 이 간단한 튜토리얼은 기본 사항을 보여줍니다.", "@tutorialWelcomeDesc": { "description": "Tutorial welcome page description" }, - "tutorialWelcomeTip1": "Download music from Spotify, Deezer, or paste any supported URL", + "tutorialWelcomeTip1": "Spotify, Deezer에서 음악을 다운로드하거나 지원되는 URL을 붙여넣으세요", "@tutorialWelcomeTip1": { "description": "Tutorial welcome tip 1" }, - "tutorialWelcomeTip2": "Get FLAC quality audio from installed download extensions", + "tutorialWelcomeTip2": "설치된 다운로드 확장 프로그램에서 FLAC 음질 오디오를 받으세요", "@tutorialWelcomeTip2": { "description": "Tutorial welcome tip 2" }, - "tutorialWelcomeTip3": "Automatic metadata, cover art, and lyrics embedding", + "tutorialWelcomeTip3": "메타데이터, 앨범 아트 및 가사 자동 삽입", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, @@ -3716,7 +3716,7 @@ } } }, - "downloadedAlbumDownloadedCount": "{count} downloaded", + "downloadedAlbumDownloadedCount": "{count} 다운로드 완료", "@downloadedAlbumDownloadedCount": { "description": "Downloaded tracks count badge", "placeholders": { @@ -4239,7 +4239,7 @@ } } }, - "queueDownloadedHeader": "Downloaded", + "queueDownloadedHeader": "다운로드 완료", "@queueDownloadedHeader": { "description": "Header label for downloaded items section in library" }, @@ -4531,7 +4531,7 @@ } } }, - "notifEmbeddingMetadata": "Embedding metadata...", + "notifEmbeddingMetadata": "메타데이터를 삽입하는 중...", "@notifEmbeddingMetadata": { "description": "Notification body while embedding metadata into a downloaded track" }, @@ -4789,7 +4789,7 @@ "@tutorialStartDownloadSemantics": { "description": "Accessibility label for idle download button in tutorial demo" }, - "optionsEmbedMetadata": "Embed Metadata", + "optionsEmbedMetadata": "메타데이터 삽입", "@optionsEmbedMetadata": { "description": "Settings toggle title for writing metadata into downloaded files" }, From 352186eb40fa1ded73bd4df5aadc306fdd145e93 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 24 Jun 2026 11:55:48 +0700 Subject: [PATCH 025/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 186 ++++++++++++++++++++-------------------- 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 56dbae1b..b6165b0b 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -153,7 +153,7 @@ "@optionsPrimaryProvider": { "description": "Main search provider setting" }, - "optionsPrimaryProviderSubtitle": "Service used for searching by track or album name", + "optionsPrimaryProviderSubtitle": "트랙 또는 앨범 이름으로 검색하는 데 사용되는 서비스", "@optionsPrimaryProviderSubtitle": { "description": "Subtitle for primary provider" }, @@ -174,7 +174,7 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsSwitchBack": "Choose the default search provider to switch back from an extension", + "optionsSwitchBack": "확장 프로그램에서 기본 검색 제공자로 전환하려면 기본 검색 제공자를 선택하세요", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" }, @@ -202,7 +202,7 @@ "@optionsEmbedLyrics": { "description": "Embed lyrics in audio files" }, - "optionsEmbedLyricsSubtitle": "Save synced lyrics alongside your downloaded tracks", + "optionsEmbedLyricsSubtitle": "다운로드한 트랙과 함께 동기화된 가사를 저장합니다", "@optionsEmbedLyricsSubtitle": { "description": "Subtitle for embed lyrics" }, @@ -214,23 +214,23 @@ "@optionsMaxQualityCoverSubtitle": { "description": "Subtitle for max quality cover" }, - "optionsReplayGain": "ReplayGain", + "optionsReplayGain": "리플레이게인", "@optionsReplayGain": { "description": "Title for ReplayGain setting toggle" }, - "optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)", + "optionsReplayGainSubtitleOn": "음량 스캔 및 리플레이게인 태그 삽입 (EBU R128)", "@optionsReplayGainSubtitleOn": { "description": "Subtitle when ReplayGain is enabled" }, - "optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags", + "optionsReplayGainSubtitleOff": "비활성화됨: 음량 정규화 태그 없음", "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, - "trackReplayGain": "ReplayGain 다시 스캔", + "trackReplayGain": "리플레이게인 다시 스캔", "@trackReplayGain": { "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "trackReplayGainSubtitle": "음량 분석 및 리플레이게인 태그 작성", "@trackReplayGainSubtitle": { "description": "Subtitle for the rescan ReplayGain menu option" }, @@ -246,7 +246,7 @@ "@trackReplayGainFailed": { "description": "Snackbar message when ReplayGain scan/write fails" }, - "selectionReplayGainCount": "ReplayGain ({count})", + "selectionReplayGainCount": "리플레이게인 ({count})", "@selectionReplayGainCount": { "description": "Batch selection action button label for ReplayGain", "placeholders": { @@ -255,11 +255,11 @@ } } }, - "replayGainBatchConfirmTitle": "ReplayGain 추가", + "replayGainBatchConfirmTitle": "리플레이게인 추가", "@replayGainBatchConfirmTitle": { "description": "Title of the batch ReplayGain confirmation dialog" }, - "replayGainBatchConfirmMessage": "음량을 분석하고 {count} 개의 트랙에 ReplayGain 태그를 추가하시겠습니까?", + "replayGainBatchConfirmMessage": "음량을 분석하고 {count} 개의 트랙에 리플레이게인 태그를 추가하시겠습니까?", "@replayGainBatchConfirmMessage": { "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { @@ -268,7 +268,7 @@ } } }, - "replayGainBatchAnalyzing": "ReplayGain을 분석하는 중...", + "replayGainBatchAnalyzing": "리플레이게인을 분석하는 중...", "@replayGainBatchAnalyzing": { "description": "Progress dialog title while batch scanning ReplayGain" }, @@ -1620,7 +1620,7 @@ "@trackCopyright": { "description": "Metadata label - copyright information" }, - "trackDownloaded": "Downloaded", + "trackDownloaded": "다운로드 완료", "@trackDownloaded": { "description": "Metadata label - download date" }, @@ -1637,7 +1637,7 @@ } } }, - "trackLyricsNotAvailable": "Lyrics not available for this track", + "trackLyricsNotAvailable": "이 트랙의 가사를 사용할 수 없습니다", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" }, @@ -1649,7 +1649,7 @@ "@trackFetchOnlineLyrics": { "description": "Action - fetch lyrics from online providers" }, - "trackLyricsTimeout": "Request timed out. Try again later.", + "trackLyricsTimeout": "요청 시간이 초과되었습니다. 나중에 다시 시도하세요.", "@trackLyricsTimeout": { "description": "Message when lyrics request times out" }, @@ -1788,11 +1788,11 @@ "@storeLoadError": { "description": "Error heading when the store cannot be loaded" }, - "storeEmptyNoExtensions": "No extensions available", + "storeEmptyNoExtensions": "사용 가능한 확장 프로그램이 없습니다", "@storeEmptyNoExtensions": { "description": "Message when store has no extensions" }, - "storeEmptyNoResults": "No extensions found", + "storeEmptyNoResults": "확장 프로그램을 찾을 수 없습니다", "@storeEmptyNoResults": { "description": "Message when search/filter returns no results" }, @@ -1800,7 +1800,7 @@ "@extensionDefaultProvider": { "description": "Default search provider option" }, - "extensionDefaultProviderSubtitle": "Use the default metadata search", + "extensionDefaultProviderSubtitle": "기본 메타데이터 검색 사용", "@extensionDefaultProviderSubtitle": { "description": "Subtitle for default provider" }, @@ -1856,7 +1856,7 @@ "@extensionRemoveButton": { "description": "Button to uninstall extension" }, - "extensionUpdated": "Updated", + "extensionUpdated": "업데이트 완료", "@extensionUpdated": { "description": "Extension detail - last update" }, @@ -1995,7 +1995,7 @@ "@extensionsSearchProviderDescription": { "description": "Search provider setting description" }, - "extensionsCustomSearch": "Custom search", + "extensionsCustomSearch": "사용자 정의 검색", "@extensionsCustomSearch": { "description": "Label for custom search provider" }, @@ -2071,7 +2071,7 @@ "@downloadLossyOpus128": { "description": "Lossy format option - Opus 128kbps" }, - "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", + "downloadLossyOpus128Subtitle": "트랙당 최소 크기, 약 4MB", "@downloadLossyOpus128Subtitle": { "description": "Subtitle for Opus 128kbps lossy option" }, @@ -2103,11 +2103,11 @@ "@downloadUsePrimaryArtistOnly": { "description": "Setting - strip featured artists from folder name" }, - "downloadUsePrimaryArtistOnlyEnabled": "Featured artists removed from folder name (e.g. Justin Bieber, Quavo → Justin Bieber)", + "downloadUsePrimaryArtistOnlyEnabled": "폴더 이름에서 피처링 아티스트가 제거됩니다 (예: Justin Bieber, Quavo → Justin Bieber)", "@downloadUsePrimaryArtistOnlyEnabled": { "description": "Subtitle when primary artist only is enabled" }, - "downloadUsePrimaryArtistOnlyDisabled": "Full artist string used for folder name", + "downloadUsePrimaryArtistOnlyDisabled": "폴더 이름에 전체 아티스트 문자열이 사용됩니다", "@downloadUsePrimaryArtistOnlyDisabled": { "description": "Subtitle when primary artist only is disabled" }, @@ -2187,23 +2187,23 @@ "@albumFolderYearAlbum": { "description": "Album folder option with year" }, - "albumFolderYearAlbumSubtitle": "Albums/[2005] Album Name/", + "albumFolderYearAlbumSubtitle": "앨범/[2005] 앨범 이름/", "@albumFolderYearAlbumSubtitle": { "description": "Folder structure example" }, - "albumFolderArtistAlbumSingles": "Artist / Album + Singles", + "albumFolderArtistAlbumSingles": "아티스트 / 앨범 + 싱글", "@albumFolderArtistAlbumSingles": { "description": "Album folder option with singles inside artist" }, - "albumFolderArtistAlbumSinglesSubtitle": "Artist/Album/ and Artist/Singles/", + "albumFolderArtistAlbumSinglesSubtitle": "아티스트/앨범/ 및 아티스트/싱글/", "@albumFolderArtistAlbumSinglesSubtitle": { "description": "Folder structure example" }, - "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", + "albumFolderArtistAlbumFlat": "아티스트 / 앨범 (싱글 플랫)", "@albumFolderArtistAlbumFlat": { "description": "Album folder option with singles directly in artist folder" }, - "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", + "albumFolderArtistAlbumFlatSubtitle": "아티스트/앨범/ 및 아티스트/song.flac", "@albumFolderArtistAlbumFlatSubtitle": { "description": "Folder structure example for flat singles" }, @@ -2233,7 +2233,7 @@ "@downloadedAlbumAllSelected": { "description": "Status - all items selected" }, - "downloadedAlbumTapToSelect": "Tap tracks to select", + "downloadedAlbumTapToSelect": "트랙을 탭하여 선택하세요", "@downloadedAlbumTapToSelect": { "description": "Selection hint" }, @@ -2404,7 +2404,7 @@ } } }, - "discographyNoAlbums": "No albums available", + "discographyNoAlbums": "사용 가능한 앨범이 없습니다", "@discographyNoAlbums": { "description": "Error - no albums found for artist" }, @@ -2452,7 +2452,7 @@ "@settingsCache": { "description": "Settings menu item - cache management" }, - "settingsCacheSubtitle": "View size and clear cached data", + "settingsCacheSubtitle": "크기 보기 및 캐시된 데이터 지우기", "@settingsCacheSubtitle": { "description": "Subtitle for cache management menu" }, @@ -2468,7 +2468,7 @@ "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, - "libraryEnableLocalLibrarySubtitle": "Scan and track your existing music", + "libraryEnableLocalLibrarySubtitle": "기존 음악을 스캔하고 추적하세요", "@libraryEnableLocalLibrarySubtitle": { "description": "Subtitle for enable toggle" }, @@ -2528,7 +2528,7 @@ "@libraryScanSelectFolderFirst": { "description": "Message when trying to scan without folder" }, - "libraryCleanupMissingFiles": "Cleanup Missing Files", + "libraryCleanupMissingFiles": "누락된 파일 정리", "@libraryCleanupMissingFiles": { "description": "Button to remove entries for missing files" }, @@ -2536,15 +2536,15 @@ "@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" }, @@ -2552,7 +2552,7 @@ "@libraryClearConfirmMessage": { "description": "Dialog message for clear confirmation" }, - "libraryAbout": "About Local Library", + "libraryAbout": "로컬 저장소에 대한 정보", "@libraryAbout": { "description": "Section header for about info" }, @@ -2578,7 +2578,7 @@ } } }, - "libraryLastScanned": "Last scanned: {time}", + "libraryLastScanned": "마지막 스캔: {time}", "@libraryLastScanned": { "description": "Last scan time display", "placeholders": { @@ -2587,15 +2587,15 @@ } } }, - "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" }, @@ -2628,7 +2628,7 @@ "@libraryCleared": { "description": "Snackbar after clearing library" }, - "libraryStorageAccessRequired": "Storage Access Required", + "libraryStorageAccessRequired": "저장소 접근 권한 필요", "@libraryStorageAccessRequired": { "description": "Dialog title for storage permission" }, @@ -2644,7 +2644,7 @@ "@librarySourceDownloaded": { "description": "Badge for tracks downloaded via SpotiFLAC" }, - "librarySourceLocal": "Local", + "librarySourceLocal": "로컬", "@librarySourceLocal": { "description": "Badge for tracks from local library scan" }, @@ -2692,11 +2692,11 @@ "@libraryFilterQualityLossy": { "description": "Filter option - lossy compressed audio" }, - "libraryFilterFormat": "Format", + "libraryFilterFormat": "형식", "@libraryFilterFormat": { "description": "Filter section - file format" }, - "libraryFilterMetadata": "Metadata", + "libraryFilterMetadata": "메타데이터", "@libraryFilterMetadata": { "description": "Filter section - metadata completeness" }, @@ -2704,51 +2704,51 @@ "@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" }, - "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", + "libraryFilterMetadataMissingAlbumArtist": "앨범 아티스트 누락", "@libraryFilterMetadataMissingAlbumArtist": { "description": "Filter option - items missing album artist" }, - "libraryFilterSort": "Sort", + "libraryFilterSort": "정렬", "@libraryFilterSort": { "description": "Filter section - sort order" }, - "libraryFilterSortLatest": "Latest", + "libraryFilterSortLatest": "최신순", "@libraryFilterSortLatest": { "description": "Sort option - newest first" }, - "libraryFilterSortOldest": "Oldest", + "libraryFilterSortOldest": "오래된순", "@libraryFilterSortOldest": { "description": "Sort option - oldest first" }, - "libraryFilterSortAlbumAsc": "Album (A-Z)", + "libraryFilterSortAlbumAsc": "앨범 (오름차순)", "@libraryFilterSortAlbumAsc": { "description": "Sort option - album ascending" }, - "libraryFilterSortAlbumDesc": "Album (Z-A)", + "libraryFilterSortAlbumDesc": "앨범 (내림차순)", "@libraryFilterSortAlbumDesc": { "description": "Sort option - album descending" }, - "libraryFilterSortGenreAsc": "Genre (A-Z)", + "libraryFilterSortGenreAsc": "장르 (오름차순)", "@libraryFilterSortGenreAsc": { "description": "Sort option - genre ascending" }, - "libraryFilterSortGenreDesc": "Genre (Z-A)", + "libraryFilterSortGenreDesc": "장르 (내림차순)", "@libraryFilterSortGenreDesc": { "description": "Sort option - genre descending" }, - "timeJustNow": "Just now", + "timeJustNow": "방금 전", "@timeJustNow": { "description": "Relative time - less than a minute ago" }, @@ -2790,7 +2790,7 @@ "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, - "tutorialSearchTitle": "Finding Music", + "tutorialSearchTitle": "음악 찾기", "@tutorialSearchTitle": { "description": "Tutorial search page title" }, @@ -2798,7 +2798,7 @@ "@tutorialSearchDesc": { "description": "Tutorial search page description" }, - "tutorialDownloadTitle": "Downloading Music", + "tutorialDownloadTitle": "음악 다운로드", "@tutorialDownloadTitle": { "description": "Tutorial download page title" }, @@ -2806,7 +2806,7 @@ "@tutorialDownloadDesc": { "description": "Tutorial download page description" }, - "tutorialLibraryTitle": "Your Library", + "tutorialLibraryTitle": "내 보관함", "@tutorialLibraryTitle": { "description": "Tutorial library page title" }, @@ -2826,7 +2826,7 @@ "@tutorialLibraryTip3": { "description": "Tutorial library tip 3" }, - "tutorialExtensionsTitle": "Extensions", + "tutorialExtensionsTitle": "확장 프로그램", "@tutorialExtensionsTitle": { "description": "Tutorial extensions page title" }, @@ -2846,7 +2846,7 @@ "@tutorialExtensionsTip3": { "description": "Tutorial extensions tip 3" }, - "tutorialSettingsTitle": "Customize Your Experience", + "tutorialSettingsTitle": "사용자 환경 맞춤 설정", "@tutorialSettingsTitle": { "description": "Tutorial settings page title" }, @@ -2870,7 +2870,7 @@ "@tutorialReadyMessage": { "description": "Tutorial completion message" }, - "libraryForceFullScan": "Force Full Scan", + "libraryForceFullScan": "전제 스캔 강제 실행", "@libraryForceFullScan": { "description": "Button to force a complete rescan of library" }, @@ -2878,7 +2878,7 @@ "@libraryForceFullScanSubtitle": { "description": "Subtitle for force full scan button" }, - "cleanupOrphanedDownloads": "Cleanup Orphaned Downloads", + "cleanupOrphanedDownloads": "불필요한 다운로드 파일 정리", "@cleanupOrphanedDownloads": { "description": "Button to remove history entries for deleted files" }, @@ -2899,7 +2899,7 @@ "@cleanupOrphanedDownloadsNone": { "description": "Snackbar when no orphans found" }, - "cacheTitle": "Storage & Cache", + "cacheTitle": "저장소 & 캐시", "@cacheTitle": { "description": "Cache management page title" }, @@ -2920,15 +2920,15 @@ } } }, - "cacheSectionStorage": "Cached Data", + "cacheSectionStorage": "캐시된 데이터", "@cacheSectionStorage": { "description": "Section header for cache entries" }, - "cacheSectionMaintenance": "Maintenance", + "cacheSectionMaintenance": "유지 관리", "@cacheSectionMaintenance": { "description": "Section header for cleanup actions" }, - "cacheAppDirectory": "App cache directory", + "cacheAppDirectory": "앱 캐시 디렉토리", "@cacheAppDirectory": { "description": "Cache item title for app cache directory" }, @@ -2936,7 +2936,7 @@ "@cacheAppDirectoryDesc": { "description": "Description of what app cache directory contains" }, - "cacheTempDirectory": "Temporary directory", + "cacheTempDirectory": "임시 디렉토리", "@cacheTempDirectory": { "description": "Cache item title for temporary files directory" }, @@ -2944,7 +2944,7 @@ "@cacheTempDirectoryDesc": { "description": "Description of what temporary directory contains" }, - "cacheCoverImage": "Cover image cache", + "cacheCoverImage": "표지 이미지 캐시", "@cacheCoverImage": { "description": "Cache item title for persistent cover images" }, @@ -2952,7 +2952,7 @@ "@cacheCoverImageDesc": { "description": "Description of what cover image cache contains" }, - "cacheLibraryCover": "Library cover cache", + "cacheLibraryCover": "보관함 표지 캐시", "@cacheLibraryCover": { "description": "Cache item title for local library cover art images" }, @@ -2960,7 +2960,7 @@ "@cacheLibraryCoverDesc": { "description": "Description of what library cover cache contains" }, - "cacheExploreFeed": "Explore feed cache", + "cacheExploreFeed": "탐색 피드 캐시", "@cacheExploreFeed": { "description": "Cache item title for explore home feed cache" }, @@ -2980,7 +2980,7 @@ "@cacheCleanupUnusedDesc": { "description": "Description of what cleanup unused data does" }, - "cacheNoData": "No cached data", + "cacheNoData": "캐시된 데이터가 없습니다", "@cacheNoData": { "description": "Label when cache category has no data" }, @@ -3380,15 +3380,15 @@ "@cueSplitButton": { "description": "Button text to start CUE splitting" }, - "actionCreate": "Create", + "actionCreate": "만들기", "@actionCreate": { "description": "Generic action button - create" }, - "collectionFoldersTitle": "My folders", + "collectionFoldersTitle": "내 폴더", "@collectionFoldersTitle": { "description": "Library section title for custom folders" }, - "collectionWishlist": "Wishlist", + "collectionWishlist": "위시리스트", "@collectionWishlist": { "description": "Custom folder for saved tracks to download later" }, @@ -3396,31 +3396,31 @@ "@collectionLoved": { "description": "Custom folder for favorite tracks" }, - "collectionFavoriteArtists": "Favorite Artists", + "collectionFavoriteArtists": "좋아하는 아티스트", "@collectionFavoriteArtists": { "description": "Custom folder for favorite artists" }, - "collectionPlaylists": "Playlists", + "collectionPlaylists": "재생목록", "@collectionPlaylists": { "description": "Custom user playlists folder" }, - "collectionPlaylist": "Playlist", + "collectionPlaylist": "재생목록", "@collectionPlaylist": { "description": "Single playlist label" }, - "collectionAddToPlaylist": "Add to playlist", + "collectionAddToPlaylist": "재생목록에 추가", "@collectionAddToPlaylist": { "description": "Action to add a track to user playlist" }, - "collectionCreatePlaylist": "Create playlist", + "collectionCreatePlaylist": "재생목록 만들기", "@collectionCreatePlaylist": { "description": "Action to create a new playlist" }, - "collectionNoPlaylistsYet": "No playlists yet", + "collectionNoPlaylistsYet": "아직 재생목록이 없습니다", "@collectionNoPlaylistsYet": { "description": "Empty state title when user has no playlists" }, - "collectionNoPlaylistsSubtitle": "Create a playlist to start categorizing tracks", + "collectionNoPlaylistsSubtitle": "트랙 분류를 시작하려면 재생목록을 만드세요", "@collectionNoPlaylistsSubtitle": { "description": "Empty state subtitle when user has no playlists" }, @@ -3442,7 +3442,7 @@ } } }, - "collectionAddedToPlaylist": "Added to \"{playlistName}\"", + "collectionAddedToPlaylist": "\"{playlistName}\"에 추가하였습니다", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", "placeholders": { @@ -3451,7 +3451,7 @@ } } }, - "collectionAlreadyInPlaylist": "Already in \"{playlistName}\"", + "collectionAlreadyInPlaylist": "이미 \"{playlistName}\"에 있습니다", "@collectionAlreadyInPlaylist": { "description": "Snackbar when track already exists in playlist", "placeholders": { @@ -3464,7 +3464,7 @@ "@collectionPlaylistCreated": { "description": "Snackbar after creating playlist" }, - "collectionPlaylistNameHint": "Playlist name", + "collectionPlaylistNameHint": "재생목록 이름", "@collectionPlaylistNameHint": { "description": "Hint text for playlist name input" }, @@ -3472,11 +3472,11 @@ "@collectionPlaylistNameRequired": { "description": "Validation error for empty playlist name" }, - "collectionRenamePlaylist": "Rename playlist", + "collectionRenamePlaylist": "재생목록 이름 변경", "@collectionRenamePlaylist": { "description": "Action to rename playlist" }, - "collectionDeletePlaylist": "Delete playlist", + "collectionDeletePlaylist": "재생목록 삭제", "@collectionDeletePlaylist": { "description": "Action to delete playlist" }, @@ -3803,7 +3803,7 @@ "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" }, - "safMigrationTitle": "Storage Update Required", + "safMigrationTitle": "기기 저장소 업데이트 필요", "@safMigrationTitle": { "description": "Title of SAF migration dialog" }, @@ -4963,7 +4963,7 @@ "@actionDismiss": { "description": "Generic action - dismiss" }, - "setupChangeFolderTooltip": "Change folder", + "setupChangeFolderTooltip": "폴더 변경", "@setupChangeFolderTooltip": { "description": "Tooltip for editing the selected download folder" }, @@ -5068,7 +5068,7 @@ "@settingsMetadata": { "description": "Settings menu item - metadata settings" }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", + "settingsMetadataSubtitle": "앨범 아트, 태그, 리플레이게인, 제공자", "@settingsMetadataSubtitle": { "description": "Subtitle for metadata settings" }, @@ -5108,7 +5108,7 @@ "@metadataProvidersSubtitle": { "description": "Subtitle for metadata provider priority item" }, - "downloadDeduplication": "Skip Duplicate Downloads", + "downloadDeduplication": "중복 다운로드 건너뛰기", "@downloadDeduplication": { "description": "Setting - skip tracks already in download history" }, @@ -5116,7 +5116,7 @@ "@downloadDeduplicationEnabled": { "description": "Subtitle when deduplication is on" }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "downloadDeduplicationDisabled": "기록과 관계없이 모든 트랙이 다운로드됩니다", "@downloadDeduplicationDisabled": { "description": "Subtitle when deduplication is off" }, From d2ec68808c0fa99a68e10e45e7f1d10909c968d8 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 24 Jun 2026 21:57:39 +0700 Subject: [PATCH 026/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index b6165b0b..0ba1fb10 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -1620,7 +1620,7 @@ "@trackCopyright": { "description": "Metadata label - copyright information" }, - "trackDownloaded": "다운로드 완료", + "trackDownloaded": "다운로드됨", "@trackDownloaded": { "description": "Metadata label - download date" }, @@ -1856,7 +1856,7 @@ "@extensionRemoveButton": { "description": "Button to uninstall extension" }, - "extensionUpdated": "업데이트 완료", + "extensionUpdated": "다운로드됨", "@extensionUpdated": { "description": "Extension detail - last update" }, @@ -2015,7 +2015,7 @@ "@qualityHiResFlac": { "description": "Quality option - high resolution FLAC" }, - "qualityHiResFlacSubtitle": "24-bit / up to 96kHz", + "qualityHiResFlacSubtitle": "24-bit / 최대 96kHz", "@qualityHiResFlacSubtitle": { "description": "Technical spec for hi-res" }, @@ -2023,7 +2023,7 @@ "@qualityHiResFlacMax": { "description": "Quality option - maximum resolution FLAC" }, - "qualityHiResFlacMaxSubtitle": "24-bit / up to 192kHz", + "qualityHiResFlacMaxSubtitle": "24-bit / 최대 192kHz", "@qualityHiResFlacMaxSubtitle": { "description": "Technical spec for hi-res max" }, @@ -2640,7 +2640,7 @@ "@libraryFolderNotExist": { "description": "Error when folder doesn't exist" }, - "librarySourceDownloaded": "다운로드 완료", + "librarySourceDownloaded": "다운로드됨", "@librarySourceDownloaded": { "description": "Badge for tracks downloaded via SpotiFLAC" }, @@ -2652,7 +2652,7 @@ "@libraryFilterAll": { "description": "Filter chip - show all library items" }, - "libraryFilterDownloaded": "다운로드 완료", + "libraryFilterDownloaded": "다운로드됨", "@libraryFilterDownloaded": { "description": "Filter chip - show only downloaded items" }, @@ -3716,7 +3716,7 @@ } } }, - "downloadedAlbumDownloadedCount": "{count} 다운로드 완료", + "downloadedAlbumDownloadedCount": "{count} 다운로드됨", "@downloadedAlbumDownloadedCount": { "description": "Downloaded tracks count badge", "placeholders": { @@ -4239,7 +4239,7 @@ } } }, - "queueDownloadedHeader": "다운로드 완료", + "queueDownloadedHeader": "다운로드됨", "@queueDownloadedHeader": { "description": "Header label for downloaded items section in library" }, From 9e115902b75a44ca1a1548824038aa62ebb580f7 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 24 Jun 2026 23:08:31 +0700 Subject: [PATCH 027/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 222 ++++++++++++++++++++-------------------- 1 file changed, 111 insertions(+), 111 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 0ba1fb10..988d298b 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -17,7 +17,7 @@ "@navSettings": { "description": "Bottom navigation - Settings tab" }, - "navStore": "저장소", + "navStore": "리포지토리", "@navStore": { "description": "Bottom navigation - Extension store tab" }, @@ -288,7 +288,7 @@ "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" }, - "optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.", + "optionsArtistTagModeDescription": "여러 아티스트를 내장 태그에 작성하는 방법을 선택하세요.", "@optionsArtistTagModeDescription": { "description": "Bottom-sheet description for artist tag mode setting" }, @@ -296,7 +296,7 @@ "@optionsArtistTagModeJoined": { "description": "Artist tag mode option that joins multiple artists into one value" }, - "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", + "optionsArtistTagModeJoinedSubtitle": "플레이어 호환성을 최대화하려면 \"아티스트 A, 아티스트 B\"와 같이 하나의 ARTIST 값을 입력하세요.", "@optionsArtistTagModeJoinedSubtitle": { "description": "Subtitle for joined artist tag mode" }, @@ -304,15 +304,15 @@ "@optionsArtistTagModeSplitVorbis": { "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", + "optionsArtistTagModeSplitVorbisSubtitle": "FLAC 및 Opus의 경우 아티스트당 하나의 아티스트 태그를 작성하세요. MP3 및 M4A는 병합된 상태로 유지됩니다.", "@optionsArtistTagModeSplitVorbisSubtitle": { "description": "Subtitle for split Vorbis artist tag mode" }, - "optionsExtensionStore": "확장 프로그램 저장소", + "optionsExtensionStore": "확장 프로그램 리포지토리", "@optionsExtensionStore": { "description": "Show/hide store tab" }, - "optionsExtensionStoreSubtitle": "Show Repo tab in navigation", + "optionsExtensionStoreSubtitle": "하단바에서 리포지토리 탭 표시", "@optionsExtensionStoreSubtitle": { "description": "Subtitle for extension store toggle" }, @@ -356,7 +356,7 @@ "@optionsDetailedLoggingOn": { "description": "Status when logging enabled" }, - "optionsDetailedLoggingOff": "버그 신고를 위한 기능입니다", + "optionsDetailedLoggingOff": "버그 보고서 활성화", "@optionsDetailedLoggingOff": { "description": "Status when logging disabled" }, @@ -415,7 +415,7 @@ "@extensionsUninstall": { "description": "Uninstall extension button" }, - "storeTitle": "확장 프로그램 저장소", + "storeTitle": "확장 프로그램 리포지토리", "@storeTitle": { "description": "Store screen title" }, @@ -523,11 +523,11 @@ "@aboutVersion": { "description": "Version info label" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "aboutBinimumDesc": "QQDL 및 HiFi API 개발자입니다. 이 프로젝트는 무손실 다운로드 지원을 형성하는 데 도움을 주셨습니다.", "@aboutBinimumDesc": { "description": "Credit description for binimum" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "aboutSachinsenalDesc": "HiFi 프로젝트의 원작자이자, 무손실 음원 소스 통합 기능의 토대를 구축한 개발자입니다.", "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, @@ -535,7 +535,7 @@ "@aboutSjdonadoDesc": { "description": "Credit description for sjdonado" }, - "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", + "aboutAppDescription": "음악 메타데이터 검색, 확장 프로그램 관리, 보관함 정리.", "@aboutAppDescription": { "description": "App description in header card" }, @@ -589,7 +589,7 @@ "@setupSkip": { "description": "Skip current step button" }, - "setupStorageAccessRequired": "스토리지 접근 권한 필요", + "setupStorageAccessRequired": "저장소 접근 권한 필요", "@setupStorageAccessRequired": { "description": "Title when storage access needed" }, @@ -732,7 +732,7 @@ "@setupLanguageTitle": { "description": "Title for the language selection step in setup" }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "setupLanguageDescription": "앱에서 사용할 언어를 선택하세요. 나중에 설정에서 변경할 수 있습니다.", "@setupLanguageDescription": { "description": "Description for the language selection step in setup" }, @@ -1006,7 +1006,7 @@ "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "errorUrlNotRecognizedMessage": "This link is not supported. Make sure the URL is correct and a compatible extension is installed.", + "errorUrlNotRecognizedMessage": "이 링크는 지원되지 않습니다. URL이 올바른지, 호환되는 확장 프로그램이 설치되어 있는지 확인하세요.", "@errorUrlNotRecognizedMessage": { "description": "Error message - URL not recognized explanation" }, @@ -1252,11 +1252,11 @@ "@providerPriorityTitle": { "description": "Provider priority page title" }, - "providerPriorityDescription": "Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.", + "providerPriorityDescription": "드래그하여 다운로드 제공자 순서를 변경하세요. 앱은 트랙을 다운로드할 경우에 위에서 아래로 제공자를 차례로 시도합니다.", "@providerPriorityDescription": { "description": "Provider priority page description" }, - "providerPriorityInfo": "If a track is not available on the first provider, the app will automatically try the next one.", + "providerPriorityInfo": "첫 ​​번째 제공자에서 트랙을 사용할 수 없는 경우에 앱은 자동으로 다음 제공자를 시도합니다.", "@providerPriorityInfo": { "description": "Info tip about fallback behavior" }, @@ -1284,11 +1284,11 @@ "@metadataProviderPriorityTitle": { "description": "Metadata priority page title" }, - "metadataProviderPriorityDescription": "Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.", + "metadataProviderPriorityDescription": "드래그하여 메타데이터 제공자 순서를 변경하세요. 앱은 트랙을 검색하고 메타데이터를 가져올 경우에 위에서 아래로 제공자를 시도합니다.", "@metadataProviderPriorityDescription": { "description": "Metadata priority page description" }, - "metadataProviderPriorityInfo": "Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.", + "metadataProviderPriorityInfo": "Deezer는 요청 횟수 제한이 없으므로 기본 앱으로 사용하는 것이 좋습니다. Spotify는 요청 횟수가 많아지면 요청 횟수를 제한할 수 있습니다.", "@metadataProviderPriorityInfo": { "description": "Info tip about rate limits" }, @@ -1304,7 +1304,7 @@ "@logTitle": { "description": "Logs screen title" }, - "logCopied": "Logs copied to clipboard", + "logCopied": "로그를 클립보드에 복사하였습니다", "@logCopied": { "description": "Snackbar - logs copied" }, @@ -1677,7 +1677,7 @@ "@trackDeleteConfirmTitle": { "description": "Delete confirmation title" }, - "trackDeleteConfirmMessage": "This will permanently delete the downloaded file and remove it from your history.", + "trackDeleteConfirmMessage": "이렇게 하면 다운로드한 파일이 영구적으로 삭제되고 기록에서 제거됩니다.", "@trackDeleteConfirmMessage": { "description": "Delete confirmation message" }, @@ -1744,15 +1744,15 @@ "@storeClearFilters": { "description": "Button to clear all filters" }, - "storeAddRepoTitle": "확장 프로그램 저장소 추가", + "storeAddRepoTitle": "확장 프로그램 리포지토리 추가", "@storeAddRepoTitle": { "description": "Store setup screen - heading when no repo is configured" }, - "storeAddRepoDescription": "확장 프로그램을 찾아보고 설치하려면 registry.json 파일이 포함된 GitHub 저장소 URL을 입력하세요.", + "storeAddRepoDescription": "확장 프로그램을 찾아보고 설치하려면 registry.json 파일이 포함된 GitHub 리포지토리 URL을 입력하세요.", "@storeAddRepoDescription": { "description": "Store setup screen - explanatory text" }, - "storeRepoUrlLabel": "저장소 URL", + "storeRepoUrlLabel": "리포지토리 URL", "@storeRepoUrlLabel": { "description": "Label for the repository URL input field" }, @@ -1764,23 +1764,23 @@ "@storeRepoUrlHelper": { "description": "Helper text below the repository URL input field" }, - "storeAddRepoButton": "저장소 추가", + "storeAddRepoButton": "리포지토리 추가", "@storeAddRepoButton": { "description": "Button to submit a new repository URL" }, - "storeChangeRepoTooltip": "저장소 변경", + "storeChangeRepoTooltip": "리포지토리 변경", "@storeChangeRepoTooltip": { "description": "Tooltip for the change-repository icon button in the app bar" }, - "storeRepoDialogTitle": "확장 프로그램 저장소", + "storeRepoDialogTitle": "확장 프로그램 리포지토리", "@storeRepoDialogTitle": { "description": "Title of the change/remove repository dialog" }, - "storeRepoDialogCurrent": "현재 저장소:", + "storeRepoDialogCurrent": "현재 리포지토리:", "@storeRepoDialogCurrent": { "description": "Label shown above the current repository URL in the dialog" }, - "storeNewRepoUrlLabel": "새 저장소 URL", + "storeNewRepoUrlLabel": "새 리포지토리 URL", "@storeNewRepoUrlLabel": { "description": "Label for the new repository URL field inside the dialog" }, @@ -1963,11 +1963,11 @@ "@extensionsFallbackTitle": { "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", + "extensionsFallbackSubtitle": "설치된 다운로드 확장 프로그램 중 대체 프로그램으로 사용할 항목을 선택하세요", "@extensionsFallbackSubtitle": { "description": "Subtitle for download fallback extensions menu" }, - "extensionsNoDownloadProvider": "No extensions with download provider", + "extensionsNoDownloadProvider": "다운로드 제공자가 있는 확장 프로그램가 없습니다", "@extensionsNoDownloadProvider": { "description": "Empty state - no download providers" }, @@ -1975,11 +1975,11 @@ "@extensionsMetadataPriority": { "description": "Setting - metadata provider order" }, - "extensionsMetadataPrioritySubtitle": "Set search & metadata source order", + "extensionsMetadataPrioritySubtitle": "검색 & 메타데이터 소스 순서 설정", "@extensionsMetadataPrioritySubtitle": { "description": "Subtitle for metadata priority" }, - "extensionsNoMetadataProvider": "No extensions with metadata provider", + "extensionsNoMetadataProvider": "메타데이터 제공자가 있는 확장 프로그램이 없습니다", "@extensionsNoMetadataProvider": { "description": "Empty state - no metadata providers" }, @@ -1987,11 +1987,11 @@ "@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" }, @@ -2039,7 +2039,7 @@ "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "downloadLossy320FormatDesc": "320kbps 손실 다운로드의 출력 형식을 선택하세요. 필요에 따라 원본 스트림이 선택한 형식으로 변환됩니다.", "@downloadLossy320FormatDesc": { "description": "Description in the lossy format picker" }, @@ -2155,7 +2155,7 @@ "@settingsDownloadNetworkWifiOnly": { "description": "Network option - only use WiFi" }, - "settingsDownloadNetworkSubtitle": "Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.", + "settingsDownloadNetworkSubtitle": "다운로드에 사용할 네트워크를 선택하세요. Wi-Fi 전용으로 설정하면 모바일 데이터 사용 시 다운로드가 일시 중지됩니다.", "@settingsDownloadNetworkSubtitle": { "description": "Subtitle explaining network preference" }, @@ -2302,7 +2302,7 @@ "@discographyDownloadAll": { "description": "Option - download entire discography" }, - "discographyDownloadAllSubtitle": "{count} tracks from {albumCount} releases", + "discographyDownloadAllSubtitle": "{albumCount} 개의 릴리스에서 {count} 개의 트랙", "@discographyDownloadAllSubtitle": { "description": "Subtitle showing total tracks and albums", "placeholders": { @@ -2318,7 +2318,7 @@ "@discographyAlbumsOnly": { "description": "Option - download only albums" }, - "discographyAlbumsOnlySubtitle": "{count} tracks from {albumCount} albums", + "discographyAlbumsOnlySubtitle": "{albumCount} 개의 앨범에서 {count} 개의 트랙", "@discographyAlbumsOnlySubtitle": { "description": "Subtitle showing album tracks count", "placeholders": { @@ -2334,7 +2334,7 @@ "@discographySinglesOnly": { "description": "Option - download only singles" }, - "discographySinglesOnlySubtitle": "{count} tracks from {albumCount} singles", + "discographySinglesOnlySubtitle": "{albumCount} 개의 싱글에서 {count} 개의 트랙", "@discographySinglesOnlySubtitle": { "description": "Subtitle showing singles tracks count", "placeholders": { @@ -2350,7 +2350,7 @@ "@discographySelectAlbums": { "description": "Option - manually select albums to download" }, - "discographySelectAlbumsSubtitle": "Choose specific albums or singles", + "discographySelectAlbumsSubtitle": "특정 앨범 또는 싱글을 선택하세요", "@discographySelectAlbumsSubtitle": { "description": "Subtitle for select albums option" }, @@ -2412,7 +2412,7 @@ "@discographyFailedToFetch": { "description": "Error - some albums failed to load" }, - "sectionStorageAccess": "기기 저장소 접근", + "sectionStorageAccess": "저장소 접근", "@sectionStorageAccess": { "description": "Section header for storage access settings" }, @@ -2428,15 +2428,15 @@ "@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": "사용자 정의 폴더에 저장할 경우에 쓰기 오류가 발생하면 이 옵션을 활성화하세요. Android 13 이상에서는 기본적으로 특정 디렉터리에 대한 액세스가 제한됩니다.", "@allFilesAccessDescription": { "description": "Description explaining when to enable all files access" }, - "allFilesAccessDeniedMessage": "Permission was denied. Please enable 'All files access' manually in system settings.", + "allFilesAccessDeniedMessage": "권한이 거부되었습니다. 시스템 설정에서 '모든 파일 접근'를 수동으로 활성화하세요.", "@allFilesAccessDeniedMessage": { "description": "Message when permission is permanently denied" }, - "allFilesAccessDisabledMessage": "All Files Access disabled. The app will use limited storage access.", + "allFilesAccessDisabledMessage": "모든 파일 액세스를 비활성화하였습니다. 앱은 제한된 저장소 액세스를 사용합니다.", "@allFilesAccessDisabledMessage": { "description": "Snackbar message when user disables all files access" }, @@ -2448,7 +2448,7 @@ "@settingsLocalLibrarySubtitle": { "description": "Subtitle for local library settings" }, - "settingsCache": "기기 저장소 & 캐시", + "settingsCache": "저장소 & 캐시", "@settingsCache": { "description": "Settings menu item - cache management" }, @@ -2484,7 +2484,7 @@ "@libraryShowDuplicateIndicator": { "description": "Toggle for duplicate indicator in search" }, - "libraryShowDuplicateIndicatorSubtitle": "Show when searching for existing tracks", + "libraryShowDuplicateIndicatorSubtitle": "기존 트랙을 검색할 때 표시", "@libraryShowDuplicateIndicatorSubtitle": { "description": "Subtitle for duplicate indicator toggle" }, @@ -2492,7 +2492,7 @@ "@libraryAutoScan": { "description": "Setting for automatic library scanning" }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", + "libraryAutoScanSubtitle": "보관함에서 새 파일을 자동으로 스캔합니다", "@libraryAutoScanSubtitle": { "description": "Subtitle for auto scan setting" }, @@ -2532,7 +2532,7 @@ "@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" }, @@ -2548,7 +2548,7 @@ "@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" }, @@ -2599,7 +2599,7 @@ "@libraryScanFinalizing": { "description": "Status shown after file scanning finishes but library persistence is still running" }, - "libraryScanProgress": "{progress}% of {total} files", + "libraryScanProgress": "{total} 개의 파일 중 {progress}%", "@libraryScanProgress": { "description": "Scan progress display", "placeholders": { @@ -2632,11 +2632,11 @@ "@libraryStorageAccessRequired": { "description": "Dialog title for storage permission" }, - "libraryStorageAccessMessage": "SpotiFLAC needs storage access to scan your music library. Please grant permission in settings.", + "libraryStorageAccessMessage": "SpotifyFLAC은 음악 라이브러리를 스캔하기 위해 저장소 접근 권한이 필요합니다. 설정에서 권한을 부여해 주세요.", "@libraryStorageAccessMessage": { "description": "Dialog message for storage permission" }, - "libraryFolderNotExist": "Selected folder does not exist", + "libraryFolderNotExist": "선택한 폴더가 없습니다", "@libraryFolderNotExist": { "description": "Error when folder doesn't exist" }, @@ -2794,7 +2794,7 @@ "@tutorialSearchTitle": { "description": "Tutorial search page title" }, - "tutorialSearchDesc": "There are two easy ways to find music you want to download.", + "tutorialSearchDesc": "다운로드하고 싶은 음악을 찾는 두 가지 쉬운 방법이 있습니다.", "@tutorialSearchDesc": { "description": "Tutorial search page description" }, @@ -2802,7 +2802,7 @@ "@tutorialDownloadTitle": { "description": "Tutorial download page title" }, - "tutorialDownloadDesc": "Downloading music is simple and fast. Here's how it works.", + "tutorialDownloadDesc": "음악 다운로드는 간단하고 빠릅니다. 작동 방식은 다음과 같습니다.", "@tutorialDownloadDesc": { "description": "Tutorial download page description" }, @@ -2810,19 +2810,19 @@ "@tutorialLibraryTitle": { "description": "Tutorial library page title" }, - "tutorialLibraryDesc": "All your downloaded music is organized in the Library tab.", + "tutorialLibraryDesc": "다운로드한 모든 음악은 보관함 탭에 정리되어 있습니다.", "@tutorialLibraryDesc": { "description": "Tutorial library page description" }, - "tutorialLibraryTip1": "View download progress and queue in the Library tab", + "tutorialLibraryTip1": "보관함 탭에서 다운로드 진행 상황과 대기목록을 확인하세요", "@tutorialLibraryTip1": { "description": "Tutorial library tip 1" }, - "tutorialLibraryTip2": "Tap any track to play it with your music player", + "tutorialLibraryTip2": "음악 플레이어로 재생하려면 아무 트랙이나 탭하세요", "@tutorialLibraryTip2": { "description": "Tutorial library tip 2" }, - "tutorialLibraryTip3": "Switch between list and grid view for better browsing", + "tutorialLibraryTip3": "더 나은 탐색을 위해 리스트 보기와 그리드 보기 사이를 전환하세요", "@tutorialLibraryTip3": { "description": "Tutorial library tip 3" }, @@ -2830,19 +2830,19 @@ "@tutorialExtensionsTitle": { "description": "Tutorial extensions page title" }, - "tutorialExtensionsDesc": "Extend the app's capabilities with community extensions.", + "tutorialExtensionsDesc": "커뮤니티 확장 프로그램을 사용하여 앱의 기능을 확장하세요.", "@tutorialExtensionsDesc": { "description": "Tutorial extensions page description" }, - "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", + "tutorialExtensionsTip1": "유용한 확장 프로그램을 찾으려면 리포지토리 탭을 탐색하세요", "@tutorialExtensionsTip1": { "description": "Tutorial extensions tip 1" }, - "tutorialExtensionsTip2": "Add new download providers or search sources", + "tutorialExtensionsTip2": "새 다운로드 제공즈 또는 검색 소스를 추가하세요", "@tutorialExtensionsTip2": { "description": "Tutorial extensions tip 2" }, - "tutorialExtensionsTip3": "Get lyrics, enhanced metadata, and more features", + "tutorialExtensionsTip3": "가사, 향상된 메타데이터 및 더 많은 기능을 이용하세요", "@tutorialExtensionsTip3": { "description": "Tutorial extensions tip 3" }, @@ -2850,23 +2850,23 @@ "@tutorialSettingsTitle": { "description": "Tutorial settings page title" }, - "tutorialSettingsDesc": "Personalize the app in Settings to match your preferences.", + "tutorialSettingsDesc": "설정에서 앱을 원하는 대로 맞춤 설정하세요.", "@tutorialSettingsDesc": { "description": "Tutorial settings page description" }, - "tutorialSettingsTip1": "Change download location and folder organization", + "tutorialSettingsTip1": "다운로드 위치 및 폴더 구성 변경", "@tutorialSettingsTip1": { "description": "Tutorial settings tip 1" }, - "tutorialSettingsTip2": "Set default audio quality and format preferences", + "tutorialSettingsTip2": "기본 오디오 품질 및 형식 설정", "@tutorialSettingsTip2": { "description": "Tutorial settings tip 2" }, - "tutorialSettingsTip3": "Customize app theme and appearance", + "tutorialSettingsTip3": "앱 테마 및 디자인 사용자 정의", "@tutorialSettingsTip3": { "description": "Tutorial settings tip 3" }, - "tutorialReadyMessage": "You're all set! Start downloading your favorite music now.", + "tutorialReadyMessage": "모든 준비가 완료되었습니다! 지금 바로 좋아하는 음악을 다운로드하세요.", "@tutorialReadyMessage": { "description": "Tutorial completion message" }, @@ -2882,11 +2882,11 @@ "@cleanupOrphanedDownloads": { "description": "Button to remove history entries for deleted files" }, - "cleanupOrphanedDownloadsSubtitle": "Remove history entries for files that no longer exist", + "cleanupOrphanedDownloadsSubtitle": "더 이상 존재하지 않는 파일의 기록 항목을 제거합니다", "@cleanupOrphanedDownloadsSubtitle": { "description": "Subtitle for orphaned cleanup button" }, - "cleanupOrphanedDownloadsResult": "Removed {count} orphaned entries from history", + "cleanupOrphanedDownloadsResult": "기록에서 {count} 개의 불필요한 항목을 제거하였습니다", "@cleanupOrphanedDownloadsResult": { "description": "Snackbar after orphan cleanup", "placeholders": { @@ -2895,7 +2895,7 @@ } } }, - "cleanupOrphanedDownloadsNone": "No orphaned entries found", + "cleanupOrphanedDownloadsNone": "불필요한 항목이 없습니다", "@cleanupOrphanedDownloadsNone": { "description": "Snackbar when no orphans found" }, @@ -2907,7 +2907,7 @@ "@cacheSummaryTitle": { "description": "Heading for cache summary card" }, - "cacheSummarySubtitle": "Clearing cache will not remove downloaded music files.", + "cacheSummarySubtitle": "캐시를 지워도 다운로드한 음악 파일은 삭제되지 않습니다.", "@cacheSummarySubtitle": { "description": "Helper text for cache summary card" }, @@ -2932,7 +2932,7 @@ "@cacheAppDirectory": { "description": "Cache item title for app cache directory" }, - "cacheAppDirectoryDesc": "HTTP responses, WebView data, and other temporary app data.", + "cacheAppDirectoryDesc": "HTTP 응답, WebView 데이터 및 기타 임시 앱 데이터.", "@cacheAppDirectoryDesc": { "description": "Description of what app cache directory contains" }, @@ -2940,7 +2940,7 @@ "@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" }, @@ -2948,7 +2948,7 @@ "@cacheCoverImage": { "description": "Cache item title for persistent cover images" }, - "cacheCoverImageDesc": "Downloaded album and track cover art. Will re-download when viewed.", + "cacheCoverImageDesc": "다운로드된 앨범 및 트랙 표지 이미지입니다. 볼 때 다시 다운로드됩니다.", "@cacheCoverImageDesc": { "description": "Description of what cover image cache contains" }, @@ -2956,7 +2956,7 @@ "@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": "로컬 음악 파일에서 표지 이미지를 추출하였습니다. 다음 스캔 시 다시 추출합니다.", "@cacheLibraryCoverDesc": { "description": "Description of what library cover cache contains" }, @@ -2964,7 +2964,7 @@ "@cacheExploreFeed": { "description": "Cache item title for explore home feed cache" }, - "cacheExploreFeedDesc": "Explore tab content (new releases, trending). Will refresh on next visit.", + "cacheExploreFeedDesc": "탐색 탭 콘텐츠(신규 발매, 인기 콘텐츠). 다음 방문 시 새로 고쳐집니다.", "@cacheExploreFeedDesc": { "description": "Description of what explore feed cache contains" }, @@ -2972,11 +2972,11 @@ "@cacheTrackLookup": { "description": "Cache item title for track ID lookup cache" }, - "cacheTrackLookupDesc": "Spotify/Deezer track ID lookups. Clearing may slow next few searches.", + "cacheTrackLookupDesc": "Spotify/Deezer 추적 ID을 조회합니다. 지우면 속도가 느려질 수 있습니다.", "@cacheTrackLookupDesc": { "description": "Description of what track lookup cache contains" }, - "cacheCleanupUnusedDesc": "Remove orphaned download history and library entries for missing files.", + "cacheCleanupUnusedDesc": "누락된 파일에 대한 불필요한 다운로드 기록 및 보관함 항목을 제거합니다.", "@cacheCleanupUnusedDesc": { "description": "Description of what cleanup unused data does" }, @@ -3005,7 +3005,7 @@ } } }, - "cacheEntries": "{count} entries", + "cacheEntries": "{count} 개의 항목", "@cacheEntries": { "description": "Track cache entry count", "placeholders": { @@ -3014,7 +3014,7 @@ } } }, - "cacheClearSuccess": "Cleared: {target}", + "cacheClearSuccess": "지워짐: {target}", "@cacheClearSuccess": { "description": "Snackbar after clearing selected cache", "placeholders": { @@ -3023,7 +3023,7 @@ } } }, - "cacheClearConfirmTitle": "Clear cache?", + "cacheClearConfirmTitle": "캐시를 지우시겠습니까?", "@cacheClearConfirmTitle": { "description": "Dialog title before clearing one cache category" }, @@ -3036,7 +3036,7 @@ } } }, - "cacheClearAllConfirmTitle": "Clear all cache?", + "cacheClearAllConfirmTitle": "모든 캐시를 지우시겠습니까?", "@cacheClearAllConfirmTitle": { "description": "Dialog title before clearing all caches" }, @@ -3044,19 +3044,19 @@ "@cacheClearAllConfirmMessage": { "description": "Dialog message before clearing all caches" }, - "cacheClearAll": "Clear all cache", + "cacheClearAll": "모든 캐시 지우기", "@cacheClearAll": { "description": "Button label to clear all caches" }, - "cacheCleanupUnused": "Cleanup unused data", + "cacheCleanupUnused": "사용되지 않는 데이터 정리", "@cacheCleanupUnused": { "description": "Action title for cleaning unused entries" }, - "cacheCleanupUnusedSubtitle": "Remove orphaned download history and missing library entries", + "cacheCleanupUnusedSubtitle": "불필요한 다운로드 기록 및 누락된 보관함 항목을 제거합니다", "@cacheCleanupUnusedSubtitle": { "description": "Subtitle for cleanup unused data action" }, - "cacheCleanupResult": "Cleanup completed: {downloadCount} orphaned downloads, {libraryCount} missing library entries", + "cacheCleanupResult": "정리 완료: {downloadCount} 개의 사용되지 않는 다운로드, {libraryCount} 개의 누락된 보관함 항목", "@cacheCleanupResult": { "description": "Snackbar after unused data cleanup", "placeholders": { @@ -3068,11 +3068,11 @@ } } }, - "cacheRefreshStats": "Refresh stats", + "cacheRefreshStats": "통계 새로고침", "@cacheRefreshStats": { "description": "Button label to refresh cache statistics" }, - "trackSaveCoverArt": "Save Cover Art", + "trackSaveCoverArt": "표지 이미지 저장", "@trackSaveCoverArt": { "description": "Menu action - save album cover art as file" }, @@ -3080,27 +3080,27 @@ "@trackSaveCoverArtSubtitle": { "description": "Subtitle for save cover art action" }, - "trackSaveLyrics": "Save Lyrics (.lrc)", + "trackSaveLyrics": "가사 (.lrc) 저장", "@trackSaveLyrics": { "description": "Menu action - save lyrics as .lrc file" }, - "trackSaveLyricsSubtitle": "Fetch and save lyrics as .lrc file", + "trackSaveLyricsSubtitle": "가사를 .Irc 파일로 가져와서 저장", "@trackSaveLyricsSubtitle": { "description": "Subtitle for save lyrics action" }, - "trackSaveLyricsProgress": "Saving lyrics...", + "trackSaveLyricsProgress": "가사를 저장하는 중...", "@trackSaveLyricsProgress": { "description": "Snackbar while saving lyrics to file" }, - "trackReEnrich": "Re-enrich", + "trackReEnrich": "보강", "@trackReEnrich": { "description": "Menu action - re-embed metadata into audio file" }, - "trackReEnrichOnlineSubtitle": "Search metadata online and embed into file", + "trackReEnrichOnlineSubtitle": "온라인에서 메타데이터를 검색하고 파일에 삽입", "@trackReEnrichOnlineSubtitle": { "description": "Subtitle for re-enrich metadata action for local items" }, - "trackReEnrichFieldsTitle": "Fields to update", + "trackReEnrichFieldsTitle": "업데이트할 필드", "@trackReEnrichFieldsTitle": { "description": "Section title for field selection in re-enrich dialog" }, @@ -3108,31 +3108,31 @@ "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" }, - "trackReEnrichFieldLyrics": "Lyrics", + "trackReEnrichFieldLyrics": "가사", "@trackReEnrichFieldLyrics": { "description": "Checkbox label for lyrics field in re-enrich" }, - "trackReEnrichFieldBasicTags": "Album, Album Artist", + "trackReEnrichFieldBasicTags": "앨범, 앨범 아티스트", "@trackReEnrichFieldBasicTags": { "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" }, - "trackReEnrichFieldTrackInfo": "Track & Disc Number", + "trackReEnrichFieldTrackInfo": "트랙 & 디스크 번호", "@trackReEnrichFieldTrackInfo": { "description": "Checkbox label for track info in re-enrich" }, - "trackReEnrichFieldReleaseInfo": "Date & ISRC", + "trackReEnrichFieldReleaseInfo": "데이터 & ISRC", "@trackReEnrichFieldReleaseInfo": { "description": "Checkbox label for release info in re-enrich" }, - "trackReEnrichFieldExtra": "Genre, Label, Copyright", + "trackReEnrichFieldExtra": "장르, 레이블, 저작권", "@trackReEnrichFieldExtra": { "description": "Checkbox label for extra metadata in re-enrich" }, - "trackReEnrichSelectAll": "Select All", + "trackReEnrichSelectAll": "모두 선택", "@trackReEnrichSelectAll": { "description": "Select all fields checkbox in re-enrich" }, - "trackEditMetadata": "Edit Metadata", + "trackEditMetadata": "메타데이터 편집", "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" }, @@ -3145,7 +3145,7 @@ } } }, - "trackCoverNoSource": "No cover art source available", + "trackCoverNoSource": "표지 이미지 소스를 사용할 수 없습니다", "@trackCoverNoSource": { "description": "Snackbar when no cover art URL or embedded cover" }, @@ -3803,15 +3803,15 @@ "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" }, - "safMigrationTitle": "기기 저장소 업데이트 필요", + "safMigrationTitle": "저장소 업데이트 필요", "@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은 이제 다운로드에 Android 저장소 접근 프레임워크(SAF)를 사용합니다. 이로써 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": "새 저장소 시스템으로 전환하려면 다운로드 폴더를 다시 선택하세요.", "@safMigrationMessage2": { "description": "Second paragraph of SAF migration dialog" }, @@ -3870,7 +3870,7 @@ "@homeSkipAlreadyDownloaded": { "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "homeGoToAlbum": "Go to Album", + "homeGoToAlbum": "앨범으로 이동", "@homeGoToAlbum": { "description": "Context menu item to navigate to the album page" }, @@ -3915,15 +3915,15 @@ "@downloadLocationSubtitle": { "description": "Subtitle shown in the download location picker sheet" }, - "storageModeAppFolder": "App Folder (Recommended)", + "storageModeAppFolder": "앱 폴더 (추천)", "@storageModeAppFolder": { "description": "Storage mode option - app-managed folder" }, - "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", + "storageModeAppFolderSubtitle": "기본적으로 Music/SpotiFLAC에 저장", "@storageModeAppFolderSubtitle": { "description": "Subtitle for app folder storage mode" }, - "storageModeSaf": "Custom Folder (SAF)", + "storageModeSaf": "사용자 정의 폴더 (SAF)", "@storageModeSaf": { "description": "Storage mode option - Storage Access Framework" }, @@ -5084,7 +5084,7 @@ "@settingsApp": { "description": "Settings menu item - app settings" }, - "settingsAppSubtitle": "Updates, data, extension repo, debug", + "settingsAppSubtitle": "업데이트, 데이터, 확장프로그램 리포지토리, 디버그", "@settingsAppSubtitle": { "description": "Subtitle for app settings" }, @@ -5496,7 +5496,7 @@ "@permissionAudio": { "description": "Audio permission type label" }, - "permissionStorage": "Storage", + "permissionStorage": "저장소", "@permissionStorage": { "description": "Storage permission type label" }, From 142d7e639b53a94536d786f6610e5fa532c7fc53 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 25 Jun 2026 00:45:57 +0700 Subject: [PATCH 028/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 412 ++++++++++++++++++++-------------------- 1 file changed, 206 insertions(+), 206 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 988d298b..2f73f409 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -3187,7 +3187,7 @@ } } }, - "queueFlacFindingProgress": "Finding FLAC matches... ({current}/{total})", + "queueFlacFindingProgress": "FLAC 일치 항목을 찾는 중... ({current}/{total})", "@queueFlacFindingProgress": { "description": "Snackbar while resolving remote matches for local FLAC redownloads", "placeholders": { @@ -3199,7 +3199,7 @@ } } }, - "queueFlacNoReliableMatches": "No reliable online matches found for the selection", + "queueFlacNoReliableMatches": "선택한 항목에 대한 신뢰할 수 있는 온라인 일치 항목을 찾을 수 없습니다", "@queueFlacNoReliableMatches": { "description": "Snackbar when no safe FLAC redownload matches were found" }, @@ -3215,7 +3215,7 @@ } } }, - "trackSaveFailed": "Failed: {error}", + "trackSaveFailed": "실패: {error}", "@trackSaveFailed": { "description": "Snackbar when save operation fails", "placeholders": { @@ -3224,19 +3224,19 @@ } } }, - "trackConvertFormat": "Convert Format", + "trackConvertFormat": "형식 변환", "@trackConvertFormat": { "description": "Menu item - convert audio format" }, - "trackConvertFormatSubtitle": "Convert to AAC/M4A, MP3, Opus, ALAC, or FLAC", + "trackConvertFormatSubtitle": "AAC/M4A, MP3, Opus, ALAC 또는 FLAC으로 변환", "@trackConvertFormatSubtitle": { "description": "Subtitle for convert format menu item" }, - "trackConvertTitle": "Convert Audio", + "trackConvertTitle": "오디오 변환", "@trackConvertTitle": { "description": "Title of convert bottom sheet" }, - "trackConvertTargetFormat": "Target Format", + "trackConvertTargetFormat": "변경될 형식", "@trackConvertTargetFormat": { "description": "Label for format selection" }, @@ -3244,7 +3244,7 @@ "@trackConvertBitrate": { "description": "Label for bitrate selection" }, - "trackConvertConfirmTitle": "Confirm Conversion", + "trackConvertConfirmTitle": "변환 확인", "@trackConvertConfirmTitle": { "description": "Confirmation dialog title" }, @@ -3263,7 +3263,7 @@ } } }, - "trackConvertConfirmMessageLossless": "Convert from {sourceFormat} to {targetFormat}? (Lossless — no quality loss)\n\nThe original file will be deleted after conversion.", + "trackConvertConfirmMessageLossless": "{sourceFormat}에서 {targetFormat}으로 변환하시겠습니까?\n(무손실 — 품질 손실 없음)\n\n변환 후에 원본 파일이 삭제됩니다.", "@trackConvertConfirmMessageLossless": { "description": "Confirmation dialog message for lossless-to-lossless conversion", "placeholders": { @@ -3275,11 +3275,11 @@ } } }, - "trackConvertLosslessHint": "Lossless conversion — no quality loss", + "trackConvertLosslessHint": "무손실 변환 — 음질 손실 없음", "@trackConvertLosslessHint": { "description": "Hint shown when converting between lossless formats" }, - "trackConvertConverting": "Converting audio...", + "trackConvertConverting": "오디오를 변환하는 중...", "@trackConvertConverting": { "description": "Snackbar while converting" }, @@ -3296,15 +3296,15 @@ "@trackConvertFailed": { "description": "Snackbar when conversion fails" }, - "cueSplitTitle": "Split CUE Sheet", + "cueSplitTitle": "CUE 시트 분할", "@cueSplitTitle": { "description": "Title for CUE split bottom sheet" }, - "cueSplitSubtitle": "Split CUE+FLAC into individual tracks", + "cueSplitSubtitle": "CUE+FLAC을 개별 트랙으로 분할합니다", "@cueSplitSubtitle": { "description": "Subtitle for CUE split menu item" }, - "cueSplitAlbum": "Album: {album}", + "cueSplitAlbum": "앨범: {album}", "@cueSplitAlbum": { "description": "Album name in CUE split sheet", "placeholders": { @@ -3313,7 +3313,7 @@ } } }, - "cueSplitArtist": "Artist: {artist}", + "cueSplitArtist": "아티스트: {artist}", "@cueSplitArtist": { "description": "Artist name in CUE split sheet", "placeholders": { @@ -3322,7 +3322,7 @@ } } }, - "cueSplitTrackCount": "{count} tracks", + "cueSplitTrackCount": "{count} 개의 트랙", "@cueSplitTrackCount": { "description": "Number of tracks in CUE sheet", "placeholders": { @@ -3331,11 +3331,11 @@ } } }, - "cueSplitConfirmTitle": "Split CUE Album", + "cueSplitConfirmTitle": "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": "\"{album}\"을 {count} 개의 개별 FLAC 파일로 분할하시겠습니까?\n\n파일은 동일한 디렉토리에 저장됩니다.", "@cueSplitConfirmMessage": { "description": "CUE split confirmation dialog message", "placeholders": { @@ -3347,7 +3347,7 @@ } } }, - "cueSplitSplitting": "Splitting CUE sheet... ({current}/{total})", + "cueSplitSplitting": "CUE 시트를 분할하는 중... ({current}/{total})", "@cueSplitSplitting": { "description": "Snackbar while splitting CUE", "placeholders": { @@ -3372,11 +3372,11 @@ "@cueSplitFailed": { "description": "Snackbar when CUE split fails" }, - "cueSplitNoAudioFile": "Audio file not found for this CUE sheet", + "cueSplitNoAudioFile": "이 CUE 시트에 대한 오디오 파일을 찾을 수 없습니다", "@cueSplitNoAudioFile": { "description": "Error when CUE audio file is missing" }, - "cueSplitButton": "Split into Tracks", + "cueSplitButton": "트랙으로 분할", "@cueSplitButton": { "description": "Button text to start CUE splitting" }, @@ -3468,7 +3468,7 @@ "@collectionPlaylistNameHint": { "description": "Hint text for playlist name input" }, - "collectionPlaylistNameRequired": "Playlist name is required", + "collectionPlaylistNameRequired": "재생목록 이름은 필수입니다", "@collectionPlaylistNameRequired": { "description": "Validation error for empty playlist name" }, @@ -3497,35 +3497,35 @@ "@collectionPlaylistRenamed": { "description": "Snackbar after renaming playlist" }, - "collectionWishlistEmptyTitle": "Wishlist is empty", + "collectionWishlistEmptyTitle": "위시리스트가 비워져 있습니다", "@collectionWishlistEmptyTitle": { "description": "Wishlist empty state title" }, - "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", + "collectionWishlistEmptySubtitle": "나중에 다운로드할 트랙을 저장하려면 트랙에서 +를 탭하세요", "@collectionWishlistEmptySubtitle": { "description": "Wishlist empty state subtitle" }, - "collectionLovedEmptyTitle": "Loved folder is empty", + "collectionLovedEmptyTitle": "즐겨찾기 폴더가 비워져 있습니다", "@collectionLovedEmptyTitle": { "description": "Loved empty state title" }, - "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", + "collectionLovedEmptySubtitle": "트랙에 하트를 탭하여 즐겨찾기를 저장하세요", "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, - "collectionFavoriteArtistsEmptyTitle": "No favorite artists yet", + "collectionFavoriteArtistsEmptyTitle": "아직 좋아하는 아티스트가 없습니다", "@collectionFavoriteArtistsEmptyTitle": { "description": "Favorite artists empty state title" }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "collectionFavoriteArtistsEmptySubtitle": "아티스트 페이지에서 하트를 탭하여 여기에 추가하세요", "@collectionFavoriteArtistsEmptySubtitle": { "description": "Favorite artists empty state subtitle" }, - "collectionPlaylistEmptyTitle": "Playlist is empty", + "collectionPlaylistEmptyTitle": "재생목록이 비워져 있습니다", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" }, - "collectionPlaylistEmptySubtitle": "Long-press + on any track to add it here", + "collectionPlaylistEmptySubtitle": "아무 트랙에서 +를 길게 탭하여 여기에 추가하세요", "@collectionPlaylistEmptySubtitle": { "description": "Playlist empty state subtitle" }, @@ -3600,27 +3600,27 @@ } } }, - "trackOptionAddToLoved": "Add to Loved", + "trackOptionAddToLoved": "즐겨찾기에 추가", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" }, - "trackOptionRemoveFromLoved": "Remove from Loved", + "trackOptionRemoveFromLoved": "즐겨찾기에서 제거", "@trackOptionRemoveFromLoved": { "description": "Bottom sheet action label - remove track from loved folder" }, - "trackOptionAddToWishlist": "Add to Wishlist", + "trackOptionAddToWishlist": "위시리스트에 추가", "@trackOptionAddToWishlist": { "description": "Bottom sheet action label - add track to wishlist" }, - "trackOptionRemoveFromWishlist": "Remove from Wishlist", + "trackOptionRemoveFromWishlist": "위시리스트에서 제거", "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, - "artistOptionAddToFavorites": "Add to Favorite Artists", + "artistOptionAddToFavorites": "즐겨찾는 아티스트에 추가", "@artistOptionAddToFavorites": { "description": "Action label - add artist to favorite artists" }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "artistOptionRemoveFromFavorites": "즐겨찾는 아티스트에서 제거", "@artistOptionRemoveFromFavorites": { "description": "Action label - remove artist from favorite artists" }, @@ -3733,15 +3733,15 @@ "@downloadUseAlbumArtistForFoldersTrackSubtitle": { "description": "Subtitle when track artist is used for folder names" }, - "lyricsProvidersTitle": "Lyrics Provider Priority", + "lyricsProvidersTitle": "가사 제공자 우선순위", "@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": "가사 소스를 활성화, 비활성화 및 재정렬합니다.\n가사가 발견될 때까지 위에서 아래로 제공자를 시도합니다.", "@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": "확장 프로그램 가사 제공자는 내장 가사 제공자보다 먼저 실행됩니다. 하나 이상의 제공자가 활성화되어 있어야 합니다.", "@lyricsProvidersInfoText": { "description": "Info tip on lyrics provider priority page" }, @@ -3763,7 +3763,7 @@ } } }, - "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", + "lyricsProvidersAtLeastOne": "최소 한 명의 제공자가 활성화된 상태로 유지되어야 합니다", "@lyricsProvidersAtLeastOne": { "description": "Snackbar when user tries to disable the last enabled provider" }, @@ -3771,35 +3771,35 @@ "@lyricsProvidersSaved": { "description": "Snackbar after saving lyrics provider priority" }, - "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", + "lyricsProvidersDiscardContent": "저장되지 않은 변경 사항이 손실됩니다.", "@lyricsProvidersDiscardContent": { "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "lyricsProviderLrclibDesc": "Open-source synced lyrics database", + "lyricsProviderLrclibDesc": "오픈 소스 동기화 가사 데이터베이스", "@lyricsProviderLrclibDesc": { "description": "Description for LRCLIB provider" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (아시아 노래에 적합)", "@lyricsProviderNeteaseDesc": { "description": "Description for Netease provider" }, - "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", + "lyricsProviderMusixmatchDesc": "최대 규모의 가사 데이터베이스 (다국어 지원)", "@lyricsProviderMusixmatchDesc": { "description": "Description for Musixmatch provider" }, - "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", + "lyricsProviderAppleMusicDesc": "단어별 동기화 가사 (프록시 경유)", "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", + "lyricsProviderQqMusicDesc": "QQ Music (중국 노래에 적합, 프록시 경유)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "lyricsProviderLyricsPlusDesc": "단어별 노래방 가사 (Apple/Musixmatch/Spotify/QQ, 프록시 이용)", "@lyricsProviderLyricsPlusDesc": { "description": "Description for LyricsPlus provider" }, - "lyricsProviderExtensionDesc": "Extension provider", + "lyricsProviderExtensionDesc": "확장 프로그램 제공자", "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" }, @@ -3819,19 +3819,19 @@ "@safMigrationSuccess": { "description": "Snackbar after successfully migrating to SAF" }, - "settingsDonate": "Support Development", + "settingsDonate": "개발 지원", "@settingsDonate": { "description": "Settings menu item - donate page" }, - "settingsDonateSubtitle": "Buy the developer a coffee", + "settingsDonateSubtitle": "개발자에게 커피 한 잔 사주세요", "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, - "tooltipLoveAll": "Love All", + "tooltipLoveAll": "모든 즐겨찾기", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" }, - "tooltipAddToPlaylist": "Add to Playlist", + "tooltipAddToPlaylist": "재생목록에 추가", "@tooltipAddToPlaylist": { "description": "Tooltip for the Add to Playlist button" }, @@ -3853,7 +3853,7 @@ } } }, - "dialogDownloadAllTitle": "Download All", + "dialogDownloadAllTitle": "모두 다운로드", "@dialogDownloadAllTitle": { "description": "Dialog title for bulk download confirmation" }, @@ -3866,7 +3866,7 @@ } } }, - "homeSkipAlreadyDownloaded": "Skip already downloaded songs", + "homeSkipAlreadyDownloaded": "이미 다운로드한 노래 건너뛰기", "@homeSkipAlreadyDownloaded": { "description": "Checkbox label in import dialog to skip already-downloaded songs" }, @@ -3874,11 +3874,11 @@ "@homeGoToAlbum": { "description": "Context menu item to navigate to the album page" }, - "homeAlbumInfoUnavailable": "Album info not available", + "homeAlbumInfoUnavailable": "앨범 정보를 사용할 수 없습니다", "@homeAlbumInfoUnavailable": { "description": "Snackbar when album info cannot be loaded" }, - "snackbarLoadingCueSheet": "Loading CUE sheet...", + "snackbarLoadingCueSheet": "CUE 시트를 불러오는 중...", "@snackbarLoadingCueSheet": { "description": "Snackbar while loading a CUE sheet file" }, @@ -3894,7 +3894,7 @@ "@snackbarFailedToWriteStorage": { "description": "Snackbar when writing metadata back to file fails" }, - "snackbarError": "Error: {error}", + "snackbarError": "오류: {error}", "@snackbarError": { "description": "Generic error snackbar with error detail", "placeholders": { @@ -3903,15 +3903,15 @@ } } }, - "snackbarNoActionDefined": "No action defined for this button", + "snackbarNoActionDefined": "이 버튼에 대해 정의된 작업이 없습니다", "@snackbarNoActionDefined": { "description": "Snackbar when an extension button has no action configured" }, - "noTracksFoundForAlbum": "No tracks found for this album", + "noTracksFoundForAlbum": "이 앨범에서 트랙을 찾을 수 없습니다", "@noTracksFoundForAlbum": { "description": "Empty state message when an album has no tracks" }, - "downloadLocationSubtitle": "Choose where to save your downloaded tracks", + "downloadLocationSubtitle": "다운로드한 트랙을 저장할 위치를 선택하세요", "@downloadLocationSubtitle": { "description": "Subtitle shown in the download location picker sheet" }, @@ -3927,7 +3927,7 @@ "@storageModeSaf": { "description": "Storage mode option - Storage Access Framework" }, - "storageModeSafSubtitle": "Pick any folder, including SD card", + "storageModeSafSubtitle": "SD 카드를 포함한 아무 폴더나 선택하세요", "@storageModeSafSubtitle": { "description": "Subtitle for SAF storage mode" }, @@ -3935,7 +3935,7 @@ "@downloadFilenameDescription": { "description": "Description shown in filename format editor" }, - "downloadFilenameInsertTag": "Tap to insert tag:", + "downloadFilenameInsertTag": "태그를 삽입하려면 탭하세요:", "@downloadFilenameInsertTag": { "description": "Label above filename tag chips" }, @@ -3947,11 +3947,11 @@ "@downloadSeparateSinglesDisabled": { "description": "Subtitle when separate singles folder is off" }, - "downloadArtistNameFilters": "Artist Name Filters", + "downloadArtistNameFilters": "아티스트 이름 필터", "@downloadArtistNameFilters": { "description": "Setting title for artist folder filter options" }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", + "downloadCreatePlaylistSourceFolder": "재생목록 소스 폴더", "@downloadCreatePlaylistSourceFolder": { "description": "Setting to create a subfolder per playlist source" }, @@ -3963,23 +3963,23 @@ "@downloadCreatePlaylistSourceFolderDisabled": { "description": "Subtitle when playlist folder is disabled" }, - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", + "downloadCreatePlaylistSourceFolderRedundant": "폴더 구성 설정에 의해 처리됨", "@downloadCreatePlaylistSourceFolderRedundant": { "description": "Subtitle when folder organization is already set to playlist" }, - "downloadSongLinkRegion": "SongLink Region", + "downloadSongLinkRegion": "SongLink 지역", "@downloadSongLinkRegion": { "description": "Setting for SongLink region used during fallback resolution" }, - "downloadNetworkCompatibilityMode": "Network Compatibility Mode", + "downloadNetworkCompatibilityMode": "네트워크 호환 모드", "@downloadNetworkCompatibilityMode": { "description": "Setting for legacy TLS/network handling" }, - "downloadNetworkCompatibilityModeEnabled": "Using legacy TLS settings for older networks", + "downloadNetworkCompatibilityModeEnabled": "이전 네트워크에 대한 레거시 TLS 설정 사용", "@downloadNetworkCompatibilityModeEnabled": { "description": "Subtitle when network compatibility mode is on" }, - "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", + "downloadNetworkCompatibilityModeDisabled": "표준 ​​네트워크 설정 사용", "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, @@ -3995,67 +3995,67 @@ "@downloadEmbedLyricsDisabled": { "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, - "downloadNeteaseIncludeTranslation": "Netease: Include Translation", + "downloadNeteaseIncludeTranslation": "Netease: 번역 포함", "@downloadNeteaseIncludeTranslation": { "description": "Setting to include translated lyrics from Netease" }, - "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", + "downloadNeteaseIncludeTranslationEnabled": "중국어 번역 포함", "@downloadNeteaseIncludeTranslationEnabled": { "description": "Subtitle when Netease translation is on" }, - "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", + "downloadNeteaseIncludeTranslationDisabled": "원본 가사만", "@downloadNeteaseIncludeTranslationDisabled": { "description": "Subtitle when Netease translation is off" }, - "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", + "downloadNeteaseIncludeRomanization": "Netease: 로마자 표기 포함", "@downloadNeteaseIncludeRomanization": { "description": "Setting to include romanized lyrics from Netease" }, - "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", + "downloadNeteaseIncludeRomanizationEnabled": "로마자 표기 포함", "@downloadNeteaseIncludeRomanizationEnabled": { "description": "Subtitle when Netease romanization is on" }, - "downloadNeteaseIncludeRomanizationDisabled": "No romanization", + "downloadNeteaseIncludeRomanizationDisabled": "로마자 표기 없음", "@downloadNeteaseIncludeRomanizationDisabled": { "description": "Subtitle when Netease romanization is off" }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", + "downloadAppleQqMultiPerson": "Apple / QQ: 다인용 가사", "@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": "듀엣 및 그룹 트랙이 포함된 스피커 레이블", "@downloadAppleQqMultiPersonEnabled": { "description": "Subtitle when multi-person lyrics is on" }, - "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", + "downloadAppleQqMultiPersonDisabled": "스피커 레이블이 없는 표준 가사", "@downloadAppleQqMultiPersonDisabled": { "description": "Subtitle when multi-person lyrics is off" }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", + "downloadAppleElrcWordSync": "Apple Music eLRC 단어 동기화", "@downloadAppleElrcWordSync": { "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", + "downloadAppleElrcWordSyncEnabled": "단어별 타임스탬프 원본 유지", "@downloadAppleElrcWordSyncEnabled": { "description": "Subtitle when Apple Music eLRC word sync is enabled" }, - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", + "downloadAppleElrcWordSyncDisabled": "더 안전한 Apple Music 가사 (줄 단위)", "@downloadAppleElrcWordSyncDisabled": { "description": "Subtitle when Apple Music eLRC word sync is disabled" }, - "downloadMusixmatchLanguage": "Musixmatch Language", + "downloadMusixmatchLanguage": "Musixmatch 언어", "@downloadMusixmatchLanguage": { "description": "Setting for Musixmatch lyrics translation language" }, - "downloadMusixmatchLanguageAuto": "Auto (original language)", + "downloadMusixmatchLanguageAuto": "자동 (원본 언어)", "@downloadMusixmatchLanguageAuto": { "description": "Subtitle when no language is set" }, - "downloadFilterContributing": "Filter Contributing Artists", + "downloadFilterContributing": "참여 아티스트 필터", "@downloadFilterContributing": { "description": "Setting to strip contributing artists from Album Artist folder name" }, - "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", + "downloadFilterContributingEnabled": "앨범 아티스트 폴더 이름에서 제거된 참여 아티스트", "@downloadFilterContributingEnabled": { "description": "Subtitle when contributing artist filter is on" }, @@ -4067,7 +4067,7 @@ "@downloadProvidersNoneEnabled": { "description": "Shown when no lyrics providers are active" }, - "downloadMusixmatchLanguageCode": "Language code", + "downloadMusixmatchLanguageCode": "언어 코드", "@downloadMusixmatchLanguageCode": { "description": "Label for Musixmatch language input field" }, @@ -4079,15 +4079,15 @@ "@downloadMusixmatchLanguageDesc": { "description": "Description in Musixmatch language picker" }, - "downloadMusixmatchAuto": "Auto", + "downloadMusixmatchAuto": "자동", "@downloadMusixmatchAuto": { "description": "Button to clear Musixmatch language (use auto)" }, - "downloadNetworkAnySubtitle": "Use WiFi or mobile data", + "downloadNetworkAnySubtitle": "Wi-Fi 또는 모바일 네트워크 사용", "@downloadNetworkAnySubtitle": { "description": "Subtitle for any-network option in picker" }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "downloadNetworkWifiOnlySubtitle": "모바일 네트워크 사용 시 다운로드 일시 중지", "@downloadNetworkWifiOnlySubtitle": { "description": "Subtitle for WiFi-only option in picker" }, @@ -4095,11 +4095,11 @@ "@downloadSongLinkRegionDesc": { "description": "Description in SongLink region picker" }, - "snackbarUnsupportedAudioFormat": "Unsupported audio format", + "snackbarUnsupportedAudioFormat": "지원되지 않는 오디오 형식", "@snackbarUnsupportedAudioFormat": { "description": "Snackbar when the audio format is not supported for the requested operation" }, - "cacheRefresh": "Refresh", + "cacheRefresh": "새로고침", "@cacheRefresh": { "description": "Tooltip for refresh button on cache management page" }, @@ -4128,7 +4128,7 @@ "@bulkDownloadSelectPlaylists": { "description": "Button label when no playlists are selected for download" }, - "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", + "snackbarSelectedPlaylistsEmpty": "선택한 재생목록에 트랙이 없습니다", "@snackbarSelectedPlaylistsEmpty": { "description": "Snackbar when selected playlists contain no tracks" }, @@ -4141,7 +4141,7 @@ } } }, - "editMetadataAutoFill": "Auto-fill from online", + "editMetadataAutoFill": "온라인에서 자동 채우기", "@editMetadataAutoFill": { "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, @@ -4149,7 +4149,7 @@ "@editMetadataAutoFillDesc": { "description": "Description for the auto-fill section" }, - "editMetadataAutoFillFetch": "Fetch & Fill", + "editMetadataAutoFillFetch": "가져오기 & 채우기", "@editMetadataAutoFillFetch": { "description": "Button label to fetch online metadata and fill selected fields" }, @@ -4174,35 +4174,35 @@ "@editMetadataAutoFillNoneSelected": { "description": "Snackbar when user taps Fetch without selecting any fields" }, - "editMetadataFieldTitle": "Title", + "editMetadataFieldTitle": "제목", "@editMetadataFieldTitle": { "description": "Chip label for title field in auto-fill selector" }, - "editMetadataFieldArtist": "Artist", + "editMetadataFieldArtist": "아티스트", "@editMetadataFieldArtist": { "description": "Chip label for artist field in auto-fill selector" }, - "editMetadataFieldAlbum": "Album", + "editMetadataFieldAlbum": "앨범", "@editMetadataFieldAlbum": { "description": "Chip label for album field in auto-fill selector" }, - "editMetadataFieldAlbumArtist": "Album Artist", + "editMetadataFieldAlbumArtist": "앨범 아티스트", "@editMetadataFieldAlbumArtist": { "description": "Chip label for album artist field in auto-fill selector" }, - "editMetadataFieldDate": "Date", + "editMetadataFieldDate": "날짜", "@editMetadataFieldDate": { "description": "Chip label for date field in auto-fill selector" }, - "editMetadataFieldTrackNum": "Track #", + "editMetadataFieldTrackNum": "트랙 #", "@editMetadataFieldTrackNum": { "description": "Chip label for track number field in auto-fill selector" }, - "editMetadataFieldDiscNum": "Disc #", + "editMetadataFieldDiscNum": "디스크 #", "@editMetadataFieldDiscNum": { "description": "Chip label for disc number field in auto-fill selector" }, - "editMetadataFieldGenre": "Genre", + "editMetadataFieldGenre": "장르", "@editMetadataFieldGenre": { "description": "Chip label for genre field in auto-fill selector" }, @@ -4210,11 +4210,11 @@ "@editMetadataFieldIsrc": { "description": "Chip label for ISRC field in auto-fill selector" }, - "editMetadataFieldLabel": "Label", + "editMetadataFieldLabel": "레이블", "@editMetadataFieldLabel": { "description": "Chip label for label field in auto-fill selector" }, - "editMetadataFieldCopyright": "Copyright", + "editMetadataFieldCopyright": "저작권", "@editMetadataFieldCopyright": { "description": "Chip label for copyright field in auto-fill selector" }, @@ -4222,11 +4222,11 @@ "@editMetadataFieldCover": { "description": "Chip label for cover art field in auto-fill selector" }, - "editMetadataSelectAll": "All", + "editMetadataSelectAll": "모두", "@editMetadataSelectAll": { "description": "Button to select all fields for auto-fill" }, - "editMetadataSelectEmpty": "Empty only", + "editMetadataSelectEmpty": "비어 있음만", "@editMetadataSelectEmpty": { "description": "Button to select only fields that are currently empty" }, @@ -4243,7 +4243,7 @@ "@queueDownloadedHeader": { "description": "Header label for downloaded items section in library" }, - "queueFilteringIndicator": "Filtering...", + "queueFilteringIndicator": "필터링하는 중...", "@queueFilteringIndicator": { "description": "Shown while filter results are being computed" }, @@ -4265,27 +4265,27 @@ } } }, - "queueEmptyAlbums": "No album downloads", + "queueEmptyAlbums": "앨범 다운로드가 없습니다", "@queueEmptyAlbums": { "description": "Empty state title when no album downloads exist" }, - "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", + "queueEmptyAlbumsSubtitle": "앨범에서 여러 트랙을 다운로드하면 여기에 표시됩니다", "@queueEmptyAlbumsSubtitle": { "description": "Empty state subtitle for album downloads" }, - "queueEmptySingles": "No single downloads", + "queueEmptySingles": "싱글 다운로드가 없습니다", "@queueEmptySingles": { "description": "Empty state title when no single track downloads exist" }, - "queueEmptySinglesSubtitle": "Single track downloads will appear here", + "queueEmptySinglesSubtitle": "싱글 트랙 다운로드는 여기에 표시됩니다", "@queueEmptySinglesSubtitle": { "description": "Empty state subtitle for single track downloads" }, - "queueEmptyHistory": "No download history", + "queueEmptyHistory": "다운로드 기록이 없습니다", "@queueEmptyHistory": { "description": "Empty state title when download history is empty" }, - "queueEmptyHistorySubtitle": "Downloaded tracks will appear here", + "queueEmptyHistorySubtitle": "다운로드한 트랙이 여기에 표시됩니다", "@queueEmptyHistorySubtitle": { "description": "Empty state subtitle for download history" }, @@ -4293,7 +4293,7 @@ "@selectionAllPlaylistsSelected": { "description": "Shown when all playlists are selected in selection mode" }, - "selectionTapPlaylistsToSelect": "Tap playlists to select", + "selectionTapPlaylistsToSelect": "선택할 재생목록을 탭하세요", "@selectionTapPlaylistsToSelect": { "description": "Hint shown in playlist selection mode" }, @@ -4301,15 +4301,15 @@ "@selectionSelectPlaylistsToDelete": { "description": "Hint shown when no playlists are selected for deletion" }, - "audioAnalysisTitle": "Audio Quality Analysis", + "audioAnalysisTitle": "오디오 품질 분석", "@audioAnalysisTitle": { "description": "Title for audio analysis section" }, - "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", + "audioAnalysisDescription": "스펙트럼 분석으로 무손실 음질을 확인합니다", "@audioAnalysisDescription": { "description": "Description for audio analysis tap-to-analyze prompt" }, - "audioAnalysisAnalyzing": "Analyzing audio...", + "audioAnalysisAnalyzing": "오디오를 분석하는 중...", "@audioAnalysisAnalyzing": { "description": "Loading text while analyzing audio" }, @@ -4317,15 +4317,15 @@ "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, - "audioAnalysisCodec": "Codec", + "audioAnalysisCodec": "코덱", "@audioAnalysisCodec": { "description": "Audio codec metric label" }, - "audioAnalysisContainer": "Container", + "audioAnalysisContainer": "컨테이너", "@audioAnalysisContainer": { "description": "Audio container metric label" }, - "audioAnalysisDecodedFormat": "Decoded Format", + "audioAnalysisDecodedFormat": "디코딩된 형식", "@audioAnalysisDecodedFormat": { "description": "Decoded sample format metric label" }, @@ -4333,7 +4333,7 @@ "@audioAnalysisBitDepth": { "description": "Bit depth metric label" }, - "audioAnalysisChannels": "Channels", + "audioAnalysisChannels": "채널", "@audioAnalysisChannels": { "description": "Channels metric label" }, @@ -4341,15 +4341,15 @@ "@audioAnalysisDuration": { "description": "Duration metric label" }, - "audioAnalysisNyquist": "Nyquist", + "audioAnalysisNyquist": "나이퀴스트", "@audioAnalysisNyquist": { "description": "Nyquist frequency metric label" }, - "audioAnalysisFileSize": "Size", + "audioAnalysisFileSize": "크기", "@audioAnalysisFileSize": { "description": "File size metric label" }, - "audioAnalysisDynamicRange": "Dynamic Range", + "audioAnalysisDynamicRange": "다이나믹 레인지", "@audioAnalysisDynamicRange": { "description": "Dynamic range metric label" }, @@ -4369,11 +4369,11 @@ "@audioAnalysisTruePeak": { "description": "True peak metric label" }, - "audioAnalysisClipping": "Clipping", + "audioAnalysisClipping": "클리핑", "@audioAnalysisClipping": { "description": "Clipping metric label" }, - "audioAnalysisNoClipping": "No clipping", + "audioAnalysisNoClipping": "클리핑 없음", "@audioAnalysisNoClipping": { "description": "Displayed when no clipped samples were detected" }, @@ -4385,15 +4385,15 @@ "@audioAnalysisChannelStats": { "description": "Per-channel audio analysis section label" }, - "audioAnalysisSamples": "Samples", + "audioAnalysisSamples": "샘플", "@audioAnalysisSamples": { "description": "Total samples metric label" }, - "audioAnalysisRescan": "Re-analyze", + "audioAnalysisRescan": "다시 분석", "@audioAnalysisRescan": { "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" }, - "audioAnalysisRescanning": "Re-analyzing audio...", + "audioAnalysisRescanning": "오디오를 다시 분석하는 중...", "@audioAnalysisRescanning": { "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, @@ -4406,7 +4406,7 @@ } } }, - "extensionsHomeFeedProvider": "Home Feed Provider", + "extensionsHomeFeedProvider": "홈 피드 제공자", "@extensionsHomeFeedProvider": { "description": "Extensions page - label for home feed provider selector" }, @@ -4414,23 +4414,23 @@ "@extensionsHomeFeedDescription": { "description": "Extensions page - description for home feed provider picker" }, - "extensionsHomeFeedAuto": "Auto", + "extensionsHomeFeedAuto": "자동", "@extensionsHomeFeedAuto": { "description": "Label for auto-selected search provider" }, - "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", + "extensionsHomeFeedAutoSubtitle": "사용 가능한 최적의 항목을 자동으로 선택합니다", "@extensionsHomeFeedAutoSubtitle": { "description": "Extensions page - subtitle for auto home feed option" }, - "extensionsHomeFeedOff": "Off", + "extensionsHomeFeedOff": "끄기", "@extensionsHomeFeedOff": { "description": "Extensions page - home feed provider option: off" }, - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", + "extensionsHomeFeedOffSubtitle": "메인 화면에 홈 피드를 표시하지 않습니다", "@extensionsHomeFeedOffSubtitle": { "description": "Extensions page - subtitle for off home feed option" }, - "extensionsHomeFeedUse": "Use {extensionName} home feed", + "extensionsHomeFeedUse": "{extensionName} 홈 피드 사용", "@extensionsHomeFeedUse": { "description": "Extensions page - subtitle for a specific extension home feed option", "placeholders": { @@ -4439,23 +4439,23 @@ } } }, - "extensionsNoHomeFeedExtensions": "No extensions with home feed", + "extensionsNoHomeFeedExtensions": "홈 피드가 있는 확장 프로그램가 없습니드", "@extensionsNoHomeFeedExtensions": { "description": "Extensions page - shown when no installed extension has home feed" }, - "sortAlphaAsc": "A-Z", + "sortAlphaAsc": "오름차순", "@sortAlphaAsc": { "description": "Sort option - alphabetical ascending" }, - "sortAlphaDesc": "Z-A", + "sortAlphaDesc": "내림차순", "@sortAlphaDesc": { "description": "Sort option - alphabetical descending" }, - "cancelDownloadTitle": "Cancel download?", + "cancelDownloadTitle": "다운로드를 취소하시겠습니까?", "@cancelDownloadTitle": { "description": "Dialog title when confirming cancellation of an active download" }, - "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", + "cancelDownloadContent": "\"{trackName}\"에 대한 활성 다운로드를 취소합니다.", "@cancelDownloadContent": { "description": "Dialog body when confirming cancellation of an active download", "placeholders": { @@ -4464,7 +4464,7 @@ } } }, - "cancelDownloadKeep": "Keep", + "cancelDownloadKeep": "유지", "@cancelDownloadKeep": { "description": "Dialog button - keep the active download (do not cancel)" }, @@ -4497,23 +4497,23 @@ "@errorLoadArtist": { "description": "Error state shown when artist fails to load" }, - "notifChannelDownloadName": "Download Progress", + "notifChannelDownloadName": "다운로드 진행률", "@notifChannelDownloadName": { "description": "Android notification channel name for download progress" }, - "notifChannelDownloadDesc": "Shows download progress for tracks", + "notifChannelDownloadDesc": "트랙 다운로드 진행률 표시", "@notifChannelDownloadDesc": { "description": "Android notification channel description for download progress" }, - "notifChannelLibraryScanName": "Library Scan", + "notifChannelLibraryScanName": "보관함 스캔", "@notifChannelLibraryScanName": { "description": "Android notification channel name for library scan" }, - "notifChannelLibraryScanDesc": "Shows local library scan progress", + "notifChannelLibraryScanDesc": "로컬 보관함 스캔 진행률을 표시합니다", "@notifChannelLibraryScanDesc": { "description": "Android notification channel description for library scan" }, - "notifDownloadingTrack": "Downloading {trackName}", + "notifDownloadingTrack": "{trackName}를 다운로드하는 중", "@notifDownloadingTrack": { "description": "Notification title while downloading a track", "placeholders": { @@ -4522,7 +4522,7 @@ } } }, - "notifFinalizingTrack": "Finalizing {trackName}", + "notifFinalizingTrack": "{trackName}를 마무리하는 중", "@notifFinalizingTrack": { "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { @@ -4551,7 +4551,7 @@ "@notifAlreadyInLibrary": { "description": "Notification title when track is already in library" }, - "notifDownloadCompleteCount": "Download Complete ({completed}/{total})", + "notifDownloadCompleteCount": "다운로드 완료 ({completed}/{total})", "@notifDownloadCompleteCount": { "description": "Notification title when download is complete, with count", "placeholders": { @@ -4563,7 +4563,7 @@ } } }, - "notifDownloadComplete": "Download Complete", + "notifDownloadComplete": "다운로드 완료", "@notifDownloadComplete": { "description": "Notification title when a single download is complete" }, @@ -4579,7 +4579,7 @@ } } }, - "notifAllDownloadsComplete": "All Downloads Complete", + "notifAllDownloadsComplete": "모든 다운로드 완료", "@notifAllDownloadsComplete": { "description": "Notification title when all downloads finish successfully" }, @@ -4617,7 +4617,7 @@ } } }, - "notifScanningLibrary": "Scanning local library", + "notifScanningLibrary": "로컬 보관함을 스캔하는 중", "@notifScanningLibrary": { "description": "Notification title while scanning local library" }, @@ -4648,7 +4648,7 @@ } } }, - "notifLibraryScanComplete": "Library scan complete", + "notifLibraryScanComplete": "보관함 스캔 완료", "@notifLibraryScanComplete": { "description": "Notification title when library scan finishes" }, @@ -4761,19 +4761,19 @@ "@homeChangeSearchProviderTooltip": { "description": "Tooltip for the Home search provider picker" }, - "actionPaste": "Paste", + "actionPaste": "붙여넣기", "@actionPaste": { "description": "Generic action - paste from clipboard" }, - "searchTracksHint": "Search tracks...", + "searchTracksHint": "트랙 검색...", "@searchTracksHint": { "description": "Placeholder for the search screen input" }, - "searchTracksEmptyPrompt": "Search for tracks", + "searchTracksEmptyPrompt": "트랙 검색", "@searchTracksEmptyPrompt": { "description": "Empty-state prompt on the search screen" }, - "tutorialSearchHint": "Paste or search...", + "tutorialSearchHint": "붙여넣기 또는 검색...", "@tutorialSearchHint": { "description": "Placeholder shown in the tutorial search demo" }, @@ -4781,11 +4781,11 @@ "@tutorialDownloadCompletedSemantics": { "description": "Accessibility label for completed download state in tutorial demo" }, - "tutorialDownloadInProgressSemantics": "Download in progress", + "tutorialDownloadInProgressSemantics": "다운로드를 진행하는 중", "@tutorialDownloadInProgressSemantics": { "description": "Accessibility label for active download state in tutorial demo" }, - "tutorialStartDownloadSemantics": "Start download", + "tutorialStartDownloadSemantics": "다운로드 시작", "@tutorialStartDownloadSemantics": { "description": "Accessibility label for idle download button in tutorial demo" }, @@ -4793,7 +4793,7 @@ "@optionsEmbedMetadata": { "description": "Settings toggle title for writing metadata into downloaded files" }, - "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", + "optionsEmbedMetadataSubtitleOn": "메타데이터, 표지 이미지 및 내장 가사를 파일에 기록합니다", "@optionsEmbedMetadataSubtitleOn": { "description": "Subtitle when metadata embedding is enabled" }, @@ -4809,7 +4809,7 @@ "@downloadFilenameHintExample": { "description": "Example placeholder for the download filename format input" }, - "trackCoverNoEmbeddedArt": "No embedded album art found", + "trackCoverNoEmbeddedArt": "내장된 앨범 아트가 없습니다", "@trackCoverNoEmbeddedArt": { "description": "Message shown when a track file has no embedded cover art" }, @@ -4825,11 +4825,11 @@ "@trackCoverClearSelected": { "description": "Tooltip for clearing the newly selected cover art" }, - "trackCoverCurrent": "Current cover", + "trackCoverCurrent": "현재 커버", "@trackCoverCurrent": { "description": "Label for the currently embedded cover preview" }, - "trackCoverSelected": "Selected cover", + "trackCoverSelected": "선택된 커버", "@trackCoverSelected": { "description": "Label for the newly selected cover preview" }, @@ -4837,11 +4837,11 @@ "@trackCoverReplaceNotice": { "description": "Notice shown when a new cover has been selected but not saved yet" }, - "actionStop": "Stop", + "actionStop": "정지", "@actionStop": { "description": "Generic action - stop" }, - "queueFinalizingDownload": "Finalizing download", + "queueFinalizingDownload": "다운로드를 마무리하는 중", "@queueFinalizingDownload": { "description": "Accessibility label for a queue item that is finalizing" }, @@ -4849,15 +4849,15 @@ "@queueDownloadedFileMissing": { "description": "Accessibility label when a downloaded file is missing from disk" }, - "queueDownloadCompleted": "Download completed", + "queueDownloadCompleted": "다운로드 완료", "@queueDownloadCompleted": { "description": "Accessibility label for completed download state in queue" }, - "queueRateLimitTitle": "Service rate limited", + "queueRateLimitTitle": "서비스 속도 제한", "@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": "이 트랙은 아직 사용 가능할 수 있습니다. 몇 분 기다렸다가 병렬 다운로드를 줄인 후에 다시 시도하세요.", "@queueRateLimitMessage": { "description": "Explanation shown on a failed queue item when the download service rate limits requests" }, @@ -4870,19 +4870,19 @@ } } }, - "logAutoScrollOn": "Auto-scroll ON", + "logAutoScrollOn": "자동 스크롤 켜기", "@logAutoScrollOn": { "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "logAutoScrollOff": "Auto-scroll OFF", + "logAutoScrollOff": "자동 스크롤 끄기", "@logAutoScrollOff": { "description": "Tooltip when auto-scroll is disabled on the log screen" }, - "logCopyLogs": "Copy logs", + "logCopyLogs": "로그 복사", "@logCopyLogs": { "description": "Tooltip for copying logs" }, - "logClearSearch": "Clear search", + "logClearSearch": "로그 지우기", "@logClearSearch": { "description": "Tooltip for clearing the log search field" }, @@ -5080,7 +5080,7 @@ "@settingsLyricsSubtitle": { "description": "Subtitle for lyrics settings" }, - "settingsApp": "App", + "settingsApp": "앱", "@settingsApp": { "description": "Settings menu item - app settings" }, @@ -5088,19 +5088,19 @@ "@settingsAppSubtitle": { "description": "Subtitle for app settings" }, - "sectionMetadataProviders": "Providers", + "sectionMetadataProviders": "제공자", "@sectionMetadataProviders": { "description": "Settings section header for metadata providers" }, - "sectionDuplicates": "Duplicates", + "sectionDuplicates": "중복", "@sectionDuplicates": { "description": "Settings section header for deduplication" }, - "sectionLyricsProviderOptions": "Provider Options", + "sectionLyricsProviderOptions": "제공자 옵션", "@sectionLyricsProviderOptions": { "description": "Settings section header for per-provider lyrics options" }, - "metadataProvidersTitle": "Metadata Provider Priority", + "metadataProvidersTitle": "메타데이터 제공자 우선순위", "@metadataProvidersTitle": { "description": "Settings item title for metadata provider order" }, @@ -5120,7 +5120,7 @@ "@downloadDeduplicationDisabled": { "description": "Subtitle when deduplication is off" }, - "downloadFallbackExtensions": "Fallback Extensions", + "downloadFallbackExtensions": "대체 확장 프로그램", "@downloadFallbackExtensions": { "description": "Settings item for configuring fallback extension providers" }, @@ -5140,39 +5140,39 @@ "@editMetadataFieldDiscTotal": { "description": "Label for total discs field in the edit metadata sheet" }, - "editMetadataFieldComposer": "Composer", + "editMetadataFieldComposer": "작곡가", "@editMetadataFieldComposer": { "description": "Label for composer field in the edit metadata sheet" }, - "editMetadataFieldComment": "Comment", + "editMetadataFieldComment": "주석", "@editMetadataFieldComment": { "description": "Label for comment field in the edit metadata sheet" }, - "editMetadataAdvanced": "Advanced", + "editMetadataAdvanced": "고급", "@editMetadataAdvanced": { "description": "Expandable section label for advanced metadata fields" }, - "libraryFilterMetadataMissingTrackNumber": "Missing track number", + "libraryFilterMetadataMissingTrackNumber": "트랙 번호 누락", "@libraryFilterMetadataMissingTrackNumber": { "description": "Filter option - items missing track number" }, - "libraryFilterMetadataMissingDiscNumber": "Missing disc number", + "libraryFilterMetadataMissingDiscNumber": "디스크 번호 누락", "@libraryFilterMetadataMissingDiscNumber": { "description": "Filter option - items missing disc number" }, - "libraryFilterMetadataMissingArtist": "Missing artist", + "libraryFilterMetadataMissingArtist": "아티스트 누락", "@libraryFilterMetadataMissingArtist": { "description": "Filter option - items missing artist" }, - "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", + "libraryFilterMetadataIncorrectIsrcFormat": "잘못된 ISRC 형식", "@libraryFilterMetadataIncorrectIsrcFormat": { "description": "Filter option - items with an invalid ISRC format" }, - "libraryFilterMetadataMissingLabel": "Missing label", + "libraryFilterMetadataMissingLabel": "레이블 누락", "@libraryFilterMetadataMissingLabel": { "description": "Filter option - items missing record label" }, - "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", + "collectionDeletePlaylistsMessage": "{count} {count, plural, =1{playlist} other{playlists}}를 삭제하시겠습니까?", "@collectionDeletePlaylistsMessage": { "description": "Confirmation message for deleting selected playlists", "placeholders": { @@ -5250,7 +5250,7 @@ } } }, - "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", + "queueDownloadSpeedStatus": "다운로드하는 중 - {speed} MB/s", "@queueDownloadSpeedStatus": { "description": "Queue status while downloading with speed", "placeholders": { @@ -5259,7 +5259,7 @@ } } }, - "queueDownloadStarting": "Starting...", + "queueDownloadStarting": "시작하는 중...", "@queueDownloadStarting": { "description": "Queue status before download progress is available" }, @@ -5305,7 +5305,7 @@ "@actionGo": { "description": "Generic action button label" }, - "logIssueSummary": "Issue Summary", + "logIssueSummary": "문제 요약", "@logIssueSummary": { "description": "Header for log issue analysis summary" }, @@ -5352,11 +5352,11 @@ "@downloadNativeWorkerSubtitle": { "description": "Setting subtitle for Android native download worker" }, - "badgeBeta": "BETA", + "badgeBeta": "베타", "@badgeBeta": { "description": "Badge label for beta features" }, - "extensionServiceStatus": "Service Status", + "extensionServiceStatus": "서비스 상태", "@extensionServiceStatus": { "description": "Extension detail section header for service status" }, @@ -5386,7 +5386,7 @@ } } }, - "extensionRefreshStatus": "Refresh status", + "extensionRefreshStatus": "상태 새로고침", "@extensionRefreshStatus": { "description": "Tooltip for refreshing extension service health status" }, @@ -5484,15 +5484,15 @@ "@trackLyricsEmbeddedSource": { "description": "Lyrics source label for embedded lyrics" }, - "unknownAlbum": "Unknown Album", + "unknownAlbum": "알 수 없는 앨범", "@unknownAlbum": { "description": "Fallback album name when metadata is missing" }, - "unknownArtist": "Unknown Artist", + "unknownArtist": "알 수 없는 아티스트", "@unknownArtist": { "description": "Fallback artist name when metadata is missing" }, - "permissionAudio": "Audio", + "permissionAudio": "오디오", "@permissionAudio": { "description": "Audio permission type label" }, @@ -5500,7 +5500,7 @@ "@permissionStorage": { "description": "Storage permission type label" }, - "permissionNotification": "Notification", + "permissionNotification": "알림", "@permissionNotification": { "description": "Notification permission type label" }, @@ -5516,23 +5516,23 @@ "@storeAnyVersion": { "description": "Store detail value when any app version is accepted" }, - "storeCategoryMetadata": "Metadata", + "storeCategoryMetadata": "메타데이터", "@storeCategoryMetadata": { "description": "Store extension category - metadata" }, - "storeCategoryDownload": "Download", + "storeCategoryDownload": "다운로드", "@storeCategoryDownload": { "description": "Store extension category - download" }, - "storeCategoryUtility": "Utility", + "storeCategoryUtility": "유틸리티", "@storeCategoryUtility": { "description": "Store extension category - utility" }, - "storeCategoryLyrics": "Lyrics", + "storeCategoryLyrics": "가사", "@storeCategoryLyrics": { "description": "Store extension category - lyrics" }, - "storeCategoryIntegration": "Integration", + "storeCategoryIntegration": "통합", "@storeCategoryIntegration": { "description": "Store extension category - integration" }, @@ -5561,7 +5561,7 @@ "@settingsSaveDownloadHistorySubtitle": { "description": "Settings switch subtitle for storing completed downloads in history" }, - "dialogDisableHistoryTitle": "Turn off download history?", + "dialogDisableHistoryTitle": "다운로드 기록을 끄시겠습니까?", "@dialogDisableHistoryTitle": { "description": "Confirmation dialog title shown before disabling download history" }, @@ -5569,15 +5569,15 @@ "@dialogDisableHistoryMessage": { "description": "Confirmation dialog message shown before disabling download history" }, - "dialogDisableAndClear": "Turn off and clear", + "dialogDisableAndClear": "끄고 지우기", "@dialogDisableAndClear": { "description": "Confirmation action to disable download history and clear existing entries" }, - "openInOtherServices": "Open in Other Services", + "openInOtherServices": "다른 서비스에서 열기", "@openInOtherServices": { "description": "Title and tooltip for finding the current collection in other services" }, - "shareSheetNoExtensions": "No other compatible services", + "shareSheetNoExtensions": "호환되는 다른 서비스가 없습니다", "@shareSheetNoExtensions": { "description": "Empty state when no extensions can be searched for cross-service links" }, @@ -5585,7 +5585,7 @@ "@shareSheetNotFound": { "description": "Cross-service share sheet row subtitle when a service has no match" }, - "shareSheetCopyLink": "Copy Link", + "shareSheetCopyLink": "링크 복사", "@shareSheetCopyLink": { "description": "Tooltip for copying a cross-service link" }, From 9faa1b7961ed976e6e97152b3b140197ea246fd5 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 25 Jun 2026 06:01:55 +0700 Subject: [PATCH 029/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 84 ++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 2f73f409..03fd644c 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -2903,7 +2903,7 @@ "@cacheTitle": { "description": "Cache management page title" }, - "cacheSummaryTitle": "Cache overview", + "cacheSummaryTitle": "캐시 요약", "@cacheSummaryTitle": { "description": "Heading for cache summary card" }, @@ -2911,7 +2911,7 @@ "@cacheSummarySubtitle": { "description": "Helper text for cache summary card" }, - "cacheEstimatedTotal": "Estimated cache usage: {size}", + "cacheEstimatedTotal": "예상 캐시 사용량: {size}", "@cacheEstimatedTotal": { "description": "Total cache size shown in summary", "placeholders": { @@ -2968,11 +2968,11 @@ "@cacheExploreFeedDesc": { "description": "Description of what explore feed cache contains" }, - "cacheTrackLookup": "Track lookup cache", + "cacheTrackLookup": "트랙 조회 캐시", "@cacheTrackLookup": { "description": "Cache item title for track ID lookup cache" }, - "cacheTrackLookupDesc": "Spotify/Deezer 추적 ID을 조회합니다. 지우면 속도가 느려질 수 있습니다.", + "cacheTrackLookupDesc": "Spotify/Deezer 트랙 ID을 조회합니다. 지우면 속도가 느려질 수 있습니다.", "@cacheTrackLookupDesc": { "description": "Description of what track lookup cache contains" }, @@ -2984,7 +2984,7 @@ "@cacheNoData": { "description": "Label when cache category has no data" }, - "cacheSizeWithFiles": "{size} in {count} files", + "cacheSizeWithFiles": "{count} 개의 파일에 {size} 사용", "@cacheSizeWithFiles": { "description": "Cache size and file count", "placeholders": { @@ -3158,11 +3158,11 @@ } } }, - "trackReEnrichProgress": "Re-enriching metadata...", + "trackReEnrichProgress": "메타데이터를 다시 구성하는 중...", "@trackReEnrichProgress": { "description": "Snackbar while re-enriching metadata" }, - "trackReEnrichSearching": "Searching metadata online...", + "trackReEnrichSearching": "온라인에서 메타데이터를 검색하는 중...", "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, @@ -3174,7 +3174,7 @@ "@trackReEnrichFfmpegFailed": { "description": "Snackbar when FFmpeg embed fails for MP3/Opus" }, - "queueFlacAction": "Queue FLAC", + "queueFlacAction": "FLAC 대기목록", "@queueFlacAction": { "description": "Action/button label for queueing FLAC redownloads for local tracks" }, @@ -4153,11 +4153,11 @@ "@editMetadataAutoFillFetch": { "description": "Button label to fetch online metadata and fill selected fields" }, - "editMetadataAutoFillSearching": "Searching online...", + "editMetadataAutoFillSearching": "온라인에서 검색하는 중...", "@editMetadataAutoFillSearching": { "description": "Snackbar shown while searching for online metadata" }, - "editMetadataAutoFillNoResults": "No matching metadata found online", + "editMetadataAutoFillNoResults": "온라인에서 일치하는 메타데이터를 찾을 수 없습니다", "@editMetadataAutoFillNoResults": { "description": "Snackbar when online metadata search returns no results" }, @@ -4894,23 +4894,23 @@ "@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": "VPN을 사용하거나 DNS를 1.1.1.1 또는 8.8.8.8로 변경해 보세요", "@logIssueIspBlockingSuggestion": { "description": "Diagnostic badge suggestion for ISP blocking" }, - "logIssueRateLimitedLabel": "RATE LIMITED", + "logIssueRateLimitedLabel": "속도 제한", "@logIssueRateLimitedLabel": { "description": "Diagnostic badge label when the service rate limits requests" }, - "logIssueRateLimitedDescription": "Too many requests to the service", + "logIssueRateLimitedDescription": "서비스에 대한 요청이 너무 많습니다", "@logIssueRateLimitedDescription": { "description": "Diagnostic badge description for rate limiting" }, - "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", + "logIssueRateLimitedSuggestion": "몇 분 기다린 후에 다시 시도하세요", "@logIssueRateLimitedSuggestion": { "description": "Diagnostic badge suggestion for rate limiting" }, - "logIssueNetworkErrorLabel": "NETWORK ERROR", + "logIssueNetworkErrorLabel": "네트워크 오류", "@logIssueNetworkErrorLabel": { "description": "Diagnostic badge label for generic network errors" }, @@ -4918,7 +4918,7 @@ "@logIssueNetworkErrorDescription": { "description": "Diagnostic badge description for generic network errors" }, - "logIssueNetworkErrorSuggestion": "Check your internet connection", + "logIssueNetworkErrorSuggestion": "인터넷 연결 상태를 확인하세요", "@logIssueNetworkErrorSuggestion": { "description": "Diagnostic badge suggestion for generic network errors" }, @@ -4947,19 +4947,19 @@ } } }, - "extensionDetailsTags": "Tags", + "extensionDetailsTags": "태그", "@extensionDetailsTags": { "description": "Section title for extension tags" }, - "extensionDetailsInformation": "Information", + "extensionDetailsInformation": "정보", "@extensionDetailsInformation": { "description": "Section title for extension metadata information" }, - "extensionUtilityFunctions": "Utility Functions", + "extensionUtilityFunctions": "유틸리티 함수", "@extensionUtilityFunctions": { "description": "Capability label for utility-only extensions" }, - "actionDismiss": "Dismiss", + "actionDismiss": "닫기", "@actionDismiss": { "description": "Generic action - dismiss" }, @@ -4967,7 +4967,7 @@ "@setupChangeFolderTooltip": { "description": "Tooltip for editing the selected download folder" }, - "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", + "a11yOpenTrackByArtist": "{artistName}의 트랙 {trackName} 열기", "@a11yOpenTrackByArtist": { "description": "Accessibility label for opening a track item", "placeholders": { @@ -4979,7 +4979,7 @@ } } }, - "a11yOpenItem": "Open {itemType} {name}", + "a11yOpenItem": "{itemType} {name} 열기", "@a11yOpenItem": { "description": "Accessibility label for opening a generic item", "placeholders": { @@ -5048,23 +5048,23 @@ } } }, - "optionsDefaultSearchTabAlbums": "Albums", + "optionsDefaultSearchTabAlbums": "앨범", "@optionsDefaultSearchTabAlbums": { "description": "Default search tab option - Albums tab" }, - "optionsDefaultSearchTabTracks": "Tracks", + "optionsDefaultSearchTabTracks": "트랙", "@optionsDefaultSearchTabTracks": { "description": "Default search tab option - Tracks tab" }, - "settingsFiles": "Files & Folders", + "settingsFiles": "파일 & 폴더", "@settingsFiles": { "description": "Settings menu item - file and folder settings" }, - "settingsFilesSubtitle": "Download location, filename, folder structure", + "settingsFilesSubtitle": "다운로드 위치, 파일 이름, 폴더 구조", "@settingsFilesSubtitle": { "description": "Subtitle for files & folders settings" }, - "settingsMetadata": "Metadata", + "settingsMetadata": "메타데이터", "@settingsMetadata": { "description": "Settings menu item - metadata settings" }, @@ -5072,11 +5072,11 @@ "@settingsMetadataSubtitle": { "description": "Subtitle for metadata settings" }, - "settingsLyrics": "Lyrics", + "settingsLyrics": "가사", "@settingsLyrics": { "description": "Settings menu item - lyrics settings" }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", + "settingsLyricsSubtitle": "임베드, 모드, 제공자, 언어 옵션", "@settingsLyricsSubtitle": { "description": "Subtitle for lyrics settings" }, @@ -5124,19 +5124,19 @@ "@downloadFallbackExtensions": { "description": "Settings item for configuring fallback extension providers" }, - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", + "downloadFallbackExtensionsSubtitle": "대체 확장 프로그램으로 사용할 확장 프로그램을 선택하세요", "@downloadFallbackExtensionsSubtitle": { "description": "Subtitle for fallback extensions item" }, - "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", + "editMetadataFieldDateHint": "YYYY-MM-DD 또는 YYYY", "@editMetadataFieldDateHint": { "description": "Hint text for the edit metadata date field" }, - "editMetadataFieldTrackTotal": "Track Total", + "editMetadataFieldTrackTotal": "전체 트랙 수", "@editMetadataFieldTrackTotal": { "description": "Label for total tracks field in the edit metadata sheet" }, - "editMetadataFieldDiscTotal": "Disc Total", + "editMetadataFieldDiscTotal": "전체 디스크 수", "@editMetadataFieldDiscTotal": { "description": "Label for total discs field in the edit metadata sheet" }, @@ -5411,31 +5411,31 @@ } } }, - "extensionHealthOnline": "Online", + "extensionHealthOnline": "온라인", "@extensionHealthOnline": { "description": "Extension service health status - online" }, - "extensionHealthDegraded": "Degraded", + "extensionHealthDegraded": "저하됨", "@extensionHealthDegraded": { "description": "Extension service health status - degraded" }, - "extensionHealthOffline": "Offline", + "extensionHealthOffline": "오프라인", "@extensionHealthOffline": { "description": "Extension service health status - offline" }, - "extensionHealthNotConfigured": "Not configured", + "extensionHealthNotConfigured": "구성되지 않음", "@extensionHealthNotConfigured": { "description": "Extension service health status - not configured" }, - "extensionHealthUnknown": "Unknown", + "extensionHealthUnknown": "알 수 없음", "@extensionHealthUnknown": { "description": "Extension service health status - unknown" }, - "extensionHealthRequired": "required", + "extensionHealthRequired": "필수", "@extensionHealthRequired": { "description": "Label for a required extension service health check" }, - "extensionSettingNotSet": "Not set", + "extensionSettingNotSet": "설정되지 않음", "@extensionSettingNotSet": { "description": "Value shown when an extension setting has no value" }, @@ -5447,7 +5447,7 @@ "@extensionEnterValue": { "description": "Hint for editing an extension setting value" }, - "extensionHealthServiceOnline": "Service online", + "extensionHealthServiceOnline": "서비스 온라인", "@extensionHealthServiceOnline": { "description": "Tooltip for online extension service" }, @@ -5455,7 +5455,7 @@ "@extensionHealthServiceDegraded": { "description": "Tooltip for degraded extension service" }, - "extensionHealthServiceOffline": "Service offline", + "extensionHealthServiceOffline": "서비스 오프라인", "@extensionHealthServiceOffline": { "description": "Tooltip for offline extension service" }, From e0cc1f7cb2810521f25bbe0b99d5e6486d8270bc Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 25 Jun 2026 07:08:49 +0700 Subject: [PATCH 030/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 48 ++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 03fd644c..496e8d6c 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -3076,7 +3076,7 @@ "@trackSaveCoverArt": { "description": "Menu action - save album cover art as file" }, - "trackSaveCoverArtSubtitle": "Save album art as .jpg file", + "trackSaveCoverArtSubtitle": "앨범 아트를 .jpg 파일로 저장", "@trackSaveCoverArtSubtitle": { "description": "Subtitle for save cover art action" }, @@ -3392,7 +3392,7 @@ "@collectionWishlist": { "description": "Custom folder for saved tracks to download later" }, - "collectionLoved": "Loved", + "collectionLoved": "즐겨찾기", "@collectionLoved": { "description": "Custom folder for favorite tracks" }, @@ -3529,11 +3529,11 @@ "@collectionPlaylistEmptySubtitle": { "description": "Playlist empty state subtitle" }, - "collectionRemoveFromPlaylist": "Remove from playlist", + "collectionRemoveFromPlaylist": "재생목록에서 제거", "@collectionRemoveFromPlaylist": { "description": "Tooltip for removing track from playlist" }, - "collectionRemoveFromFolder": "Remove from folder", + "collectionRemoveFromFolder": "폴더에서 제거", "@collectionRemoveFromFolder": { "description": "Tooltip for removing track from wishlist/loved folder" }, @@ -3987,11 +3987,11 @@ "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" }, - "downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality", + "downloadSelectTidalQobuz": "품질을 선택하려면 품질 옵션이 있는 제공자를 선택하세요", "@downloadSelectTidalQobuz": { "description": "Legacy info shown when a provider does not expose quality options" }, - "downloadEmbedLyricsDisabled": "Enable metadata embedding first", + "downloadEmbedLyricsDisabled": "먼저 메타데이터 삽입을 활성화하세요", "@downloadEmbedLyricsDisabled": { "description": "Subtitle when lyrics embedding is blocked by metadata toggle" }, @@ -4075,7 +4075,7 @@ "@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": "Musixmatch에서 번역된 가사를 요청하려면 BCP-47 언어 코드(예: en, de, ja)를 입력하세요.", "@downloadMusixmatchLanguageDesc": { "description": "Description in Musixmatch language picker" }, @@ -4091,7 +4091,7 @@ "@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": "SongLink를 통해 트랙 링크를 해결할 경우에 사용되는 지역입니다. 스트리밍 서비스를 이용할 수 있는 국가를 선택하세요.", "@downloadSongLinkRegionDesc": { "description": "Description in SongLink region picker" }, @@ -4145,7 +4145,7 @@ "@editMetadataAutoFill": { "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "editMetadataAutoFillDesc": "Select fields to fill automatically from online metadata", + "editMetadataAutoFillDesc": "온라인 메타데이터에서 자동으로 채워질 필드를 선택하세요", "@editMetadataAutoFillDesc": { "description": "Description for the auto-fill section" }, @@ -4297,7 +4297,7 @@ "@selectionTapPlaylistsToSelect": { "description": "Hint shown in playlist selection mode" }, - "selectionSelectPlaylistsToDelete": "Select playlists to delete", + "selectionSelectPlaylistsToDelete": "삭제할 재생 목록 선택", "@selectionSelectPlaylistsToDelete": { "description": "Hint shown when no playlists are selected for deletion" }, @@ -4410,7 +4410,7 @@ "@extensionsHomeFeedProvider": { "description": "Extensions page - label for home feed provider selector" }, - "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", + "extensionsHomeFeedDescription": "메인 화면에 홈 피드를 제공하는 확장 프로그램을 선택하세요", "@extensionsHomeFeedDescription": { "description": "Extensions page - description for home feed provider picker" }, @@ -4535,7 +4535,7 @@ "@notifEmbeddingMetadata": { "description": "Notification body while embedding metadata into a downloaded track" }, - "notifAlreadyInLibraryCount": "Already in Library ({completed}/{total})", + "notifAlreadyInLibraryCount": "이미 라이브러리에 있음 ({completed}/{total})", "@notifAlreadyInLibraryCount": { "description": "Notification title when track is already in library, with count", "placeholders": { @@ -4547,7 +4547,7 @@ } } }, - "notifAlreadyInLibrary": "Already in Library", + "notifAlreadyInLibrary": "이미 라이브러리에 있음", "@notifAlreadyInLibrary": { "description": "Notification title when track is already in library" }, @@ -4621,7 +4621,7 @@ "@notifScanningLibrary": { "description": "Notification title while scanning local library" }, - "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} 파일 • {percentage}%", "@notifLibraryScanProgressWithTotal": { "description": "Notification body for library scan progress when total is known", "placeholders": { @@ -4691,7 +4691,7 @@ "@notifLibraryScanStopped": { "description": "Notification body when library scan is cancelled" }, - "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", + "notifDownloadingUpdate": "SpotiFLAC Mobile v{version}을 다운로드하는 중", "@notifDownloadingUpdate": { "description": "Notification title while downloading an app update", "placeholders": { @@ -4736,11 +4736,11 @@ "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, - "searchTracks": "Tracks", + "searchTracks": "트랙", "@searchTracks": { "description": "Search filter label - tracks" }, - "homeSearchHintDefault": "Paste supported URL or search...", + "homeSearchHintDefault": "지원되는 URL을 붙여넣거나 검색...", "@homeSearchHintDefault": { "description": "Default placeholder for the main search field on Home" }, @@ -4753,11 +4753,11 @@ } } }, - "homeImportCsvTooltip": "Import CSV", + "homeImportCsvTooltip": "CSV 가져오기", "@homeImportCsvTooltip": { "description": "Tooltip for importing a CSV file into Home search" }, - "homeChangeSearchProviderTooltip": "Change search provider", + "homeChangeSearchProviderTooltip": "검색 제공자 변경", "@homeChangeSearchProviderTooltip": { "description": "Tooltip for the Home search provider picker" }, @@ -4845,7 +4845,7 @@ "@queueFinalizingDownload": { "description": "Accessibility label for a queue item that is finalizing" }, - "queueDownloadedFileMissing": "Downloaded file missing", + "queueDownloadedFileMissing": "다운로드한 파일이 없습니다", "@queueDownloadedFileMissing": { "description": "Accessibility label when a downloaded file is missing from disk" }, @@ -5459,19 +5459,19 @@ "@extensionHealthServiceOffline": { "description": "Tooltip for offline extension service" }, - "extensionHealthServiceUnknown": "Service status unknown", + "extensionHealthServiceUnknown": "서비스 상태 알 수 없음", "@extensionHealthServiceUnknown": { "description": "Tooltip for unknown extension service health" }, - "audioAnalysisStereo": "Stereo", + "audioAnalysisStereo": "스테레오", "@audioAnalysisStereo": { "description": "Audio channel layout label - stereo" }, - "audioAnalysisMono": "Mono", + "audioAnalysisMono": "모노", "@audioAnalysisMono": { "description": "Audio channel layout label - mono" }, - "trackOpenInService": "Open in {serviceName}", + "trackOpenInService": "{serviceName}에서 열기", "@trackOpenInService": { "description": "Button label to open a track in a named music service", "placeholders": { From 3bbe29c2e8d9a7dbc8f2b571a26bfc7d19b1c462 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 25 Jun 2026 19:21:07 +0700 Subject: [PATCH 031/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 496e8d6c..c738ac46 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -1527,7 +1527,7 @@ } } }, - "tracksCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "tracksCount": "{count, plural, =1{1 개의 트랙} other{{count} 개의 트랙}}", "@tracksCount": { "description": "Track count display", "placeholders": { @@ -2237,7 +2237,7 @@ "@downloadedAlbumTapToSelect": { "description": "Selection hint" }, - "downloadedAlbumDeleteCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "downloadedAlbumDeleteCount": "{count} {count, plural, =1{트랙} other{트랙}} 삭제", "@downloadedAlbumDeleteCount": { "description": "Delete button text with count", "placeholders": { @@ -2560,7 +2560,7 @@ "@libraryAboutDescription": { "description": "Description of local library feature" }, - "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "libraryTracksUnit": "{count, plural, =1{트랙} other{트랙}}", "@libraryTracksUnit": { "description": "Unit label for tracks count (without the number itself)", "placeholders": { @@ -2752,7 +2752,7 @@ "@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 분 전} other{{count} 분 전}}", "@timeMinutesAgo": { "description": "Relative time - minutes ago", "placeholders": { @@ -2761,7 +2761,7 @@ } } }, - "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", + "timeHoursAgo": "{count, plural, =1{1 시간 전} other{{count} 시간 전}}", "@timeHoursAgo": { "description": "Relative time - hours ago", "placeholders": { @@ -3424,7 +3424,7 @@ "@collectionNoPlaylistsSubtitle": { "description": "Empty state subtitle when user has no playlists" }, - "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", + "collectionPlaylistTracks": "{count, plural, =1{1 개의 트랙} other{{count} 개의 트랙}}", "@collectionPlaylistTracks": { "description": "Track count label for custom playlists", "placeholders": { @@ -3433,7 +3433,7 @@ } } }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "collectionArtistCount": "{count, plural, =1{1 명의 아티스트} other{{count} 명의 아티스트}}", "@collectionArtistCount": { "description": "Artist count label for favorite artists", "placeholders": { @@ -3632,7 +3632,7 @@ "@collectionPlaylistRemoveCover": { "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", + "selectionShareCount": "{count} {count, plural, =1{트랙} other{트랙}} 공유", "@selectionShareCount": { "description": "Share button text with count in selection mode", "placeholders": { @@ -3645,7 +3645,7 @@ "@selectionShareNoFiles": { "description": "Snackbar when no selected files exist on disk" }, - "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", + "selectionConvertCount": "{count} {count, plural, =1{트랙} other{트랙}} 변환", "@selectionConvertCount": { "description": "Convert button text with count in selection mode", "placeholders": { From f26c7cfe026f1a695d6ca92dfed083af78287015 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 26 Jun 2026 11:13:48 +0700 Subject: [PATCH 032/137] 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 c738ac46..204e93b8 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -57,7 +57,7 @@ "@historyFilterSingles": { "description": "Filter chip - show singles only" }, - "historySearchHint": "검색 기록...", + "historySearchHint": "기록 검색...", "@historySearchHint": { "description": "Search bar placeholder in history" }, From b9c66e0c7b5fbafe28164dcdc1cdeabbbbc30c9e Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 26 Jun 2026 14:12:22 +0700 Subject: [PATCH 033/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 204e93b8..27d3a16a 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -17,7 +17,7 @@ "@navSettings": { "description": "Bottom navigation - Settings tab" }, - "navStore": "리포지토리", + "navStore": "리포", "@navStore": { "description": "Bottom navigation - Extension store tab" }, @@ -308,11 +308,11 @@ "@optionsArtistTagModeSplitVorbisSubtitle": { "description": "Subtitle for split Vorbis artist tag mode" }, - "optionsExtensionStore": "확장 프로그램 리포지토리", + "optionsExtensionStore": "확장 프로그램 리포", "@optionsExtensionStore": { "description": "Show/hide store tab" }, - "optionsExtensionStoreSubtitle": "하단바에서 리포지토리 탭 표시", + "optionsExtensionStoreSubtitle": "하단바에서 리포 탭 표시", "@optionsExtensionStoreSubtitle": { "description": "Subtitle for extension store toggle" }, @@ -415,7 +415,7 @@ "@extensionsUninstall": { "description": "Uninstall extension button" }, - "storeTitle": "확장 프로그램 리포지토리", + "storeTitle": "확장 프로그램 리포", "@storeTitle": { "description": "Store screen title" }, @@ -792,7 +792,7 @@ "@dialogUnsavedChanges": { "description": "Dialog message - unsaved changes" }, - "dialogClearAll": "모두 제거:", + "dialogClearAll": "모두 지우기", "@dialogClearAll": { "description": "Dialog title - clear all items" }, @@ -2834,7 +2834,7 @@ "@tutorialExtensionsDesc": { "description": "Tutorial extensions page description" }, - "tutorialExtensionsTip1": "유용한 확장 프로그램을 찾으려면 리포지토리 탭을 탐색하세요", + "tutorialExtensionsTip1": "유용한 확장 프로그램을 찾으려면 리포 탭을 탐색하세요", "@tutorialExtensionsTip1": { "description": "Tutorial extensions tip 1" }, @@ -5084,7 +5084,7 @@ "@settingsApp": { "description": "Settings menu item - app settings" }, - "settingsAppSubtitle": "업데이트, 데이터, 확장프로그램 리포지토리, 디버그", + "settingsAppSubtitle": "업데이트, 데이터, 확장프로그램 리포, 디버그", "@settingsAppSubtitle": { "description": "Subtitle for app settings" }, From 4523bc5532e2be93bda49c0587667a0c06a595aa Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 26 Jun 2026 19:18:41 +0700 Subject: [PATCH 034/137] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index f770e71e..1843fdf2 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -174,7 +174,7 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsSwitchBack": "Choose the default search provider to switch back from an extension", + "optionsSwitchBack": "Pilih penyedia pencarian default untuk beralih kembali dari ekstensi", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" }, @@ -190,11 +190,11 @@ "@optionsUseExtensionProviders": { "description": "Legacy setting label for extension download providers" }, - "optionsUseExtensionProvidersOn": "Extension providers are enabled", + "optionsUseExtensionProvidersOn": "Penyedia ekstensi diaktifkan", "@optionsUseExtensionProvidersOn": { "description": "Status when extension providers enabled" }, - "optionsUseExtensionProvidersOff": "Extension providers are required", + "optionsUseExtensionProvidersOff": "Penyedia ekstensi diwajibkan", "@optionsUseExtensionProvidersOff": { "description": "Legacy status when extension providers would be disabled" }, From 89c71f6b166ad5d0eaab18c8d5ea28c2e793e592 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 26 Jun 2026 20:46:21 +0700 Subject: [PATCH 035/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 27d3a16a..78ab812c 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -3392,7 +3392,7 @@ "@collectionWishlist": { "description": "Custom folder for saved tracks to download later" }, - "collectionLoved": "즐겨찾기", + "collectionLoved": "좋아요 표시한 음악", "@collectionLoved": { "description": "Custom folder for favorite tracks" }, @@ -3505,11 +3505,11 @@ "@collectionWishlistEmptySubtitle": { "description": "Wishlist empty state subtitle" }, - "collectionLovedEmptyTitle": "즐겨찾기 폴더가 비워져 있습니다", + "collectionLovedEmptyTitle": "'좋아요 표시한 음악' 폴더가 비워져 있습니다", "@collectionLovedEmptyTitle": { "description": "Loved empty state title" }, - "collectionLovedEmptySubtitle": "트랙에 하트를 탭하여 즐겨찾기를 저장하세요", + "collectionLovedEmptySubtitle": "트랙에 하트를 탭하여 '좋아요'를 유지하세요", "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, @@ -3546,7 +3546,7 @@ } } }, - "collectionAddedToLoved": "\"{trackName}\" added to Loved", + "collectionAddedToLoved": "'{trackName}'을 '좋아요 표시한 음악'에 추가하였습니다", "@collectionAddedToLoved": { "description": "Snackbar after adding track to loved folder", "placeholders": { @@ -3555,7 +3555,7 @@ } } }, - "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", + "collectionRemovedFromLoved": "'{trackName}'을 '좋아요 표시한 음악'에 제거하였습니다", "@collectionRemovedFromLoved": { "description": "Snackbar after removing track from loved folder", "placeholders": { @@ -3600,11 +3600,11 @@ } } }, - "trackOptionAddToLoved": "즐겨찾기에 추가", + "trackOptionAddToLoved": "'좋아요 표시한 음악'에 추가", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" }, - "trackOptionRemoveFromLoved": "즐겨찾기에서 제거", + "trackOptionRemoveFromLoved": "'좋아요 표시한 음악'에서 제거", "@trackOptionRemoveFromLoved": { "description": "Bottom sheet action label - remove track from loved folder" }, @@ -3835,7 +3835,7 @@ "@tooltipAddToPlaylist": { "description": "Tooltip for the Add to Playlist button" }, - "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", + "snackbarRemovedTracksFromLoved": "'좋아요 표시한 음악'에서 {count} 트랙을 제거하였습니다", "@snackbarRemovedTracksFromLoved": { "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { @@ -3844,7 +3844,7 @@ } } }, - "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", + "snackbarAddedTracksToLoved": "'좋아요 표시한 음악'에 {count} 트랙을 추가하였습니다", "@snackbarAddedTracksToLoved": { "description": "Snackbar after adding multiple tracks to Loved folder", "placeholders": { From f5c934f744bdd8f7e59a4c1158f4ff76baca0f78 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 26 Jun 2026 20:46:23 +0700 Subject: [PATCH 036/137] New translations app_en.arb (Turkish) [ci skip] --- lib/l10n/arb/app_tr.arb | 64 ++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/lib/l10n/arb/app_tr.arb b/lib/l10n/arb/app_tr.arb index b93547fa..202285af 100644 --- a/lib/l10n/arb/app_tr.arb +++ b/lib/l10n/arb/app_tr.arb @@ -2668,15 +2668,15 @@ "@libraryFilterReset": { "description": "Reset all filters button" }, - "libraryFilterApply": "Apply", + "libraryFilterApply": "Uygula", "@libraryFilterApply": { "description": "Apply filters button" }, - "libraryFilterSource": "Source", + "libraryFilterSource": "Kaynak", "@libraryFilterSource": { "description": "Filter section - source type" }, - "libraryFilterQuality": "Quality", + "libraryFilterQuality": "Kalite", "@libraryFilterQuality": { "description": "Filter section - audio quality" }, @@ -3128,7 +3128,7 @@ "@trackReEnrichFieldExtra": { "description": "Checkbox label for extra metadata in re-enrich" }, - "trackReEnrichSelectAll": "Select All", + "trackReEnrichSelectAll": "Tümünü Seç", "@trackReEnrichSelectAll": { "description": "Select all fields checkbox in re-enrich" }, @@ -3380,11 +3380,11 @@ "@cueSplitButton": { "description": "Button text to start CUE splitting" }, - "actionCreate": "Create", + "actionCreate": "Oluştur", "@actionCreate": { "description": "Generic action button - create" }, - "collectionFoldersTitle": "My folders", + "collectionFoldersTitle": "Klasörlerim", "@collectionFoldersTitle": { "description": "Library section title for custom folders" }, @@ -3853,7 +3853,7 @@ } } }, - "dialogDownloadAllTitle": "Download All", + "dialogDownloadAllTitle": "Tümünü İndir", "@dialogDownloadAllTitle": { "description": "Dialog title for bulk download confirmation" }, @@ -3870,7 +3870,7 @@ "@homeSkipAlreadyDownloaded": { "description": "Checkbox label in import dialog to skip already-downloaded songs" }, - "homeGoToAlbum": "Go to Album", + "homeGoToAlbum": "Albüme Git", "@homeGoToAlbum": { "description": "Context menu item to navigate to the album page" }, @@ -3894,7 +3894,7 @@ "@snackbarFailedToWriteStorage": { "description": "Snackbar when writing metadata back to file fails" }, - "snackbarError": "Error: {error}", + "snackbarError": "Hata: {error}", "@snackbarError": { "description": "Generic error snackbar with error detail", "placeholders": { @@ -4099,7 +4099,7 @@ "@snackbarUnsupportedAudioFormat": { "description": "Snackbar when the audio format is not supported for the requested operation" }, - "cacheRefresh": "Refresh", + "cacheRefresh": "Yenile", "@cacheRefresh": { "description": "Tooltip for refresh button on cache management page" }, @@ -4174,7 +4174,7 @@ "@editMetadataAutoFillNoneSelected": { "description": "Snackbar when user taps Fetch without selecting any fields" }, - "editMetadataFieldTitle": "Title", + "editMetadataFieldTitle": "Başlık", "@editMetadataFieldTitle": { "description": "Chip label for title field in auto-fill selector" }, @@ -4670,7 +4670,7 @@ } } }, - "notifLibraryScanErrors": "{count} errors", + "notifLibraryScanErrors": "{count} hata", "@notifLibraryScanErrors": { "description": "Library scan complete suffix - error count", "placeholders": { @@ -4715,7 +4715,7 @@ } } }, - "notifUpdateReady": "Update Ready", + "notifUpdateReady": "Güncelleme Hazır", "@notifUpdateReady": { "description": "Notification title when app update download is complete" }, @@ -4761,7 +4761,7 @@ "@homeChangeSearchProviderTooltip": { "description": "Tooltip for the Home search provider picker" }, - "actionPaste": "Paste", + "actionPaste": "Yapıştır", "@actionPaste": { "description": "Generic action - paste from clipboard" }, @@ -4777,7 +4777,7 @@ "@tutorialSearchHint": { "description": "Placeholder shown in the tutorial search demo" }, - "tutorialDownloadCompletedSemantics": "Download completed", + "tutorialDownloadCompletedSemantics": "İndirme tamamlandı", "@tutorialDownloadCompletedSemantics": { "description": "Accessibility label for completed download state in tutorial demo" }, @@ -4785,7 +4785,7 @@ "@tutorialDownloadInProgressSemantics": { "description": "Accessibility label for active download state in tutorial demo" }, - "tutorialStartDownloadSemantics": "Start download", + "tutorialStartDownloadSemantics": "İndirmeyi başlat", "@tutorialStartDownloadSemantics": { "description": "Accessibility label for idle download button in tutorial demo" }, @@ -4817,7 +4817,7 @@ "@trackCoverReplace": { "description": "Button label for replacing selected cover art" }, - "trackCoverPick": "Pick Cover", + "trackCoverPick": "Kapak Seç", "@trackCoverPick": { "description": "Button label for selecting cover art" }, @@ -4829,7 +4829,7 @@ "@trackCoverCurrent": { "description": "Label for the currently embedded cover preview" }, - "trackCoverSelected": "Selected cover", + "trackCoverSelected": "Seçili kapak", "@trackCoverSelected": { "description": "Label for the newly selected cover preview" }, @@ -4947,7 +4947,7 @@ } } }, - "extensionDetailsTags": "Tags", + "extensionDetailsTags": "Etiketler", "@extensionDetailsTags": { "description": "Section title for extension tags" }, @@ -5048,7 +5048,7 @@ } } }, - "optionsDefaultSearchTabAlbums": "Albums", + "optionsDefaultSearchTabAlbums": "Albümler", "@optionsDefaultSearchTabAlbums": { "description": "Default search tab option - Albums tab" }, @@ -5080,7 +5080,7 @@ "@settingsLyricsSubtitle": { "description": "Subtitle for lyrics settings" }, - "settingsApp": "App", + "settingsApp": "Uygulama", "@settingsApp": { "description": "Settings menu item - app settings" }, @@ -5092,7 +5092,7 @@ "@sectionMetadataProviders": { "description": "Settings section header for metadata providers" }, - "sectionDuplicates": "Duplicates", + "sectionDuplicates": "Yinelenenler", "@sectionDuplicates": { "description": "Settings section header for deduplication" }, @@ -5140,15 +5140,15 @@ "@editMetadataFieldDiscTotal": { "description": "Label for total discs field in the edit metadata sheet" }, - "editMetadataFieldComposer": "Composer", + "editMetadataFieldComposer": "Besteci", "@editMetadataFieldComposer": { "description": "Label for composer field in the edit metadata sheet" }, - "editMetadataFieldComment": "Comment", + "editMetadataFieldComment": "Yorum", "@editMetadataFieldComment": { "description": "Label for comment field in the edit metadata sheet" }, - "editMetadataAdvanced": "Advanced", + "editMetadataAdvanced": "Gelişmiş", "@editMetadataAdvanced": { "description": "Expandable section label for advanced metadata fields" }, @@ -5411,7 +5411,7 @@ } } }, - "extensionHealthOnline": "Online", + "extensionHealthOnline": "Çevrimiçi", "@extensionHealthOnline": { "description": "Extension service health status - online" }, @@ -5419,7 +5419,7 @@ "@extensionHealthDegraded": { "description": "Extension service health status - degraded" }, - "extensionHealthOffline": "Offline", + "extensionHealthOffline": "Çevrimdışı", "@extensionHealthOffline": { "description": "Extension service health status - offline" }, @@ -5431,7 +5431,7 @@ "@extensionHealthUnknown": { "description": "Extension service health status - unknown" }, - "extensionHealthRequired": "required", + "extensionHealthRequired": "gerekli", "@extensionHealthRequired": { "description": "Label for a required extension service health check" }, @@ -5492,15 +5492,15 @@ "@unknownArtist": { "description": "Fallback artist name when metadata is missing" }, - "permissionAudio": "Audio", + "permissionAudio": "Ses", "@permissionAudio": { "description": "Audio permission type label" }, - "permissionStorage": "Storage", + "permissionStorage": "Depolama", "@permissionStorage": { "description": "Storage permission type label" }, - "permissionNotification": "Notification", + "permissionNotification": "Bildirim", "@permissionNotification": { "description": "Notification permission type label" }, @@ -5536,7 +5536,7 @@ "@storeCategoryIntegration": { "description": "Store extension category - integration" }, - "artistReleases": "Releases", + "artistReleases": "Sürümler", "@artistReleases": { "description": "Section header for all artist releases" }, From 5eda1c4cb07028f1c1279c9d4a1398134c2cbb87 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 26 Jun 2026 22:10:10 +0700 Subject: [PATCH 037/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 78ab812c..024f9878 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -3546,7 +3546,7 @@ } } }, - "collectionAddedToLoved": "'{trackName}'을 '좋아요 표시한 음악'에 추가하였습니다", + "collectionAddedToLoved": "'{trackName}'이 '좋아요 표시한 음악'에 추가됨", "@collectionAddedToLoved": { "description": "Snackbar after adding track to loved folder", "placeholders": { @@ -3555,7 +3555,7 @@ } } }, - "collectionRemovedFromLoved": "'{trackName}'을 '좋아요 표시한 음악'에 제거하였습니다", + "collectionRemovedFromLoved": "'{trackName}'이 '좋아요 표시한 음악'에서 제거됨", "@collectionRemovedFromLoved": { "description": "Snackbar after removing track from loved folder", "placeholders": { @@ -3835,7 +3835,7 @@ "@tooltipAddToPlaylist": { "description": "Tooltip for the Add to Playlist button" }, - "snackbarRemovedTracksFromLoved": "'좋아요 표시한 음악'에서 {count} 트랙을 제거하였습니다", + "snackbarRemovedTracksFromLoved": "'좋아요 표시한 음악'에서 {count} 트랙이 제거 됨", "@snackbarRemovedTracksFromLoved": { "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { @@ -3844,7 +3844,7 @@ } } }, - "snackbarAddedTracksToLoved": "'좋아요 표시한 음악'에 {count} 트랙을 추가하였습니다", + "snackbarAddedTracksToLoved": "'좋아요 표시한 음악'에 {count} 트랙이 추가됨", "@snackbarAddedTracksToLoved": { "description": "Snackbar after adding multiple tracks to Loved folder", "placeholders": { From 68af217b7b56aae5939c76f50c9a46ac84cc7701 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sat, 27 Jun 2026 01:30:31 +0700 Subject: [PATCH 038/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 58 ++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 024f9878..cb6ffd73 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -3392,7 +3392,7 @@ "@collectionWishlist": { "description": "Custom folder for saved tracks to download later" }, - "collectionLoved": "좋아요 표시한 음악", + "collectionLoved": "좋아요 표시한 곡", "@collectionLoved": { "description": "Custom folder for favorite tracks" }, @@ -3505,7 +3505,7 @@ "@collectionWishlistEmptySubtitle": { "description": "Wishlist empty state subtitle" }, - "collectionLovedEmptyTitle": "'좋아요 표시한 음악' 폴더가 비워져 있습니다", + "collectionLovedEmptyTitle": "'좋아요 표시한 곡' 폴더가 비워져 있습니다", "@collectionLovedEmptyTitle": { "description": "Loved empty state title" }, @@ -3546,7 +3546,7 @@ } } }, - "collectionAddedToLoved": "'{trackName}'이 '좋아요 표시한 음악'에 추가됨", + "collectionAddedToLoved": "'{trackName}'이 '좋아요 표시한 곡'에 추가됨", "@collectionAddedToLoved": { "description": "Snackbar after adding track to loved folder", "placeholders": { @@ -3555,7 +3555,7 @@ } } }, - "collectionRemovedFromLoved": "'{trackName}'이 '좋아요 표시한 음악'에서 제거됨", + "collectionRemovedFromLoved": "'{trackName}'이 '좋아요 표시한 곡'에서 제거됨", "@collectionRemovedFromLoved": { "description": "Snackbar after removing track from loved folder", "placeholders": { @@ -3600,11 +3600,11 @@ } } }, - "trackOptionAddToLoved": "'좋아요 표시한 음악'에 추가", + "trackOptionAddToLoved": "'좋아요 표시한 곡'에 추가", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" }, - "trackOptionRemoveFromLoved": "'좋아요 표시한 음악'에서 제거", + "trackOptionRemoveFromLoved": "'좋아요 표시한 곡'에서 제거", "@trackOptionRemoveFromLoved": { "description": "Bottom sheet action label - remove track from loved folder" }, @@ -3835,7 +3835,7 @@ "@tooltipAddToPlaylist": { "description": "Tooltip for the Add to Playlist button" }, - "snackbarRemovedTracksFromLoved": "'좋아요 표시한 음악'에서 {count} 트랙이 제거 됨", + "snackbarRemovedTracksFromLoved": "'좋아요 표시한 곡'에서 {count} 트랙이 제거됨", "@snackbarRemovedTracksFromLoved": { "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { @@ -3844,7 +3844,7 @@ } } }, - "snackbarAddedTracksToLoved": "'좋아요 표시한 음악'에 {count} 트랙이 추가됨", + "snackbarAddedTracksToLoved": "'좋아요 표시한 곡'에 {count} 트랙이 추가됨", "@snackbarAddedTracksToLoved": { "description": "Snackbar after adding multiple tracks to Loved folder", "placeholders": { @@ -3857,7 +3857,7 @@ "@dialogDownloadAllTitle": { "description": "Dialog title for bulk download confirmation" }, - "dialogDownloadAllMessage": "Download {count} tracks?", + "dialogDownloadAllMessage": "{count} 트랙을 다운로드하시겠습니까?", "@dialogDownloadAllMessage": { "description": "Body of the Download All confirmation dialog", "placeholders": { @@ -4063,7 +4063,7 @@ "@downloadFilterContributingDisabled": { "description": "Subtitle when contributing artist filter is off" }, - "downloadProvidersNoneEnabled": "No providers enabled", + "downloadProvidersNoneEnabled": "활성화된 제공자가 없습니다", "@downloadProvidersNoneEnabled": { "description": "Shown when no lyrics providers are active" }, @@ -4115,7 +4115,7 @@ } } }, - "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", + "bulkDownloadPlaylistsButton": "{count} {count, plural, =1{재생목록} other{재생목록}} 다운로드", "@bulkDownloadPlaylistsButton": { "description": "Button label for bulk downloading selected playlists", "placeholders": { @@ -4230,7 +4230,7 @@ "@editMetadataSelectEmpty": { "description": "Button to select only fields that are currently empty" }, - "queueDownloadingCount": "Downloading ({count})", + "queueDownloadingCount": "({count}) 다운로드하는 중", "@queueDownloadingCount": { "description": "Header for active downloads section with count", "placeholders": { @@ -4247,7 +4247,7 @@ "@queueFilteringIndicator": { "description": "Shown while filter results are being computed" }, - "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "queueTrackCount": "{count, plural, =1{1 트랙} other{{count} 트랙}}", "@queueTrackCount": { "description": "Track count label with plural support", "placeholders": { @@ -4256,7 +4256,7 @@ } } }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "queueAlbumCount": "{count, plural, =1{1 앨범} other{{count} 앨범}}", "@queueAlbumCount": { "description": "Album count label with plural support", "placeholders": { @@ -4397,7 +4397,7 @@ "@audioAnalysisRescanning": { "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "extensionsSearchWith": "Search with {providerName}", + "extensionsSearchWith": "{providerName}으로 검색", "@extensionsSearchWith": { "description": "Extensions page - subtitle for default metadata search provider option", "placeholders": { @@ -4715,11 +4715,11 @@ } } }, - "notifUpdateReady": "Update Ready", + "notifUpdateReady": "업데이트 준비 완료", "@notifUpdateReady": { "description": "Notification title when app update download is complete" }, - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} 다운로드 완료. 설치하려면 탭하세요.", "@notifUpdateReadyBody": { "description": "Notification body when app update is ready to install", "placeholders": { @@ -4744,7 +4744,7 @@ "@homeSearchHintDefault": { "description": "Default placeholder for the main search field on Home" }, - "homeSearchHintProvider": "Search with {providerName}...", + "homeSearchHintProvider": "{providerName}으로 검색...", "@homeSearchHintProvider": { "description": "Placeholder for the main search field when a provider is selected", "placeholders": { @@ -4886,7 +4886,7 @@ "@logClearSearch": { "description": "Tooltip for clearing the log search field" }, - "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", + "logIssueIspBlockingLabel": "ISP 차단 감지됨", "@logIssueIspBlockingLabel": { "description": "Diagnostic badge label when ISP blocking is detected" }, @@ -4922,7 +4922,7 @@ "@logIssueNetworkErrorSuggestion": { "description": "Diagnostic badge suggestion for generic network errors" }, - "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", + "logIssueTrackNotFoundLabel": "트랙을 찾을 수 없음", "@logIssueTrackNotFoundLabel": { "description": "Diagnostic badge label when a track is unavailable" }, @@ -4934,7 +4934,7 @@ "@logIssueTrackNotFoundSuggestion": { "description": "Diagnostic badge suggestion when a track is unavailable" }, - "clickableLookingUpArtist": "Looking up artist...", + "clickableLookingUpArtist": "아티스트를 검색하는 중...", "@clickableLookingUpArtist": { "description": "Snackbar shown while clickable artist metadata is being resolved" }, @@ -5292,7 +5292,7 @@ } } }, - "storeRequiresVersion": "Requires v{version}+", + "storeRequiresVersion": "v{version} 이상 필요", "@storeRequiresVersion": { "description": "Store compatibility badge for minimum app version", "placeholders": { @@ -5309,7 +5309,7 @@ "@logIssueSummary": { "description": "Header for log issue analysis summary" }, - "logTotalErrors": "Total errors: {count}", + "logTotalErrors": "총 오류 수: {count}", "@logTotalErrors": { "description": "Total error count in log issue analysis", "placeholders": { @@ -5318,7 +5318,7 @@ } } }, - "logAffectedDomains": "Affected: {domains}", + "logAffectedDomains": "영향받은 도메인: {domains}", "@logAffectedDomains": { "description": "Affected domains in log issue analysis", "placeholders": { @@ -5398,11 +5398,11 @@ "@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": "이 사이트의 링크를 SpotiFLAC Mobile로 공유하면 이 확장 프로그램이 처리합니다.", "@extensionCustomUrlHandlingShareHint": { "description": "Extension detail hint explaining share-to-app URL handling" }, - "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", + "extensionSettingsCount": "{count} {count, plural, =1{설정} other{설정}}", "@extensionSettingsCount": { "description": "Count of settings exposed by an extension quality option", "placeholders": { @@ -5557,7 +5557,7 @@ "@settingsSaveDownloadHistory": { "description": "Settings switch title for storing completed downloads in history" }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "settingsSaveDownloadHistorySubtitle": "완료된 다운로드를 기록 및 보관함 보기에 유지합니다", "@settingsSaveDownloadHistorySubtitle": { "description": "Settings switch subtitle for storing completed downloads in history" }, @@ -5565,7 +5565,7 @@ "@dialogDisableHistoryTitle": { "description": "Confirmation dialog title shown before disabling download history" }, - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "dialogDisableHistoryMessage": "기존 기록이 삭제됩니다. 다운로드한 파일은 삭제되지 않습니다.", "@dialogDisableHistoryMessage": { "description": "Confirmation dialog message shown before disabling download history" }, @@ -5581,7 +5581,7 @@ "@shareSheetNoExtensions": { "description": "Empty state when no extensions can be searched for cross-service links" }, - "shareSheetNotFound": "Not found", + "shareSheetNotFound": "찾을 수 없습니다", "@shareSheetNotFound": { "description": "Cross-service share sheet row subtitle when a service has no match" }, From 34bf726cc11d956f6009382c539e5aed20b791f3 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sat, 27 Jun 2026 21:33:08 +0700 Subject: [PATCH 039/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index cb6ffd73..312ad4f7 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -2211,7 +2211,7 @@ "@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, =1{트랙} other{트랙}}을 삭제하시겠습니까?\n\n이렇게 하면 저장소에서 파일도 삭제됩니다", "@downloadedAlbumDeleteMessage": { "description": "Delete confirmation with count", "placeholders": { @@ -2383,7 +2383,7 @@ "@discographyDownloadSelected": { "description": "Button - download selected albums" }, - "discographyAddedToQueue": "Added {count} tracks to queue", + "discographyAddedToQueue": "대기목록에 {count} 트랙이 추가됨", "@discographyAddedToQueue": { "description": "Snackbar - tracks added from discography", "placeholders": { @@ -2569,7 +2569,7 @@ } } }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "libraryFilesUnit": "{count, plural, =1{파일} other{파일}}", "@libraryFilesUnit": { "description": "Unit label for files count during library scanning", "placeholders": { @@ -2874,7 +2874,7 @@ "@libraryForceFullScan": { "description": "Button to force a complete rescan of library" }, - "libraryForceFullScanSubtitle": "Rescan all files, ignoring cache", + "libraryForceFullScanSubtitle": "캐시를 무시하고 모든 파일을 다시 스캔합니다", "@libraryForceFullScanSubtitle": { "description": "Subtitle for force full scan button" }, @@ -3027,7 +3027,7 @@ "@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": "'{target}'의 캐시된 데이터를 지웁니다. 다운로드한 음악 파일은 삭제되지 않습니다", "@cacheClearConfirmMessage": { "description": "Dialog message before clearing selected cache", "placeholders": { @@ -3040,7 +3040,7 @@ "@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": "이 페이지의 모든 캐시 카테고리가 지워집니다. 다운로드한 음악 파일은 삭제되지 않습니다", "@cacheClearAllConfirmMessage": { "description": "Dialog message before clearing all caches" }, @@ -3178,7 +3178,7 @@ "@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": "선택한 트랙에 대한 온라인 일치 항목을 검색하고 FLAC 다운로드를 대기목록에 추가합니다\n\n기존 파일은 수정되거나 삭제되지 않습니다\n\n신뢰도가 높은 일치 항목만 자동으로 대기열에 추가됩니다\n\n{count} 개가 선택되었습니다", "@queueFlacConfirmMessage": { "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { @@ -3203,7 +3203,7 @@ "@queueFlacNoReliableMatches": { "description": "Snackbar when no safe FLAC redownload matches were found" }, - "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", + "queueFlacQueuedWithSkipped": "대기목록에 {addedCount} 개의 트랙을 추가하고 {skippedCount} 개의 트랙을 건너뛰었습니다", "@queueFlacQueuedWithSkipped": { "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", "placeholders": { @@ -3368,7 +3368,7 @@ } } }, - "cueSplitFailed": "CUE split failed", + "cueSplitFailed": "CUE 분할 실패", "@cueSplitFailed": { "description": "Snackbar when CUE split fails" }, @@ -3537,7 +3537,7 @@ "@collectionRemoveFromFolder": { "description": "Tooltip for removing track from wishlist/loved folder" }, - "collectionRemoved": "\"{trackName}\" removed", + "collectionRemoved": "\"{trackName}\"가 제거됨", "@collectionRemoved": { "description": "Snackbar after removing a track from a collection", "placeholders": { @@ -3564,7 +3564,7 @@ } } }, - "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", + "collectionAddedToWishlist": "\"{trackName}\"가 위시리스트에 추가됨", "@collectionAddedToWishlist": { "description": "Snackbar after adding track to wishlist", "placeholders": { @@ -3573,7 +3573,7 @@ } } }, - "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", + "collectionRemovedFromWishlist": "\"{trackName}\"가 위시리스트에서 제거됨", "@collectionRemovedFromWishlist": { "description": "Snackbar after removing track from wishlist", "placeholders": { @@ -3582,7 +3582,7 @@ } } }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "collectionAddedToFavoriteArtists": "\"{artistName}\"가 좋아하는 아티스트에 추가됨", "@collectionAddedToFavoriteArtists": { "description": "Snackbar after adding artist to favorite artists", "placeholders": { @@ -3591,7 +3591,7 @@ } } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "collectionRemovedFromFavoriteArtists": "\"{artistName}\"가 좋아하는 아티스트에서 제거됨", "@collectionRemovedFromFavoriteArtists": { "description": "Snackbar after removing artist from favorite artists", "placeholders": { @@ -4337,7 +4337,7 @@ "@audioAnalysisChannels": { "description": "Channels metric label" }, - "audioAnalysisDuration": "Duration", + "audioAnalysisDuration": "재생시간", "@audioAnalysisDuration": { "description": "Duration metric label" }, From 12d6940a6eb9ea9da507099b14344f4141bad2ec Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sat, 27 Jun 2026 22:36:44 +0700 Subject: [PATCH 040/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 54 ++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 312ad4f7..19a2344d 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -3815,7 +3815,7 @@ "@safMigrationMessage2": { "description": "Second paragraph of SAF migration dialog" }, - "safMigrationSuccess": "Download folder updated to SAF mode", + "safMigrationSuccess": "다운로드 폴더를 SAF 모드로 업데이트하였습니다", "@safMigrationSuccess": { "description": "Snackbar after successfully migrating to SAF" }, @@ -3886,7 +3886,7 @@ "@snackbarMetadataSaved": { "description": "Snackbar after successfully saving track metadata" }, - "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", + "snackbarFailedToEmbedLyrics": "가사를 삽입할 수 없습니다", "@snackbarFailedToEmbedLyrics": { "description": "Snackbar when lyrics embedding fails" }, @@ -4103,7 +4103,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": "{playlistCount} {playlistCount, plural, =1{재생목록} other{재생록록}}에서 {trackCount} {trackCount, plural, =1{트랙} other{트랙}}을 다운로드하시겠습니까?", "@dialogDownloadPlaylistsMessage": { "description": "Dialog message for bulk playlist download confirmation", "placeholders": { @@ -4124,7 +4124,7 @@ } } }, - "bulkDownloadSelectPlaylists": "Select playlists to download", + "bulkDownloadSelectPlaylists": "다운로드할 재생목록 선택", "@bulkDownloadSelectPlaylists": { "description": "Button label when no playlists are selected for download" }, @@ -4161,7 +4161,7 @@ "@editMetadataAutoFillNoResults": { "description": "Snackbar when online metadata search returns no results" }, - "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", + "editMetadataAutoFillDone": "온라인 메타데이터로부터 {count} {count, plural, =1{필드} other{필드}}가 채워졌습니다", "@editMetadataAutoFillDone": { "description": "Snackbar confirming how many fields were auto-filled", "placeholders": { @@ -4313,7 +4313,7 @@ "@audioAnalysisAnalyzing": { "description": "Loading text while analyzing audio" }, - "audioAnalysisSampleRate": "Sample Rate", + "audioAnalysisSampleRate": "샘플링 레이트", "@audioAnalysisSampleRate": { "description": "Sample rate metric label" }, @@ -4329,7 +4329,7 @@ "@audioAnalysisDecodedFormat": { "description": "Decoded sample format metric label" }, - "audioAnalysisBitDepth": "Bit Depth", + "audioAnalysisBitDepth": "비트 심도", "@audioAnalysisBitDepth": { "description": "Bit depth metric label" }, @@ -4353,7 +4353,7 @@ "@audioAnalysisDynamicRange": { "description": "Dynamic range metric label" }, - "audioAnalysisPeak": "Peak", + "audioAnalysisPeak": "최대 피크", "@audioAnalysisPeak": { "description": "Peak amplitude metric label" }, @@ -4377,11 +4377,11 @@ "@audioAnalysisNoClipping": { "description": "Displayed when no clipped samples were detected" }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", + "audioAnalysisSpectralCutoff": "주파수 컷오프", "@audioAnalysisSpectralCutoff": { "description": "Estimated spectral cutoff metric label" }, - "audioAnalysisChannelStats": "Per-channel Stats", + "audioAnalysisChannelStats": "채널별 통계", "@audioAnalysisChannelStats": { "description": "Per-channel audio analysis section label" }, @@ -4636,7 +4636,7 @@ } } }, - "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", + "notifLibraryScanProgressNoTotal": "{scanned} 파일 스캔됨 • {percentage}%", "@notifLibraryScanProgressNoTotal": { "description": "Notification body for library scan progress when total is unknown", "placeholders": { @@ -4652,7 +4652,7 @@ "@notifLibraryScanComplete": { "description": "Notification title when library scan finishes" }, - "notifLibraryScanCompleteBody": "{count} tracks indexed", + "notifLibraryScanCompleteBody": "{count} 개의 파일이 색인됨", "@notifLibraryScanCompleteBody": { "description": "Notification body for library scan complete - number of indexed tracks", "placeholders": { @@ -4661,7 +4661,7 @@ } } }, - "notifLibraryScanExcluded": "{count} excluded", + "notifLibraryScanExcluded": "{count} 개가 제외됨", "@notifLibraryScanExcluded": { "description": "Library scan complete suffix - excluded track count", "placeholders": { @@ -4670,7 +4670,7 @@ } } }, - "notifLibraryScanErrors": "{count} errors", + "notifLibraryScanErrors": "{count} 개의 오류", "@notifLibraryScanErrors": { "description": "Library scan complete suffix - error count", "placeholders": { @@ -4813,15 +4813,15 @@ "@trackCoverNoEmbeddedArt": { "description": "Message shown when a track file has no embedded cover art" }, - "trackCoverReplace": "Replace Cover", + "trackCoverReplace": "커버 교체", "@trackCoverReplace": { "description": "Button label for replacing selected cover art" }, - "trackCoverPick": "Pick Cover", + "trackCoverPick": "커버 선택", "@trackCoverPick": { "description": "Button label for selecting cover art" }, - "trackCoverClearSelected": "Clear selected cover", + "trackCoverClearSelected": "선택된 커버 지우기", "@trackCoverClearSelected": { "description": "Tooltip for clearing the newly selected cover art" }, @@ -4861,7 +4861,7 @@ "@queueRateLimitMessage": { "description": "Explanation shown on a failed queue item when the download service rate limits requests" }, - "appearanceSelectAccentColor": "Select accent color {hex}", + "appearanceSelectAccentColor": "강조 색상 {hex} 선택", "@appearanceSelectAccentColor": { "description": "Accessibility label for picking an accent color", "placeholders": { @@ -4890,7 +4890,7 @@ "@logIssueIspBlockingLabel": { "description": "Diagnostic badge label when ISP blocking is detected" }, - "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", + "logIssueIspBlockingDescription": "ISP에서 다운로드 서비스 접속을 차단했을 수 있습니다", "@logIssueIspBlockingDescription": { "description": "Diagnostic badge description for ISP blocking" }, @@ -4914,7 +4914,7 @@ "@logIssueNetworkErrorLabel": { "description": "Diagnostic badge label for generic network errors" }, - "logIssueNetworkErrorDescription": "Connection issues detected", + "logIssueNetworkErrorDescription": "연결 문제가 감지됨", "@logIssueNetworkErrorDescription": { "description": "Diagnostic badge description for generic network errors" }, @@ -5267,7 +5267,7 @@ "@a11ySelectTrack": { "description": "Accessibility label for selecting a track" }, - "a11yDeselectTrack": "Deselect track", + "a11yDeselectTrack": "트랙 선택 해제", "@a11yDeselectTrack": { "description": "Accessibility label for deselecting a track" }, @@ -5331,7 +5331,7 @@ "@libraryScanCancelled": { "description": "Library scan status when a scan was cancelled" }, - "libraryScanCancelledSubtitle": "You can retry the scan when ready.", + "libraryScanCancelledSubtitle": "준비가 되면 스캔을 다시 시도할 수 있습니다", "@libraryScanCancelledSubtitle": { "description": "Library scan status subtitle after cancellation" }, @@ -5344,7 +5344,7 @@ } } }, - "downloadNativeWorker": "Native download worker", + "downloadNativeWorker": "네이티브 다운로드 워커", "@downloadNativeWorker": { "description": "Setting title for Android native download worker" }, @@ -5360,11 +5360,11 @@ "@extensionServiceStatus": { "description": "Extension detail section header for service status" }, - "extensionServiceHealth": "Service health", + "extensionServiceHealth": "서비스 상태", "@extensionServiceHealth": { "description": "Extension capability label for service health checks" }, - "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", + "extensionHealthChecksConfigured": "{count} {count, plural, =1{검사} other{검사}}가 설정됨", "@extensionHealthChecksConfigured": { "description": "Extension service health check count", "placeholders": { @@ -5373,7 +5373,7 @@ } } }, - "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", + "extensionOauthConnectHint": "Spotify에 연결을 탭하여 이 필드를 채우세요", "@extensionOauthConnectHint": { "description": "Hint for an OAuth login link field before connecting Spotify" }, @@ -5390,7 +5390,7 @@ "@extensionRefreshStatus": { "description": "Tooltip for refreshing extension service health status" }, - "extensionCustomUrlHandling": "Custom URL Handling", + "extensionCustomUrlHandling": "사용자 정의 URL 처리", "@extensionCustomUrlHandling": { "description": "Extension detail section title for custom URL handling" }, From 88fc95872939b42b7c410c37d1ca8ce581e02c72 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 28 Jun 2026 09:34:15 +0700 Subject: [PATCH 041/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 78 ++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 9a56032c..b8793dd1 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -5,159 +5,159 @@ "@appName": { "description": "App name - DO NOT TRANSLATE" }, - "navHome": "Home", + "navHome": "الرئيسية", "@navHome": { "description": "Bottom navigation - Home tab" }, - "navLibrary": "Library", + "navLibrary": "المكتبة", "@navLibrary": { "description": "Bottom navigation - Library tab" }, - "navSettings": "Settings", + "navSettings": "الإعدادات", "@navSettings": { "description": "Bottom navigation - Settings tab" }, - "navStore": "Repo", + "navStore": "المستودع", "@navStore": { "description": "Bottom navigation - Extension store tab" }, - "homeTitle": "Home", + "homeTitle": "الصفحة الرئيسية", "@homeTitle": { "description": "Home screen title" }, - "homeSubtitle": "Paste a supported URL or search by name", + "homeSubtitle": "ألصق عنوان URL مدعوم أو ابحث بالاسم", "@homeSubtitle": { "description": "Subtitle shown below search box" }, - "homeEmptyTitle": "No search providers yet", + "homeEmptyTitle": "لا يوجد مزودي بحث بعد", "@homeEmptyTitle": { "description": "Title shown on home when no providers are available yet" }, - "homeEmptySubtitle": "Install an extension to continue.", + "homeEmptySubtitle": "قم بتثبيت مكون إضافي للمتابعة.", "@homeEmptySubtitle": { "description": "Subtitle shown on home when no providers are available yet" }, - "homeSupports": "Supports: Track, Album, Playlist, Artist URLs", + "homeSupports": "يدعم: الأغنية، الألبوم، قائمة التشغيل، عناوين URL للفنان", "@homeSupports": { "description": "Info text about supported URL types" }, - "homeRecent": "Recent", + "homeRecent": "الأخيرة", "@homeRecent": { "description": "Section header for recent searches" }, - "historyFilterAll": "All", + "historyFilterAll": "الكل", "@historyFilterAll": { "description": "Filter chip - show all items" }, - "historyFilterAlbums": "Albums", + "historyFilterAlbums": "الألبومات", "@historyFilterAlbums": { "description": "Filter chip - show albums only" }, - "historyFilterSingles": "Singles", + "historyFilterSingles": "الأغاني", "@historyFilterSingles": { "description": "Filter chip - show singles only" }, - "historySearchHint": "Search history...", + "historySearchHint": "سجل البحث...", "@historySearchHint": { "description": "Search bar placeholder in history" }, - "settingsTitle": "Settings", + "settingsTitle": "الإعدادات", "@settingsTitle": { "description": "Settings screen title" }, - "settingsDownload": "Download", + "settingsDownload": "إعدادات التحميل", "@settingsDownload": { "description": "Settings section - download options" }, - "settingsAppearance": "Appearance", + "settingsAppearance": "المظهر", "@settingsAppearance": { "description": "Settings section - visual customization" }, - "settingsOptions": "Options", + "settingsOptions": "الخيارات", "@settingsOptions": { "description": "Settings section - app options" }, - "settingsExtensions": "Extensions", + "settingsExtensions": "الإضافات", "@settingsExtensions": { "description": "Settings section - extension management" }, - "settingsAbout": "About", + "settingsAbout": "حول البرنامج", "@settingsAbout": { "description": "Settings section - app info" }, - "downloadTitle": "Download", + "downloadTitle": "إعدادات التحميل", "@downloadTitle": { "description": "Download settings page title" }, - "downloadAskQualitySubtitle": "Show quality picker for each download", + "downloadAskQualitySubtitle": "إظهار منتقي الجودة لكل تنزيل", "@downloadAskQualitySubtitle": { "description": "Subtitle for ask quality toggle" }, - "downloadFilenameFormat": "Filename Format", + "downloadFilenameFormat": "تنسيق اسم الملف", "@downloadFilenameFormat": { "description": "Setting for output filename pattern" }, - "downloadSingleFilenameFormat": "Single Filename Format", + "downloadSingleFilenameFormat": "تنسيق اسم الملف الفردي", "@downloadSingleFilenameFormat": { "description": "Setting for output filename pattern for singles/EPs" }, - "downloadSingleFilenameFormatDescription": "Filename pattern for singles and EPs. Uses the same tags as the album format.", + "downloadSingleFilenameFormatDescription": "نمط اسم الملف للعازفين و EPs. يستخدم نفس العلامات مثل تنسيق الألبوم.", "@downloadSingleFilenameFormatDescription": { "description": "Subtitle description for single filename format setting" }, - "downloadFolderOrganization": "Folder Organization", + "downloadFolderOrganization": "تنظيم المجلدات", "@downloadFolderOrganization": { "description": "Title of the folder organization picker bottom sheet" }, - "appearanceTitle": "Appearance", + "appearanceTitle": "المظهر", "@appearanceTitle": { "description": "Appearance settings page title" }, - "appearanceThemeSystem": "System", + "appearanceThemeSystem": "النظام", "@appearanceThemeSystem": { "description": "Follow system theme" }, - "appearanceThemeLight": "Light", + "appearanceThemeLight": "فاتح", "@appearanceThemeLight": { "description": "Light theme" }, - "appearanceThemeDark": "Dark", + "appearanceThemeDark": "مظلم", "@appearanceThemeDark": { "description": "Dark theme" }, - "appearanceDynamicColor": "Dynamic Color", + "appearanceDynamicColor": "لون ديناميكي", "@appearanceDynamicColor": { "description": "Material You dynamic colors" }, - "appearanceDynamicColorSubtitle": "Use colors from your wallpaper", + "appearanceDynamicColorSubtitle": "استخدام الألوان من الخلفية", "@appearanceDynamicColorSubtitle": { "description": "Subtitle for dynamic color" }, - "appearanceHistoryView": "History View", + "appearanceHistoryView": "عرض السجل", "@appearanceHistoryView": { "description": "Layout style for history" }, - "appearanceHistoryViewList": "List", + "appearanceHistoryViewList": "قائمة", "@appearanceHistoryViewList": { "description": "List layout option" }, - "appearanceHistoryViewGrid": "Grid", + "appearanceHistoryViewGrid": "شبكة", "@appearanceHistoryViewGrid": { "description": "Grid layout option" }, - "optionsTitle": "Options", + "optionsTitle": "خيارات", "@optionsTitle": { "description": "Options settings page title" }, - "optionsPrimaryProvider": "Primary Provider", + "optionsPrimaryProvider": "المزود الرئيسي", "@optionsPrimaryProvider": { "description": "Main search provider setting" }, - "optionsPrimaryProviderSubtitle": "Service used for searching by track or album name", + "optionsPrimaryProviderSubtitle": "الخدمة المستخدمة للبحث عن طريق اسم الأغنية أو الألبوم", "@optionsPrimaryProviderSubtitle": { "description": "Subtitle for primary provider" }, - "optionsUsingExtension": "Using extension: {extensionName}", + "optionsUsingExtension": "استخدام الإضافة: {extensionName}", "@optionsUsingExtension": { "description": "Shows active extension name", "placeholders": { From 80e704fd26e3c307f8e9ee2f80a83bb372256b1b Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 28 Jun 2026 11:03:47 +0700 Subject: [PATCH 042/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 378 ++++++++++++++++++++-------------------- 1 file changed, 189 insertions(+), 189 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index b8793dd1..a38d4615 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -166,39 +166,39 @@ } } }, - "optionsDefaultSearchTab": "Default Search Tab", + "optionsDefaultSearchTab": "تبويب البحث الافتراضي", "@optionsDefaultSearchTab": { "description": "Title for the preferred default search tab setting" }, - "optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.", + "optionsDefaultSearchTabSubtitle": "اختر علامة التبويب التي تفتح أولاً لنتائج البحث الجديدة.", "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsSwitchBack": "Choose the default search provider to switch back from an extension", + "optionsSwitchBack": "اختر مزود البحث الافتراضي للتبديل من مكون إضافي", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" }, - "optionsAutoFallback": "Auto Fallback", + "optionsAutoFallback": "التراجع التلقائي", "@optionsAutoFallback": { "description": "Auto-retry with other services" }, - "optionsAutoFallbackSubtitle": "Try other services if download fails", + "optionsAutoFallbackSubtitle": "تجربة خدمات أخرى إذا فشل التنزيل", "@optionsAutoFallbackSubtitle": { "description": "Subtitle for auto fallback" }, - "optionsUseExtensionProviders": "Use Extension Providers", + "optionsUseExtensionProviders": "استخدام مزودي الإضافات", "@optionsUseExtensionProviders": { "description": "Legacy setting label for extension download providers" }, - "optionsUseExtensionProvidersOn": "Extension providers are enabled", + "optionsUseExtensionProvidersOn": "مزودي الإضافات مفعلين", "@optionsUseExtensionProvidersOn": { "description": "Status when extension providers enabled" }, - "optionsUseExtensionProvidersOff": "Extension providers are required", + "optionsUseExtensionProvidersOff": "مزودي الإضافات مطلوبين", "@optionsUseExtensionProvidersOff": { "description": "Legacy status when extension providers would be disabled" }, - "optionsEmbedLyrics": "Embed Lyrics", + "optionsEmbedLyrics": "تضمين كلمات الأغنية", "@optionsEmbedLyrics": { "description": "Embed lyrics in audio files" }, @@ -206,47 +206,47 @@ "@optionsEmbedLyricsSubtitle": { "description": "Subtitle for embed lyrics" }, - "optionsMaxQualityCover": "اختيار اعلى جودة للغلاف", + "optionsMaxQualityCover": "اختيار أعلى جودة للغلاف", "@optionsMaxQualityCover": { "description": "Download highest quality album art" }, - "optionsMaxQualityCoverSubtitle": "Download highest resolution cover art", + "optionsMaxQualityCoverSubtitle": "تنزيل أعلى دقة لغلاف الأغنية", "@optionsMaxQualityCoverSubtitle": { "description": "Subtitle for max quality cover" }, - "optionsReplayGain": "ReplayGain", + "optionsReplayGain": "ReplyGain", "@optionsReplayGain": { "description": "Title for ReplayGain setting toggle" }, - "optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)", + "optionsReplayGainSubtitleOn": "مسح الصوت و تضمين علامات ReplayGain (EBU R128)", "@optionsReplayGainSubtitleOn": { "description": "Subtitle when ReplayGain is enabled" }, - "optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags", + "optionsReplayGainSubtitleOff": "معطل: لا توجد علامات تطبيع للصوت", "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, - "trackReplayGain": "Rescan ReplayGain", + "trackReplayGain": "إعادة مسح ReplyGain", "@trackReplayGain": { "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "trackReplayGainSubtitle": "تحليل ارتفاع الصوت وكتابة وسوم ReplayGain", "@trackReplayGainSubtitle": { "description": "Subtitle for the rescan ReplayGain menu option" }, - "trackReplayGainScanning": "Analyzing loudness...", + "trackReplayGainScanning": "تحليل الصوت...", "@trackReplayGainScanning": { "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "trackReplayGainSuccess": "ReplayGain tags added", + "trackReplayGainSuccess": "تم إضافة وسم ReplyGain", "@trackReplayGainSuccess": { "description": "Snackbar message after ReplayGain tags written for a single track" }, - "trackReplayGainFailed": "Failed to add ReplayGain tags", + "trackReplayGainFailed": "فشل في إضافة علامات ReplayGain", "@trackReplayGainFailed": { "description": "Snackbar message when ReplayGain scan/write fails" }, - "selectionReplayGainCount": "ReplayGain ({count})", + "selectionReplayGainCount": "ٌReplyGain ({count})", "@selectionReplayGainCount": { "description": "Batch selection action button label for ReplayGain", "placeholders": { @@ -255,11 +255,11 @@ } } }, - "replayGainBatchConfirmTitle": "Add ReplayGain", + "replayGainBatchConfirmTitle": "إضافة ReplyGain", "@replayGainBatchConfirmTitle": { "description": "Title of the batch ReplayGain confirmation dialog" }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "replayGainBatchConfirmMessage": "تحليل الصوت وكتابة وسوم ReplayGain إلى مسار(مسارات) {count}؟", "@replayGainBatchConfirmMessage": { "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { @@ -268,11 +268,11 @@ } } }, - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "replayGainBatchAnalyzing": "تحليل ReplyGain...", "@replayGainBatchAnalyzing": { "description": "Progress dialog title while batch scanning ReplayGain" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainBatchSuccess": "تمت إضافة وسوم ReplyGain ل {success} أغنية من أصل {total}", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -284,87 +284,87 @@ } } }, - "optionsArtistTagMode": "Artist Tag Mode", + "optionsArtistTagMode": "وضع وسم الفنان", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" }, - "optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.", + "optionsArtistTagModeDescription": "اختر كيف يتم كتابة العديد من الفنانين في العلامات المضمنة.", "@optionsArtistTagModeDescription": { "description": "Bottom-sheet description for artist tag mode setting" }, - "optionsArtistTagModeJoined": "Single joined value", + "optionsArtistTagModeJoined": "قيمة مشتركة واحدة", "@optionsArtistTagModeJoined": { "description": "Artist tag mode option that joins multiple artists into one value" }, - "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", + "optionsArtistTagModeJoinedSubtitle": "اكتب قيمة ARTIST واحدة مثل \"الفنان A، الفنان B\" لتحقيق التوافق الأقصى لمشغل الأغاني.", "@optionsArtistTagModeJoinedSubtitle": { "description": "Subtitle for joined artist tag mode" }, - "optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus", + "optionsArtistTagModeSplitVorbis": "تقسيم العلامات على FLAC/Opus", "@optionsArtistTagModeSplitVorbis": { "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", + "optionsArtistTagModeSplitVorbisSubtitle": "اكتب علامة فنان لكل فنان لـ FLAC و Opus؛ تبقى MP3 و M4A منضمة.", "@optionsArtistTagModeSplitVorbisSubtitle": { "description": "Subtitle for split Vorbis artist tag mode" }, - "optionsExtensionStore": "Extension Repo", + "optionsExtensionStore": "مستودع الإضافات", "@optionsExtensionStore": { "description": "Show/hide store tab" }, - "optionsExtensionStoreSubtitle": "Show Repo tab in navigation", + "optionsExtensionStoreSubtitle": "إظهار صفحة المستودع في شريط التنقل", "@optionsExtensionStoreSubtitle": { "description": "Subtitle for extension store toggle" }, - "optionsCheckUpdates": "Check for Updates", + "optionsCheckUpdates": "التحقق من وجود تحديثات", "@optionsCheckUpdates": { "description": "Auto update check toggle" }, - "optionsCheckUpdatesSubtitle": "Notify when new version is available", + "optionsCheckUpdatesSubtitle": "إعلام عند توفر إصدار جديد", "@optionsCheckUpdatesSubtitle": { "description": "Subtitle for update check" }, - "optionsUpdateChannel": "Update Channel", + "optionsUpdateChannel": "قناة التحديث", "@optionsUpdateChannel": { "description": "Stable vs preview releases" }, - "optionsUpdateChannelStable": "Stable releases only", + "optionsUpdateChannelStable": "الإصدارات المستقرة فقط", "@optionsUpdateChannelStable": { "description": "Only stable updates" }, - "optionsUpdateChannelPreview": "Get preview releases", + "optionsUpdateChannelPreview": "الحصول على إصدارات تجريبية", "@optionsUpdateChannelPreview": { "description": "Include beta/preview updates" }, - "optionsUpdateChannelWarning": "Preview may contain bugs or incomplete features", + "optionsUpdateChannelWarning": "قد تحتوي الإصدارات التجريبية أخطاءً أو ميزات غير مكتملة", "@optionsUpdateChannelWarning": { "description": "Warning about preview channel" }, - "optionsClearHistory": "Clear Download History", + "optionsClearHistory": "مسح سجل التحميلات", "@optionsClearHistory": { "description": "Delete all download history" }, - "optionsClearHistorySubtitle": "Remove all downloaded tracks from history", + "optionsClearHistorySubtitle": "إزالة جميع الأغاني التي تم تنزيلها من السجل", "@optionsClearHistorySubtitle": { "description": "Subtitle for clear history" }, - "optionsDetailedLogging": "Detailed Logging", + "optionsDetailedLogging": "تسجيل تفصيلي", "@optionsDetailedLogging": { "description": "Enable verbose logs for debugging" }, - "optionsDetailedLoggingOn": "Detailed logs are being recorded", + "optionsDetailedLoggingOn": "يتم تسجيل السجلات التفصيلية", "@optionsDetailedLoggingOn": { "description": "Status when logging enabled" }, - "optionsDetailedLoggingOff": "Enable for bug reports", + "optionsDetailedLoggingOff": "تمكين لتقارير الأخطاء", "@optionsDetailedLoggingOff": { "description": "Status when logging disabled" }, - "optionsSpotifyCredentials": "Spotify Credentials", + "optionsSpotifyCredentials": "بيانات اعتماد Spotify", "@optionsSpotifyCredentials": { "description": "Spotify API credentials setting" }, - "optionsSpotifyCredentialsConfigured": "Client ID: {clientId}...", + "optionsSpotifyCredentialsConfigured": "معرف العميل: {clientId}...", "@optionsSpotifyCredentialsConfigured": { "description": "Shows configured client ID preview", "placeholders": { @@ -373,27 +373,27 @@ } } }, - "optionsSpotifyCredentialsRequired": "Required - tap to configure", + "optionsSpotifyCredentialsRequired": "مطلوب - انقر للتهيئة", "@optionsSpotifyCredentialsRequired": { "description": "Prompt to set up credentials" }, - "optionsSpotifyWarning": "Spotify requires your own API credentials. Get them free from developer.spotify.com", + "optionsSpotifyWarning": "Spotify يتطلب بيانات اعتماد API الخاصة بك. احصل عليها مجاناً من developer.spotify.com", "@optionsSpotifyWarning": { "description": "Info about Spotify API requirement" }, - "optionsSpotifyDeprecationWarning": "Spotify search will be deprecated on March 3, 2026 due to Spotify API changes. Please switch to Deezer.", + "optionsSpotifyDeprecationWarning": "سيتم إلغاء البحث في Spotify في 3 مارس 2026 بسبب تغييرات API Spotify. الرجاء التبديل إلى Deezer.", "@optionsSpotifyDeprecationWarning": { "description": "Warning about Spotify API deprecation" }, - "extensionsTitle": "Extensions", + "extensionsTitle": "الإضافات", "@extensionsTitle": { "description": "Extensions page title" }, - "extensionsDisabled": "Disabled", + "extensionsDisabled": "معطَّل", "@extensionsDisabled": { "description": "Extension status - inactive" }, - "extensionsVersion": "Version {version}", + "extensionsVersion": "الإصدار {version}", "@extensionsVersion": { "description": "Extension version display", "placeholders": { @@ -402,7 +402,7 @@ } } }, - "extensionsAuthor": "by {author}", + "extensionsAuthor": "من قِبل {author}", "@extensionsAuthor": { "description": "Extension author credit", "placeholders": { @@ -411,151 +411,151 @@ } } }, - "extensionsUninstall": "Uninstall", + "extensionsUninstall": "إلغاء التثبيت", "@extensionsUninstall": { "description": "Uninstall extension button" }, - "storeTitle": "Extension Repo", + "storeTitle": "مستودع الإضافات", "@storeTitle": { "description": "Store screen title" }, - "storeSearch": "Search extensions...", + "storeSearch": "البحث في الإضافات...", "@storeSearch": { "description": "Store search placeholder" }, - "storeInstall": "Install", + "storeInstall": "تثبيت", "@storeInstall": { "description": "Install extension button" }, - "storeInstalled": "Installed", + "storeInstalled": "مثبت", "@storeInstalled": { "description": "Already installed badge" }, - "storeUpdate": "Update", + "storeUpdate": "تحديث", "@storeUpdate": { "description": "Update available button" }, - "aboutTitle": "About", + "aboutTitle": "حول", "@aboutTitle": { "description": "About page title" }, - "aboutContributors": "Contributors", + "aboutContributors": "المساهمون", "@aboutContributors": { "description": "Section for contributors" }, - "aboutMobileDeveloper": "Mobile version developer", + "aboutMobileDeveloper": "مطور نسخة الهاتف", "@aboutMobileDeveloper": { "description": "Role description for mobile dev" }, - "aboutOriginalCreator": "Creator of the original SpotiFLAC", + "aboutOriginalCreator": "مطور SpotiFLAC الأصلي", "@aboutOriginalCreator": { "description": "Role description for original creator" }, - "aboutLogoArtist": "The talented artist who created our beautiful app logo!", + "aboutLogoArtist": "الفنان الموهوب الذي أنشأ شعار التطبيق الجميل!", "@aboutLogoArtist": { "description": "Role description for logo artist" }, - "aboutTranslators": "Translators", + "aboutTranslators": "المترجمون", "@aboutTranslators": { "description": "Section for translators" }, - "aboutSpecialThanks": "Special Thanks", + "aboutSpecialThanks": "شكر خاص لِ", "@aboutSpecialThanks": { "description": "Section for special thanks" }, - "aboutLinks": "Links", + "aboutLinks": "روابط", "@aboutLinks": { "description": "Section for external links" }, - "aboutMobileSource": "Mobile source code", + "aboutMobileSource": "كود مصدر برنامج الهاتف", "@aboutMobileSource": { "description": "Link to mobile GitHub repo" }, - "aboutPCSource": "PC source code", + "aboutPCSource": "كود مصدر برنامج الكمبيوتر", "@aboutPCSource": { "description": "Link to PC GitHub repo" }, - "aboutKeepAndroidOpen": "Keep Android Open", + "aboutKeepAndroidOpen": "ابقي اندرويد مفتوحا", "@aboutKeepAndroidOpen": { "description": "Link to Keep Android Open campaign website" }, - "aboutReportIssue": "Report an issue", + "aboutReportIssue": "الإبلاغ عن خطأ", "@aboutReportIssue": { "description": "Link to report bugs" }, - "aboutReportIssueSubtitle": "Report any problems you encounter", + "aboutReportIssueSubtitle": "الإبلاغ عن أي مشكلة تواجهك", "@aboutReportIssueSubtitle": { "description": "Subtitle for report issue" }, - "aboutFeatureRequest": "Feature request", + "aboutFeatureRequest": "اقتراح ميزة", "@aboutFeatureRequest": { "description": "Link to suggest features" }, - "aboutFeatureRequestSubtitle": "Suggest new features for the app", + "aboutFeatureRequestSubtitle": "اقتراح ميزات جديدة للتطبيق", "@aboutFeatureRequestSubtitle": { "description": "Subtitle for feature request" }, - "aboutTelegramChannel": "Telegram Channel", + "aboutTelegramChannel": "قناة تيليجرام", "@aboutTelegramChannel": { "description": "Link to Telegram channel" }, - "aboutTelegramChannelSubtitle": "Announcements and updates", + "aboutTelegramChannelSubtitle": "الإعلانات والتحديثات", "@aboutTelegramChannelSubtitle": { "description": "Subtitle for Telegram channel" }, - "aboutTelegramChat": "Telegram Community", + "aboutTelegramChat": "مجتمع تليجرام", "@aboutTelegramChat": { "description": "Link to Telegram chat group" }, - "aboutTelegramChatSubtitle": "Chat with other users", + "aboutTelegramChatSubtitle": "الدردشة مع المستخدمين الآخرين", "@aboutTelegramChatSubtitle": { "description": "Subtitle for Telegram chat" }, - "aboutSocial": "Social", + "aboutSocial": "التواصل الإجتماعي", "@aboutSocial": { "description": "Section for social links" }, - "aboutApp": "App", + "aboutApp": "التطبيق", "@aboutApp": { "description": "Section for app info" }, - "aboutVersion": "Version", + "aboutVersion": "الإصدار", "@aboutVersion": { "description": "Version info label" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "aboutBinimumDesc": "منشئ API QQDL و HiFi. ساعد هذا المشروع في تشكيل دعم تحميل غير فاقد للجودة.", "@aboutBinimumDesc": { "description": "Credit description for binimum" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "aboutSachinsenalDesc": "منشئ مشروع HiFi الأصلي. مؤسسة للتكامل بدون مصدر.", "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutSjdonadoDesc": "Creator of I Don't Have Spotify (IDHS). The fallback link resolver that saves the day!", + "aboutSjdonadoDesc": "منشئ ل I Don't Have Spotify (IHDS). محلل الروابط الذي ينقذ اليوم!", "@aboutSjdonadoDesc": { "description": "Credit description for sjdonado" }, - "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", + "aboutAppDescription": "البحث عن بيانات التعريف الموسيقي، وإدارة الملحقات، وتنظيم مكتبتك.", "@aboutAppDescription": { "description": "App description in header card" }, - "artistAlbums": "Albums", + "artistAlbums": "الألبومات", "@artistAlbums": { "description": "Section header for artist albums" }, - "artistSingles": "Singles & EPs", + "artistSingles": "الأغاني و ال EPs", "@artistSingles": { "description": "Section header for singles/EPs" }, - "artistCompilations": "Compilations", + "artistCompilations": "التجميع", "@artistCompilations": { "description": "Section header for compilations" }, - "artistPopular": "Popular", + "artistPopular": "الأكثر شعبية", "@artistPopular": { "description": "Section header for popular/top tracks" }, - "artistMonthlyListeners": "{count} monthly listeners", + "artistMonthlyListeners": "{count} مستمع شهري", "@artistMonthlyListeners": { "description": "Monthly listener count display", "placeholders": { @@ -565,47 +565,47 @@ } } }, - "trackMetadataService": "Service", + "trackMetadataService": "الخدمة", "@trackMetadataService": { "description": "Metadata field - download service used" }, - "trackMetadataPlay": "Play", + "trackMetadataPlay": "تشغيل", "@trackMetadataPlay": { "description": "Action button - play track" }, - "trackMetadataShare": "Share", + "trackMetadataShare": "مشاركة", "@trackMetadataShare": { "description": "Action button - share track" }, - "trackMetadataDelete": "Delete", + "trackMetadataDelete": "حذف", "@trackMetadataDelete": { "description": "Action button - delete track" }, - "setupGrantPermission": "Grant Permission", + "setupGrantPermission": "منح الصلاحيات", "@setupGrantPermission": { "description": "Button to request permission" }, - "setupSkip": "Skip for now", + "setupSkip": "التخطي الآن", "@setupSkip": { "description": "Skip current step button" }, - "setupStorageAccessRequired": "Storage Access Required", + "setupStorageAccessRequired": "إذن دخول وحدة التخزين مطلوب", "@setupStorageAccessRequired": { "description": "Title when storage access needed" }, - "setupStorageAccessMessageAndroid11": "Android 11+ requires \"All files access\" permission to save files to your chosen download folder.", + "setupStorageAccessMessageAndroid11": "يتطلب أندرويد 11+ إذن \"الوصول إلى جميع الملفات\" لحفظ الملفات في مجلد التحميل الذي اخترته.", "@setupStorageAccessMessageAndroid11": { "description": "Android 11+ specific explanation" }, - "setupOpenSettings": "Open Settings", + "setupOpenSettings": "فتح الإعدادات", "@setupOpenSettings": { "description": "Button to open system settings" }, - "setupPermissionDeniedMessage": "Permission denied. Please grant all permissions to continue.", + "setupPermissionDeniedMessage": "تم رفض الإذن. الرجاء منح كافة الصلاحيات للمتابعة.", "@setupPermissionDeniedMessage": { "description": "Error when permission denied" }, - "setupPermissionRequired": "{permissionType} Permission Required", + "setupPermissionRequired": "{permissionType} مطلوب الإذن", "@setupPermissionRequired": { "description": "Generic permission required title", "placeholders": { @@ -615,7 +615,7 @@ } } }, - "setupPermissionRequiredMessage": "{permissionType} permission is required for the best experience. You can change this later in Settings.", + "setupPermissionRequiredMessage": "الإذن {permissionType} مطلوب لأفضل التجربة. يمكنك تغيير هذا لاحقاً في الإعدادات.", "@setupPermissionRequiredMessage": { "description": "Generic permission required message", "placeholders": { @@ -624,63 +624,63 @@ } } }, - "setupUseDefaultFolder": "Use Default Folder?", + "setupUseDefaultFolder": "استخدام المجلد الافتراضي؟", "@setupUseDefaultFolder": { "description": "Dialog title for default folder" }, - "setupNoFolderSelected": "No folder selected. Would you like to use the default Music folder?", + "setupNoFolderSelected": "لم يتم تحديد مجلد. هل ترغب في استخدام مجلد الموسيقى الافتراضي؟", "@setupNoFolderSelected": { "description": "Prompt when no folder selected" }, - "setupUseDefault": "Use Default", + "setupUseDefault": "استخدم الافتراضي", "@setupUseDefault": { "description": "Button to use default folder" }, - "setupDownloadLocationTitle": "Download Location", + "setupDownloadLocationTitle": "موقع حفظ التنزيلات", "@setupDownloadLocationTitle": { "description": "Download location dialog title" }, - "setupDownloadLocationIosMessage": "On iOS, downloads are saved to the app's Documents folder. You can access them via the Files app.", + "setupDownloadLocationIosMessage": "على iOS، يتم حفظ التحميلات إلى مجلد مستندات التطبيق. يمكنك الوصول إليها عبر تطبيق الملفات.", "@setupDownloadLocationIosMessage": { "description": "iOS-specific folder info" }, - "setupAppDocumentsFolder": "App Documents Folder", + "setupAppDocumentsFolder": "مجلد مستندات التطبيق", "@setupAppDocumentsFolder": { "description": "iOS documents folder option" }, - "setupAppDocumentsFolderSubtitle": "Recommended - accessible via Files app", + "setupAppDocumentsFolderSubtitle": "موصى به - يمكن الوصول إليه عبر تطبيق الملفات", "@setupAppDocumentsFolderSubtitle": { "description": "Subtitle for documents folder" }, - "setupChooseFromFiles": "Choose from Files", + "setupChooseFromFiles": "اختر من الملفات", "@setupChooseFromFiles": { "description": "iOS file picker option" }, - "setupChooseFromFilesSubtitle": "Select iCloud or other location", + "setupChooseFromFilesSubtitle": "حدد iCloud أو موقع آخر", "@setupChooseFromFilesSubtitle": { "description": "Subtitle for file picker" }, - "setupIosEmptyFolderWarning": "iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.", + "setupIosEmptyFolderWarning": "حدود iOS: لا يمكن تحديد مجلدات فارغة. اختر مجلدا مع ملف واحد على الأقل.", "@setupIosEmptyFolderWarning": { "description": "iOS folder selection warning" }, - "setupIcloudNotSupported": "iCloud Drive is not supported. Please use the app Documents folder.", + "setupIcloudNotSupported": "iCloud Drive غير مدعوم. الرجاء استخدام مجلد مستندات التطبيق.", "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, - "setupDownloadInFlac": "Download Spotify tracks in FLAC", + "setupDownloadInFlac": "تحميل اغاني Spotify بصيغة FLAC", "@setupDownloadInFlac": { "description": "App tagline in setup" }, - "setupStorageGranted": "Storage Permission Granted!", + "setupStorageGranted": "تم منح إذن التخزين!", "@setupStorageGranted": { "description": "Success message for storage permission" }, - "setupStorageRequired": "Storage Permission Required", + "setupStorageRequired": "الإذن مطلوب للتخزين", "@setupStorageRequired": { "description": "Title when storage permission needed" }, - "setupStorageDescription": "SpotiFLAC needs storage permission to save your downloaded music files.", + "setupStorageDescription": "SpotiFLAC يحتاج إلى إذن تخزين لحفظ ملفات الموسيقى الخاصة بك التي تم تنزيلها.", "@setupStorageDescription": { "description": "Explanation for storage permission" }, @@ -688,127 +688,127 @@ "@setupNotificationGranted": { "description": "Success message for notification permission" }, - "setupNotificationEnable": "Enable Notifications", + "setupNotificationEnable": "تمكين الإشعارات", "@setupNotificationEnable": { "description": "Button to enable notifications" }, - "setupFolderChoose": "Choose Download Folder", + "setupFolderChoose": "اختر مجلد التحميل", "@setupFolderChoose": { "description": "Button to choose folder" }, - "setupFolderDescription": "Select a folder where your downloaded music will be saved.", + "setupFolderDescription": "حدد مجلد حيث سيتم حفظ الموسيقى التي تم تنزيلها.", "@setupFolderDescription": { "description": "Explanation for folder selection" }, - "setupSelectFolder": "Select Folder", + "setupSelectFolder": "حدد الملف", "@setupSelectFolder": { "description": "Button to select folder" }, - "setupEnableNotifications": "Enable Notifications", + "setupEnableNotifications": "تمكين الإشعارات", "@setupEnableNotifications": { "description": "Button to enable notifications" }, - "setupNotificationBackgroundDescription": "Get notified about download progress and completion. This helps you track downloads when the app is in background.", + "setupNotificationBackgroundDescription": "الحصول على إشعار حول تقدم التحميل وإكماله. هذا يساعدك على تتبع التنزيلات عندما يكون التطبيق في الخلفية.", "@setupNotificationBackgroundDescription": { "description": "Detailed notification explanation" }, - "setupSkipForNow": "Skip for now", + "setupSkipForNow": "التخطي الآن", "@setupSkipForNow": { "description": "Skip button text" }, - "setupNext": "Next", + "setupNext": "التالي", "@setupNext": { "description": "Next button text" }, - "setupGetStarted": "Get Started", + "setupGetStarted": "إبدأ الآن", "@setupGetStarted": { "description": "Final setup button" }, - "setupAllowAccessToManageFiles": "Please enable \"Allow access to manage all files\" in the next screen.", + "setupAllowAccessToManageFiles": "الرجاء تمكين \"السماح بالوصول لإدارة جميع الملفات\" في الشاشة التالية.", "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, - "setupLanguageTitle": "Choose Language", + "setupLanguageTitle": "اِختر اللغة", "@setupLanguageTitle": { "description": "Title for the language selection step in setup" }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "setupLanguageDescription": "حدد لغتك المفضلة للتطبيق. يمكنك تغيير هذا لاحقًا من الإعدادات.", "@setupLanguageDescription": { "description": "Description for the language selection step in setup" }, - "setupLanguageSystemDefault": "System Default", + "setupLanguageSystemDefault": "الوضع الافتراضي للنظام", "@setupLanguageSystemDefault": { "description": "Option to use the system language" }, - "dialogCancel": "Cancel", + "dialogCancel": "إلغاء", "@dialogCancel": { "description": "Dialog button - cancel action" }, - "dialogSave": "Save", + "dialogSave": "حفظ", "@dialogSave": { "description": "Dialog button - save changes" }, - "dialogDelete": "Delete", + "dialogDelete": "حذف", "@dialogDelete": { "description": "Dialog button - delete item" }, - "dialogRetry": "Retry", + "dialogRetry": "إعادة المحاولة", "@dialogRetry": { "description": "Dialog button - retry action" }, - "dialogClear": "Clear", + "dialogClear": "محو", "@dialogClear": { "description": "Dialog button - clear items" }, - "dialogDone": "Done", + "dialogDone": "تم", "@dialogDone": { "description": "Dialog button - action completed" }, - "dialogImport": "Import", + "dialogImport": "استيراد", "@dialogImport": { "description": "Dialog button - import data" }, - "dialogDownload": "Download", + "dialogDownload": "تنزيل", "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "dialogDiscard": "Discard", + "dialogDiscard": "تجاهل", "@dialogDiscard": { "description": "Dialog button - discard changes" }, - "dialogRemove": "Remove", + "dialogRemove": "إزالة", "@dialogRemove": { "description": "Dialog button - remove item" }, - "dialogUninstall": "Uninstall", + "dialogUninstall": "إلغاء التثبيت", "@dialogUninstall": { "description": "Dialog button - uninstall extension" }, - "dialogDiscardChanges": "Discard Changes?", + "dialogDiscardChanges": "تجاهل التغييرات؟", "@dialogDiscardChanges": { "description": "Dialog title - unsaved changes warning" }, - "dialogUnsavedChanges": "You have unsaved changes. Do you want to discard them?", + "dialogUnsavedChanges": "لديك تغييرات غير محفوظة. هل تريد المتابعة دون حفظها؟", "@dialogUnsavedChanges": { "description": "Dialog message - unsaved changes" }, - "dialogClearAll": "Clear All", + "dialogClearAll": "مسح الكل", "@dialogClearAll": { "description": "Dialog title - clear all items" }, - "dialogRemoveExtension": "Remove Extension", + "dialogRemoveExtension": "إزالة إضافة", "@dialogRemoveExtension": { "description": "Dialog title - uninstall extension" }, - "dialogRemoveExtensionMessage": "Are you sure you want to remove this extension? This cannot be undone.", + "dialogRemoveExtensionMessage": "هل أنت متأكد من أنك تريد إزالة هذه الإضافة؟ لا يمكن التراجع عن ذلك.", "@dialogRemoveExtensionMessage": { "description": "Dialog message - uninstall confirmation" }, - "dialogUninstallExtension": "Uninstall Extension?", + "dialogUninstallExtension": "إلغاء تثبيت الإضافة؟", "@dialogUninstallExtension": { "description": "Dialog title - uninstall extension" }, - "dialogUninstallExtensionMessage": "Are you sure you want to remove {extensionName}?", + "dialogUninstallExtensionMessage": "هل أنت متأكد من أنك تريد إزالة {extensionName}؟", "@dialogUninstallExtensionMessage": { "description": "Dialog message - uninstall specific extension", "placeholders": { @@ -817,19 +817,19 @@ } } }, - "dialogClearHistoryTitle": "Clear History", + "dialogClearHistoryTitle": "مسح السجل", "@dialogClearHistoryTitle": { "description": "Dialog title - clear download history" }, - "dialogClearHistoryMessage": "Are you sure you want to clear all download history? This cannot be undone.", + "dialogClearHistoryMessage": "هل أنت متأكد من أنك تريد مسح كل سجل التنزيلات؟ لا يمكن التراجع عن هذا!", "@dialogClearHistoryMessage": { "description": "Dialog message - clear history confirmation" }, - "dialogDeleteSelectedTitle": "Delete Selected", + "dialogDeleteSelectedTitle": "حذف المحدد", "@dialogDeleteSelectedTitle": { "description": "Dialog title - delete selected items" }, - "dialogDeleteSelectedMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from history?\n\nThis will also delete the files from storage.", + "dialogDeleteSelectedMessage": "حذف {count} {count, plural, zero {} one {الأغاني} two {أغنيتان} few {أغانٍ} many {أغانٍ}=1{أغنية} other{أغانٍ}} من التاريخ؟\n\nسيؤدي هذا أيضا إلى حذف الملفات من وحدة التخزين.", "@dialogDeleteSelectedMessage": { "description": "Dialog message - delete selected tracks", "placeholders": { @@ -838,12 +838,12 @@ } } }, - "dialogImportPlaylistTitle": "Import Playlist", + "dialogImportPlaylistTitle": "استيراد قائمة تشغيل", "@dialogImportPlaylistTitle": { "description": "Dialog title - import CSV playlist" }, - "dialogImportPlaylistMessage": "Found {count} tracks in CSV. Add them to download queue?", - "csvImportTracks": "{count} tracks from CSV", + "dialogImportPlaylistMessage": "تم العثور على {count} مسارات في CSV. إضافتها إلى قائمة انتظار التنزيل؟", + "csvImportTracks": "{count} مسارات من CSV", "@csvImportTracks": { "description": "Label shown in quality picker for CSV import", "placeholders": { @@ -860,7 +860,7 @@ } } }, - "snackbarAddedToQueue": "Added \"{trackName}\" to queue", + "snackbarAddedToQueue": "تمت إضافة \"{trackName}إلى قائمة الانتظار", "@snackbarAddedToQueue": { "description": "Snackbar - track added to download queue", "placeholders": { @@ -869,7 +869,7 @@ } } }, - "snackbarAddedTracksToQueue": "Added {count} tracks to queue", + "snackbarAddedTracksToQueue": "تم إضافة {count} أغاني إلى قائمة الانتظار", "@snackbarAddedTracksToQueue": { "description": "Snackbar - multiple tracks added to queue", "placeholders": { @@ -878,7 +878,7 @@ } } }, - "snackbarAlreadyDownloaded": "\"{trackName}\" already downloaded", + "snackbarAlreadyDownloaded": "تم تنزيل \"{trackName}بالفعل", "@snackbarAlreadyDownloaded": { "description": "Snackbar - track already exists", "placeholders": { @@ -887,7 +887,7 @@ } } }, - "snackbarAlreadyInLibrary": "\"{trackName}\" already exists in your library", + "snackbarAlreadyInLibrary": "\"{trackName}\" موجود بالفعل في مكتبتك", "@snackbarAlreadyInLibrary": { "description": "Snackbar - track already exists in local library", "placeholders": { @@ -896,19 +896,19 @@ } } }, - "snackbarHistoryCleared": "History cleared", + "snackbarHistoryCleared": "تم مسح السجل.", "@snackbarHistoryCleared": { "description": "Snackbar - history deleted" }, - "snackbarCredentialsSaved": "Credentials saved", + "snackbarCredentialsSaved": "تم حفظ بيانات الاعتماد", "@snackbarCredentialsSaved": { "description": "Snackbar - Spotify credentials saved" }, - "snackbarCredentialsCleared": "Credentials cleared", + "snackbarCredentialsCleared": "تم مسح بيانات الاعتماد", "@snackbarCredentialsCleared": { "description": "Snackbar - Spotify credentials removed" }, - "snackbarDeletedTracks": "Deleted {count} {count, plural, =1{track} other{tracks}}", + "snackbarDeletedTracks": "تم حذف {count} {count, plural, zero {} one {أغنيتين} two {أغنيتين} few {أغانٍ} many {أغانٍ}=1{أغنية} other{أغانٍ}}", "@snackbarDeletedTracks": { "description": "Snackbar - tracks deleted", "placeholders": { @@ -917,7 +917,7 @@ } } }, - "snackbarCannotOpenFile": "Cannot open file: {error}", + "snackbarCannotOpenFile": "تعذر فتح الملف: {error}", "@snackbarCannotOpenFile": { "description": "Snackbar - file open error", "placeholders": { @@ -926,15 +926,15 @@ } } }, - "snackbarFillAllFields": "Please fill all fields", + "snackbarFillAllFields": "من فضلك قم بإدخال جميع البيانات", "@snackbarFillAllFields": { "description": "Snackbar - validation error" }, - "snackbarViewQueue": "View Queue", + "snackbarViewQueue": "عرض قائمة الانتظار", "@snackbarViewQueue": { "description": "Snackbar action - view download queue" }, - "snackbarUrlCopied": "{platform} URL copied to clipboard", + "snackbarUrlCopied": "رابط {platform} تم نسخه إلى الحافظة", "@snackbarUrlCopied": { "description": "Snackbar - URL copied", "placeholders": { @@ -944,23 +944,23 @@ } } }, - "snackbarFileNotFound": "File not found", + "snackbarFileNotFound": "لم يتم العثور على الملف", "@snackbarFileNotFound": { "description": "Snackbar - file doesn't exist" }, - "snackbarSelectExtFile": "Please select a .spotiflac-ext file", + "snackbarSelectExtFile": "الرجاء تحديد ملف .spotiflac-ext", "@snackbarSelectExtFile": { "description": "Snackbar - wrong file type selected" }, - "snackbarProviderPrioritySaved": "Provider priority saved", + "snackbarProviderPrioritySaved": "تم حفظ أولوية المزود", "@snackbarProviderPrioritySaved": { "description": "Snackbar - provider order saved" }, - "snackbarMetadataProviderSaved": "Metadata provider priority saved", + "snackbarMetadataProviderSaved": "تم حفظ أولوية مزود البيانات الوصفية", "@snackbarMetadataProviderSaved": { "description": "Snackbar - metadata provider order saved" }, - "snackbarExtensionInstalled": "{extensionName} installed.", + "snackbarExtensionInstalled": "تم تثبيت {extensionName}.", "@snackbarExtensionInstalled": { "description": "Snackbar - extension installed successfully", "placeholders": { @@ -969,7 +969,7 @@ } } }, - "snackbarExtensionUpdated": "{extensionName} updated.", + "snackbarExtensionUpdated": "تم تحديث {extensionName}.", "@snackbarExtensionUpdated": { "description": "Snackbar - extension updated successfully", "placeholders": { @@ -978,43 +978,43 @@ } } }, - "snackbarFailedToInstall": "Failed to install extension", + "snackbarFailedToInstall": "فشل تثبيت الإضافة", "@snackbarFailedToInstall": { "description": "Snackbar - extension install error" }, - "snackbarFailedToUpdate": "Failed to update extension", + "snackbarFailedToUpdate": "فشل تحديث الإضافة", "@snackbarFailedToUpdate": { "description": "Snackbar - extension update error" }, - "errorRateLimited": "Rate Limited", + "errorRateLimited": "تم الوصول للحد الأقصى", "@errorRateLimited": { "description": "Error title - too many requests" }, - "errorRateLimitedMessage": "Too many requests. Please wait a moment before searching again.", + "errorRateLimitedMessage": "طلبات كثيرة جداً. الرجاء الانتظار قليلاً قبل البحث مرة أخرى.", "@errorRateLimitedMessage": { "description": "Error message - rate limit explanation" }, - "errorNoTracksFound": "No tracks found", + "errorNoTracksFound": "لم يتم العثور على الأغنية", "@errorNoTracksFound": { "description": "Error - search returned no results" }, - "searchEmptyResultSubtitle": "Try another keyword", + "searchEmptyResultSubtitle": "جرّب كلمة مفتاحية أخرى", "@searchEmptyResultSubtitle": { "description": "Subtitle shown under the empty search result state on the home screen" }, - "errorUrlNotRecognized": "Link not recognized", + "errorUrlNotRecognized": "رابط غير معروف", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "errorUrlNotRecognizedMessage": "This link is not supported. Make sure the URL is correct and a compatible extension is installed.", + "errorUrlNotRecognizedMessage": "هذا الرابط غير مدعوم. تأكد من أن الرابط صحيح وتثبيت إضافة متوافق.", "@errorUrlNotRecognizedMessage": { "description": "Error message - URL not recognized explanation" }, - "errorUrlFetchFailed": "Failed to load content from this link. Please try again.", + "errorUrlFetchFailed": "فشل تحميل المحتوى من هذا الرابط. الرجاء المحاولة مرة أخرى.", "@errorUrlFetchFailed": { "description": "Error message - generic URL fetch failure" }, - "errorMissingExtensionSource": "Cannot load {item}: missing extension source", + "errorMissingExtensionSource": "لا يمكن تحميل {item}: مصدر الإضافة مفقود", "@errorMissingExtensionSource": { "description": "Error - extension source not available", "placeholders": { @@ -1023,31 +1023,31 @@ } } }, - "actionPause": "Pause", + "actionPause": "إيقاف مؤقت", "@actionPause": { "description": "Action button - pause download" }, - "actionResume": "Resume", + "actionResume": "استئناف", "@actionResume": { "description": "Action button - resume download" }, - "actionCancel": "Cancel", + "actionCancel": "إلغاء", "@actionCancel": { "description": "Action button - cancel operation" }, - "actionSelectAll": "Select All", + "actionSelectAll": "تحديد الكل", "@actionSelectAll": { "description": "Action button - select all items" }, - "actionDeselect": "Deselect", + "actionDeselect": "إلغاء التحديد", "@actionDeselect": { "description": "Action button - deselect all" }, - "actionRemoveCredentials": "Remove Credentials", + "actionRemoveCredentials": "إزالة بيانات الاعتماد", "@actionRemoveCredentials": { "description": "Action button - delete Spotify credentials" }, - "actionSaveCredentials": "Save Credentials", + "actionSaveCredentials": "حفظ بيانات الاعتماد", "@actionSaveCredentials": { "description": "Action button - save Spotify credentials" }, From a35f6ad939f536dafcf8673b7da9d9fb2c50c229 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 28 Jun 2026 18:37:44 +0700 Subject: [PATCH 043/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index a38d4615..3397d246 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1051,7 +1051,7 @@ "@actionSaveCredentials": { "description": "Action button - save Spotify credentials" }, - "selectionSelected": "{count} selected", + "selectionSelected": "تم تحديد {count}", "@selectionSelected": { "description": "Selection count indicator", "placeholders": { @@ -1060,15 +1060,15 @@ } } }, - "selectionAllSelected": "All tracks selected", + "selectionAllSelected": "تم اختيار جميع الأغاني", "@selectionAllSelected": { "description": "Status - all items selected" }, - "selectionSelectToDelete": "Select tracks to delete", + "selectionSelectToDelete": "حدد الأغاني المراد حذفها", "@selectionSelectToDelete": { "description": "Placeholder when nothing selected" }, - "progressFetchingMetadata": "Fetching metadata... {current}/{total}", + "progressFetchingMetadata": "جلب البيانات الوصفية... {current}/{total}", "@progressFetchingMetadata": { "description": "Progress indicator - loading track info", "placeholders": { @@ -1080,63 +1080,63 @@ } } }, - "progressReadingCsv": "Reading CSV...", + "progressReadingCsv": "جاري قراءة CSV...", "@progressReadingCsv": { "description": "Progress indicator - parsing CSV file" }, - "searchSongs": "Songs", + "searchSongs": "أغاني", "@searchSongs": { "description": "Search result category - songs" }, - "searchArtists": "Artists", + "searchArtists": "فنانون", "@searchArtists": { "description": "Search result category - artists" }, - "searchAlbums": "Albums", + "searchAlbums": "ألبومات", "@searchAlbums": { "description": "Search result category - albums" }, - "searchPlaylists": "Playlists", + "searchPlaylists": "قوائم التشغيل", "@searchPlaylists": { "description": "Search result category - playlists" }, - "searchSortTitle": "Sort Results", + "searchSortTitle": "فرز النتائج", "@searchSortTitle": { "description": "Bottom sheet title for search sort options" }, - "searchSortDefault": "Default", + "searchSortDefault": "افتراضي", "@searchSortDefault": { "description": "Sort option - default API order" }, - "searchSortTitleAZ": "Title (A-Z)", + "searchSortTitleAZ": "العنوان (أ-ي)", "@searchSortTitleAZ": { "description": "Sort option - title ascending" }, - "searchSortTitleZA": "Title (Z-A)", + "searchSortTitleZA": "العنوان (ي-أ)", "@searchSortTitleZA": { "description": "Sort option - title descending" }, - "searchSortArtistAZ": "Artist (A-Z)", + "searchSortArtistAZ": "الفنان (أ-ي)", "@searchSortArtistAZ": { "description": "Sort option - artist ascending" }, - "searchSortArtistZA": "Artist (Z-A)", + "searchSortArtistZA": "الفنان (ي-أ)", "@searchSortArtistZA": { "description": "Sort option - artist descending" }, - "searchSortDurationShort": "Duration (Shortest)", + "searchSortDurationShort": "المدة (الأقصر)", "@searchSortDurationShort": { "description": "Sort option - shortest duration first" }, - "searchSortDurationLong": "Duration (Longest)", + "searchSortDurationLong": "المدة (الأطول)", "@searchSortDurationLong": { "description": "Sort option - longest duration first" }, - "searchSortDateOldest": "Release Date (Oldest)", + "searchSortDateOldest": "تاريخ الإصدار (الأقدم)", "@searchSortDateOldest": { "description": "Sort option - oldest release first" }, - "searchSortDateNewest": "Release Date (Newest)", + "searchSortDateNewest": "تاريخ الإصدار (الأحدث)", "@searchSortDateNewest": { "description": "Sort option - newest release first" }, From a90dce95a37e05715bb9f620a087e0b9136ac9e3 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 28 Jun 2026 19:35:19 +0700 Subject: [PATCH 044/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 184 ++++++++++++++++++++-------------------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 3397d246..bad9b3cb 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1140,215 +1140,215 @@ "@searchSortDateNewest": { "description": "Sort option - newest release first" }, - "tooltipPlay": "Play", + "tooltipPlay": "تشغيل", "@tooltipPlay": { "description": "Tooltip - play button" }, - "filenameFormat": "Filename Format", + "filenameFormat": "صيغة الملف", "@filenameFormat": { "description": "Setting title - filename pattern" }, - "filenameShowAdvancedTags": "Show advanced tags", + "filenameShowAdvancedTags": "إظهار العلامات المتقدمة", "@filenameShowAdvancedTags": { "description": "Toggle label for showing advanced filename tags" }, - "filenameShowAdvancedTagsDescription": "Enable formatted tags for track padding and date patterns", + "filenameShowAdvancedTagsDescription": "تمكين العلامات المنسقة لحشو المقطع الصوتي وأنماط التاريخ", "@filenameShowAdvancedTagsDescription": { "description": "Description for advanced filename tag toggle" }, - "folderOrganizationNone": "No organization", + "folderOrganizationNone": "لا توجد منظمة", "@folderOrganizationNone": { "description": "Folder option - flat structure" }, - "folderOrganizationByPlaylist": "By Playlist", + "folderOrganizationByPlaylist": "حسب قائمة التشغيل", "@folderOrganizationByPlaylist": { "description": "Folder option - playlist folders" }, - "folderOrganizationByPlaylistSubtitle": "Separate folder for each playlist", + "folderOrganizationByPlaylistSubtitle": "مجلد منفصل لكل قائمة تشغيل", "@folderOrganizationByPlaylistSubtitle": { "description": "Subtitle for playlist folder option" }, - "folderOrganizationByArtist": "By Artist", + "folderOrganizationByArtist": "حسب الفنان", "@folderOrganizationByArtist": { "description": "Folder option - artist folders" }, - "folderOrganizationByAlbum": "By Album", + "folderOrganizationByAlbum": "حسب الألبوم", "@folderOrganizationByAlbum": { "description": "Folder option - album folders" }, - "folderOrganizationByArtistAlbum": "Artist/Album", + "folderOrganizationByArtistAlbum": "ألبوم/الفنان", "@folderOrganizationByArtistAlbum": { "description": "Folder option - nested folders" }, - "folderOrganizationDescription": "Organize downloaded files into folders", + "folderOrganizationDescription": "تنظيم الملفات التي تم تنزيلها في المجلدات", "@folderOrganizationDescription": { "description": "Folder organization sheet description" }, - "folderOrganizationNoneSubtitle": "All files in download folder", + "folderOrganizationNoneSubtitle": "جميع الملفات في مجلد التحميل", "@folderOrganizationNoneSubtitle": { "description": "Subtitle for no organization option" }, - "folderOrganizationByArtistSubtitle": "Separate folder for each artist", + "folderOrganizationByArtistSubtitle": "مجلد منفصل لكل فنان", "@folderOrganizationByArtistSubtitle": { "description": "Subtitle for artist folder option" }, - "folderOrganizationByAlbumSubtitle": "Separate folder for each album", + "folderOrganizationByAlbumSubtitle": "مجلد منفصل لكل قائمة تشغيل", "@folderOrganizationByAlbumSubtitle": { "description": "Subtitle for album folder option" }, - "folderOrganizationByArtistAlbumSubtitle": "Nested folders for artist and album", + "folderOrganizationByArtistAlbumSubtitle": "مجلدات متداخلة للفنان و الألبوم", "@folderOrganizationByArtistAlbumSubtitle": { "description": "Subtitle for nested folder option" }, - "updateAvailable": "Update Available", + "updateAvailable": "هناك تحديث متاح", "@updateAvailable": { "description": "Update dialog title" }, - "updateLater": "Later", + "updateLater": "ذكرني لاحقا", "@updateLater": { "description": "Update button - dismiss" }, - "updateStartingDownload": "Starting download...", + "updateStartingDownload": "جاري بدء التنزيل...", "@updateStartingDownload": { "description": "Update status - initializing" }, - "updateDownloadFailed": "Download failed", + "updateDownloadFailed": "فشل التنزيل", "@updateDownloadFailed": { "description": "Update error title" }, - "updateFailedMessage": "Failed to download update", + "updateFailedMessage": "فشل تنزيل التحديث", "@updateFailedMessage": { "description": "Update error message" }, - "updateNewVersionReady": "A new version is ready", + "updateNewVersionReady": "إصدار جديد جاهز", "@updateNewVersionReady": { "description": "Update subtitle" }, - "updateCurrent": "Current", + "updateCurrent": "الحالي", "@updateCurrent": { "description": "Label for current version" }, - "updateNew": "New", + "updateNew": "جديد", "@updateNew": { "description": "Label for new version" }, - "updateDownloading": "Downloading...", + "updateDownloading": "جاري التنزيل...", "@updateDownloading": { "description": "Update status - downloading" }, - "updateWhatsNew": "What's New", + "updateWhatsNew": "ما الجديد", "@updateWhatsNew": { "description": "Changelog section title" }, - "updateDownloadInstall": "Download & Install", + "updateDownloadInstall": "تحميل وتثبيت", "@updateDownloadInstall": { "description": "Update button - download and install" }, - "updateDontRemind": "Don't remind", + "updateDontRemind": "لا تذكّرني", "@updateDontRemind": { "description": "Update button - skip this version" }, - "providerPriorityTitle": "Provider Priority", + "providerPriorityTitle": "أولوية مقدم الخدمة", "@providerPriorityTitle": { "description": "Provider priority page title" }, - "providerPriorityDescription": "Drag to reorder download providers. The app will try providers from top to bottom when downloading tracks.", + "providerPriorityDescription": "اسحب لإعادة ترتيب مزودي التحميل. سيجرب التطبيق مزودي الخدمات من الأعلى إلى الأسفل عند تحميل المسار.", "@providerPriorityDescription": { "description": "Provider priority page description" }, - "providerPriorityInfo": "If a track is not available on the first provider, the app will automatically try the next one.", + "providerPriorityInfo": "إذا كانت الأغنية غير متوفرة عند أول مزود، فإن التطبيق سيجرب تلقائياً المزود التالي.", "@providerPriorityInfo": { "description": "Info tip about fallback behavior" }, - "providerPriorityFallbackExtensionsTitle": "Extension Fallback", + "providerPriorityFallbackExtensionsTitle": "المكون الإضافي الاحتياطي", "@providerPriorityFallbackExtensionsTitle": { "description": "Section title for choosing which download extensions can be used as fallback providers" }, - "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", + "providerPriorityFallbackExtensionsDescription": "اختر إضافات التحميل المثبتة التي يمكن استخدامها أثناء الرجوع التلقائي للمزود الاحتياطي.", "@providerPriorityFallbackExtensionsDescription": { "description": "Section description for extension fallback selection" }, - "providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.", + "providerPriorityFallbackExtensionsHint": "الإضافات المفعلة فقط مع قدرة توفير التنزيل مدرجة هنا.", "@providerPriorityFallbackExtensionsHint": { "description": "Hint below the extension fallback selection list" }, - "providerBuiltIn": "Legacy", + "providerBuiltIn": "قديم", "@providerBuiltIn": { "description": "Legacy label retained for old generated localization compatibility" }, - "providerExtension": "Extension", + "providerExtension": "الإضافة", "@providerExtension": { "description": "Label for extension-provided providers" }, - "metadataProviderPriorityTitle": "Metadata Priority", + "metadataProviderPriorityTitle": "أولوية البيانات الوصفية", "@metadataProviderPriorityTitle": { "description": "Metadata priority page title" }, - "metadataProviderPriorityDescription": "Drag to reorder metadata providers. The app will try providers from top to bottom when searching for tracks and fetching metadata.", + "metadataProviderPriorityDescription": "اسحب لإعادة ترتيب موفري البيانات الوصفية. سيحاول التطبيق موفري البيانات الوصفية من الأعلى إلى الأسفل عند البحث عن المسارات وجلب البيانات الوصفية.", "@metadataProviderPriorityDescription": { "description": "Metadata priority page description" }, - "metadataProviderPriorityInfo": "Deezer has no rate limits and is recommended as primary. Spotify may rate limit after many requests.", + "metadataProviderPriorityInfo": "Deezer ليس لديه حدود للطلبات ومُوصى به كأساسي. Spotify لديه حد للطلبات وقد لا يعمل بعد عدة عمليات.", "@metadataProviderPriorityInfo": { "description": "Info tip about rate limits" }, - "metadataNoRateLimits": "No rate limits", + "metadataNoRateLimits": "لا حدود للطلبات", "@metadataNoRateLimits": { "description": "Deezer provider description" }, - "metadataMayRateLimit": "May rate limit", + "metadataMayRateLimit": "قد يفرض حدودا للطلب", "@metadataMayRateLimit": { "description": "Spotify provider description" }, - "logTitle": "Logs", + "logTitle": "السجلات", "@logTitle": { "description": "Logs screen title" }, - "logCopied": "Logs copied to clipboard", + "logCopied": "تم نسخ السجلات إلى الحافظة", "@logCopied": { "description": "Snackbar - logs copied" }, - "logSearchHint": "Search logs...", + "logSearchHint": "البحث في السجلات...", "@logSearchHint": { "description": "Log search placeholder" }, - "logFilterLevel": "Level", + "logFilterLevel": "المستوى", "@logFilterLevel": { "description": "Filter by log level" }, - "logFilterSection": "Filter", + "logFilterSection": "فرز", "@logFilterSection": { "description": "Filter section title" }, - "logShareLogs": "Share logs", + "logShareLogs": "مشاركة السجلات", "@logShareLogs": { "description": "Share button tooltip" }, - "logClearLogs": "Clear logs", + "logClearLogs": "حذف السجل", "@logClearLogs": { "description": "Clear button tooltip" }, - "logClearLogsTitle": "Clear Logs", + "logClearLogsTitle": "حذف السجل", "@logClearLogsTitle": { "description": "Clear logs dialog title" }, - "logClearLogsMessage": "Are you sure you want to clear all logs?", + "logClearLogsMessage": "هل أنت متأكد من رغبتك في مسح جميع السجلات؟", "@logClearLogsMessage": { "description": "Clear logs confirmation message" }, - "logFilterBySeverity": "Filter logs by severity", + "logFilterBySeverity": "تصفية السجلات حسب الخطورة", "@logFilterBySeverity": { "description": "Filter dialog title" }, - "logNoLogsYet": "No logs yet", + "logNoLogsYet": "لا توجد سجلات بعد", "@logNoLogsYet": { "description": "Empty state title" }, - "logNoLogsYetSubtitle": "Logs will appear here as you use the app", + "logNoLogsYetSubtitle": "ستظهر السجلات هنا عند استخدام التطبيق", "@logNoLogsYetSubtitle": { "description": "Empty state subtitle" }, - "logEntriesFiltered": "Entries ({count} filtered)", + "logEntriesFiltered": "الإدخالات ({count} تم تصفيتها)", "@logEntriesFiltered": { "description": "Log count with filter active", "placeholders": { @@ -1357,7 +1357,7 @@ } } }, - "logEntries": "Entries ({count})", + "logEntries": "الإدخالات ({count})", "@logEntries": { "description": "Total log count", "placeholders": { @@ -1366,11 +1366,11 @@ } } }, - "credentialsTitle": "Spotify Credentials", + "credentialsTitle": "بيانات اعتماد Spotify", "@credentialsTitle": { "description": "Credentials dialog title" }, - "credentialsDescription": "Enter your Client ID and Secret to use your own Spotify application quota.", + "credentialsDescription": "أدخل معرف العميل الخاص بك و الكود السري لاستخدام حصة تطبيق Spotify الخاصة بك.", "@credentialsDescription": { "description": "Credentials dialog explanation" }, @@ -1378,7 +1378,7 @@ "@credentialsClientId": { "description": "Client ID field label - DO NOT TRANSLATE" }, - "credentialsClientIdHint": "Paste Client ID", + "credentialsClientIdHint": "لصق Client ID", "@credentialsClientIdHint": { "description": "Client ID placeholder" }, @@ -1386,139 +1386,139 @@ "@credentialsClientSecret": { "description": "Client Secret field label - DO NOT TRANSLATE" }, - "credentialsClientSecretHint": "Paste Client Secret", + "credentialsClientSecretHint": "لصق Client Secret", "@credentialsClientSecretHint": { "description": "Client Secret placeholder" }, - "channelStable": "Stable", + "channelStable": "مستقر", "@channelStable": { "description": "Update channel - stable releases" }, - "channelPreview": "Preview", + "channelPreview": "تجريبي", "@channelPreview": { "description": "Update channel - beta/preview releases" }, - "sectionSearchSource": "Search Source", + "sectionSearchSource": "مصدر البحث", "@sectionSearchSource": { "description": "Settings section header" }, - "sectionDownload": "Download", + "sectionDownload": "التحميل", "@sectionDownload": { "description": "Settings section header" }, - "sectionPerformance": "Performance", + "sectionPerformance": "الأداء", "@sectionPerformance": { "description": "Settings section header" }, - "sectionApp": "App", + "sectionApp": "التطبيق", "@sectionApp": { "description": "Settings section header" }, - "sectionData": "Data", + "sectionData": "البيانات", "@sectionData": { "description": "Settings section header" }, - "sectionDebug": "Debug", + "sectionDebug": "تصحيح الأخطاء", "@sectionDebug": { "description": "Settings section header" }, - "sectionService": "Service", + "sectionService": "الخدمة", "@sectionService": { "description": "Settings section header" }, - "sectionAudioQuality": "Audio Quality", + "sectionAudioQuality": "جودة الصوت", "@sectionAudioQuality": { "description": "Settings section header" }, - "sectionFileSettings": "File Settings", + "sectionFileSettings": "إعدادات الملف", "@sectionFileSettings": { "description": "Settings section header" }, - "sectionLyrics": "Lyrics", + "sectionLyrics": "كلمات الاغنية", "@sectionLyrics": { "description": "Settings section header" }, - "lyricsMode": "Lyrics Mode", + "lyricsMode": "وضع كلمات الأغنية", "@lyricsMode": { "description": "Setting - how to save lyrics" }, - "lyricsModeDescription": "Choose how lyrics are saved with your downloads", + "lyricsModeDescription": "اختر كيفية حفظ كلمات الأغاني مع التنزيلات الخاصة بك", "@lyricsModeDescription": { "description": "Lyrics mode picker description" }, - "lyricsModeEmbed": "Embed in file", + "lyricsModeEmbed": "تضمين في الملف", "@lyricsModeEmbed": { "description": "Lyrics mode option - embed in audio file" }, - "lyricsModeEmbedSubtitle": "Lyrics stored inside FLAC metadata", + "lyricsModeEmbedSubtitle": "كلمات الأغاني مخزنة داخل بيانات تعريف FLAC", "@lyricsModeEmbedSubtitle": { "description": "Subtitle for embed option" }, - "lyricsModeExternal": "External .lrc file", + "lyricsModeExternal": "ملف .lrc منفصل", "@lyricsModeExternal": { "description": "Lyrics mode option - separate LRC file" }, - "lyricsModeExternalSubtitle": "Separate .lrc file for players like Samsung Music", + "lyricsModeExternalSubtitle": "فصل ملف .lrc لمشغلي الأغاني مثل Samsung Music", "@lyricsModeExternalSubtitle": { "description": "Subtitle for external option" }, - "lyricsModeBoth": "Both", + "lyricsModeBoth": "كلاهما", "@lyricsModeBoth": { "description": "Lyrics mode option - embed and external" }, - "lyricsModeBothSubtitle": "Embed and save .lrc file", + "lyricsModeBothSubtitle": "تضمين وحفظ ملف .lrc", "@lyricsModeBothSubtitle": { "description": "Subtitle for both option" }, - "sectionColor": "Color", + "sectionColor": "اللون", "@sectionColor": { "description": "Settings section header" }, - "sectionTheme": "Theme", + "sectionTheme": "الثيم", "@sectionTheme": { "description": "Settings section header" }, - "sectionLayout": "Layout", + "sectionLayout": "التخطيط", "@sectionLayout": { "description": "Settings section header" }, - "sectionLanguage": "Language", + "sectionLanguage": "اللّغة", "@sectionLanguage": { "description": "Settings section header for language" }, - "appearanceLanguage": "App Language", + "appearanceLanguage": "لغة التطبيق", "@appearanceLanguage": { "description": "Language setting title" }, - "settingsAppearanceSubtitle": "Theme, colors, display", + "settingsAppearanceSubtitle": "السمة والألوان والعرض", "@settingsAppearanceSubtitle": { "description": "Appearance settings description" }, - "settingsDownloadSubtitle": "Service, quality, fallback", + "settingsDownloadSubtitle": "الخدمة والجودة الأحتياطات", "@settingsDownloadSubtitle": { "description": "Download settings description" }, - "settingsOptionsSubtitle": "Fallback, metadata, lyrics, cover art", + "settingsOptionsSubtitle": "الإحتياطات، البيانات الوصفية، كلمات الأغاني، غلاف الأغنية", "@settingsOptionsSubtitle": { "description": "Options settings description" }, - "settingsExtensionsSubtitle": "Manage download providers", + "settingsExtensionsSubtitle": "إدارة موفري التحميل", "@settingsExtensionsSubtitle": { "description": "Extensions settings description" }, - "settingsLogsSubtitle": "View app logs for debugging", + "settingsLogsSubtitle": "عرض سجلات التطبيقات لتصحيح الأخطاء", "@settingsLogsSubtitle": { "description": "Logs settings description" }, - "loadingSharedLink": "Loading shared link...", + "loadingSharedLink": "تحميل الرابط المشترك...", "@loadingSharedLink": { "description": "Status when opening shared URL" }, - "pressBackAgainToExit": "Press back again to exit", + "pressBackAgainToExit": "اضغط رجوع مجددًا للخروج", "@pressBackAgainToExit": { "description": "Exit confirmation message" }, - "downloadAllCount": "Download All ({count})", + "downloadAllCount": "تنزيل الكل ({count})", "@downloadAllCount": { "description": "Download all button with count", "placeholders": { @@ -1527,7 +1527,7 @@ } } }, - "tracksCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "tracksCount": "{count, plural, zero {لا توجد أغاني محددة} one {{count} مسارات} two {أغنيتين} few {{count} أغانٍ} many {{count} أغانٍ}=1{أغنية واحدة} other{{count} أغانٍ}}", "@tracksCount": { "description": "Track count display", "placeholders": { From f494e03a6ea08800d24be1c90f2251330f212f65 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 28 Jun 2026 20:57:58 +0700 Subject: [PATCH 045/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index bad9b3cb..6c60c79e 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -447,7 +447,7 @@ "@aboutMobileDeveloper": { "description": "Role description for mobile dev" }, - "aboutOriginalCreator": "مطور SpotiFLAC الأصلي", + "aboutOriginalCreator": "منشئ SpotiFLAC", "@aboutOriginalCreator": { "description": "Role description for original creator" }, @@ -821,7 +821,7 @@ "@dialogClearHistoryTitle": { "description": "Dialog title - clear download history" }, - "dialogClearHistoryMessage": "هل أنت متأكد من أنك تريد مسح كل سجل التنزيلات؟ لا يمكن التراجع عن هذا!", + "dialogClearHistoryMessage": "هل أنت متأكد من أنك تريد مسح كل سجل التنزيلات؟ لا يمكن التراجع عن هذا.", "@dialogClearHistoryMessage": { "description": "Dialog message - clear history confirmation" }, @@ -829,7 +829,7 @@ "@dialogDeleteSelectedTitle": { "description": "Dialog title - delete selected items" }, - "dialogDeleteSelectedMessage": "حذف {count} {count, plural, zero {} one {الأغاني} two {أغنيتان} few {أغانٍ} many {أغانٍ}=1{أغنية} other{أغانٍ}} من التاريخ؟\n\nسيؤدي هذا أيضا إلى حذف الملفات من وحدة التخزين.", + "dialogDeleteSelectedMessage": "حذف {count} {count, plural, zero {} one {المسارات} two {أغنيتين} few {أغانٍ} many {أغنية}=1{أغنية} other{الأغاني}} من التاريخ؟\n\nسيؤدي هذا أيضا إلى حذف الملفات من وحدة التخزين.", "@dialogDeleteSelectedMessage": { "description": "Dialog message - delete selected tracks", "placeholders": { @@ -860,7 +860,7 @@ } } }, - "snackbarAddedToQueue": "تمت إضافة \"{trackName}إلى قائمة الانتظار", + "snackbarAddedToQueue": "تمت إضافة {trackName} إلى قائمة الانتظار", "@snackbarAddedToQueue": { "description": "Snackbar - track added to download queue", "placeholders": { @@ -869,7 +869,7 @@ } } }, - "snackbarAddedTracksToQueue": "تم إضافة {count} أغاني إلى قائمة الانتظار", + "snackbarAddedTracksToQueue": "تم إضافة {count} أغانٍ إلى قائمة الانتظار", "@snackbarAddedTracksToQueue": { "description": "Snackbar - multiple tracks added to queue", "placeholders": { @@ -878,7 +878,7 @@ } } }, - "snackbarAlreadyDownloaded": "تم تنزيل \"{trackName}بالفعل", + "snackbarAlreadyDownloaded": "تم تنزيل {trackName} بالفعل", "@snackbarAlreadyDownloaded": { "description": "Snackbar - track already exists", "placeholders": { @@ -887,7 +887,7 @@ } } }, - "snackbarAlreadyInLibrary": "\"{trackName}\" موجود بالفعل في مكتبتك", + "snackbarAlreadyInLibrary": "{trackName} موجود بالفعل في مكتبتك", "@snackbarAlreadyInLibrary": { "description": "Snackbar - track already exists in local library", "placeholders": { @@ -908,7 +908,7 @@ "@snackbarCredentialsCleared": { "description": "Snackbar - Spotify credentials removed" }, - "snackbarDeletedTracks": "تم حذف {count} {count, plural, zero {} one {أغنيتين} two {أغنيتين} few {أغانٍ} many {أغانٍ}=1{أغنية} other{أغانٍ}}", + "snackbarDeletedTracks": "تم حذف {count} {count, plural, zero {} one {أغنيتين} two {أغنيتين} few {أغانٍ} many {أغنية}=1{أغنية} other{أغانٍ}}", "@snackbarDeletedTracks": { "description": "Snackbar - tracks deleted", "placeholders": { @@ -956,7 +956,7 @@ "@snackbarProviderPrioritySaved": { "description": "Snackbar - provider order saved" }, - "snackbarMetadataProviderSaved": "تم حفظ أولوية مزود البيانات الوصفية", + "snackbarMetadataProviderSaved": "تم حفظ أولوية مزود البيانات الوصفية (metadata)", "@snackbarMetadataProviderSaved": { "description": "Snackbar - metadata provider order saved" }, @@ -1068,7 +1068,7 @@ "@selectionSelectToDelete": { "description": "Placeholder when nothing selected" }, - "progressFetchingMetadata": "جلب البيانات الوصفية... {current}/{total}", + "progressFetchingMetadata": "جلب البيانات الوصفية (metadata)... {current}/{total}", "@progressFetchingMetadata": { "description": "Progress indicator - loading track info", "placeholders": { @@ -1280,11 +1280,11 @@ "@providerExtension": { "description": "Label for extension-provided providers" }, - "metadataProviderPriorityTitle": "أولوية البيانات الوصفية", + "metadataProviderPriorityTitle": "أولوية البيانات الوصفية (metadata)", "@metadataProviderPriorityTitle": { "description": "Metadata priority page title" }, - "metadataProviderPriorityDescription": "اسحب لإعادة ترتيب موفري البيانات الوصفية. سيحاول التطبيق موفري البيانات الوصفية من الأعلى إلى الأسفل عند البحث عن المسارات وجلب البيانات الوصفية.", + "metadataProviderPriorityDescription": "اسحب لإعادة ترتيب موفري البيانات الوصفية (metadata). سيحاول التطبيق موفري البيانات الوصفية (metadata) من الأعلى إلى الأسفل عند البحث عن المسارات وجلب البيانات الوصفية (metadata).", "@metadataProviderPriorityDescription": { "description": "Metadata priority page description" }, @@ -1498,7 +1498,7 @@ "@settingsDownloadSubtitle": { "description": "Download settings description" }, - "settingsOptionsSubtitle": "الإحتياطات، البيانات الوصفية، كلمات الأغاني، غلاف الأغنية", + "settingsOptionsSubtitle": "الإحتياطات، البيانات الوصفية (metadata)، كلمات الأغاني، غلاف الأغنية", "@settingsOptionsSubtitle": { "description": "Options settings description" }, @@ -1536,19 +1536,19 @@ } } }, - "trackCopyFilePath": "Copy file path", + "trackCopyFilePath": "نسخ مسار الملف", "@trackCopyFilePath": { "description": "Action - copy file path" }, - "trackRemoveFromDevice": "Remove from device", + "trackRemoveFromDevice": "حذف من الجهاز", "@trackRemoveFromDevice": { "description": "Action - delete downloaded file" }, - "trackLoadLyrics": "Load Lyrics", + "trackLoadLyrics": "تحميل كلمات الأغاني", "@trackLoadLyrics": { "description": "Action - fetch lyrics" }, - "trackMetadata": "Metadata", + "trackMetadata": "البيانات الوصفية (Metadata)", "@trackMetadata": { "description": "Tab title - track metadata" }, From 7ab9481fab3cd6d1a9939c5c5ba9f233f0554e6c Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 28 Jun 2026 22:07:34 +0700 Subject: [PATCH 046/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 6c60c79e..0adc9c99 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1552,7 +1552,7 @@ "@trackMetadata": { "description": "Tab title - track metadata" }, - "trackFileInfo": "File Info", + "trackFileInfo": "معلومات الملف", "@trackFileInfo": { "description": "Tab title - file information" }, From 72d25f576c333b46a643f89d2b86d912daa9e523 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 01:20:27 +0700 Subject: [PATCH 047/137] 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 19a2344d..2bca9386 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -5377,7 +5377,7 @@ "@extensionOauthConnectHint": { "description": "Hint for an OAuth login link field before connecting Spotify" }, - "extensionLastChecked": "Last checked {time}", + "extensionLastChecked": "마지막 확인 시간: {time}", "@extensionLastChecked": { "description": "Timestamp for the latest extension service health check", "placeholders": { From c6ccefbd72fae712da2b81051498d1db2de6291b Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 06:39:13 +0700 Subject: [PATCH 048/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 106 ++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 0adc9c99..680f3fb3 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1556,79 +1556,79 @@ "@trackFileInfo": { "description": "Tab title - file information" }, - "trackLyrics": "Lyrics", + "trackLyrics": "كلمات الاغنية", "@trackLyrics": { "description": "Tab title - lyrics" }, - "trackFileNotFound": "File not found", + "trackFileNotFound": "لم يتم العثور على الملف", "@trackFileNotFound": { "description": "Error - file doesn't exist" }, - "trackOpenInDeezer": "Open in Deezer", + "trackOpenInDeezer": "فتح في Deezer", "@trackOpenInDeezer": { "description": "Action - open track in Deezer app" }, - "trackOpenInSpotify": "Open in Spotify", + "trackOpenInSpotify": "فتح في Spotify", "@trackOpenInSpotify": { "description": "Action - open track in Spotify app" }, - "trackTrackName": "Track name", + "trackTrackName": "اسم الأغنية", "@trackTrackName": { "description": "Metadata label - track title" }, - "trackArtist": "Artist", + "trackArtist": "الفنان", "@trackArtist": { "description": "Metadata label - artist name" }, - "trackAlbumArtist": "Album artist", + "trackAlbumArtist": "فنان الألبوم", "@trackAlbumArtist": { "description": "Metadata label - album artist" }, - "trackAlbum": "Album", + "trackAlbum": "الألبوم", "@trackAlbum": { "description": "Metadata label - album name" }, - "trackTrackNumber": "Track number", + "trackTrackNumber": "رقم الأغنية", "@trackTrackNumber": { "description": "Metadata label - track number" }, - "trackDiscNumber": "Disc number", + "trackDiscNumber": "رقم القرص", "@trackDiscNumber": { "description": "Metadata label - disc number" }, - "trackDuration": "Duration", + "trackDuration": "المدة", "@trackDuration": { "description": "Metadata label - track length" }, - "trackAudioQuality": "Audio quality", + "trackAudioQuality": "جودة الصوت", "@trackAudioQuality": { "description": "Metadata label - audio quality" }, - "trackReleaseDate": "Release date", + "trackReleaseDate": "تاريخ الإصدار", "@trackReleaseDate": { "description": "Metadata label - release date" }, - "trackGenre": "Genre", + "trackGenre": "النوع", "@trackGenre": { "description": "Metadata label - music genre" }, - "trackLabel": "Label", + "trackLabel": "تصنيف", "@trackLabel": { "description": "Metadata label - record label" }, - "trackCopyright": "Copyright", + "trackCopyright": "حقوق الطبع و النشر", "@trackCopyright": { "description": "Metadata label - copyright information" }, - "trackDownloaded": "Downloaded", + "trackDownloaded": "تم التنزيل", "@trackDownloaded": { "description": "Metadata label - download date" }, - "trackCopyLyrics": "Copy lyrics", + "trackCopyLyrics": "نسخ كلمات الأغنية", "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, - "trackLyricsSource": "Source: {source}", + "trackLyricsSource": "المصدر: {source}", "@trackLyricsSource": { "description": "Label showing the lyrics source/provider", "placeholders": { @@ -1637,59 +1637,59 @@ } } }, - "trackLyricsNotAvailable": "Lyrics not available for this track", + "trackLyricsNotAvailable": "كلمات الأغنية غير متوفرة لهذه الأغنية", "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" }, - "trackLyricsNotInFile": "No lyrics found in this file", + "trackLyricsNotInFile": "لم يتم العثور على كلمات الأغاني في هذا الملف", "@trackLyricsNotInFile": { "description": "Message when no embedded lyrics in audio file" }, - "trackFetchOnlineLyrics": "Fetch from Online", + "trackFetchOnlineLyrics": "جلب من الإنترنت", "@trackFetchOnlineLyrics": { "description": "Action - fetch lyrics from online providers" }, - "trackLyricsTimeout": "Request timed out. Try again later.", + "trackLyricsTimeout": "انتهت مهلة الطلب. حاول مرة أخرى لاحقاً.", "@trackLyricsTimeout": { "description": "Message when lyrics request times out" }, - "trackLyricsLoadFailed": "Failed to load lyrics", + "trackLyricsLoadFailed": "فشل تحميل كلمات الأغاني", "@trackLyricsLoadFailed": { "description": "Message when lyrics loading fails" }, - "trackEmbedLyrics": "Embed Lyrics", + "trackEmbedLyrics": "تضمين كلمات الأغنية", "@trackEmbedLyrics": { "description": "Action - embed lyrics into audio file" }, - "trackLyricsEmbedded": "Lyrics embedded successfully", + "trackLyricsEmbedded": "تمت إضافة كلمات الأغنية بنجاح", "@trackLyricsEmbedded": { "description": "Snackbar - lyrics saved to file" }, - "trackInstrumental": "Instrumental track", + "trackInstrumental": "المسار الآلي", "@trackInstrumental": { "description": "Message when track is instrumental (no lyrics)" }, - "trackCopiedToClipboard": "Copied to clipboard", + "trackCopiedToClipboard": "تم النسخ إلى الحافظة", "@trackCopiedToClipboard": { "description": "Snackbar - content copied" }, - "trackDeleteConfirmTitle": "Remove from device?", + "trackDeleteConfirmTitle": "حذف من الجهاز؟", "@trackDeleteConfirmTitle": { "description": "Delete confirmation title" }, - "trackDeleteConfirmMessage": "This will permanently delete the downloaded file and remove it from your history.", + "trackDeleteConfirmMessage": "سيؤدي هذا إلى حذف الملف الذي تم تنزيله وإزالته من السجل الخاص بك بشكل دائم.", "@trackDeleteConfirmMessage": { "description": "Delete confirmation message" }, - "dateToday": "Today", + "dateToday": "اليوم", "@dateToday": { "description": "Relative date - today" }, - "dateYesterday": "Yesterday", + "dateYesterday": "الأمس", "@dateYesterday": { "description": "Relative date - yesterday" }, - "dateDaysAgo": "{count} days ago", + "dateDaysAgo": "قبل {count} أيام", "@dateDaysAgo": { "description": "Relative date - days ago", "placeholders": { @@ -1698,7 +1698,7 @@ } } }, - "dateWeeksAgo": "{count} weeks ago", + "dateWeeksAgo": "قبل {count} أسابيع", "@dateWeeksAgo": { "description": "Relative date - weeks ago", "placeholders": { @@ -1707,7 +1707,7 @@ } } }, - "dateMonthsAgo": "{count} months ago", + "dateMonthsAgo": "منذ {count} أشهر", "@dateMonthsAgo": { "description": "Relative date - months ago", "placeholders": { @@ -1716,43 +1716,43 @@ } } }, - "storeFilterAll": "All", + "storeFilterAll": "الكل", "@storeFilterAll": { "description": "Store filter - all extensions" }, - "storeFilterMetadata": "Metadata", + "storeFilterMetadata": "البيانات الوصفية (Metadata)", "@storeFilterMetadata": { "description": "Store filter - metadata providers" }, - "storeFilterDownload": "Download", + "storeFilterDownload": "التحميل", "@storeFilterDownload": { "description": "Store filter - download providers" }, - "storeFilterUtility": "Utility", + "storeFilterUtility": "الأدوات", "@storeFilterUtility": { "description": "Store filter - utility extensions" }, - "storeFilterLyrics": "Lyrics", + "storeFilterLyrics": "كلمات الأغنية", "@storeFilterLyrics": { "description": "Store filter - lyrics providers" }, - "storeFilterIntegration": "Integration", + "storeFilterIntegration": "التكامل", "@storeFilterIntegration": { "description": "Store filter - integrations" }, - "storeClearFilters": "Clear filters", + "storeClearFilters": "حذف الفلاتر", "@storeClearFilters": { "description": "Button to clear all filters" }, - "storeAddRepoTitle": "Add Extension Repository", + "storeAddRepoTitle": "إضافة مستودع إضافات", "@storeAddRepoTitle": { "description": "Store setup screen - heading when no repo is configured" }, - "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", + "storeAddRepoDescription": "أدخل عنوان مستودع GitHub الذي يحتوي على ملف registry.json لتصفح وتثبيت الإضافات.", "@storeAddRepoDescription": { "description": "Store setup screen - explanatory text" }, - "storeRepoUrlLabel": "Repository URL", + "storeRepoUrlLabel": "رابط المستودع", "@storeRepoUrlLabel": { "description": "Label for the repository URL input field" }, @@ -1760,19 +1760,19 @@ "@storeRepoUrlHint": { "description": "Hint/placeholder for the repository URL input field" }, - "storeRepoUrlHelper": "e.g. https://github.com/user/extensions-repo", + "storeRepoUrlHelper": "مثال: https://github.com/user/extensions-repo", "@storeRepoUrlHelper": { "description": "Helper text below the repository URL input field" }, - "storeAddRepoButton": "Add Repository", + "storeAddRepoButton": "أضف مستودعًا", "@storeAddRepoButton": { "description": "Button to submit a new repository URL" }, - "storeChangeRepoTooltip": "Change repository", + "storeChangeRepoTooltip": "تغيير المستودع", "@storeChangeRepoTooltip": { "description": "Tooltip for the change-repository icon button in the app bar" }, - "storeRepoDialogTitle": "Extension Repository", + "storeRepoDialogTitle": "مستودع الإضافات", "@storeRepoDialogTitle": { "description": "Title of the change/remove repository dialog" }, @@ -2015,7 +2015,7 @@ "@qualityHiResFlac": { "description": "Quality option - high resolution FLAC" }, - "qualityHiResFlacSubtitle": "24-bit / up to 96kHz", + "qualityHiResFlacSubtitle": "24 بت / ما يصل إلى 96 كيلو هرتز", "@qualityHiResFlacSubtitle": { "description": "Technical spec for hi-res" }, @@ -2023,15 +2023,15 @@ "@qualityHiResFlacMax": { "description": "Quality option - maximum resolution FLAC" }, - "qualityHiResFlacMaxSubtitle": "24-bit / up to 192kHz", + "qualityHiResFlacMaxSubtitle": "24 بت / ما يصل إلى 192 كيلو هرتز", "@qualityHiResFlacMaxSubtitle": { "description": "Technical spec for hi-res max" }, - "downloadLossy320": "Lossy 320kbps", + "downloadLossy320": "320kbps مضغوط", "@downloadLossy320": { "description": "Quality option label for lossy 320kbps" }, - "downloadLossyFormat": "Lossy Format", + "downloadLossyFormat": "تنسيق مضغوط", "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, From 7da423ee1b281e4e018914b9742024d5b2de5e39 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 06:39:15 +0700 Subject: [PATCH 049/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 2bca9386..a76985e6 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -1084,19 +1084,19 @@ "@progressReadingCsv": { "description": "Progress indicator - parsing CSV file" }, - "searchSongs": "곡들", + "searchSongs": "곡", "@searchSongs": { "description": "Search result category - songs" }, - "searchArtists": "아티스트들", + "searchArtists": "아티스트", "@searchArtists": { "description": "Search result category - artists" }, - "searchAlbums": "앨범들", + "searchAlbums": "앨범", "@searchAlbums": { "description": "Search result category - albums" }, - "searchPlaylists": "재생목록들", + "searchPlaylists": "재생목록", "@searchPlaylists": { "description": "Search result category - playlists" }, From 6bc65fe559588b3b3d94494232e5e8e105c9e376 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 07:35:09 +0700 Subject: [PATCH 050/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 680f3fb3..7e570358 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -2035,11 +2035,11 @@ "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadLossy320Format": "Lossy 320kbps Format", + "downloadLossy320Format": "تنسيق 320kbps مضغوط", "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "downloadLossy320FormatDesc": "اختر التنسيق النهائي للتنزيلات المضغوطة 320kbps. سيتم تحويل البث الأصلي إلى التنسيق المحدد عند الحاجة.", "@downloadLossy320FormatDesc": { "description": "Description in the lossy format picker" }, @@ -2047,7 +2047,7 @@ "@downloadLossyMp3": { "description": "Lossy format option - MP3 320kbps" }, - "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", + "downloadLossyMp3Subtitle": "أفضل توافق، ~10 ميغابايت لكل أغنية", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, @@ -2055,7 +2055,7 @@ "@downloadLossyAac": { "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "downloadLossyAacSubtitle": "أفضل توافق للجوال، صيغة M4A", "@downloadLossyAacSubtitle": { "description": "Subtitle for AAC/M4A 320kbps lossy option" }, @@ -2063,7 +2063,7 @@ "@downloadLossyOpus256": { "description": "Lossy format option - Opus 256kbps" }, - "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", + "downloadLossyOpus256Subtitle": "أفضل جودة Opus, حوالي 8 ميغابايت لكل أغنية", "@downloadLossyOpus256Subtitle": { "description": "Subtitle for Opus 256kbps lossy option" }, @@ -2071,7 +2071,7 @@ "@downloadLossyOpus128": { "description": "Lossy format option - Opus 128kbps" }, - "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", + "downloadLossyOpus128Subtitle": "أصغر حجم, ~4 ميغابايت لكل مسار", "@downloadLossyOpus128Subtitle": { "description": "Subtitle for Opus 128kbps lossy option" }, From 9de442b0c845922fec94ea9cecfafd083613b055 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 08:39:04 +0700 Subject: [PATCH 051/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 7e570358..2978bb67 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -2075,67 +2075,67 @@ "@downloadLossyOpus128Subtitle": { "description": "Subtitle for Opus 128kbps lossy option" }, - "qualityNote": "Actual quality depends on track availability from the service", + "qualityNote": "الجودة الفعلية تعتمد على المسار المتوفر من الخدمة", "@qualityNote": { "description": "Note about quality availability" }, - "downloadAskBeforeDownload": "Ask Before Download", + "downloadAskBeforeDownload": "اسأل قبل التحميل", "@downloadAskBeforeDownload": { "description": "Setting - show quality picker" }, - "downloadDirectory": "Download Directory", + "downloadDirectory": "مسار التنزيل", "@downloadDirectory": { "description": "Setting - download folder" }, - "downloadSeparateSinglesFolder": "Separate Singles Folder", + "downloadSeparateSinglesFolder": "فصل مجلد الفرديات", "@downloadSeparateSinglesFolder": { "description": "Setting - separate folder for singles" }, - "downloadAlbumFolderStructure": "Album Folder Structure", + "downloadAlbumFolderStructure": "هيكل مجلد الألبوم", "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, - "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", + "downloadUseAlbumArtistForFolders": "استخدام فنان الألبوم للمجلدات", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "downloadUsePrimaryArtistOnly": "Primary artist only for folders", + "downloadUsePrimaryArtistOnly": "الفنان الأساسي فقط للمجلدات", "@downloadUsePrimaryArtistOnly": { "description": "Setting - strip featured artists from folder name" }, - "downloadUsePrimaryArtistOnlyEnabled": "Featured artists removed from folder name (e.g. Justin Bieber, Quavo → Justin Bieber)", + "downloadUsePrimaryArtistOnlyEnabled": "الفنانين المتميزين الذين تمت إزالتهم من اسم المجلد (على سبيل المثال جاستين بيبر، كويفو -> جاستين بيبر)", "@downloadUsePrimaryArtistOnlyEnabled": { "description": "Subtitle when primary artist only is enabled" }, - "downloadUsePrimaryArtistOnlyDisabled": "Full artist string used for folder name", + "downloadUsePrimaryArtistOnlyDisabled": "اسم الفنان الكامل المستخدمة لاسم المجلد", "@downloadUsePrimaryArtistOnlyDisabled": { "description": "Subtitle when primary artist only is disabled" }, - "downloadSelectQuality": "Select Quality", + "downloadSelectQuality": "تحديد الجودة", "@downloadSelectQuality": { "description": "Dialog title - choose audio quality" }, - "downloadFrom": "Download From", + "downloadFrom": "تحميل من", "@downloadFrom": { "description": "Label - download source" }, - "appearanceAmoledDark": "AMOLED Dark", + "appearanceAmoledDark": "الوضع الداكن AMOLED", "@appearanceAmoledDark": { "description": "Theme option - pure black" }, - "appearanceAmoledDarkSubtitle": "Pure black background", + "appearanceAmoledDarkSubtitle": "خلفية سوداء تامة", "@appearanceAmoledDarkSubtitle": { "description": "Subtitle for AMOLED dark" }, - "queueClearAll": "Clear All", + "queueClearAll": "مسح الكل", "@queueClearAll": { "description": "Button - clear all queue items" }, - "queueClearAllMessage": "Are you sure you want to clear all downloads?", + "queueClearAllMessage": "هل أنت متأكد من أنك تريد مسح جميع التنزيلات؟", "@queueClearAllMessage": { "description": "Clear queue confirmation" }, - "settingsAutoExportFailed": "Auto-export failed downloads", + "settingsAutoExportFailed": "فشل التصدير التلقائي للتنزيلات", "@settingsAutoExportFailed": { "description": "Setting toggle for auto-export" }, From 6613461eeaf88c896ec892ab5020bd9b2a3ca872 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 09:49:23 +0700 Subject: [PATCH 052/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 2978bb67..4f839db1 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -2139,71 +2139,71 @@ "@settingsAutoExportFailed": { "description": "Setting toggle for auto-export" }, - "settingsAutoExportFailedSubtitle": "Save failed downloads to TXT file automatically", + "settingsAutoExportFailedSubtitle": "حفظ التنزيلات التي فشلت إلى ملف TXT تلقائيًا", "@settingsAutoExportFailedSubtitle": { "description": "Subtitle for auto-export setting" }, - "settingsDownloadNetwork": "Download Network", + "settingsDownloadNetwork": "تحميل الشبكة", "@settingsDownloadNetwork": { "description": "Setting for network type preference" }, - "settingsDownloadNetworkAny": "WiFi + Mobile Data", + "settingsDownloadNetworkAny": "WiFi + بيانات الجوال", "@settingsDownloadNetworkAny": { "description": "Network option - use any connection" }, - "settingsDownloadNetworkWifiOnly": "WiFi Only", + "settingsDownloadNetworkWifiOnly": "WiFi فقط", "@settingsDownloadNetworkWifiOnly": { "description": "Network option - only use WiFi" }, - "settingsDownloadNetworkSubtitle": "Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.", + "settingsDownloadNetworkSubtitle": "اختر الشبكة التي تريد استخدامها للتنزيلات. عند تعيين WiFi فقط، التنزيلات لن تعمل على بيانات الجوال.", "@settingsDownloadNetworkSubtitle": { "description": "Subtitle explaining network preference" }, - "albumFolderArtistAlbum": "Artist / Album", + "albumFolderArtistAlbum": "ألبوم / الفنان", "@albumFolderArtistAlbum": { "description": "Album folder option" }, - "albumFolderArtistAlbumSubtitle": "Albums/Artist Name/Album Name/", + "albumFolderArtistAlbumSubtitle": "الألبومات / اسم الفنان / اسم الألبوم", "@albumFolderArtistAlbumSubtitle": { "description": "Folder structure example" }, - "albumFolderArtistYearAlbum": "Artist / [Year] Album", + "albumFolderArtistYearAlbum": "الفنان / [Year] ألبوم", "@albumFolderArtistYearAlbum": { "description": "Album folder option with year" }, - "albumFolderArtistYearAlbumSubtitle": "Albums/Artist Name/[2005] Album Name/", + "albumFolderArtistYearAlbumSubtitle": "الألبومات/اسم الفنان /[2005] اسم الألبوم/", "@albumFolderArtistYearAlbumSubtitle": { "description": "Folder structure example" }, - "albumFolderAlbumOnly": "Album Only", + "albumFolderAlbumOnly": "الألبوم فقط", "@albumFolderAlbumOnly": { "description": "Album folder option" }, - "albumFolderAlbumOnlySubtitle": "Albums/Album Name/", + "albumFolderAlbumOnlySubtitle": "الألبومات/اسم الألبوم/", "@albumFolderAlbumOnlySubtitle": { "description": "Folder structure example" }, - "albumFolderYearAlbum": "[Year] Album", + "albumFolderYearAlbum": "[Year] الألبوم", "@albumFolderYearAlbum": { "description": "Album folder option with year" }, - "albumFolderYearAlbumSubtitle": "Albums/[2005] Album Name/", + "albumFolderYearAlbumSubtitle": "الألبومات/[2005] اسم الألبوم/", "@albumFolderYearAlbumSubtitle": { "description": "Folder structure example" }, - "albumFolderArtistAlbumSingles": "Artist / Album + Singles", + "albumFolderArtistAlbumSingles": "الفنان / الألبوم + المفردات", "@albumFolderArtistAlbumSingles": { "description": "Album folder option with singles inside artist" }, - "albumFolderArtistAlbumSinglesSubtitle": "Artist/Album/ and Artist/Singles/", + "albumFolderArtistAlbumSinglesSubtitle": "الفنان/الألبوم و الفنان / المفردات", "@albumFolderArtistAlbumSinglesSubtitle": { "description": "Folder structure example" }, - "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", + "albumFolderArtistAlbumFlat": "فنان / ألبوم (منفردات سطحية)", "@albumFolderArtistAlbumFlat": { "description": "Album folder option with singles directly in artist folder" }, - "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", + "albumFolderArtistAlbumFlatSubtitle": "الفنان / الألبوم والفنان / الأغنية.flac", "@albumFolderArtistAlbumFlatSubtitle": { "description": "Folder structure example for flat singles" }, From 4dc5b2ee306166939283ea1a0c41bce86845bf43 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 13:39:38 +0700 Subject: [PATCH 053/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index a76985e6..99dc78db 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -986,7 +986,7 @@ "@snackbarFailedToUpdate": { "description": "Snackbar - extension update error" }, - "errorRateLimited": "속도 제한됨", + "errorRateLimited": "사용 제한됨", "@errorRateLimited": { "description": "Error title - too many requests" }, @@ -1292,11 +1292,11 @@ "@metadataProviderPriorityInfo": { "description": "Info tip about rate limits" }, - "metadataNoRateLimits": "속도 제한 없음", + "metadataNoRateLimits": "사용 제한 없음", "@metadataNoRateLimits": { "description": "Deezer provider description" }, - "metadataMayRateLimit": "속도 제한이 있을 수 있음", + "metadataMayRateLimit": "사용 제한이 있을 수 있음", "@metadataMayRateLimit": { "description": "Spotify provider description" }, @@ -4853,7 +4853,7 @@ "@queueDownloadCompleted": { "description": "Accessibility label for completed download state in queue" }, - "queueRateLimitTitle": "서비스 속도 제한", + "queueRateLimitTitle": "서비스 사용 제한", "@queueRateLimitTitle": { "description": "Title shown on a failed queue item when the download service rate limits requests" }, @@ -4898,7 +4898,7 @@ "@logIssueIspBlockingSuggestion": { "description": "Diagnostic badge suggestion for ISP blocking" }, - "logIssueRateLimitedLabel": "속도 제한", + "logIssueRateLimitedLabel": "사용 제한", "@logIssueRateLimitedLabel": { "description": "Diagnostic badge label when the service rate limits requests" }, From 299e93ffe3841f0925b8b9939f0e39c6a594a9f7 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 15:38:14 +0700 Subject: [PATCH 054/137] 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 99dc78db..b04e6121 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -4853,7 +4853,7 @@ "@queueDownloadCompleted": { "description": "Accessibility label for completed download state in queue" }, - "queueRateLimitTitle": "서비스 사용 제한", + "queueRateLimitTitle": "서비스 사용 제한됨", "@queueRateLimitTitle": { "description": "Title shown on a failed queue item when the download service rate limits requests" }, From 6c635dfd01205b2cebb98b811686f6cf6dca3c46 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 16:35:21 +0700 Subject: [PATCH 055/137] 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 e6d8f13f..5fc12b1e 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -3335,7 +3335,7 @@ "@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": "¿Dividir \"{album}\" en archivos FLAC individuales {count}?\n\nLos archivos se guardarán en el mismo directorio.", "@cueSplitConfirmMessage": { "description": "CUE split confirmation dialog message", "placeholders": { @@ -3347,7 +3347,7 @@ } } }, - "cueSplitSplitting": "Splitting CUE sheet... ({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": { From 469af1ac5dca6be94fee5adc928412f77e9742d9 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 18:37:22 +0700 Subject: [PATCH 056/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 64 ++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index b04e6121..5f262335 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -3745,7 +3745,7 @@ "@lyricsProvidersInfoText": { "description": "Info tip on lyrics provider priority page" }, - "lyricsProvidersEnabledSection": "Enabled ({count})", + "lyricsProvidersEnabledSection": "활성화됨 ({count})", "@lyricsProvidersEnabledSection": { "description": "Section header for enabled providers", "placeholders": { @@ -3754,7 +3754,7 @@ } } }, - "lyricsProvidersDisabledSection": "Disabled ({count})", + "lyricsProvidersDisabledSection": "비활성화됨 ({count})", "@lyricsProvidersDisabledSection": { "description": "Section header for disabled providers", "placeholders": { @@ -3931,7 +3931,7 @@ "@storageModeSafSubtitle": { "description": "Subtitle for SAF storage mode" }, - "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", + "downloadFilenameDescription": "{artist}, {title}, {album}, {track}, {year}, {date}, {disc}를 자리표시자로 사용하세요", "@downloadFilenameDescription": { "description": "Description shown in filename format editor" }, @@ -3939,11 +3939,11 @@ "@downloadFilenameInsertTag": { "description": "Label above filename tag chips" }, - "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", + "downloadSeparateSinglesEnabled": "싱글과 EP를 별도의 폴더에 저장합니다", "@downloadSeparateSinglesEnabled": { "description": "Subtitle when separate singles folder is on" }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", + "downloadSeparateSinglesDisabled": "싱글과 앨범을 같은 폴더에 저장합니다", "@downloadSeparateSinglesDisabled": { "description": "Subtitle when separate singles folder is off" }, @@ -3955,11 +3955,11 @@ "@downloadCreatePlaylistSourceFolder": { "description": "Setting to create a subfolder per playlist source" }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", + "downloadCreatePlaylistSourceFolderEnabled": "각 재생 목록에 대한 하위 폴더를 생성합니다.", "@downloadCreatePlaylistSourceFolderEnabled": { "description": "Subtitle when playlist folder is enabled" }, - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", + "downloadCreatePlaylistSourceFolderDisabled": "모든 트랙을 다운로드 폴더에 직접 저장합니다", "@downloadCreatePlaylistSourceFolderDisabled": { "description": "Subtitle when playlist folder is disabled" }, @@ -3983,7 +3983,7 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", + "downloadSelectServiceToEnable": "이 옵션을 활성화하려면 품질 옵션이 있는 공급자를 선택하세요", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" }, @@ -4059,7 +4059,7 @@ "@downloadFilterContributingEnabled": { "description": "Subtitle when contributing artist filter is on" }, - "downloadFilterContributingDisabled": "Full Album Artist string used", + "downloadFilterContributingDisabled": "전체 앨범 아티스트 문자열 사용", "@downloadFilterContributingDisabled": { "description": "Subtitle when contributing artist filter is off" }, @@ -4132,7 +4132,7 @@ "@snackbarSelectedPlaylistsEmpty": { "description": "Snackbar when selected playlists contain no tracks" }, - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "playlistsCount": "{count, plural, =1{1 재생목록} other{{count} 재생목록}}", "@playlistsCount": { "description": "Playlist count display", "placeholders": { @@ -4583,7 +4583,7 @@ "@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 트랙 다운로드 성공} other{{count} 트랙 다운로드 성공}}", "@notifTracksDownloadedSuccess": { "description": "Notification body for queue complete - how many tracks were downloaded", "placeholders": { @@ -4592,7 +4592,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 트랙 다운로드 성공} other{{completed} 트랙 다운로드 성공}}, {failed, plural, =1{1 실패} other{{failed} 실패}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -4608,7 +4608,7 @@ "@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 다운로드가 사용자에 의해 취소됨} other{{count} 다운로드가 사용자에 의해 취소됨}}", "@notifDownloadsCanceledBody": { "description": "Notification body when downloads are canceled by the user", "placeholders": { @@ -4679,15 +4679,15 @@ } } }, - "notifLibraryScanFailed": "Library scan failed", + "notifLibraryScanFailed": "보관함 스캔 실패", "@notifLibraryScanFailed": { "description": "Notification title when library scan fails" }, - "notifLibraryScanCancelled": "Library scan cancelled", + "notifLibraryScanCancelled": "보관함 스캔 취소됨", "@notifLibraryScanCancelled": { "description": "Notification title when library scan is cancelled by the user" }, - "notifLibraryScanStopped": "Scan stopped before completion.", + "notifLibraryScanStopped": "스캔이 완료되기 전에 중단되었습니다", "@notifLibraryScanStopped": { "description": "Notification body when library scan is cancelled" }, @@ -4728,11 +4728,11 @@ } } }, - "notifUpdateFailed": "Update Failed", + "notifUpdateFailed": "업데이트 실패", "@notifUpdateFailed": { "description": "Notification title when app update download fails" }, - "notifUpdateFailedBody": "Could not download update. Try again later.", + "notifUpdateFailedBody": "업데이트를 다운로드할 수 없습니다. 나중에 다시 시도하세요", "@notifUpdateFailedBody": { "description": "Notification body when app update download fails" }, @@ -4777,7 +4777,7 @@ "@tutorialSearchHint": { "description": "Placeholder shown in the tutorial search demo" }, - "tutorialDownloadCompletedSemantics": "Download completed", + "tutorialDownloadCompletedSemantics": "다운로드 완료", "@tutorialDownloadCompletedSemantics": { "description": "Accessibility label for completed download state in tutorial demo" }, @@ -4801,7 +4801,7 @@ "@optionsEmbedMetadataSubtitleOff": { "description": "Subtitle when metadata embedding is disabled" }, - "optionsMaxQualityCoverSubtitleDisabled": "Disabled when metadata embedding is off", + "optionsMaxQualityCoverSubtitleDisabled": "메타데이터 삽입이 꺼져 있을 때 비활성화됨", "@optionsMaxQualityCoverSubtitleDisabled": { "description": "Subtitle for max quality cover when metadata embedding is disabled" }, @@ -4938,7 +4938,7 @@ "@clickableLookingUpArtist": { "description": "Snackbar shown while clickable artist metadata is being resolved" }, - "clickableInformationUnavailable": "{type} information not available", + "clickableInformationUnavailable": "{type} 정보를 사용할 수 없음", "@clickableInformationUnavailable": { "description": "Snackbar shown when clickable metadata cannot open a destination", "placeholders": { @@ -4991,7 +4991,7 @@ } } }, - "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", + "a11yOpenItemCount": "{title}, {count} {count, plural, =1{항목} other{항목}} 열기", "@a11yOpenItemCount": { "description": "Accessibility label for opening a grouped item with count", "placeholders": { @@ -5003,7 +5003,7 @@ } } }, - "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", + "a11yOpenAlbumByArtistTrackCount": "{artistName} 의 앨범 {albumName} 열기 ({trackCount} 곡)", "@a11yOpenAlbumByArtistTrackCount": { "description": "Accessibility label for opening an album item with track count", "placeholders": { @@ -5018,7 +5018,7 @@ } } }, - "a11yTrackByArtist": "{trackName} by {artistName}", + "a11yTrackByArtist": "{artistName} 의 {trackName}", "@a11yTrackByArtist": { "description": "Accessibility label for a queue or list track item", "placeholders": { @@ -5030,7 +5030,7 @@ } } }, - "a11ySelectAlbum": "Select album {albumName}", + "a11ySelectAlbum": "앨범 {albumName} 선택", "@a11ySelectAlbum": { "description": "Accessibility label for selecting an album", "placeholders": { @@ -5039,7 +5039,7 @@ } } }, - "a11yOpenAlbum": "Open album {albumName}", + "a11yOpenAlbum": "앨범 {albumName} 열기", "@a11yOpenAlbum": { "description": "Accessibility label for opening an album", "placeholders": { @@ -5181,7 +5181,7 @@ } } }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", + "collectionPlaylistsDeleted": "{count} {count, plural, =1{재생목록} other{재생목록}} 삭제됨", "@collectionPlaylistsDeleted": { "description": "Snackbar after deleting selected playlists", "placeholders": { @@ -5190,7 +5190,7 @@ } } }, - "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", + "collectionAddedTracksToPlaylist": "{playlistName} 에 {count} {count, plural, =1{트랙} other{트랙}}이 추가됨", "@collectionAddedTracksToPlaylist": { "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { @@ -5217,7 +5217,7 @@ } } }, - "itemCount": "{count} {count, plural, =1{item} other{items}}", + "itemCount": "{count} {count, plural, =1{항목} other{항목}}", "@itemCount": { "description": "Generic item count label", "placeholders": { @@ -5241,7 +5241,7 @@ } } }, - "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "selectionDeleteTracksCount": "{count} {count, plural, =1{트랙} other{트랙}} 삭제", "@selectionDeleteTracksCount": { "description": "Button label for deleting selected tracks", "placeholders": { @@ -5263,7 +5263,7 @@ "@queueDownloadStarting": { "description": "Queue status before download progress is available" }, - "a11ySelectTrack": "Select track", + "a11ySelectTrack": "트랙 선택", "@a11ySelectTrack": { "description": "Accessibility label for selecting a track" }, @@ -5283,7 +5283,7 @@ } } }, - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", + "storeExtensionsCount": "{count} {count, plural, =1{확장 프로그램} other{확장 프로그램}}", "@storeExtensionsCount": { "description": "Store extension result count", "placeholders": { From 030b8c54592ca344aa59f6bc09750b9732ca8afa Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 20:52:21 +0700 Subject: [PATCH 057/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 4f839db1..dace4872 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1776,19 +1776,19 @@ "@storeRepoDialogTitle": { "description": "Title of the change/remove repository dialog" }, - "storeRepoDialogCurrent": "Current repository:", + "storeRepoDialogCurrent": "المستودع الحالي:", "@storeRepoDialogCurrent": { "description": "Label shown above the current repository URL in the dialog" }, - "storeNewRepoUrlLabel": "New Repository URL", + "storeNewRepoUrlLabel": "رابط المستودع", "@storeNewRepoUrlLabel": { "description": "Label for the new repository URL field inside the dialog" }, - "storeLoadError": "Failed to load repository", + "storeLoadError": "فشل تحميل المستودع", "@storeLoadError": { "description": "Error heading when the store cannot be loaded" }, - "storeEmptyNoExtensions": "No extensions available", + "storeEmptyNoExtensions": "لا توجد إضافات متاحة", "@storeEmptyNoExtensions": { "description": "Message when store has no extensions" }, From 6398d8f7eba46b20e3a4eeca78a79083f3967b7d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 22:20:59 +0700 Subject: [PATCH 058/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index dace4872..cf73b6b9 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1792,19 +1792,19 @@ "@storeEmptyNoExtensions": { "description": "Message when store has no extensions" }, - "storeEmptyNoResults": "No extensions found", + "storeEmptyNoResults": "لم يتم العثور على إضافات", "@storeEmptyNoResults": { "description": "Message when search/filter returns no results" }, - "extensionDefaultProvider": "Default Search", + "extensionDefaultProvider": "البحث الافتراضي", "@extensionDefaultProvider": { "description": "Default search provider option" }, - "extensionDefaultProviderSubtitle": "Use the default metadata search", + "extensionDefaultProviderSubtitle": "استخدام البحث الافتراضي عن البيانات الوصفية", "@extensionDefaultProviderSubtitle": { "description": "Subtitle for default provider" }, - "extensionAuthor": "Author", + "extensionAuthor": "المؤلف", "@extensionAuthor": { "description": "Extension detail - author" }, @@ -1812,55 +1812,55 @@ "@extensionId": { "description": "Extension detail - unique ID" }, - "extensionError": "Error", + "extensionError": "خطأ", "@extensionError": { "description": "Extension detail - error message" }, - "extensionCapabilities": "Capabilities", + "extensionCapabilities": "الإمكانيات", "@extensionCapabilities": { "description": "Section header - extension features" }, - "extensionMetadataProvider": "Metadata Provider", + "extensionMetadataProvider": "مزود بيانات التعريف", "@extensionMetadataProvider": { "description": "Capability - provides metadata" }, - "extensionDownloadProvider": "Download Provider", + "extensionDownloadProvider": "مزود التحميل", "@extensionDownloadProvider": { "description": "Capability - provides downloads" }, - "extensionLyricsProvider": "Lyrics Provider", + "extensionLyricsProvider": "موفر كلمات الأغاني", "@extensionLyricsProvider": { "description": "Capability - provides lyrics" }, - "extensionUrlHandler": "URL Handler", + "extensionUrlHandler": "معالج الروابط", "@extensionUrlHandler": { "description": "Capability - handles URLs" }, - "extensionQualityOptions": "Quality Options", + "extensionQualityOptions": "خيارات الجودة", "@extensionQualityOptions": { "description": "Capability - quality selection" }, - "extensionPostProcessingHooks": "Post-Processing Hooks", + "extensionPostProcessingHooks": "روابط المعالجة اللاحقة", "@extensionPostProcessingHooks": { "description": "Capability - post-processing" }, - "extensionPermissions": "Permissions", + "extensionPermissions": "الصلاحيات", "@extensionPermissions": { "description": "Section header - required permissions" }, - "extensionSettings": "Settings", + "extensionSettings": "الإعدادات", "@extensionSettings": { "description": "Section header - extension settings" }, - "extensionRemoveButton": "Remove Extension", + "extensionRemoveButton": "حذف الإضافة", "@extensionRemoveButton": { "description": "Button to uninstall extension" }, - "extensionUpdated": "Updated", + "extensionUpdated": "تاريخ التحديث", "@extensionUpdated": { "description": "Extension detail - last update" }, - "extensionMinAppVersion": "Min App Version", + "extensionMinAppVersion": "اصدار التطبيق الأدنى", "@extensionMinAppVersion": { "description": "Extension detail - minimum app version" }, From c193e88990164547679f9fe76de9ca635367e2f7 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 22:21:01 +0700 Subject: [PATCH 059/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 5f262335..d8bc4b0c 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -439,7 +439,7 @@ "@aboutTitle": { "description": "About page title" }, - "aboutContributors": "기여자", + "aboutContributors": "개발에 힘써주신 분들", "@aboutContributors": { "description": "Section for contributors" }, @@ -455,15 +455,15 @@ "@aboutLogoArtist": { "description": "Role description for logo artist" }, - "aboutTranslators": "번역가들", + "aboutTranslators": "번역에 도움주신 분들", "@aboutTranslators": { "description": "Section for translators" }, - "aboutSpecialThanks": "특별 감사", + "aboutSpecialThanks": "특별히 감사드리는 분들", "@aboutSpecialThanks": { "description": "Section for special thanks" }, - "aboutLinks": "바로가기", + "aboutLinks": "링크", "@aboutLinks": { "description": "Section for external links" }, @@ -511,11 +511,11 @@ "@aboutTelegramChatSubtitle": { "description": "Subtitle for Telegram chat" }, - "aboutSocial": "소셜", + "aboutSocial": "소셜 네트워크", "@aboutSocial": { "description": "Section for social links" }, - "aboutApp": "앱", + "aboutApp": "앱 정보", "@aboutApp": { "description": "Section for app info" }, From 765f0d63b6209828bb1c43531bbfdf61a338b03d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Mon, 29 Jun 2026 23:32:47 +0700 Subject: [PATCH 060/137] New translations app_en.arb (Portuguese) [ci skip] --- lib/l10n/arb/app_pt_PT.arb | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/l10n/arb/app_pt_PT.arb b/lib/l10n/arb/app_pt_PT.arb index 2a110347..f859d0c5 100644 --- a/lib/l10n/arb/app_pt_PT.arb +++ b/lib/l10n/arb/app_pt_PT.arb @@ -9,7 +9,7 @@ "@navHome": { "description": "Bottom navigation - Home tab" }, - "navLibrary": "Library", + "navLibrary": "Biblioteca", "@navLibrary": { "description": "Bottom navigation - Library tab" }, @@ -25,15 +25,15 @@ "@homeTitle": { "description": "Home screen title" }, - "homeSubtitle": "Paste a supported URL or search by name", + "homeSubtitle": "Cole um URL compatível ou pesquise por nome", "@homeSubtitle": { "description": "Subtitle shown below search box" }, - "homeEmptyTitle": "No search providers yet", + "homeEmptyTitle": "Ainda não há provedores de pesquisa", "@homeEmptyTitle": { "description": "Title shown on home when no providers are available yet" }, - "homeEmptySubtitle": "Install an extension to continue.", + "homeEmptySubtitle": "Instale uma extensão para continuar.", "@homeEmptySubtitle": { "description": "Subtitle shown on home when no providers are available yet" }, @@ -65,7 +65,7 @@ "@settingsTitle": { "description": "Settings screen title" }, - "settingsDownload": "Download", + "settingsDownload": "", "@settingsDownload": { "description": "Settings section - download options" }, @@ -85,7 +85,7 @@ "@settingsAbout": { "description": "Settings section - app info" }, - "downloadTitle": "Download", + "downloadTitle": "", "@downloadTitle": { "description": "Download settings page title" }, @@ -97,11 +97,11 @@ "@downloadFilenameFormat": { "description": "Setting for output filename pattern" }, - "downloadSingleFilenameFormat": "Single Filename Format", + "downloadSingleFilenameFormat": "Formato do nome do arquivo para Singles", "@downloadSingleFilenameFormat": { "description": "Setting for output filename pattern for singles/EPs" }, - "downloadSingleFilenameFormatDescription": "Filename pattern for singles and EPs. Uses the same tags as the album format.", + "downloadSingleFilenameFormatDescription": "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" }, @@ -153,7 +153,7 @@ "@optionsPrimaryProvider": { "description": "Main search provider setting" }, - "optionsPrimaryProviderSubtitle": "Service used for searching by track or album name", + "optionsPrimaryProviderSubtitle": "Serviço usado para pesquisar por faixa ou nome do álbum", "@optionsPrimaryProviderSubtitle": { "description": "Subtitle for primary provider" }, @@ -166,15 +166,15 @@ } } }, - "optionsDefaultSearchTab": "Default Search Tab", + "optionsDefaultSearchTab": "Aba de pesquisa padrão", "@optionsDefaultSearchTab": { "description": "Title for the preferred default search tab setting" }, - "optionsDefaultSearchTabSubtitle": "Choose which tab opens first for new search results.", + "optionsDefaultSearchTabSubtitle": "Escolha qual aba será aberta primeiro para novos resultados de pesquisa.", "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsSwitchBack": "Choose the default search provider to switch back from an extension", + "optionsSwitchBack": "Escolha o provedor de pesquisa padrão para retornar após sair de uma extensão", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" }, From f6a0cc9fad472bbc6d2de643c3d60973c564df51 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 30 Jun 2026 02:11:11 +0700 Subject: [PATCH 061/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index cf73b6b9..8c4e1722 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1864,15 +1864,15 @@ "@extensionMinAppVersion": { "description": "Extension detail - minimum app version" }, - "extensionCustomTrackMatching": "Custom Track Matching", + "extensionCustomTrackMatching": "مطابقة المسار المخصص", "@extensionCustomTrackMatching": { "description": "Capability - custom track matching algorithm" }, - "extensionPostProcessing": "Post-Processing", + "extensionPostProcessing": "مرحلة ما بعد المعالجة", "@extensionPostProcessing": { "description": "Capability - post-download processing" }, - "extensionHooksAvailable": "{count} hook(s) available", + "extensionHooksAvailable": "متاح {count} روابط", "@extensionHooksAvailable": { "description": "Post-processing hooks count", "placeholders": { @@ -1881,7 +1881,7 @@ } } }, - "extensionPatternsCount": "{count} pattern(s)", + "extensionPatternsCount": "{count} أنماط", "@extensionPatternsCount": { "description": "URL patterns count", "placeholders": { @@ -1890,7 +1890,7 @@ } } }, - "extensionStrategy": "Strategy: {strategy}", + "extensionStrategy": "الاستراتيجية: {strategy}", "@extensionStrategy": { "description": "Track matching strategy name", "placeholders": { @@ -1899,7 +1899,7 @@ } } }, - "extensionsProviderPrioritySection": "Provider Priority", + "extensionsProviderPrioritySection": "أولوية مزود الخدمة", "@extensionsProviderPrioritySection": { "description": "Section header - provider priority" }, From 22a8fab1c705cb8e17bffcc0f6bf14148d0b1c85 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 30 Jun 2026 03:44:33 +0700 Subject: [PATCH 062/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 8c4e1722..16c680a0 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1903,19 +1903,19 @@ "@extensionsProviderPrioritySection": { "description": "Section header - provider priority" }, - "extensionsInstalledSection": "Installed Extensions", + "extensionsInstalledSection": "الإضافات المُثبّتة", "@extensionsInstalledSection": { "description": "Section header - installed extensions" }, - "extensionsNoExtensions": "No extensions installed", + "extensionsNoExtensions": "لا توجد إضافات مثبتة", "@extensionsNoExtensions": { "description": "Empty state - no extensions" }, - "extensionsNoExtensionsSubtitle": "Install .spotiflac-ext files to add new providers", + "extensionsNoExtensionsSubtitle": "تثبيت ملفات .spotiflac-ext لإضافة موفرين جدد", "@extensionsNoExtensionsSubtitle": { "description": "Empty state subtitle" }, - "extensionsInstallButton": "Install Extension", + "extensionsInstallButton": "تثبيت الإضافة", "@extensionsInstallButton": { "description": "Button to install extension from file" }, From 5e9cce4b8c1177e06be9d25f13816ea47ff835e8 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 30 Jun 2026 08:55:15 +0700 Subject: [PATCH 063/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 16c680a0..2c446d0e 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1919,7 +1919,7 @@ "@extensionsInstallButton": { "description": "Button to install extension from file" }, - "extensionsInfoTip": "Extensions can add new metadata and download providers. Only install extensions from trusted sources.", + "extensionsInfoTip": "يمكن للإضافات تزويدك بموفري بيانات التعريف الجديدة وتحميلها. ثبت الإضافات من مصادر موثوق بها فقط.", "@extensionsInfoTip": { "description": "Security warning about extensions" }, From adeed5ae1309141b7f4b8a8322015bd626874e9f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:43:55 +0700 Subject: [PATCH 064/137] New translations app_en.arb (Chinese Simplified) [ci skip] --- lib/l10n/arb/app_zh_CN.arb | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/l10n/arb/app_zh_CN.arb b/lib/l10n/arb/app_zh_CN.arb index a273ef8c..a8b026d7 100644 --- a/lib/l10n/arb/app_zh_CN.arb +++ b/lib/l10n/arb/app_zh_CN.arb @@ -1,7 +1,7 @@ { "@@locale": "zh-CN", "@@last_modified": "2026-04-28", - "appName": "SpotiFLAC Mobile", + "appName": "SpotiFLAC 移动版", "@appName": { "description": "App name - DO NOT TRANSLATE" }, @@ -174,7 +174,7 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsSwitchBack": "Choose the default search provider to switch back from an extension", + "optionsSwitchBack": "选择要从扩展中返回的默认搜索服务器", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" }, @@ -190,11 +190,11 @@ "@optionsUseExtensionProviders": { "description": "Legacy setting label for extension download providers" }, - "optionsUseExtensionProvidersOn": "Extension providers are enabled", + "optionsUseExtensionProvidersOn": "扩展提供商已启用", "@optionsUseExtensionProvidersOn": { "description": "Status when extension providers enabled" }, - "optionsUseExtensionProvidersOff": "Extension providers are required", + "optionsUseExtensionProvidersOff": "需要扩展提供商", "@optionsUseExtensionProvidersOff": { "description": "Legacy status when extension providers would be disabled" }, @@ -214,7 +214,7 @@ "@optionsMaxQualityCoverSubtitle": { "description": "Subtitle for max quality cover" }, - "optionsReplayGain": "ReplayGain", + "optionsReplayGain": "回放增益", "@optionsReplayGain": { "description": "Title for ReplayGain setting toggle" }, @@ -226,27 +226,27 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, - "trackReplayGain": "Rescan ReplayGain", + "trackReplayGain": "重新扫描回放增益", "@trackReplayGain": { "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "trackReplayGainSubtitle": "分析响度并写入回放增益标签", "@trackReplayGainSubtitle": { "description": "Subtitle for the rescan ReplayGain menu option" }, - "trackReplayGainScanning": "Analyzing loudness...", + "trackReplayGainScanning": "正在分析声音...", "@trackReplayGainScanning": { "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "trackReplayGainSuccess": "ReplayGain tags added", + "trackReplayGainSuccess": "回放增益标签已添加", "@trackReplayGainSuccess": { "description": "Snackbar message after ReplayGain tags written for a single track" }, - "trackReplayGainFailed": "Failed to add ReplayGain tags", + "trackReplayGainFailed": "添加回放增益标签失败", "@trackReplayGainFailed": { "description": "Snackbar message when ReplayGain scan/write fails" }, - "selectionReplayGainCount": "ReplayGain ({count})", + "selectionReplayGainCount": "回放增益 ({count})", "@selectionReplayGainCount": { "description": "Batch selection action button label for ReplayGain", "placeholders": { @@ -255,7 +255,7 @@ } } }, - "replayGainBatchConfirmTitle": "Add ReplayGain", + "replayGainBatchConfirmTitle": "添加回放增益", "@replayGainBatchConfirmTitle": { "description": "Title of the batch ReplayGain confirmation dialog" }, From 97bb4f66417c3474cb5d871b0fde62432e1fc063 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 30 Jun 2026 17:01:34 +0700 Subject: [PATCH 065/137] New translations app_en.arb (Chinese Simplified) [ci skip] --- lib/l10n/arb/app_zh_CN.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/arb/app_zh_CN.arb b/lib/l10n/arb/app_zh_CN.arb index a8b026d7..32203c73 100644 --- a/lib/l10n/arb/app_zh_CN.arb +++ b/lib/l10n/arb/app_zh_CN.arb @@ -300,7 +300,7 @@ "@optionsArtistTagModeJoinedSubtitle": { "description": "Subtitle for joined artist tag mode" }, - "optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus", + "optionsArtistTagModeSplitVorbis": "用于 FLAC/Opus 的拆分标签", "@optionsArtistTagModeSplitVorbis": { "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, From f2020b7653102498c29d36b747c8527a0ed06513 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 30 Jun 2026 17:01:36 +0700 Subject: [PATCH 066/137] 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 1843fdf2..424b2721 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -728,7 +728,7 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, - "setupLanguageTitle": "Choose Language", + "setupLanguageTitle": "Pilih Bahasa", "@setupLanguageTitle": { "description": "Title for the language selection step in setup" }, From 95b56c80c5cc9226d659e044290fffe53a4a9b4a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 30 Jun 2026 21:51:26 +0700 Subject: [PATCH 067/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index d8bc4b0c..96e28741 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -238,11 +238,11 @@ "@trackReplayGainScanning": { "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "trackReplayGainSuccess": "ReplayGain tags added", + "trackReplayGainSuccess": "리플레이게인 태그가 추가됨", "@trackReplayGainSuccess": { "description": "Snackbar message after ReplayGain tags written for a single track" }, - "trackReplayGainFailed": "Failed to add ReplayGain tags", + "trackReplayGainFailed": "리플레이게인 태그 추가 실패", "@trackReplayGainFailed": { "description": "Snackbar message when ReplayGain scan/write fails" }, @@ -4289,7 +4289,7 @@ "@queueEmptyHistorySubtitle": { "description": "Empty state subtitle for download history" }, - "selectionAllPlaylistsSelected": "All playlists selected", + "selectionAllPlaylistsSelected": "모든 재생목록이 선택됨", "@selectionAllPlaylistsSelected": { "description": "Shown when all playlists are selected in selection mode" }, @@ -4468,15 +4468,15 @@ "@cancelDownloadKeep": { "description": "Dialog button - keep the active download (do not cancel)" }, - "metadataSaveFailedFfmpeg": "Failed to save metadata via FFmpeg", + "metadataSaveFailedFfmpeg": "FFmpeg를 통해 메타데이터 저장 실패", "@metadataSaveFailedFfmpeg": { "description": "Snackbar error when FFmpeg fails to write metadata" }, - "metadataSaveFailedStorage": "Failed to write metadata back to storage", + "metadataSaveFailedStorage": "저장소에 메타데이터 다시 쓰기 실패", "@metadataSaveFailedStorage": { "description": "Snackbar error when writing metadata file back to storage fails" }, - "snackbarFolderPickerFailed": "Failed to open folder picker: {error}", + "snackbarFolderPickerFailed": "폴더 선택기 열기 실패: {error}", "@snackbarFolderPickerFailed": { "description": "Snackbar shown when folder picker fails to open", "placeholders": { @@ -4485,15 +4485,15 @@ } } }, - "errorLoadAlbum": "Failed to load album", + "errorLoadAlbum": "앨범 불러오기 실패", "@errorLoadAlbum": { "description": "Error state shown when album fails to load" }, - "errorLoadPlaylist": "Failed to load playlist", + "errorLoadPlaylist": "재생목록 불러오기 실패", "@errorLoadPlaylist": { "description": "Error state shown when playlist fails to load" }, - "errorLoadArtist": "Failed to load artist", + "errorLoadArtist": "아티스트 불러오기 실패", "@errorLoadArtist": { "description": "Error state shown when artist fails to load" }, @@ -4567,7 +4567,7 @@ "@notifDownloadComplete": { "description": "Notification title when a single download is complete" }, - "notifDownloadsFinished": "Downloads Finished ({completed} done, {failed} failed)", + "notifDownloadsFinished": "다운로드 완료 ({completed} 개 완료, {failed} 개 실패)", "@notifDownloadsFinished": { "description": "Notification title when queue finishes with some failures", "placeholders": { From 6b7f63d7844f8a7433084f7624cb82c632ad02e4 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 30 Jun 2026 23:54:55 +0700 Subject: [PATCH 068/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 150 ++++++++++++++++++++-------------------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 96e28741..23bce1d8 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -25,7 +25,7 @@ "@homeTitle": { "description": "Home screen title" }, - "homeSubtitle": "지원되는 URL을 붙여 넣거나, 이름을 검색", + "homeSubtitle": "지원되는 URL을 붙여넣거나, 이름으로 검색하세요", "@homeSubtitle": { "description": "Subtitle shown below search box" }, @@ -37,7 +37,7 @@ "@homeEmptySubtitle": { "description": "Subtitle shown on home when no providers are available yet" }, - "homeSupports": "지원 항목: 트랙, 앨범, 플레이리스트, 아티스트 URLs", + "homeSupports": "지원 항목: 트랙, 앨범, 플레이리스트, 아티스트 URL", "@homeSupports": { "description": "Info text about supported URL types" }, @@ -272,7 +272,7 @@ "@replayGainBatchAnalyzing": { "description": "Progress dialog title while batch scanning ReplayGain" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainBatchSuccess": "{total} 개의 트랙 중 {success} 개에 리플레이게인이 추가됨", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -1010,7 +1010,7 @@ "@errorUrlNotRecognizedMessage": { "description": "Error message - URL not recognized explanation" }, - "errorUrlFetchFailed": "Failed to load content from this link. Please try again.", + "errorUrlFetchFailed": "이 링크에서 콘텐츠를 불러오는 데 실패하였습니다. 다시 시도해 주세요", "@errorUrlFetchFailed": { "description": "Error message - generic URL fetch failure" }, @@ -1212,11 +1212,11 @@ "@updateStartingDownload": { "description": "Update status - initializing" }, - "updateDownloadFailed": "Download failed", + "updateDownloadFailed": "다운로드 실패", "@updateDownloadFailed": { "description": "Update error title" }, - "updateFailedMessage": "Failed to download update", + "updateFailedMessage": "업데이트 다운로드 실패", "@updateFailedMessage": { "description": "Update error message" }, @@ -1653,7 +1653,7 @@ "@trackLyricsTimeout": { "description": "Message when lyrics request times out" }, - "trackLyricsLoadFailed": "Failed to load lyrics", + "trackLyricsLoadFailed": "가사 불러오기 실패", "@trackLyricsLoadFailed": { "description": "Message when lyrics loading fails" }, @@ -1669,7 +1669,7 @@ "@trackInstrumental": { "description": "Message when track is instrumental (no lyrics)" }, - "trackCopiedToClipboard": "Copied to clipboard", + "trackCopiedToClipboard": "클립보드에 복사됨", "@trackCopiedToClipboard": { "description": "Snackbar - content copied" }, @@ -1784,7 +1784,7 @@ "@storeNewRepoUrlLabel": { "description": "Label for the new repository URL field inside the dialog" }, - "storeLoadError": "Failed to load repository", + "storeLoadError": "리포지토리 불러오기 실패", "@storeLoadError": { "description": "Error heading when the store cannot be loaded" }, @@ -1937,7 +1937,7 @@ } } }, - "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", + "extensionsInstallPartialSuccess": "{attempted} 개의 확장 프로그램 중 {installed} 개가 설치됨", "@extensionsInstallPartialSuccess": { "description": "Message when installing multiple extensions partially succeeds", "placeholders": { @@ -2207,7 +2207,7 @@ "@albumFolderArtistAlbumFlatSubtitle": { "description": "Folder structure example for flat singles" }, - "downloadedAlbumDeleteSelected": "Delete Selected", + "downloadedAlbumDeleteSelected": "선택 항목 삭제", "@downloadedAlbumDeleteSelected": { "description": "Button - delete selected tracks" }, @@ -2220,7 +2220,7 @@ } } }, - "downloadedAlbumSelectedCount": "{count} selected", + "downloadedAlbumSelectedCount": "{count} 개 선택됨", "@downloadedAlbumSelectedCount": { "description": "Selection count indicator", "placeholders": { @@ -2229,7 +2229,7 @@ } } }, - "downloadedAlbumAllSelected": "All tracks selected", + "downloadedAlbumAllSelected": "모든 트랙 선택됨", "@downloadedAlbumAllSelected": { "description": "Status - all items selected" }, @@ -2370,7 +2370,7 @@ } } }, - "discographySelectedCount": "{count} selected", + "discographySelectedCount": "{count} 개 선택됨", "@discographySelectedCount": { "description": "Selection count badge", "placeholders": { @@ -2379,7 +2379,7 @@ } } }, - "discographyDownloadSelected": "Download Selected", + "discographyDownloadSelected": "선택 항목 다운로드", "@discographyDownloadSelected": { "description": "Button - download selected albums" }, @@ -2392,7 +2392,7 @@ } } }, - "discographySkippedDownloaded": "{added} added, {skipped} already downloaded", + "discographySkippedDownloaded": "{added} 개 추가됨, {skipped} 개 이미 다운로드됨", "@discographySkippedDownloaded": { "description": "Snackbar - with skipped tracks count", "placeholders": { @@ -2408,7 +2408,7 @@ "@discographyNoAlbums": { "description": "Error - no albums found for artist" }, - "discographyFailedToFetch": "Failed to fetch some albums", + "discographyFailedToFetch": "일부 앨범 가져오기 실패", "@discographyFailedToFetch": { "description": "Error - some albums failed to load" }, @@ -2500,7 +2500,7 @@ "@libraryAutoScanOff": { "description": "Auto scan disabled" }, - "libraryAutoScanOnOpen": "Every app open", + "libraryAutoScanOnOpen": "열려 있는 모든 앱", "@libraryAutoScanOnOpen": { "description": "Auto scan when app opens" }, @@ -2615,7 +2615,7 @@ "@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": { @@ -2624,7 +2624,7 @@ } } }, - "libraryCleared": "Library cleared", + "libraryCleared": "보관함이 초기화됨", "@libraryCleared": { "description": "Snackbar after clearing library" }, @@ -2700,7 +2700,7 @@ "@libraryFilterMetadata": { "description": "Filter section - metadata completeness" }, - "libraryFilterMetadataComplete": "Complete metadata", + "libraryFilterMetadataComplete": "전체 메타데이터", "@libraryFilterMetadataComplete": { "description": "Filter option - items with complete metadata" }, @@ -3104,7 +3104,7 @@ "@trackReEnrichFieldsTitle": { "description": "Section title for field selection in re-enrich dialog" }, - "trackReEnrichFieldCover": "Cover Art", + "trackReEnrichFieldCover": "표지 아트", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" }, @@ -3136,7 +3136,7 @@ "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" }, - "trackCoverSaved": "Cover art saved to {fileName}", + "trackCoverSaved": "표지 아트가 {fileName}에 저장됨", "@trackCoverSaved": { "description": "Snackbar after cover art saved", "placeholders": { @@ -3149,7 +3149,7 @@ "@trackCoverNoSource": { "description": "Snackbar when no cover art URL or embedded cover" }, - "trackLyricsSaved": "Lyrics saved to {fileName}", + "trackLyricsSaved": "가사가 {fileName}에 저장됨", "@trackLyricsSaved": { "description": "Snackbar after lyrics saved", "placeholders": { @@ -3166,11 +3166,11 @@ "@trackReEnrichSearching": { "description": "Snackbar while searching metadata from internet for local items" }, - "trackReEnrichSuccess": "Metadata re-enriched successfully", + "trackReEnrichSuccess": "메타데이터 재구성 성공", "@trackReEnrichSuccess": { "description": "Snackbar after successful re-enrichment" }, - "trackReEnrichFfmpegFailed": "FFmpeg metadata embed failed", + "trackReEnrichFfmpegFailed": "FFmpeg 메타데이터 삽입 실패", "@trackReEnrichFfmpegFailed": { "description": "Snackbar when FFmpeg embed fails for MP3/Opus" }, @@ -3248,7 +3248,7 @@ "@trackConvertConfirmTitle": { "description": "Confirmation dialog title" }, - "trackConvertConfirmMessage": "Convert from {sourceFormat} to {targetFormat} at {bitrate}?\n\nThe original file will be deleted after conversion.", + "trackConvertConfirmMessage": "{bitrate} 비트레이트로 {sourceFormat} 에서 {targetFormat} 으로 변환하시겠습니까?\n\n변환 후 원본 파일이 삭제됩니다", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", "placeholders": { @@ -3283,7 +3283,7 @@ "@trackConvertConverting": { "description": "Snackbar while converting" }, - "trackConvertSuccess": "Converted to {format} successfully", + "trackConvertSuccess": "{format}으로 변환 성공", "@trackConvertSuccess": { "description": "Snackbar after successful conversion", "placeholders": { @@ -3292,7 +3292,7 @@ } } }, - "trackConvertFailed": "Conversion failed", + "trackConvertFailed": "변환 실패", "@trackConvertFailed": { "description": "Snackbar when conversion fails" }, @@ -3359,7 +3359,7 @@ } } }, - "cueSplitSuccess": "Split into {count} tracks successfully", + "cueSplitSuccess": "{count} 개의 트랙으로 성공적으로 분할", "@cueSplitSuccess": { "description": "Snackbar after successful CUE split", "placeholders": { @@ -3460,7 +3460,7 @@ } } }, - "collectionPlaylistCreated": "Playlist created", + "collectionPlaylistCreated": "재생목록이 생성됨", "@collectionPlaylistCreated": { "description": "Snackbar after creating playlist" }, @@ -3480,7 +3480,7 @@ "@collectionDeletePlaylist": { "description": "Action to delete playlist" }, - "collectionDeletePlaylistMessage": "Delete \"{playlistName}\" and all tracks inside it?", + "collectionDeletePlaylistMessage": "'{playlistName}'과 그 안에 있는 모든 트랙을 삭제하시겠습니까?", "@collectionDeletePlaylistMessage": { "description": "Confirmation message for deleting playlist", "placeholders": { @@ -3489,11 +3489,11 @@ } } }, - "collectionPlaylistDeleted": "Playlist deleted", + "collectionPlaylistDeleted": "재생목록이 삭제됨", "@collectionPlaylistDeleted": { "description": "Snackbar after deleting playlist" }, - "collectionPlaylistRenamed": "Playlist renamed", + "collectionPlaylistRenamed": "재생목록 이름이 변경됨", "@collectionPlaylistRenamed": { "description": "Snackbar after renaming playlist" }, @@ -3624,11 +3624,11 @@ "@artistOptionRemoveFromFavorites": { "description": "Action label - remove artist from favorite artists" }, - "collectionPlaylistChangeCover": "Change cover image", + "collectionPlaylistChangeCover": "표지 이미지 변경", "@collectionPlaylistChangeCover": { "description": "Bottom sheet action to pick a custom cover image for a playlist" }, - "collectionPlaylistRemoveCover": "Remove cover image", + "collectionPlaylistRemoveCover": "표지 이미지 제거", "@collectionPlaylistRemoveCover": { "description": "Bottom sheet action to remove custom cover image from a playlist" }, @@ -3641,7 +3641,7 @@ } } }, - "selectionShareNoFiles": "No shareable files found", + "selectionShareNoFiles": "공유할 수 있는 파일을 찾을 수 없음", "@selectionShareNoFiles": { "description": "Snackbar when no selected files exist on disk" }, @@ -3654,11 +3654,11 @@ } } }, - "selectionConvertNoConvertible": "No convertible tracks selected", + "selectionConvertNoConvertible": "선택된 변환할 수 있는 트랙이 없음", "@selectionConvertNoConvertible": { "description": "Snackbar when no selected tracks support conversion" }, - "selectionBatchConvertConfirmTitle": "Batch Convert", + "selectionBatchConvertConfirmTitle": "일괄 변환", "@selectionBatchConvertConfirmTitle": { "description": "Confirmation dialog title for batch conversion" }, @@ -3689,7 +3689,7 @@ } } }, - "selectionBatchConvertProgress": "Converting {current} of {total}...", + "selectionBatchConvertProgress": "{total} 개 중 {current} 개를 변환하는 중...", "@selectionBatchConvertProgress": { "description": "Snackbar during batch conversion progress", "placeholders": { @@ -3701,7 +3701,7 @@ } } }, - "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", + "selectionBatchConvertSuccess": "{total} 개 중 {success} 개를 {format} 로 변환 완료", "@selectionBatchConvertSuccess": { "description": "Snackbar after batch conversion completes", "placeholders": { @@ -3725,11 +3725,11 @@ } } }, - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "앨범 아티스트 태그로 이름이 지정된 폴더", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { "description": "Subtitle when album artist is used for folder names" }, - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", + "downloadUseAlbumArtistForFoldersTrackSubtitle": "트랙 아티스트 태그로 이름이 지정된 폴더", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { "description": "Subtitle when track artist is used for folder names" }, @@ -3767,7 +3767,7 @@ "@lyricsProvidersAtLeastOne": { "description": "Snackbar when user tries to disable the last enabled provider" }, - "lyricsProvidersSaved": "Lyrics provider priority saved", + "lyricsProvidersSaved": "가사 제공자 우선순위 저장됨", "@lyricsProvidersSaved": { "description": "Snackbar after saving lyrics provider priority" }, @@ -3882,7 +3882,7 @@ "@snackbarLoadingCueSheet": { "description": "Snackbar while loading a CUE sheet file" }, - "snackbarMetadataSaved": "Metadata saved successfully", + "snackbarMetadataSaved": "메타데이터 저장 성공", "@snackbarMetadataSaved": { "description": "Snackbar after successfully saving track metadata" }, @@ -3890,7 +3890,7 @@ "@snackbarFailedToEmbedLyrics": { "description": "Snackbar when lyrics embedding fails" }, - "snackbarFailedToWriteStorage": "Failed to write back to storage", + "snackbarFailedToWriteStorage": "저장소 다시 쓰기 실패", "@snackbarFailedToWriteStorage": { "description": "Snackbar when writing metadata back to file fails" }, @@ -4170,7 +4170,7 @@ } } }, - "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", + "editMetadataAutoFillNoneSelected": "자동 채우기를 위해 하나 이상의 필드를 선택하세요", "@editMetadataAutoFillNoneSelected": { "description": "Snackbar when user taps Fetch without selecting any fields" }, @@ -4218,7 +4218,7 @@ "@editMetadataFieldCopyright": { "description": "Chip label for copyright field in auto-fill selector" }, - "editMetadataFieldCover": "Cover Art", + "editMetadataFieldCover": "표지 아트", "@editMetadataFieldCover": { "description": "Chip label for cover art field in auto-fill selector" }, @@ -4604,7 +4604,7 @@ } } }, - "notifDownloadsCanceledTitle": "Downloads canceled", + "notifDownloadsCanceledTitle": "다운로드 취소됨", "@notifDownloadsCanceledTitle": { "description": "Notification title when downloads are canceled by the user" }, @@ -4797,7 +4797,7 @@ "@optionsEmbedMetadataSubtitleOn": { "description": "Subtitle when metadata embedding is enabled" }, - "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", + "optionsEmbedMetadataSubtitleOff": "비활성화됨 (고급): 모든 메타데이터 삽입 건너뛰기", "@optionsEmbedMetadataSubtitleOff": { "description": "Subtitle when metadata embedding is disabled" }, @@ -4833,7 +4833,7 @@ "@trackCoverSelected": { "description": "Label for the newly selected cover preview" }, - "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", + "trackCoverReplaceNotice": "저장을 탭하면 선택한 표지가 현재 내장된 표지를 대체합니다", "@trackCoverReplaceNotice": { "description": "Notice shown when a new cover has been selected but not saved yet" }, @@ -4926,11 +4926,11 @@ "@logIssueTrackNotFoundLabel": { "description": "Diagnostic badge label when a track is unavailable" }, - "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", + "logIssueTrackNotFoundDescription": "일부 트랙은 다운로드 서비스에서 찾을 수 없습니다", "@logIssueTrackNotFoundDescription": { "description": "Diagnostic badge description when a track is unavailable" }, - "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", + "logIssueTrackNotFoundSuggestion": "트랙이 무손실 음질로 제공되지 않을 수 있습니다", "@logIssueTrackNotFoundSuggestion": { "description": "Diagnostic badge suggestion when a track is unavailable" }, @@ -5104,7 +5104,7 @@ "@metadataProvidersTitle": { "description": "Settings item title for metadata provider order" }, - "metadataProvidersSubtitle": "Drag to set search and metadata source order", + "metadataProvidersSubtitle": "드래그하여 검색 및 메타데이터 소스 순서를 설정하세요", "@metadataProvidersSubtitle": { "description": "Subtitle for metadata provider priority item" }, @@ -5112,7 +5112,7 @@ "@downloadDeduplication": { "description": "Setting - skip tracks already in download history" }, - "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", + "downloadDeduplicationEnabled": "이미 다운로드된 트랙은 건너뜁니다", "@downloadDeduplicationEnabled": { "description": "Subtitle when deduplication is on" }, @@ -5202,7 +5202,7 @@ } } }, - "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", + "collectionAddedTracksToPlaylistWithExisting": "{count} {count, plural, =1{트랙} other{트랙}}이 {playlistName}에 추가됨 ({alreadyCount}트랙은 이미 재생목록에 있음)", "@collectionAddedTracksToPlaylistWithExisting": { "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { @@ -5226,7 +5226,7 @@ } } }, - "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", + "trackReEnrichSuccessWithFailures": "메타데이터가 성공적으로 재구성됨 ({successCount}/{total}) - 실패: {failedCount}", "@trackReEnrichSuccessWithFailures": { "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", "placeholders": { @@ -5271,7 +5271,7 @@ "@a11yDeselectTrack": { "description": "Accessibility label for deselecting a track" }, - "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", + "a11yPlayTrackByArtist": "{artistName} 의 {trackName} 재생", "@a11yPlayTrackByArtist": { "description": "Accessibility label for playing a local library track", "placeholders": { @@ -5301,7 +5301,7 @@ } } }, - "actionGo": "Go", + "actionGo": "이동", "@actionGo": { "description": "Generic action button label" }, @@ -5327,7 +5327,7 @@ } } }, - "libraryScanCancelled": "Scan cancelled", + "libraryScanCancelled": "스캔 취소됨", "@libraryScanCancelled": { "description": "Library scan status when a scan was cancelled" }, @@ -5335,7 +5335,7 @@ "@libraryScanCancelledSubtitle": { "description": "Library scan status subtitle after cancellation" }, - "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", + "libraryDownloadsHistoryExcluded": "다운로드 기록에서 {count} 개 (목록에서 제외됨)", "@libraryDownloadsHistoryExcluded": { "description": "Library count note for downloaded history items excluded from the local list", "placeholders": { @@ -5348,7 +5348,7 @@ "@downloadNativeWorker": { "description": "Setting title for Android native download worker" }, - "downloadNativeWorkerSubtitle": "Beta Android service worker for extension downloads", + "downloadNativeWorkerSubtitle": "확장 프로그램용 베타 Android service worker", "@downloadNativeWorkerSubtitle": { "description": "Setting subtitle for Android native download worker" }, @@ -5394,7 +5394,7 @@ "@extensionCustomUrlHandling": { "description": "Extension detail section title for custom URL handling" }, - "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", + "extensionCustomUrlHandlingSubtitle": "이 확장 프로그램은 다음 사이트의 링크를 처리할 수 있습니다", "@extensionCustomUrlHandlingSubtitle": { "description": "Extension detail subtitle for custom URL handling" }, @@ -5439,11 +5439,11 @@ "@extensionSettingNotSet": { "description": "Value shown when an extension setting has no value" }, - "extensionActionFailed": "Action failed", + "extensionActionFailed": "작업 실패", "@extensionActionFailed": { "description": "Fallback error when an extension action fails without details" }, - "extensionEnterValue": "Enter value", + "extensionEnterValue": "값을 입력하세요", "@extensionEnterValue": { "description": "Hint for editing an extension setting value" }, @@ -5451,7 +5451,7 @@ "@extensionHealthServiceOnline": { "description": "Tooltip for online extension service" }, - "extensionHealthServiceDegraded": "Service degraded", + "extensionHealthServiceDegraded": "서비스 저하됨", "@extensionHealthServiceDegraded": { "description": "Tooltip for degraded extension service" }, @@ -5480,7 +5480,7 @@ } } }, - "trackLyricsEmbeddedSource": "Embedded", + "trackLyricsEmbeddedSource": "내장", "@trackLyricsEmbeddedSource": { "description": "Lyrics source label for embedded lyrics" }, @@ -5504,15 +5504,15 @@ "@permissionNotification": { "description": "Notification permission type label" }, - "errorInvalidFolderSelected": "Invalid folder selected", + "errorInvalidFolderSelected": "잘못된 폴더가 선택됨", "@errorInvalidFolderSelected": { "description": "Error when the selected folder is invalid" }, - "errorCouldNotKeepFolderAccess": "Could not keep access to the selected folder", + "errorCouldNotKeepFolderAccess": "선택한 폴더에 대한 액세스 권한을 유지할 수 없습니다", "@errorCouldNotKeepFolderAccess": { "description": "Error when persistent folder access cannot be saved" }, - "storeAnyVersion": "Any", + "storeAnyVersion": "모든", "@storeAnyVersion": { "description": "Store detail value when any app version is accepted" }, @@ -5536,15 +5536,15 @@ "@storeCategoryIntegration": { "description": "Store extension category - integration" }, - "artistReleases": "Releases", + "artistReleases": "릴리스", "@artistReleases": { "description": "Section header for all artist releases" }, - "editMetadataSelectNone": "None", + "editMetadataSelectNone": "없음", "@editMetadataSelectNone": { "description": "Button to clear selected fields for auto-fill" }, - "queueRetryAllFailed": "Retry {count} failed", + "queueRetryAllFailed": "재시도 {count} 개 실패", "@queueRetryAllFailed": { "description": "Button to retry every failed download in the queue", "placeholders": { @@ -5553,7 +5553,7 @@ } } }, - "settingsSaveDownloadHistory": "Save download history", + "settingsSaveDownloadHistory": "다운로드 기록 저장", "@settingsSaveDownloadHistory": { "description": "Settings switch title for storing completed downloads in history" }, @@ -5589,7 +5589,7 @@ "@shareSheetCopyLink": { "description": "Tooltip for copying a cross-service link" }, - "shareSheetLinkCopied": "{service} link copied", + "shareSheetLinkCopied": "{service} 링크가 복사됨", "@shareSheetLinkCopied": { "description": "Snackbar after copying a cross-service link", "placeholders": { From 4fabd8cfd0d5194fd314fabcba4d8ed7bc710009 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 30 Jun 2026 23:54:56 +0700 Subject: [PATCH 069/137] New translations app_en.arb (Chinese Simplified) [ci skip] --- lib/l10n/arb/app_zh_CN.arb | 214 ++++++++++++++++++------------------- 1 file changed, 107 insertions(+), 107 deletions(-) diff --git a/lib/l10n/arb/app_zh_CN.arb b/lib/l10n/arb/app_zh_CN.arb index 32203c73..9d5a9cce 100644 --- a/lib/l10n/arb/app_zh_CN.arb +++ b/lib/l10n/arb/app_zh_CN.arb @@ -226,27 +226,27 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, - "trackReplayGain": "重新扫描回放增益", + "trackReplayGain": "重新扫描ReplayGain ", "@trackReplayGain": { "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "trackReplayGainSubtitle": "分析响度并写入回放增益标签", + "trackReplayGainSubtitle": "分析响度并写入ReplayGain标签", "@trackReplayGainSubtitle": { "description": "Subtitle for the rescan ReplayGain menu option" }, - "trackReplayGainScanning": "正在分析声音...", + "trackReplayGainScanning": "正在分析声音……", "@trackReplayGainScanning": { "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "trackReplayGainSuccess": "回放增益标签已添加", + "trackReplayGainSuccess": "ReplayGain标签已添加", "@trackReplayGainSuccess": { "description": "Snackbar message after ReplayGain tags written for a single track" }, - "trackReplayGainFailed": "添加回放增益标签失败", + "trackReplayGainFailed": "添加ReplayGain标签失败", "@trackReplayGainFailed": { "description": "Snackbar message when ReplayGain scan/write fails" }, - "selectionReplayGainCount": "回放增益 ({count})", + "selectionReplayGainCount": "ReplayGain ({count})", "@selectionReplayGainCount": { "description": "Batch selection action button label for ReplayGain", "placeholders": { @@ -255,11 +255,11 @@ } } }, - "replayGainBatchConfirmTitle": "添加回放增益", + "replayGainBatchConfirmTitle": "添加ReplayGain", "@replayGainBatchConfirmTitle": { "description": "Title of the batch ReplayGain confirmation dialog" }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "replayGainBatchConfirmMessage": "要分析响度并向 {count} 首歌曲写入 ReplayGain 标签吗?", "@replayGainBatchConfirmMessage": { "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { @@ -268,11 +268,11 @@ } } }, - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "replayGainBatchAnalyzing": "正在分析ReplayGain...", "@replayGainBatchAnalyzing": { "description": "Progress dialog title while batch scanning ReplayGain" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainBatchSuccess": "已为 {success}/{total} 首歌曲添加 ReplayGain", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -288,15 +288,15 @@ "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" }, - "optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.", + "optionsArtistTagModeDescription": "选择将多位艺人写入嵌入标签的方式", "@optionsArtistTagModeDescription": { "description": "Bottom-sheet description for artist tag mode setting" }, - "optionsArtistTagModeJoined": "Single joined value", + "optionsArtistTagModeJoined": "合并为单个值", "@optionsArtistTagModeJoined": { "description": "Artist tag mode option that joins multiple artists into one value" }, - "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", + "optionsArtistTagModeJoinedSubtitle": "写一个ARTIST 值,如“艺术家A,艺人B”,以实现最大兼容性。", "@optionsArtistTagModeJoinedSubtitle": { "description": "Subtitle for joined artist tag mode" }, @@ -304,15 +304,15 @@ "@optionsArtistTagModeSplitVorbis": { "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", + "optionsArtistTagModeSplitVorbisSubtitle": "为 FLAC 和 Opus 的每位艺人各写入一个艺人标签;MP3 和 M4A 保持合并", "@optionsArtistTagModeSplitVorbisSubtitle": { "description": "Subtitle for split Vorbis artist tag mode" }, - "optionsExtensionStore": "Extension Repo", + "optionsExtensionStore": "扩展仓库", "@optionsExtensionStore": { "description": "Show/hide store tab" }, - "optionsExtensionStoreSubtitle": "Show Repo tab in navigation", + "optionsExtensionStoreSubtitle": "在导航中显示仓库标签页", "@optionsExtensionStoreSubtitle": { "description": "Subtitle for extension store toggle" }, @@ -415,7 +415,7 @@ "@extensionsUninstall": { "description": "Uninstall extension button" }, - "storeTitle": "Extension Repo", + "storeTitle": "扩展仓库地址", "@storeTitle": { "description": "Store screen title" }, @@ -475,7 +475,7 @@ "@aboutPCSource": { "description": "Link to PC GitHub repo" }, - "aboutKeepAndroidOpen": "Keep Android Open", + "aboutKeepAndroidOpen": "Keep Android Open(保持安卓开放)", "@aboutKeepAndroidOpen": { "description": "Link to Keep Android Open campaign website" }, @@ -487,31 +487,31 @@ "@aboutReportIssueSubtitle": { "description": "Subtitle for report issue" }, - "aboutFeatureRequest": "Feature request", + "aboutFeatureRequest": "功能建议", "@aboutFeatureRequest": { "description": "Link to suggest features" }, - "aboutFeatureRequestSubtitle": "Suggest new features for the app", + "aboutFeatureRequestSubtitle": "为应用建议新功能", "@aboutFeatureRequestSubtitle": { "description": "Subtitle for feature request" }, - "aboutTelegramChannel": "Telegram Channel", + "aboutTelegramChannel": "Telegram 频道", "@aboutTelegramChannel": { "description": "Link to Telegram channel" }, - "aboutTelegramChannelSubtitle": "Announcements and updates", + "aboutTelegramChannelSubtitle": "公告和更新", "@aboutTelegramChannelSubtitle": { "description": "Subtitle for Telegram channel" }, - "aboutTelegramChat": "Telegram Community", + "aboutTelegramChat": "Telegram 社区", "@aboutTelegramChat": { "description": "Link to Telegram chat group" }, - "aboutTelegramChatSubtitle": "Chat with other users", + "aboutTelegramChatSubtitle": "与其他用户聊天", "@aboutTelegramChatSubtitle": { "description": "Subtitle for Telegram chat" }, - "aboutSocial": "Social", + "aboutSocial": "社交", "@aboutSocial": { "description": "Section for social links" }, @@ -519,43 +519,43 @@ "@aboutApp": { "description": "Section for app info" }, - "aboutVersion": "Version", + "aboutVersion": "版本", "@aboutVersion": { "description": "Version info label" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "aboutBinimumDesc": "QQDL 和 HiFi API 的创建者。本项目帮助完善了无损下载支持。", "@aboutBinimumDesc": { "description": "Credit description for binimum" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "aboutSachinsenalDesc": "原 HiFi 项目创建者,为无损来源集成奠定了基础。", "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutSjdonadoDesc": "Creator of I Don't Have Spotify (IDHS). The fallback link resolver that saves the day!", + "aboutSjdonadoDesc": "I Don't Have Spotify (IDHS) 的创建者。备用链接解析器很有帮助!", "@aboutSjdonadoDesc": { "description": "Credit description for sjdonado" }, - "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", + "aboutAppDescription": "搜索音乐元数据、管理扩展并整理你的乐库。", "@aboutAppDescription": { "description": "App description in header card" }, - "artistAlbums": "Albums", + "artistAlbums": "专辑", "@artistAlbums": { "description": "Section header for artist albums" }, - "artistSingles": "Singles & EPs", + "artistSingles": "单曲 & EP", "@artistSingles": { "description": "Section header for singles/EPs" }, - "artistCompilations": "Compilations", + "artistCompilations": "合辑", "@artistCompilations": { "description": "Section header for compilations" }, - "artistPopular": "Popular", + "artistPopular": "热门", "@artistPopular": { "description": "Section header for popular/top tracks" }, - "artistMonthlyListeners": "{count} monthly listeners", + "artistMonthlyListeners": "{count} 位月听众", "@artistMonthlyListeners": { "description": "Monthly listener count display", "placeholders": { @@ -565,47 +565,47 @@ } } }, - "trackMetadataService": "Service", + "trackMetadataService": "服务商", "@trackMetadataService": { "description": "Metadata field - download service used" }, - "trackMetadataPlay": "Play", + "trackMetadataPlay": "播放", "@trackMetadataPlay": { "description": "Action button - play track" }, - "trackMetadataShare": "Share", + "trackMetadataShare": "分享", "@trackMetadataShare": { "description": "Action button - share track" }, - "trackMetadataDelete": "Delete", + "trackMetadataDelete": "删除", "@trackMetadataDelete": { "description": "Action button - delete track" }, - "setupGrantPermission": "Grant Permission", + "setupGrantPermission": "授予权限", "@setupGrantPermission": { "description": "Button to request permission" }, - "setupSkip": "Skip for now", + "setupSkip": "暂时跳过", "@setupSkip": { "description": "Skip current step button" }, - "setupStorageAccessRequired": "Storage Access Required", + "setupStorageAccessRequired": "需要存储访问权限", "@setupStorageAccessRequired": { "description": "Title when storage access needed" }, - "setupStorageAccessMessageAndroid11": "Android 11+ requires \"All files access\" permission to save files to your chosen download folder.", + "setupStorageAccessMessageAndroid11": "Android 11+ 需要“所有文件访问权限”才能将文件保存到你选择的下载文件夹。", "@setupStorageAccessMessageAndroid11": { "description": "Android 11+ specific explanation" }, - "setupOpenSettings": "Open Settings", + "setupOpenSettings": "打开设置", "@setupOpenSettings": { "description": "Button to open system settings" }, - "setupPermissionDeniedMessage": "Permission denied. Please grant all permissions to continue.", + "setupPermissionDeniedMessage": "权限被拒绝。请授予所有权限以继续。", "@setupPermissionDeniedMessage": { "description": "Error when permission denied" }, - "setupPermissionRequired": "{permissionType} Permission Required", + "setupPermissionRequired": "需要 {permissionType} 权限", "@setupPermissionRequired": { "description": "Generic permission required title", "placeholders": { @@ -615,7 +615,7 @@ } } }, - "setupPermissionRequiredMessage": "{permissionType} permission is required for the best experience. You can change this later in Settings.", + "setupPermissionRequiredMessage": "为了获得最佳体验,需要 {permissionType} 权限。你可以稍后在设置中更改。", "@setupPermissionRequiredMessage": { "description": "Generic permission required message", "placeholders": { @@ -624,67 +624,67 @@ } } }, - "setupUseDefaultFolder": "Use Default Folder?", + "setupUseDefaultFolder": "使用默认文件夹?", "@setupUseDefaultFolder": { "description": "Dialog title for default folder" }, - "setupNoFolderSelected": "No folder selected. Would you like to use the default Music folder?", + "setupNoFolderSelected": "未选择文件夹。要使用默认音乐文件夹吗?", "@setupNoFolderSelected": { "description": "Prompt when no folder selected" }, - "setupUseDefault": "Use Default", + "setupUseDefault": "使用默认", "@setupUseDefault": { "description": "Button to use default folder" }, - "setupDownloadLocationTitle": "Download Location", + "setupDownloadLocationTitle": "下载位置", "@setupDownloadLocationTitle": { "description": "Download location dialog title" }, - "setupDownloadLocationIosMessage": "On iOS, downloads are saved to the app's Documents folder. You can access them via the Files app.", + "setupDownloadLocationIosMessage": "在 iOS 上,下载内容会保存到应用的 Documents 文件夹。你可以通过“文件”应用访问。", "@setupDownloadLocationIosMessage": { "description": "iOS-specific folder info" }, - "setupAppDocumentsFolder": "App Documents Folder", + "setupAppDocumentsFolder": "应用程序文档文件夹", "@setupAppDocumentsFolder": { "description": "iOS documents folder option" }, - "setupAppDocumentsFolderSubtitle": "Recommended - accessible via Files app", + "setupAppDocumentsFolderSubtitle": "推荐 - 可通过“文件”应用访问", "@setupAppDocumentsFolderSubtitle": { "description": "Subtitle for documents folder" }, - "setupChooseFromFiles": "Choose from Files", + "setupChooseFromFiles": "从“文件”中选择", "@setupChooseFromFiles": { "description": "iOS file picker option" }, - "setupChooseFromFilesSubtitle": "Select iCloud or other location", + "setupChooseFromFilesSubtitle": "选择 iCloud 或其他位置", "@setupChooseFromFilesSubtitle": { "description": "Subtitle for file picker" }, - "setupIosEmptyFolderWarning": "iOS limitation: Empty folders cannot be selected. Choose a folder with at least one file.", + "setupIosEmptyFolderWarning": "iOS 限制:无法选择空文件夹。请选择至少包含一个文件的文件夹。", "@setupIosEmptyFolderWarning": { "description": "iOS folder selection warning" }, - "setupIcloudNotSupported": "iCloud Drive is not supported. Please use the app Documents folder.", + "setupIcloudNotSupported": "不支持 iCloud Drive。请使用应用 Documents 文件夹。", "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, - "setupDownloadInFlac": "Download Spotify tracks in FLAC", + "setupDownloadInFlac": "以 FLAC 下载 Spotify 曲目", "@setupDownloadInFlac": { "description": "App tagline in setup" }, - "setupStorageGranted": "Storage Permission Granted!", + "setupStorageGranted": "已授予存储权限!", "@setupStorageGranted": { "description": "Success message for storage permission" }, - "setupStorageRequired": "Storage Permission Required", + "setupStorageRequired": "需要存储权限", "@setupStorageRequired": { "description": "Title when storage permission needed" }, - "setupStorageDescription": "SpotiFLAC needs storage permission to save your downloaded music files.", + "setupStorageDescription": "SpotiFLAC 需要存储权限来保存下载的音乐文件。", "@setupStorageDescription": { "description": "Explanation for storage permission" }, - "setupNotificationGranted": "Notification Permission Granted!", + "setupNotificationGranted": "已授予通知权限!", "@setupNotificationGranted": { "description": "Success message for notification permission" }, @@ -708,107 +708,107 @@ "@setupEnableNotifications": { "description": "Button to enable notifications" }, - "setupNotificationBackgroundDescription": "Get notified about download progress and completion. This helps you track downloads when the app is in background.", + "setupNotificationBackgroundDescription": "接收下载进度和完成通知,方便你在应用后台时跟踪下载。", "@setupNotificationBackgroundDescription": { "description": "Detailed notification explanation" }, - "setupSkipForNow": "Skip for now", + "setupSkipForNow": "暂时跳过", "@setupSkipForNow": { "description": "Skip button text" }, - "setupNext": "Next", + "setupNext": "下一步", "@setupNext": { "description": "Next button text" }, - "setupGetStarted": "Get Started", + "setupGetStarted": "开始使用", "@setupGetStarted": { "description": "Final setup button" }, - "setupAllowAccessToManageFiles": "Please enable \"Allow access to manage all files\" in the next screen.", + "setupAllowAccessToManageFiles": "请在下一个屏幕中启用“允许管理所有文件”。", "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, - "setupLanguageTitle": "Choose Language", + "setupLanguageTitle": "选择语言", "@setupLanguageTitle": { "description": "Title for the language selection step in setup" }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "setupLanguageDescription": "选择应用的首选语言。你可以稍后在设置中更改。", "@setupLanguageDescription": { "description": "Description for the language selection step in setup" }, - "setupLanguageSystemDefault": "System Default", + "setupLanguageSystemDefault": "跟随系统", "@setupLanguageSystemDefault": { "description": "Option to use the system language" }, - "dialogCancel": "Cancel", + "dialogCancel": "取消", "@dialogCancel": { "description": "Dialog button - cancel action" }, - "dialogSave": "Save", + "dialogSave": "保存", "@dialogSave": { "description": "Dialog button - save changes" }, - "dialogDelete": "Delete", + "dialogDelete": "删除", "@dialogDelete": { "description": "Dialog button - delete item" }, - "dialogRetry": "Retry", + "dialogRetry": "重试", "@dialogRetry": { "description": "Dialog button - retry action" }, - "dialogClear": "Clear", + "dialogClear": "清空", "@dialogClear": { "description": "Dialog button - clear items" }, - "dialogDone": "Done", + "dialogDone": "完成", "@dialogDone": { "description": "Dialog button - action completed" }, - "dialogImport": "Import", + "dialogImport": "导入", "@dialogImport": { "description": "Dialog button - import data" }, - "dialogDownload": "Download", + "dialogDownload": "下载", "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "dialogDiscard": "Discard", + "dialogDiscard": "放弃", "@dialogDiscard": { "description": "Dialog button - discard changes" }, - "dialogRemove": "Remove", + "dialogRemove": "移除", "@dialogRemove": { "description": "Dialog button - remove item" }, - "dialogUninstall": "Uninstall", + "dialogUninstall": "卸载", "@dialogUninstall": { "description": "Dialog button - uninstall extension" }, - "dialogDiscardChanges": "Discard Changes?", + "dialogDiscardChanges": "放弃更改?", "@dialogDiscardChanges": { "description": "Dialog title - unsaved changes warning" }, - "dialogUnsavedChanges": "You have unsaved changes. Do you want to discard them?", + "dialogUnsavedChanges": "您有未保存的更改,要放弃它们吗?", "@dialogUnsavedChanges": { "description": "Dialog message - unsaved changes" }, - "dialogClearAll": "Clear All", + "dialogClearAll": "全部清除", "@dialogClearAll": { "description": "Dialog title - clear all items" }, - "dialogRemoveExtension": "Remove Extension", + "dialogRemoveExtension": "移除扩展", "@dialogRemoveExtension": { "description": "Dialog title - uninstall extension" }, - "dialogRemoveExtensionMessage": "Are you sure you want to remove this extension? This cannot be undone.", + "dialogRemoveExtensionMessage": "确定要移除此扩展吗?此操作无法撤销。", "@dialogRemoveExtensionMessage": { "description": "Dialog message - uninstall confirmation" }, - "dialogUninstallExtension": "Uninstall Extension?", + "dialogUninstallExtension": "卸载扩展?", "@dialogUninstallExtension": { "description": "Dialog title - uninstall extension" }, - "dialogUninstallExtensionMessage": "Are you sure you want to remove {extensionName}?", + "dialogUninstallExtensionMessage": "确定要移除 {extensionName} 吗?", "@dialogUninstallExtensionMessage": { "description": "Dialog message - uninstall specific extension", "placeholders": { @@ -817,19 +817,19 @@ } } }, - "dialogClearHistoryTitle": "Clear History", + "dialogClearHistoryTitle": "清除历史", "@dialogClearHistoryTitle": { "description": "Dialog title - clear download history" }, - "dialogClearHistoryMessage": "Are you sure you want to clear all download history? This cannot be undone.", + "dialogClearHistoryMessage": "您确定要清除所有下载记录吗?此操作无法撤销!", "@dialogClearHistoryMessage": { "description": "Dialog message - clear history confirmation" }, - "dialogDeleteSelectedTitle": "Delete Selected", + "dialogDeleteSelectedTitle": "删除所选项", "@dialogDeleteSelectedTitle": { "description": "Dialog title - delete selected items" }, - "dialogDeleteSelectedMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from history?\n\nThis will also delete the files from storage.", + "dialogDeleteSelectedMessage": "确定要从历史记录中删除 {count} {count, plural, =1{首歌曲} other{首歌曲}}吗?\n\n这也会从存储中删除文件。", "@dialogDeleteSelectedMessage": { "description": "Dialog message - delete selected tracks", "placeholders": { @@ -838,12 +838,12 @@ } } }, - "dialogImportPlaylistTitle": "Import Playlist", + "dialogImportPlaylistTitle": "导入播放列表", "@dialogImportPlaylistTitle": { "description": "Dialog title - import CSV playlist" }, - "dialogImportPlaylistMessage": "Found {count} tracks in CSV. Add them to download queue?", - "csvImportTracks": "{count} tracks from CSV", + "dialogImportPlaylistMessage": "在 CSV 中找到 {count} 首歌曲。要将它们加入下载队列吗?", + "csvImportTracks": "CSV 中的 {count} 首歌曲", "@csvImportTracks": { "description": "Label shown in quality picker for CSV import", "placeholders": { @@ -860,7 +860,7 @@ } } }, - "snackbarAddedToQueue": "Added \"{trackName}\" to queue", + "snackbarAddedToQueue": "已将“{trackName}”加入队列", "@snackbarAddedToQueue": { "description": "Snackbar - track added to download queue", "placeholders": { @@ -869,7 +869,7 @@ } } }, - "snackbarAddedTracksToQueue": "Added {count} tracks to queue", + "snackbarAddedTracksToQueue": "已将 {count} 首歌曲加入队列", "@snackbarAddedTracksToQueue": { "description": "Snackbar - multiple tracks added to queue", "placeholders": { @@ -878,7 +878,7 @@ } } }, - "snackbarAlreadyDownloaded": "\"{trackName}\" already downloaded", + "snackbarAlreadyDownloaded": "“{trackName}”已下载", "@snackbarAlreadyDownloaded": { "description": "Snackbar - track already exists", "placeholders": { @@ -887,7 +887,7 @@ } } }, - "snackbarAlreadyInLibrary": "\"{trackName}\" already exists in your library", + "snackbarAlreadyInLibrary": "“{trackName}”已存在于你的乐库中", "@snackbarAlreadyInLibrary": { "description": "Snackbar - track already exists in local library", "placeholders": { @@ -896,19 +896,19 @@ } } }, - "snackbarHistoryCleared": "History cleared", + "snackbarHistoryCleared": "历史记录已清除", "@snackbarHistoryCleared": { "description": "Snackbar - history deleted" }, - "snackbarCredentialsSaved": "Credentials saved", + "snackbarCredentialsSaved": "凭据已保存", "@snackbarCredentialsSaved": { "description": "Snackbar - Spotify credentials saved" }, - "snackbarCredentialsCleared": "Credentials cleared", + "snackbarCredentialsCleared": "凭据已清除", "@snackbarCredentialsCleared": { "description": "Snackbar - Spotify credentials removed" }, - "snackbarDeletedTracks": "Deleted {count} {count, plural, =1{track} other{tracks}}", + "snackbarDeletedTracks": "已删除 {count} {count, plural, =1{首歌曲} other{首歌曲}}", "@snackbarDeletedTracks": { "description": "Snackbar - tracks deleted", "placeholders": { @@ -917,7 +917,7 @@ } } }, - "snackbarCannotOpenFile": "Cannot open file: {error}", + "snackbarCannotOpenFile": "无法打开文件:{error}", "@snackbarCannotOpenFile": { "description": "Snackbar - file open error", "placeholders": { @@ -926,11 +926,11 @@ } } }, - "snackbarFillAllFields": "Please fill all fields", + "snackbarFillAllFields": "请填写所有字段", "@snackbarFillAllFields": { "description": "Snackbar - validation error" }, - "snackbarViewQueue": "View Queue", + "snackbarViewQueue": "查看队列", "@snackbarViewQueue": { "description": "Snackbar action - view download queue" }, From 0cab0367180ff6b90d9291e2a56dcd4d6ff88446 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 01:47:32 +0700 Subject: [PATCH 070/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 23bce1d8..ce27e8b6 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -178,11 +178,11 @@ "@optionsSwitchBack": { "description": "Hint to switch back from extension search" }, - "optionsAutoFallback": "자동 재시도", + "optionsAutoFallback": "자동 대체", "@optionsAutoFallback": { "description": "Auto-retry with other services" }, - "optionsAutoFallbackSubtitle": "다운로드가 실패한 경우, 다른 서비스로 재시도", + "optionsAutoFallbackSubtitle": "다운로드가 실패한 경우에 다른 서비스를 이용해 보세요", "@optionsAutoFallbackSubtitle": { "description": "Subtitle for auto fallback" }, @@ -328,11 +328,11 @@ "@optionsUpdateChannel": { "description": "Stable vs preview releases" }, - "optionsUpdateChannelStable": "안정적인 버전만 수령", + "optionsUpdateChannelStable": "안정적인 버전만 받기", "@optionsUpdateChannelStable": { "description": "Only stable updates" }, - "optionsUpdateChannelPreview": "미리보기 버전을 수령", + "optionsUpdateChannelPreview": "미리보기 버전을 받기", "@optionsUpdateChannelPreview": { "description": "Include beta/preview updates" }, @@ -344,7 +344,7 @@ "@optionsClearHistory": { "description": "Delete all download history" }, - "optionsClearHistorySubtitle": "기록에서 모든 다운로드 음반을 제거합니다", + "optionsClearHistorySubtitle": "기록에서 모든 다운로드한 트랙을 제거합니다", "@optionsClearHistorySubtitle": { "description": "Subtitle for clear history" }, @@ -373,7 +373,7 @@ } } }, - "optionsSpotifyCredentialsRequired": "탭하여 설정", + "optionsSpotifyCredentialsRequired": "필수 - 탭하여 설정", "@optionsSpotifyCredentialsRequired": { "description": "Prompt to set up credentials" }, @@ -389,7 +389,7 @@ "@extensionsTitle": { "description": "Extensions page title" }, - "extensionsDisabled": "비활성화", + "extensionsDisabled": "비활성화됨", "@extensionsDisabled": { "description": "Extension status - inactive" }, @@ -411,7 +411,7 @@ } } }, - "extensionsUninstall": "삭제", + "extensionsUninstall": "제거", "@extensionsUninstall": { "description": "Uninstall extension button" }, @@ -547,7 +547,7 @@ "@artistSingles": { "description": "Section header for singles/EPs" }, - "artistCompilations": "편집", + "artistCompilations": "컴필레이션", "@artistCompilations": { "description": "Section header for compilations" }, @@ -565,7 +565,7 @@ } } }, - "trackMetadataService": "제공업체", + "trackMetadataService": "제공자", "@trackMetadataService": { "description": "Metadata field - download service used" }, @@ -581,7 +581,7 @@ "@trackMetadataDelete": { "description": "Action button - delete track" }, - "setupGrantPermission": "권한을 제공해 주세요.", + "setupGrantPermission": "권한을 부여해 주세요", "@setupGrantPermission": { "description": "Button to request permission" }, @@ -2075,7 +2075,7 @@ "@downloadLossyOpus128Subtitle": { "description": "Subtitle for Opus 128kbps lossy option" }, - "qualityNote": "Actual quality depends on track availability from the service", + "qualityNote": "실제 품질은 서비스의 트랙 가용성에 따라 달라집니다", "@qualityNote": { "description": "Note about quality availability" }, @@ -2611,7 +2611,7 @@ } } }, - "libraryInLibrary": "In Library", + "libraryInLibrary": "보관함에서", "@libraryInLibrary": { "description": "Badge shown on tracks that exist in local library" }, @@ -3662,7 +3662,7 @@ "@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": "{count} {count, plural, =1{트랙} other{트랙}}을 {bitrate} 비트레이트로 {format} 으로 변환하시겠습니까?\n\n변환 후 원본 파일이 삭제됩니다", "@selectionBatchConvertConfirmMessage": { "description": "Confirmation dialog message for batch conversion", "placeholders": { @@ -3677,7 +3677,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": "{count} {count, plural, =1{트랙} other{트랙}}을 {format} 으로 변환하시겠습니까? (무손실 — 음질 손실 없음)\n\n변환 후 원본 파일이 삭제됩니다", "@selectionBatchConvertConfirmMessageLossless": { "description": "Confirmation dialog message for lossless batch conversion", "placeholders": { From 5257a035d755f6a95c762831cd86f3d8be736c4d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:40 +0700 Subject: [PATCH 071/137] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index f4accadd..325718d2 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -772,6 +772,18 @@ "@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": "Ignorer", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Utilisez l'artiste de l'album pour les dossiers", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Tout aimer", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "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" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 57f09cc50c12fd57b9e225d6f580a47f4aac2399 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:42 +0700 Subject: [PATCH 072/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 529 +++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 5fc12b1e..10544dbd 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -772,6 +772,18 @@ "@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": "Descartar", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Usar álbum de artista cómo carpeta", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 3802df0abdff10eb33bd3c4c4bdf0bcf7452ef55 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:44 +0700 Subject: [PATCH 073/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 2c446d0e..46575ffd 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -772,6 +772,18 @@ "@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" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "استخدام فنان الألبوم للمجلدات", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 08541741406fe905185d657600f1025a4c0e498a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:45 +0700 Subject: [PATCH 074/137] New translations app_en.arb (German) [ci skip] --- lib/l10n/arb/app_de.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb index c3ed22de..a5ca8e94 100644 --- a/lib/l10n/arb/app_de.arb +++ b/lib/l10n/arb/app_de.arb @@ -772,6 +772,18 @@ "@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": "Verwerfen", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Album-Künstler für Ordner verwenden", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Alle lieben", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 59b953d577a9d453de677a85bc1ce1a1ff8b6b8f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:47 +0700 Subject: [PATCH 075/137] New translations app_en.arb (Japanese) [ci skip] --- lib/l10n/arb/app_ja.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_ja.arb b/lib/l10n/arb/app_ja.arb index 87923b8f..f2259420 100644 --- a/lib/l10n/arb/app_ja.arb +++ b/lib/l10n/arb/app_ja.arb @@ -772,6 +772,18 @@ "@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" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From c1a6262d964b05ed2c7c187069dd48fb2c010df4 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:49 +0700 Subject: [PATCH 076/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index ce27e8b6..87a0e9e8 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -772,6 +772,18 @@ "@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" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "폴더에 앨범 아티스트 사용", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "모든 즐겨찾기", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "이 옵션을 활성화하려면 품질 옵션이 있는 공급자를 선택하세요", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From ed2c7606c332647ffdb358b43fc47015403c5a71 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:51 +0700 Subject: [PATCH 077/137] New translations app_en.arb (Dutch) [ci skip] --- lib/l10n/arb/app_nl.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_nl.arb b/lib/l10n/arb/app_nl.arb index f0e0e5b2..f3d98d86 100644 --- a/lib/l10n/arb/app_nl.arb +++ b/lib/l10n/arb/app_nl.arb @@ -772,6 +772,18 @@ "@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": "Discard", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 00e8280d228b8aa6bd80d08e5c15afbd8cdeda7b Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:52 +0700 Subject: [PATCH 078/137] New translations app_en.arb (Portuguese) [ci skip] --- lib/l10n/arb/app_pt_PT.arb | 529 +++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_pt_PT.arb b/lib/l10n/arb/app_pt_PT.arb index f859d0c5..98c0351b 100644 --- a/lib/l10n/arb/app_pt_PT.arb +++ b/lib/l10n/arb/app_pt_PT.arb @@ -772,6 +772,18 @@ "@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": "Descartar", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 72a9691c55b8b7724b8d369e2ce6b5b7959df9a9 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:54 +0700 Subject: [PATCH 079/137] New translations app_en.arb (Russian) [ci skip] --- lib/l10n/arb/app_ru.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_ru.arb b/lib/l10n/arb/app_ru.arb index 560b48ad..fb9888a0 100644 --- a/lib/l10n/arb/app_ru.arb +++ b/lib/l10n/arb/app_ru.arb @@ -772,6 +772,18 @@ "@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" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Использовать исполнителя альбома для папок", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 91b88a40ea5cad0fddd8fbfe39cec38acf28bc3e Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:56 +0700 Subject: [PATCH 080/137] New translations app_en.arb (Turkish) [ci skip] --- lib/l10n/arb/app_tr.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_tr.arb b/lib/l10n/arb/app_tr.arb index 202285af..516097b6 100644 --- a/lib/l10n/arb/app_tr.arb +++ b/lib/l10n/arb/app_tr.arb @@ -772,6 +772,18 @@ "@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" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Klasörler için Albüm Sanatçısı'nı kullan", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 5cb6faa2d66b3d654d69ff710d7f44163024cbe0 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:57 +0700 Subject: [PATCH 081/137] New translations app_en.arb (Ukrainian) [ci skip] --- lib/l10n/arb/app_uk.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_uk.arb b/lib/l10n/arb/app_uk.arb index 806840ec..510be971 100644 --- a/lib/l10n/arb/app_uk.arb +++ b/lib/l10n/arb/app_uk.arb @@ -772,6 +772,18 @@ "@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" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Використовувати виконавця альбому для папок", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Уподобати всіх", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 532042e39e3df35928539bc1e001b7583817d62a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:21:59 +0700 Subject: [PATCH 082/137] New translations app_en.arb (Chinese Simplified) [ci skip] --- lib/l10n/arb/app_zh_CN.arb | 529 +++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_zh_CN.arb b/lib/l10n/arb/app_zh_CN.arb index 9d5a9cce..921530c0 100644 --- a/lib/l10n/arb/app_zh_CN.arb +++ b/lib/l10n/arb/app_zh_CN.arb @@ -772,6 +772,18 @@ "@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" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 1c4670830315a2152b3b2701aa1d105bf54b131f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:22:01 +0700 Subject: [PATCH 083/137] New translations app_en.arb (Chinese Traditional) [ci skip] --- lib/l10n/arb/app_zh_TW.arb | 529 +++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_zh_TW.arb b/lib/l10n/arb/app_zh_TW.arb index e158fb3b..0c06cdbd 100644 --- a/lib/l10n/arb/app_zh_TW.arb +++ b/lib/l10n/arb/app_zh_TW.arb @@ -772,6 +772,18 @@ "@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": "Discard", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From dc60ad11374cff21fe1da1c403102c775ac89dad Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:22:02 +0700 Subject: [PATCH 084/137] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 424b2721..1c409e72 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -772,6 +772,18 @@ "@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": "Buang", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Gunakan Artis Album untuk folder", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From 159b7c2ab6b734903293d221db493961f3b18374 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:22:04 +0700 Subject: [PATCH 085/137] New translations app_en.arb (Hindi) [ci skip] --- lib/l10n/arb/app_hi.arb | 529 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/lib/l10n/arb/app_hi.arb b/lib/l10n/arb/app_hi.arb index a765d76f..f59ef207 100644 --- a/lib/l10n/arb/app_hi.arb +++ b/lib/l10n/arb/app_hi.arb @@ -772,6 +772,18 @@ "@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": "Discard", "@dialogDiscard": { "description": "Dialog button - discard changes" @@ -2095,6 +2107,10 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, + "albumFolderStructureDescription": "Choose how album folders are structured", + "@albumFolderStructureDescription": { + "description": "Album folder structure picker description" + }, "downloadUseAlbumArtistForFolders": "Use Album Artist for folders", "@downloadUseAlbumArtistForFolders": { "description": "Setting - choose whether artist folders use Album Artist or Track Artist" @@ -3827,6 +3843,169 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, + "settingsBackup": "Backup & Restore", + "@settingsBackup": { + "description": "Settings menu item - backup and restore page" + }, + "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "@settingsBackupSubtitle": { + "description": "Subtitle for backup and restore settings item" + }, + "backupTitle": "Backup & Restore", + "@backupTitle": { + "description": "App bar title for the backup and restore page" + }, + "backupExportSectionTitle": "Create backup", + "@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": { + "description": "Description of what a backup contains" + }, + "backupExportButton": "Create backup file", + "@backupExportButton": { + "description": "Button to create and share a backup file" + }, + "backupImportSectionTitle": "Restore backup", + "@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": { + "description": "Description for the restore action" + }, + "backupImportButton": "Choose backup file", + "@backupImportButton": { + "description": "Button to pick a backup file to restore" + }, + "backupCreating": "Creating backup...", + "@backupCreating": { + "description": "Progress text while a backup is being created" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "backupEmpty": "There is nothing to back up yet", + "@backupEmpty": { + "description": "Snackbar when there is no data to back up" + }, + "backupRestoreConfirmTitle": "Restore this backup?", + "@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": { + "description": "Confirmation dialog message before restoring a backup" + }, + "backupRestoreConfirmButton": "Restore", + "@backupRestoreConfirmButton": { + "description": "Confirm button to proceed with restore" + }, + "backupRestoring": "Restoring backup...", + "@backupRestoring": { + "description": "Progress text while restoring a backup" + }, + "backupRestored": "Backup restored successfully", + "@backupRestored": { + "description": "Snackbar after a successful restore" + }, + "backupRestoreFailed": "Failed to restore backup", + "@backupRestoreFailed": { + "description": "Snackbar when restore fails" + }, + "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "@backupInvalidFile": { + "description": "Snackbar when the chosen file is not a valid backup" + }, + "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "@backupRestoreRestartHint": { + "description": "Hint shown after restoring that an app restart is recommended" + }, + "backupContentsTitle": "Backup contents", + "@backupContentsTitle": { + "description": "Header above the list summarizing what the backup contains" + }, + "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": { + "count": { + "type": "int" + } + } + }, + "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "@backupContentsLiked": { + "description": "Backup contents row for liked tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "@backupContentsWishlist": { + "description": "Backup contents row for wishlist tracks count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@backupContentsPlaylists": { + "description": "Backup contents row for playlist count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "@backupContentsArtists": { + "description": "Backup contents row for favorite artists count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "@backupContentsExtensions": { + "description": "Backup contents row for installed extensions count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "backupIncludeSecrets": "Include extension credentials", + "@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": { + "description": "Explanation for the include-credentials toggle" + }, + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", + "@backupExtensionsRestoreFailed": { + "description": "Snackbar/hint when some extensions failed to reinstall during restore", + "placeholders": { + "count": { + "type": "int" + } + } + }, "tooltipLoveAll": "Love All", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" @@ -3983,6 +4162,18 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, + "downloadAllowLocalNetwork": "Allow Local Network Access", + "@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": { + "description": "Subtitle when allow local network access is on" + }, + "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "@downloadAllowLocalNetworkDisabled": { + "description": "Subtitle when allow local network access is off" + }, "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" @@ -5595,5 +5786,343 @@ "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" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "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" + }, + "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" + }, + "regionCountryDE": "Germany", + "@regionCountryDE": { + "description": "Country name for SongLink region picker" + }, + "regionCountryJP": "Japan", + "@regionCountryJP": { + "description": "Country name for SongLink region picker" + }, + "regionCountryKR": "South Korea", + "@regionCountryKR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryIN": "India", + "@regionCountryIN": { + "description": "Country name for SongLink region picker" + }, + "regionCountryID": "Indonesia", + "@regionCountryID": { + "description": "Country name for SongLink region picker" + }, + "regionCountryBR": "Brazil", + "@regionCountryBR": { + "description": "Country name for SongLink region picker" + }, + "regionCountryMX": "Mexico", + "@regionCountryMX": { + "description": "Country name for SongLink region picker" + }, + "regionCountryAU": "Australia", + "@regionCountryAU": { + "description": "Country name for SongLink region picker" + }, + "regionCountryCA": "Canada", + "@regionCountryCA": { + "description": "Country name for SongLink region picker" + }, + "regionCountryXK": "Kosovo", + "@regionCountryXK": { + "description": "Country name for SongLink region picker" } } \ No newline at end of file From ccf995ec11de6c9d9e4e6d5d0e28b221fa0ee887 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 05:21:22 +0700 Subject: [PATCH 086/137] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 50 ++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index 325718d2..cba03831 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -3843,47 +3843,47 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, - "settingsBackup": "Backup & Restore", + "settingsBackup": "Sauvegarde & Restauration", "@settingsBackup": { "description": "Settings menu item - backup and restore page" }, - "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "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": "Backup & Restore", + "backupTitle": "Sauvegarde & Restauration", "@backupTitle": { "description": "App bar title for the backup and restore page" }, - "backupExportSectionTitle": "Create backup", + "backupExportSectionTitle": "Créer une sauvegarde", "@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": "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": "Create backup file", + "backupExportButton": "Créer un fichier de sauvegarde", "@backupExportButton": { "description": "Button to create and share a backup file" }, - "backupImportSectionTitle": "Restore backup", + "backupImportSectionTitle": "Restaurer la sauvegarde", "@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": "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": "Choose backup file", + "backupImportButton": "Choisissez un fichier de sauvegarde", "@backupImportButton": { "description": "Button to pick a backup file to restore" }, - "backupCreating": "Creating backup...", + "backupCreating": "Création d'une sauvegarde...", "@backupCreating": { "description": "Progress text while a backup is being created" }, - "backupCreated": "Backup created", + "backupCreated": "Sauvegarde créée", "@backupCreated": { "description": "Snackbar after a backup file is created" }, @@ -3923,15 +3923,15 @@ "@backupInvalidFile": { "description": "Snackbar when the chosen file is not a valid backup" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "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": "Backup contents", + "backupContentsTitle": "Contenu de la sauvegarde", "@backupContentsTitle": { "description": "Header above the list summarizing what the backup contains" }, - "backupContentsSettings": "App settings", + "backupContentsSettings": "Paramètres de l'application", "@backupContentsSettings": { "description": "Backup contents row label for settings" }, @@ -3993,7 +3993,7 @@ "@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": "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" }, @@ -4166,11 +4166,11 @@ "@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": "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" }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "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" }, @@ -5791,11 +5791,11 @@ "@libraryPlayback": { "description": "Section header for playback settings in library settings" }, - "libraryExternalPlayer": "External player", + "libraryExternalPlayer": "Lecteur externe", "@libraryExternalPlayer": { "description": "Setting option to use an external music player" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "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" }, @@ -5819,7 +5819,7 @@ "@nowPlayingNothingPlaying": { "description": "Empty state when no track is currently playing" }, - "nowPlayingMinimize": "Minimize", + "nowPlayingMinimize": "Réduire", "@nowPlayingMinimize": { "description": "Tooltip for minimizing the now playing screen" }, @@ -5827,7 +5827,7 @@ "@nowPlayingUpNext": { "description": "Title for the playback queue sheet" }, - "nowPlayingDetails": "Details", + "nowPlayingDetails": "Détails", "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, @@ -5978,11 +5978,11 @@ "@actionShuffle": { "description": "Tooltip for shuffle playback action" }, - "downloadPrimaryArtistOnlyOn": "Primary only: On", + "downloadPrimaryArtistOnlyOn": "Primaire uniquement : Activé", "@downloadPrimaryArtistOnlyOn": { "description": "Status label when primary-artist-only folder naming is enabled" }, - "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "downloadPrimaryArtistOnlyOff": "Primaire uniquement : Désactivé", "@downloadPrimaryArtistOnlyOff": { "description": "Status label when primary-artist-only folder naming is disabled" }, @@ -6010,7 +6010,7 @@ "@updateSeeReleaseNotes": { "description": "Fallback changelog text when release notes cannot be parsed" }, - "unknownTitle": "Unknown title", + "unknownTitle": "Titre inconnu", "@unknownTitle": { "description": "Fallback track title when metadata is missing" }, @@ -6018,7 +6018,7 @@ "@trackPlayNext": { "description": "Menu action to play a track as the next queue item" }, - "trackAddToQueue": "Add to queue", + "trackAddToQueue": "Ajouter à la file d'attente", "@trackAddToQueue": { "description": "Menu action to add a track to the playback queue" }, From 1ba82df9e3c5ab38f309c394ba16f8cf81b99727 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 11:36:48 +0700 Subject: [PATCH 087/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 50 ++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 87a0e9e8..ec00d487 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -772,15 +772,15 @@ "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "previewPlay": "Play preview", + "previewPlay": "미리보기 재생", "@previewPlay": { "description": "Tooltip for the button that plays a short track preview snippet" }, - "previewStop": "Stop preview", + "previewStop": "미리보기 중지", "@previewStop": { "description": "Tooltip for the button that stops the playing track preview snippet" }, - "previewUnavailable": "Preview unavailable", + "previewUnavailable": "미리보기 사용할 수 없음", "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, @@ -3843,7 +3843,7 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, - "settingsBackup": "Backup & Restore", + "settingsBackup": "백업 & 복원", "@settingsBackup": { "description": "Settings menu item - backup and restore page" }, @@ -3851,11 +3851,11 @@ "@settingsBackupSubtitle": { "description": "Subtitle for backup and restore settings item" }, - "backupTitle": "Backup & Restore", + "backupTitle": "백업 & 복원", "@backupTitle": { "description": "App bar title for the backup and restore page" }, - "backupExportSectionTitle": "Create backup", + "backupExportSectionTitle": "백업 생성", "@backupExportSectionTitle": { "description": "Section title for the export/backup card" }, @@ -3863,11 +3863,11 @@ "@backupExportSectionDescription": { "description": "Description of what a backup contains" }, - "backupExportButton": "Create backup file", + "backupExportButton": "백업 파일 생성", "@backupExportButton": { "description": "Button to create and share a backup file" }, - "backupImportSectionTitle": "Restore backup", + "backupImportSectionTitle": "백업 복원", "@backupImportSectionTitle": { "description": "Section title for the import/restore card" }, @@ -3875,11 +3875,11 @@ "@backupImportSectionDescription": { "description": "Description for the restore action" }, - "backupImportButton": "Choose backup file", + "backupImportButton": "백업 파일 선택", "@backupImportButton": { "description": "Button to pick a backup file to restore" }, - "backupCreating": "Creating backup...", + "backupCreating": "백업을 생성하는 중...", "@backupCreating": { "description": "Progress text while a backup is being created" }, @@ -3887,7 +3887,7 @@ "@backupCreated": { "description": "Snackbar after a backup file is created" }, - "backupCreateFailed": "Failed to create backup", + "backupCreateFailed": "백업 생성 실패", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, @@ -3907,7 +3907,7 @@ "@backupRestoreConfirmButton": { "description": "Confirm button to proceed with restore" }, - "backupRestoring": "Restoring backup...", + "backupRestoring": "백업을 복원하는 중...", "@backupRestoring": { "description": "Progress text while restoring a backup" }, @@ -3915,7 +3915,7 @@ "@backupRestored": { "description": "Snackbar after a successful restore" }, - "backupRestoreFailed": "Failed to restore backup", + "backupRestoreFailed": "백업 복원 실패", "@backupRestoreFailed": { "description": "Snackbar when restore fails" }, @@ -3927,15 +3927,15 @@ "@backupRestoreRestartHint": { "description": "Hint shown after restoring that an app restart is recommended" }, - "backupContentsTitle": "Backup contents", + "backupContentsTitle": "백업 콘텐츠", "@backupContentsTitle": { "description": "Header above the list summarizing what the backup contains" }, - "backupContentsSettings": "App settings", + "backupContentsSettings": "앱 설정", "@backupContentsSettings": { "description": "Backup contents row label for settings" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "backupContentsHistory": "{count} 개의 기록 {count, plural, =1{항목} other{항목}}", "@backupContentsHistory": { "description": "Backup contents row for history count", "placeholders": { @@ -3944,7 +3944,7 @@ } } }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "backupContentsLiked": "{count} 개의 좋아요 표시한 {count, plural, =1{트랙} other{트랙}}", "@backupContentsLiked": { "description": "Backup contents row for liked tracks count", "placeholders": { @@ -3953,7 +3953,7 @@ } } }, - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "backupContentsWishlist": "{count} 개의 위시리스트 {count, plural, =1{트랙} other{트랙}}", "@backupContentsWishlist": { "description": "Backup contents row for wishlist tracks count", "placeholders": { @@ -3962,7 +3962,7 @@ } } }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "backupContentsPlaylists": "{count, plural, =1{1 개의 재생목록} other{{count} 개의 재생목록}}", "@backupContentsPlaylists": { "description": "Backup contents row for playlist count", "placeholders": { @@ -3971,7 +3971,7 @@ } } }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "backupContentsArtists": "{count, plural, =1{1 명의 좋아하는 아티스트} other{{count} 명의 좋아하는 아티스트}}", "@backupContentsArtists": { "description": "Backup contents row for favorite artists count", "placeholders": { @@ -3980,7 +3980,7 @@ } } }, - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "backupContentsExtensions": "{count, plural, =1{1 개의 확장 프로그램} other{{count} 개의 확장 프로그램}}", "@backupContentsExtensions": { "description": "Backup contents row for installed extensions count", "placeholders": { @@ -3989,7 +3989,7 @@ } } }, - "backupIncludeSecrets": "Include extension credentials", + "backupIncludeSecrets": "확장 프로그램 자격 증명 포함", "@backupIncludeSecrets": { "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, @@ -4162,7 +4162,7 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, - "downloadAllowLocalNetwork": "Allow Local Network Access", + "downloadAllowLocalNetwork": "로컬 네트워크 액세스 허용", "@downloadAllowLocalNetwork": { "description": "Setting title for allowing requests to private/local network targets" }, @@ -5787,11 +5787,11 @@ "service": {} } }, - "libraryPlayback": "Playback", + "libraryPlayback": "재생", "@libraryPlayback": { "description": "Section header for playback settings in library settings" }, - "libraryExternalPlayer": "External player", + "libraryExternalPlayer": "외부 플레이어", "@libraryExternalPlayer": { "description": "Setting option to use an external music player" }, From 74a41a2d497b32d975b39b00b8616a01f4ee89fb Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 12:53:58 +0700 Subject: [PATCH 088/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 80 ++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index ec00d487..5257bdf3 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -3883,7 +3883,7 @@ "@backupCreating": { "description": "Progress text while a backup is being created" }, - "backupCreated": "Backup created", + "backupCreated": "백업이 생성됨", "@backupCreated": { "description": "Snackbar after a backup file is created" }, @@ -3891,11 +3891,11 @@ "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "backupEmpty": "There is nothing to back up yet", + "backupEmpty": "아직 백업할 내용이 없습니다", "@backupEmpty": { "description": "Snackbar when there is no data to back up" }, - "backupRestoreConfirmTitle": "Restore this backup?", + "backupRestoreConfirmTitle": "이 백업을 복원하시겠습니까?", "@backupRestoreConfirmTitle": { "description": "Confirmation dialog title before restoring a backup" }, @@ -3903,7 +3903,7 @@ "@backupRestoreConfirmMessage": { "description": "Confirmation dialog message before restoring a backup" }, - "backupRestoreConfirmButton": "Restore", + "backupRestoreConfirmButton": "복원", "@backupRestoreConfirmButton": { "description": "Confirm button to proceed with restore" }, @@ -3911,7 +3911,7 @@ "@backupRestoring": { "description": "Progress text while restoring a backup" }, - "backupRestored": "Backup restored successfully", + "backupRestored": "백업 복원 성공", "@backupRestored": { "description": "Snackbar after a successful restore" }, @@ -3919,7 +3919,7 @@ "@backupRestoreFailed": { "description": "Snackbar when restore fails" }, - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "backupInvalidFile": "이 파일은 유효한 SpotiFLAC 백업이 아닙니다", "@backupInvalidFile": { "description": "Snackbar when the chosen file is not a valid backup" }, @@ -5799,7 +5799,7 @@ "@libraryExternalPlayerSubtitle": { "description": "Subtitle for external player option" }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", + "libraryBuiltInPreviewPlayer": "내장 미리보기 플레이어", "@libraryBuiltInPreviewPlayer": { "description": "Setting option to use the built-in preview player" }, @@ -5815,39 +5815,39 @@ "@nowPlayingTitle": { "description": "Title for the now playing screen" }, - "nowPlayingNothingPlaying": "Nothing is playing", + "nowPlayingNothingPlaying": "재생 중인 노래가 없습니다", "@nowPlayingNothingPlaying": { "description": "Empty state when no track is currently playing" }, - "nowPlayingMinimize": "Minimize", + "nowPlayingMinimize": "최소화", "@nowPlayingMinimize": { "description": "Tooltip for minimizing the now playing screen" }, - "nowPlayingUpNext": "Up next", + "nowPlayingUpNext": "다음 곡", "@nowPlayingUpNext": { "description": "Title for the playback queue sheet" }, - "nowPlayingDetails": "Details", + "nowPlayingDetails": "자세히", "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, - "nowPlayingOpenInExternalPlayer": "Open in external player", + "nowPlayingOpenInExternalPlayer": "외부 플레이어에서 열기", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" }, - "nowPlayingTabPlayer": "Player", + "nowPlayingTabPlayer": "플레이어", "@nowPlayingTabPlayer": { "description": "Tab label for the player view" }, - "nowPlayingTabLyrics": "Lyrics", + "nowPlayingTabLyrics": "가사", "@nowPlayingTabLyrics": { "description": "Tab label for the lyrics view" }, - "nowPlayingNoLyrics": "No lyrics in this file", + "nowPlayingNoLyrics": "이 파일에는 가사가 없습니다", "@nowPlayingNoLyrics": { "description": "Empty state when the playing file has no embedded lyrics" }, - "nowPlayingLibraryEmpty": "Your library is empty", + "nowPlayingLibraryEmpty": "보관함이 비어져 있습니다", "@nowPlayingLibraryEmpty": { "description": "Snackbar when shuffle library is requested but library has no tracks" }, @@ -5872,11 +5872,11 @@ "@nowPlayingShuffleLibrary": { "description": "Button label to shuffle and play the entire local library" }, - "nowPlayingQueueEmpty": "Queue is empty", + "nowPlayingQueueEmpty": "현재 재생목록이 비어져 있습니다", "@nowPlayingQueueEmpty": { "description": "Empty state when the playback queue has no items" }, - "nowPlayingNoMetadata": "No metadata available", + "nowPlayingNoMetadata": "사용할 수 있는 메타데이터가 없음", "@nowPlayingNoMetadata": { "description": "Empty state when track metadata cannot be loaded" }, @@ -5961,7 +5961,7 @@ "@snackbarPlayingNext": { "description": "Snackbar when a track is inserted as the next queue item" }, - "snackbarAddedToQueueGeneric": "Added to queue", + "snackbarAddedToQueueGeneric": "현재 재생목록에 추가됨", "@snackbarAddedToQueueGeneric": { "description": "Snackbar when a track is added to the playback queue without naming it" }, @@ -5978,11 +5978,11 @@ "@actionShuffle": { "description": "Tooltip for shuffle playback action" }, - "downloadPrimaryArtistOnlyOn": "Primary only: On", + "downloadPrimaryArtistOnlyOn": "기본 아티스트만: ON", "@downloadPrimaryArtistOnlyOn": { "description": "Status label when primary-artist-only folder naming is enabled" }, - "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "downloadPrimaryArtistOnlyOff": "기본 아티스트만: OFF", "@downloadPrimaryArtistOnlyOff": { "description": "Status label when primary-artist-only folder naming is disabled" }, @@ -5994,27 +5994,27 @@ "@downloadAlbumArtistMetadataFull": { "description": "Status label when album-artist folder filtering uses full metadata" }, - "trackConvertOriginal": "Original", + "trackConvertOriginal": "원본", "@trackConvertOriginal": { "description": "Label for keeping original bit depth or sample rate during conversion" }, - "trackConvertOriginalQuality": "Original quality", + "trackConvertOriginalQuality": "원본 음질", "@trackConvertOriginalQuality": { "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" }, - "trackConvertLosslessSuffix": "Lossless", + "trackConvertLosslessSuffix": "무손실", "@trackConvertLosslessSuffix": { "description": "Suffix used in converted lossless quality labels" }, - "updateSeeReleaseNotes": "See release notes for details.", + "updateSeeReleaseNotes": "자세한 내용은 릴리스 노트를 참조하세요", "@updateSeeReleaseNotes": { "description": "Fallback changelog text when release notes cannot be parsed" }, - "unknownTitle": "Unknown title", + "unknownTitle": "알 수 없는 제목", "@unknownTitle": { "description": "Fallback track title when metadata is missing" }, - "trackPlayNext": "Play next", + "trackPlayNext": "다음 곡 재생", "@trackPlayNext": { "description": "Menu action to play a track as the next queue item" }, @@ -6073,55 +6073,55 @@ "@trackCoverOnline": { "description": "Label shown when metadata autofill downloaded cover art from the internet" }, - "regionCountryUS": "United States", + "regionCountryUS": "미국", "@regionCountryUS": { "description": "Country name for SongLink region picker" }, - "regionCountryGB": "United Kingdom", + "regionCountryGB": "영국", "@regionCountryGB": { "description": "Country name for SongLink region picker" }, - "regionCountryFR": "France", + "regionCountryFR": "프랑스", "@regionCountryFR": { "description": "Country name for SongLink region picker" }, - "regionCountryDE": "Germany", + "regionCountryDE": "독일", "@regionCountryDE": { "description": "Country name for SongLink region picker" }, - "regionCountryJP": "Japan", + "regionCountryJP": "일본", "@regionCountryJP": { "description": "Country name for SongLink region picker" }, - "regionCountryKR": "South Korea", + "regionCountryKR": "한국", "@regionCountryKR": { "description": "Country name for SongLink region picker" }, - "regionCountryIN": "India", + "regionCountryIN": "인도", "@regionCountryIN": { "description": "Country name for SongLink region picker" }, - "regionCountryID": "Indonesia", + "regionCountryID": "인도네시아", "@regionCountryID": { "description": "Country name for SongLink region picker" }, - "regionCountryBR": "Brazil", + "regionCountryBR": "브라질", "@regionCountryBR": { "description": "Country name for SongLink region picker" }, - "regionCountryMX": "Mexico", + "regionCountryMX": "멕시코", "@regionCountryMX": { "description": "Country name for SongLink region picker" }, - "regionCountryAU": "Australia", + "regionCountryAU": "호주", "@regionCountryAU": { "description": "Country name for SongLink region picker" }, - "regionCountryCA": "Canada", + "regionCountryCA": "캐나다", "@regionCountryCA": { "description": "Country name for SongLink region picker" }, - "regionCountryXK": "Kosovo", + "regionCountryXK": "코소보", "@regionCountryXK": { "description": "Country name for SongLink region picker" } From 76e0de7d20397364e6bbcbf0f3b54897d3554f6b Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 14:31:15 +0700 Subject: [PATCH 089/137] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 64 ++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index cba03831..acdb996e 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -772,15 +772,15 @@ "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "previewPlay": "Play preview", + "previewPlay": "Écouter un aperçu", "@previewPlay": { "description": "Tooltip for the button that plays a short track preview snippet" }, - "previewStop": "Stop preview", + "previewStop": "Arrêter l'aperçu", "@previewStop": { "description": "Tooltip for the button that stops the playing track preview snippet" }, - "previewUnavailable": "Preview unavailable", + "previewUnavailable": "Aperçu indisponible", "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, @@ -2107,7 +2107,7 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, - "albumFolderStructureDescription": "Choose how album folders are structured", + "albumFolderStructureDescription": "Choisissez la structure des dossiers d'albums", "@albumFolderStructureDescription": { "description": "Album folder structure picker description" }, @@ -3887,39 +3887,39 @@ "@backupCreated": { "description": "Snackbar after a backup file is created" }, - "backupCreateFailed": "Failed to create backup", + "backupCreateFailed": "Échec de la création de la sauvegarde", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "backupEmpty": "There is nothing to back up yet", + "backupEmpty": "Il n'y a encore rien à sauvegarder", "@backupEmpty": { "description": "Snackbar when there is no data to back up" }, - "backupRestoreConfirmTitle": "Restore this backup?", + "backupRestoreConfirmTitle": "Restaurer cette sauvegarde ?", "@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": "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": "Restore", + "backupRestoreConfirmButton": "Restaurer", "@backupRestoreConfirmButton": { "description": "Confirm button to proceed with restore" }, - "backupRestoring": "Restoring backup...", + "backupRestoring": "Restauration de la sauvegarde...", "@backupRestoring": { "description": "Progress text while restoring a backup" }, - "backupRestored": "Backup restored successfully", + "backupRestored": "La sauvegarde a été restaurée avec succès", "@backupRestored": { "description": "Snackbar after a successful restore" }, - "backupRestoreFailed": "Failed to restore backup", + "backupRestoreFailed": "Échec de la restauration de la sauvegarde", "@backupRestoreFailed": { "description": "Snackbar when restore fails" }, - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "backupInvalidFile": "Ce fichier n'est pas une sauvegarde SpotiFLAC valide", "@backupInvalidFile": { "description": "Snackbar when the chosen file is not a valid backup" }, @@ -3989,7 +3989,7 @@ } } }, - "backupIncludeSecrets": "Include extension credentials", + "backupIncludeSecrets": "Inclure les informations d'identification de l'extension", "@backupIncludeSecrets": { "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" }, @@ -4162,7 +4162,7 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, - "downloadAllowLocalNetwork": "Allow Local Network Access", + "downloadAllowLocalNetwork": "Autoriser l'accès au réseau local", "@downloadAllowLocalNetwork": { "description": "Setting title for allowing requests to private/local network targets" }, @@ -5787,7 +5787,7 @@ "service": {} } }, - "libraryPlayback": "Playback", + "libraryPlayback": "Lecture", "@libraryPlayback": { "description": "Section header for playback settings in library settings" }, @@ -5799,15 +5799,15 @@ "@libraryExternalPlayerSubtitle": { "description": "Subtitle for external player option" }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", + "libraryBuiltInPreviewPlayer": "Lecteur de prévisualisation intégré", "@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": "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": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "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" }, @@ -5815,7 +5815,7 @@ "@nowPlayingTitle": { "description": "Title for the now playing screen" }, - "nowPlayingNothingPlaying": "Nothing is playing", + "nowPlayingNothingPlaying": "Il n'y a rien à l'écran", "@nowPlayingNothingPlaying": { "description": "Empty state when no track is currently playing" }, @@ -5831,27 +5831,27 @@ "@nowPlayingDetails": { "description": "Menu item and section title for track metadata details" }, - "nowPlayingOpenInExternalPlayer": "Open in external player", + "nowPlayingOpenInExternalPlayer": "Ouvrir dans un lecteur externe", "@nowPlayingOpenInExternalPlayer": { "description": "Menu item to open the current track in an external player" }, - "nowPlayingTabPlayer": "Player", + "nowPlayingTabPlayer": "Lecteur", "@nowPlayingTabPlayer": { "description": "Tab label for the player view" }, - "nowPlayingTabLyrics": "Lyrics", + "nowPlayingTabLyrics": "Paroles", "@nowPlayingTabLyrics": { "description": "Tab label for the lyrics view" }, - "nowPlayingNoLyrics": "No lyrics in this file", + "nowPlayingNoLyrics": "Ce fichier ne contient pas de paroles", "@nowPlayingNoLyrics": { "description": "Empty state when the playing file has no embedded lyrics" }, - "nowPlayingLibraryEmpty": "Your library is empty", + "nowPlayingLibraryEmpty": "Votre bibliothèque est vide", "@nowPlayingLibraryEmpty": { "description": "Snackbar when shuffle library is requested but library has no tracks" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "nowPlayingShuffleLibraryFailed": "Impossible de lire aléatoirement la bibliothèque : {error}", "@nowPlayingShuffleLibraryFailed": { "description": "Snackbar when shuffling the library fails", "placeholders": { @@ -5864,7 +5864,7 @@ "@nowPlayingShuffleOn": { "description": "Tooltip when shuffle mode is enabled" }, - "nowPlayingPlayInOrder": "Play in order", + "nowPlayingPlayInOrder": "Lire dans l'ordre", "@nowPlayingPlayInOrder": { "description": "Tooltip when shuffle mode is disabled" }, @@ -5872,19 +5872,19 @@ "@nowPlayingShuffleLibrary": { "description": "Button label to shuffle and play the entire local library" }, - "nowPlayingQueueEmpty": "Queue is empty", + "nowPlayingQueueEmpty": "La file d'attente est vide", "@nowPlayingQueueEmpty": { "description": "Empty state when the playback queue has no items" }, - "nowPlayingNoMetadata": "No metadata available", + "nowPlayingNoMetadata": "Aucune métadonnée disponible", "@nowPlayingNoMetadata": { "description": "Empty state when track metadata cannot be loaded" }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "announcementUnableToOpenLink": "Impossible d'ouvrir le lien. Veuillez réessayer.", "@announcementUnableToOpenLink": { "description": "Snackbar shown when an announcement CTA link cannot be opened" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "trackConvertLosslessOutputWithCap": "Sortie sans perte avec une limite de {quality}", "@trackConvertLosslessOutputWithCap": { "description": "Hint shown when lossless conversion will cap bit depth or sample rate", "placeholders": { @@ -6002,7 +6002,7 @@ "@trackConvertOriginalQuality": { "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" }, - "trackConvertLosslessSuffix": "Lossless", + "trackConvertLosslessSuffix": "Sans perte", "@trackConvertLosslessSuffix": { "description": "Suffix used in converted lossless quality labels" }, From 36567f40a1e4f49f5a0dc67510b1970ae251d42d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 14:31:17 +0700 Subject: [PATCH 090/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 5257bdf3..86472772 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -5851,7 +5851,7 @@ "@nowPlayingLibraryEmpty": { "description": "Snackbar when shuffle library is requested but library has no tracks" }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "nowPlayingShuffleLibraryFailed": "보관함에서 셔플을 사용할 수 없습니다: {error}", "@nowPlayingShuffleLibraryFailed": { "description": "Snackbar when shuffling the library fails", "placeholders": { @@ -5860,15 +5860,15 @@ } } }, - "nowPlayingShuffleOn": "Shuffle on", + "nowPlayingShuffleOn": "셔플 켜기", "@nowPlayingShuffleOn": { "description": "Tooltip when shuffle mode is enabled" }, - "nowPlayingPlayInOrder": "Play in order", + "nowPlayingPlayInOrder": "순서대로 재생", "@nowPlayingPlayInOrder": { "description": "Tooltip when shuffle mode is disabled" }, - "nowPlayingShuffleLibrary": "Shuffle library", + "nowPlayingShuffleLibrary": "보관함 셔플", "@nowPlayingShuffleLibrary": { "description": "Button label to shuffle and play the entire local library" }, @@ -5880,7 +5880,7 @@ "@nowPlayingNoMetadata": { "description": "Empty state when track metadata cannot be loaded" }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "announcementUnableToOpenLink": "링크를 열 수 없습니다. 다시 시도해 주세요", "@announcementUnableToOpenLink": { "description": "Snackbar shown when an announcement CTA link cannot be opened" }, @@ -5893,7 +5893,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": "{sourceFormat}에서 {targetFormat}({quality})으로 변환하시겠습니까?\n\n출력은 무손실 코덱을 유지하지만 비트 심도/샘플 속도가 제한됩니다. 변환 후 원본 파일이 삭제됩니다", "@trackConvertConfirmMessageLosslessCapped": { "description": "Confirmation dialog message for capped lossless conversion of a single file", "placeholders": { @@ -5908,7 +5908,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": "{count} {count, plural, =1{ 개의 트랙} other{ 개의 트랙}}을 {format}({quality})으로 변환하시겠습니까?\n\n출력은 무손실 코덱을 유지하지만 비트 심도/샘플 속도가 제한됩니다. 변환 후 원본 파일이 삭제됩니다", "@selectionBatchConvertConfirmMessageLosslessCapped": { "description": "Confirmation dialog message for capped lossless batch conversion", "placeholders": { @@ -5953,11 +5953,11 @@ } } }, - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "aboutPaxsenixSubtitle": "Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou 및 Genius용 가사 프록시", "@aboutPaxsenixSubtitle": { "description": "Subtitle for Paxsenix special thanks entry on the about page" }, - "snackbarPlayingNext": "Playing next", + "snackbarPlayingNext": "다음 곡 재생", "@snackbarPlayingNext": { "description": "Snackbar when a track is inserted as the next queue item" }, @@ -5965,7 +5965,7 @@ "@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": "{count} {count, plural, =1{ 개의 재생목록} other{ 개의 재생목록}} 삭제", "@selectionDeletePlaylistsCount": { "description": "Button label for deleting multiple selected playlists", "placeholders": { @@ -5974,7 +5974,7 @@ } } }, - "actionShuffle": "Shuffle", + "actionShuffle": "셔플", "@actionShuffle": { "description": "Tooltip for shuffle playback action" }, @@ -5986,11 +5986,11 @@ "@downloadPrimaryArtistOnlyOff": { "description": "Status label when primary-artist-only folder naming is disabled" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "downloadAlbumArtistMetadataPrimaryOnly": "앨범 아티스트 메타데이터: 기본만", "@downloadAlbumArtistMetadataPrimaryOnly": { "description": "Status label when album-artist folder filtering uses primary artist only" }, - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "downloadAlbumArtistMetadataFull": "앨범 아티스트 메타데이터: 전체", "@downloadAlbumArtistMetadataFull": { "description": "Status label when album-artist folder filtering uses full metadata" }, @@ -6018,11 +6018,11 @@ "@trackPlayNext": { "description": "Menu action to play a track as the next queue item" }, - "trackAddToQueue": "Add to queue", + "trackAddToQueue": "현재 재생목록에 추가", "@trackAddToQueue": { "description": "Menu action to add a track to the playback queue" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "snackbarExtensionInstalledEnable": "{extensionName} 이 설치됨. '설정 > 확장 프로그램'에서 활성화하세요", "@snackbarExtensionInstalledEnable": { "description": "Snackbar after installing an extension from the repo tab", "placeholders": { @@ -6031,7 +6031,7 @@ } } }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "snackbarExtensionUpdatedVersion": "{extensionName} 이 v{version} 으로 업데이트됨", "@snackbarExtensionUpdatedVersion": { "description": "Snackbar after updating an extension from the repo tab", "placeholders": { @@ -6043,7 +6043,7 @@ } } }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "snackbarFailedToInstallNamed": "{extensionName} 설치 실패", "@snackbarFailedToInstallNamed": { "description": "Snackbar when extension install fails in the repo tab", "placeholders": { @@ -6052,7 +6052,7 @@ } } }, - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "snackbarFailedToUpdateNamed": "{extensionName} 업데이트 실패", "@snackbarFailedToUpdateNamed": { "description": "Snackbar when extension update fails in the repo tab", "placeholders": { @@ -6065,11 +6065,11 @@ "@releaseTypeEp": { "description": "Badge label for EP releases" }, - "releaseTypeSingle": "Single", + "releaseTypeSingle": "싱글", "@releaseTypeSingle": { "description": "Badge label for single releases" }, - "trackCoverOnline": "Online cover", + "trackCoverOnline": "온라인 커버", "@trackCoverOnline": { "description": "Label shown when metadata autofill downloaded cover art from the internet" }, From 8d29be2a6dcf5619eb2dc1581233bb2867ec64db Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 15:56:58 +0700 Subject: [PATCH 091/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 160 ++++++++++++++++++++-------------------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 86472772..53585a0a 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -89,7 +89,7 @@ "@downloadTitle": { "description": "Download settings page title" }, - "downloadAskQualitySubtitle": "다운로드를 할 때마다 품질을 선택하도록 합니다", + "downloadAskQualitySubtitle": "다운로드를 할 때마다 음질을 선택하도록 합니다", "@downloadAskQualitySubtitle": { "description": "Subtitle for ask quality toggle" }, @@ -328,15 +328,15 @@ "@optionsUpdateChannel": { "description": "Stable vs preview releases" }, - "optionsUpdateChannelStable": "안정적인 버전만 받기", + "optionsUpdateChannelStable": "안정 버전만 받기", "@optionsUpdateChannelStable": { "description": "Only stable updates" }, - "optionsUpdateChannelPreview": "미리보기 버전을 받기", + "optionsUpdateChannelPreview": "개발 버전을 받기", "@optionsUpdateChannelPreview": { "description": "Include beta/preview updates" }, - "optionsUpdateChannelWarning": "미리보기 버전은 불안정할 수 있습니다", + "optionsUpdateChannelWarning": "개발 버전은 불안정할 수 있습니다", "@optionsUpdateChannelWarning": { "description": "Warning about preview channel" }, @@ -772,15 +772,15 @@ "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "previewPlay": "미리보기 재생", + "previewPlay": "미리듣기 재생", "@previewPlay": { "description": "Tooltip for the button that plays a short track preview snippet" }, - "previewStop": "미리보기 중지", + "previewStop": "미리듣기 중지", "@previewStop": { "description": "Tooltip for the button that stops the playing track preview snippet" }, - "previewUnavailable": "미리보기 사용할 수 없음", + "previewUnavailable": "미리듣기 사용할 수 없음", "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, @@ -841,7 +841,7 @@ "@dialogDeleteSelectedTitle": { "description": "Dialog title - delete selected items" }, - "dialogDeleteSelectedMessage": "기록에서 {count} {count, plural, =1{track} other{tracks}}를 삭제하시겠습니까?", + "dialogDeleteSelectedMessage": "기록에서 {count} {count, plural, =1{트랙} other{트랙}}을 삭제하시겠습니까?\n\n이렇게 하면 저장소에서 파일도 삭제됩니다", "@dialogDeleteSelectedMessage": { "description": "Dialog message - delete selected tracks", "placeholders": { @@ -854,7 +854,7 @@ "@dialogImportPlaylistTitle": { "description": "Dialog title - import CSV playlist" }, - "dialogImportPlaylistMessage": "CSV 파일에서 {count}개의 트랙을 찾았습니다. 다운로드 대기열에 추가하시겠습니까?", + "dialogImportPlaylistMessage": "CSV 파일에서 {count} 개의 트랙을 찾았습니다. 다운로드 목록에 추가하시겠습니까?", "csvImportTracks": "CSV 파일의 트랙: {count}", "@csvImportTracks": { "description": "Label shown in quality picker for CSV import", @@ -872,7 +872,7 @@ } } }, - "snackbarAddedToQueue": "\"{trackName}\"(을)를 대기열에 추가했습니다.", + "snackbarAddedToQueue": "'{trackName}'가 다운로드 목록에 추가됨", "@snackbarAddedToQueue": { "description": "Snackbar - track added to download queue", "placeholders": { @@ -881,7 +881,7 @@ } } }, - "snackbarAddedTracksToQueue": "대기열에 {count}개의 트랙을 추가했습니다.", + "snackbarAddedTracksToQueue": "{count} 개의 트랙이 다운로드 목록에 추가됨", "@snackbarAddedTracksToQueue": { "description": "Snackbar - multiple tracks added to queue", "placeholders": { @@ -890,7 +890,7 @@ } } }, - "snackbarAlreadyDownloaded": "\"{trackName}\"(은)는 이미 다운로드되었습니다.", + "snackbarAlreadyDownloaded": "'{trackName}'은 이미 다운로드되어 있음", "@snackbarAlreadyDownloaded": { "description": "Snackbar - track already exists", "placeholders": { @@ -899,7 +899,7 @@ } } }, - "snackbarAlreadyInLibrary": "라이브러리에 \"{trackName}\"(은)는 이미 존재합니다.", + "snackbarAlreadyInLibrary": "보관함에 '{trackName}'이 이미 존재함", "@snackbarAlreadyInLibrary": { "description": "Snackbar - track already exists in local library", "placeholders": { @@ -920,7 +920,7 @@ "@snackbarCredentialsCleared": { "description": "Snackbar - Spotify credentials removed" }, - "snackbarDeletedTracks": "{count}{count, plural, =1{track} other{tracks}} 제거됨", + "snackbarDeletedTracks": "{count}{count, plural, =1{트랙} other{트랙}}이 제거됨", "@snackbarDeletedTracks": { "description": "Snackbar - tracks deleted", "placeholders": { @@ -929,7 +929,7 @@ } } }, - "snackbarCannotOpenFile": "파일을 열 수 없습니다: {error}", + "snackbarCannotOpenFile": "파일을 열 수 없음: {error}", "@snackbarCannotOpenFile": { "description": "Snackbar - file open error", "placeholders": { @@ -942,7 +942,7 @@ "@snackbarFillAllFields": { "description": "Snackbar - validation error" }, - "snackbarViewQueue": "대기목록 보기", + "snackbarViewQueue": "다운로드 목록 보기", "@snackbarViewQueue": { "description": "Snackbar action - view download queue" }, @@ -972,7 +972,7 @@ "@snackbarMetadataProviderSaved": { "description": "Snackbar - metadata provider order saved" }, - "snackbarExtensionInstalled": "{extensionName}(이)가 설치됨", + "snackbarExtensionInstalled": "'{extensionName}'이 설치됨", "@snackbarExtensionInstalled": { "description": "Snackbar - extension installed successfully", "placeholders": { @@ -981,7 +981,7 @@ } } }, - "snackbarExtensionUpdated": "{extensionName}(이)가 설치됨.", + "snackbarExtensionUpdated": "'{extensionName}'이 설치됨", "@snackbarExtensionUpdated": { "description": "Snackbar - extension updated successfully", "placeholders": { @@ -1026,7 +1026,7 @@ "@errorUrlFetchFailed": { "description": "Error message - generic URL fetch failure" }, - "errorMissingExtensionSource": "확장 소스가 누락되어, {item}(을)를 로드할 수 없습니다", + "errorMissingExtensionSource": "'{item}'을 불러올 수 없음: 확장 소스가 누락됨", "@errorMissingExtensionSource": { "description": "Error - extension source not available", "placeholders": { @@ -1063,7 +1063,7 @@ "@actionSaveCredentials": { "description": "Action button - save Spotify credentials" }, - "selectionSelected": "{count}개 선택됨", + "selectionSelected": "{count} 개 선택됨", "@selectionSelected": { "description": "Selection count indicator", "placeholders": { @@ -1360,7 +1360,7 @@ "@logNoLogsYetSubtitle": { "description": "Empty state subtitle" }, - "logEntriesFiltered": "({count} filtered)개 항목 필터링", + "logEntriesFiltered": "항목 ({count} 개 필터됨)", "@logEntriesFiltered": { "description": "Log count with filter active", "placeholders": { @@ -1369,7 +1369,7 @@ } } }, - "logEntries": "항목 수: ({count})", + "logEntries": "항목 ({count})", "@logEntries": { "description": "Total log count", "placeholders": { @@ -1406,7 +1406,7 @@ "@channelStable": { "description": "Update channel - stable releases" }, - "channelPreview": "베타", + "channelPreview": "개발", "@channelPreview": { "description": "Update channel - beta/preview releases" }, @@ -1506,7 +1506,7 @@ "@settingsAppearanceSubtitle": { "description": "Appearance settings description" }, - "settingsDownloadSubtitle": "서비스, 품질, 대체", + "settingsDownloadSubtitle": "서비스, 음질, 대체", "@settingsDownloadSubtitle": { "description": "Download settings description" }, @@ -1612,7 +1612,7 @@ "@trackDuration": { "description": "Metadata label - track length" }, - "trackAudioQuality": "오디오 품질", + "trackAudioQuality": "오디오 음질", "@trackAudioQuality": { "description": "Metadata label - audio quality" }, @@ -1673,7 +1673,7 @@ "@trackEmbedLyrics": { "description": "Action - embed lyrics into audio file" }, - "trackLyricsEmbedded": "가사를 성공적으로 삽입하였습니다", + "trackLyricsEmbedded": "가사 삽입 성공", "@trackLyricsEmbedded": { "description": "Snackbar - lyrics saved to file" }, @@ -1848,7 +1848,7 @@ "@extensionUrlHandler": { "description": "Capability - handles URLs" }, - "extensionQualityOptions": "품질 옵션", + "extensionQualityOptions": "음질 옵션", "@extensionQualityOptions": { "description": "Capability - quality selection" }, @@ -1935,11 +1935,11 @@ "@extensionsInfoTip": { "description": "Security warning about extensions" }, - "extensionsInstalledSuccess": "확장 프로그램을 성공적으로 설치하였습니다", + "extensionsInstalledSuccess": "확장 프로그램 설치 성공", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "extensionsInstalledCount": "{count} 개의 확장 프로그램을 성공적으로 설치하였습니다", + "extensionsInstalledCount": "{count} 개의 확장 프로그램 설치 성공", "@extensionsInstalledCount": { "description": "Success message after installing multiple extensions", "placeholders": { @@ -2075,7 +2075,7 @@ "@downloadLossyOpus256": { "description": "Lossy format option - Opus 256kbps" }, - "downloadLossyOpus256Subtitle": "최고 품질 Opus, 트랙당 약 8MB", + "downloadLossyOpus256Subtitle": "최고 음질 Opus, 트랙당 약 8MB", "@downloadLossyOpus256Subtitle": { "description": "Subtitle for Opus 256kbps lossy option" }, @@ -2087,7 +2087,7 @@ "@downloadLossyOpus128Subtitle": { "description": "Subtitle for Opus 128kbps lossy option" }, - "qualityNote": "실제 품질은 서비스의 트랙 가용성에 따라 달라집니다", + "qualityNote": "실제 음질은 서비스의 트랙 가용성에 따라 달라집니다", "@qualityNote": { "description": "Note about quality availability" }, @@ -2107,7 +2107,7 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, - "albumFolderStructureDescription": "Choose how album folders are structured", + "albumFolderStructureDescription": "앨범 폴더 구조를 선택하세요", "@albumFolderStructureDescription": { "description": "Album folder structure picker description" }, @@ -2127,7 +2127,7 @@ "@downloadUsePrimaryArtistOnlyDisabled": { "description": "Subtitle when primary artist only is disabled" }, - "downloadSelectQuality": "품질 선택", + "downloadSelectQuality": "음질 선택", "@downloadSelectQuality": { "description": "Dialog title - choose audio quality" }, @@ -2399,7 +2399,7 @@ "@discographyDownloadSelected": { "description": "Button - download selected albums" }, - "discographyAddedToQueue": "대기목록에 {count} 트랙이 추가됨", + "discographyAddedToQueue": "{count} 개의 트랙이 다운로드 목록에 추가됨", "@discographyAddedToQueue": { "description": "Snackbar - tracks added from discography", "placeholders": { @@ -2648,7 +2648,7 @@ "@libraryStorageAccessRequired": { "description": "Dialog title for storage permission" }, - "libraryStorageAccessMessage": "SpotifyFLAC은 음악 라이브러리를 스캔하기 위해 저장소 접근 권한이 필요합니다. 설정에서 권한을 부여해 주세요.", + "libraryStorageAccessMessage": "SpotifyFLAC은 음악 보관함을 스캔하기 위해 저장소 접근 권한이 필요합니다. 설정에서 권한을 부여해 주세요", "@libraryStorageAccessMessage": { "description": "Dialog message for storage permission" }, @@ -2692,7 +2692,7 @@ "@libraryFilterSource": { "description": "Filter section - source type" }, - "libraryFilterQuality": "품질", + "libraryFilterQuality": "음질", "@libraryFilterQuality": { "description": "Filter section - audio quality" }, @@ -2790,7 +2790,7 @@ "@tutorialWelcomeTitle": { "description": "Tutorial welcome page title" }, - "tutorialWelcomeDesc": "좋아하는 음악을 무손실 음질로 다운로드하는 방법을 알아보겠습니다. 이 간단한 튜토리얼은 기본 사항을 보여줍니다.", + "tutorialWelcomeDesc": "좋아하는 음악을 무손실 음질로 다운로드하는 방법을 알아보겠습니다. 이 간단한 튜토리얼은 기본 사항을 보여줍니다", "@tutorialWelcomeDesc": { "description": "Tutorial welcome page description" }, @@ -2830,7 +2830,7 @@ "@tutorialLibraryDesc": { "description": "Tutorial library page description" }, - "tutorialLibraryTip1": "보관함 탭에서 다운로드 진행 상황과 대기목록을 확인하세요", + "tutorialLibraryTip1": "보관함 탭에서 다운로드 진행 상황과 다운로드 목록을 확인하세요", "@tutorialLibraryTip1": { "description": "Tutorial library tip 1" }, @@ -2874,7 +2874,7 @@ "@tutorialSettingsTip1": { "description": "Tutorial settings tip 1" }, - "tutorialSettingsTip2": "기본 오디오 품질 및 형식 설정", + "tutorialSettingsTip2": "기본 오디오 음질 및 형식 설정", "@tutorialSettingsTip2": { "description": "Tutorial settings tip 2" }, @@ -3190,11 +3190,11 @@ "@trackReEnrichFfmpegFailed": { "description": "Snackbar when FFmpeg embed fails for MP3/Opus" }, - "queueFlacAction": "FLAC 대기목록", + "queueFlacAction": "FLAC 다운로드 목록", "@queueFlacAction": { "description": "Action/button label for queueing FLAC redownloads for local tracks" }, - "queueFlacConfirmMessage": "선택한 트랙에 대한 온라인 일치 항목을 검색하고 FLAC 다운로드를 대기목록에 추가합니다\n\n기존 파일은 수정되거나 삭제되지 않습니다\n\n신뢰도가 높은 일치 항목만 자동으로 대기열에 추가됩니다\n\n{count} 개가 선택되었습니다", + "queueFlacConfirmMessage": "선택한 트랙에 대한 온라인 일치 항목을 검색하고 FLAC을 다운로드 목록에 추가합니다\n\n기존 파일은 수정되거나 삭제되지 않습니다\n\n신뢰도가 높은 일치 항목만 자동으로 대기열에 추가됩니다\n\n{count} 개가 선택되었습니다", "@queueFlacConfirmMessage": { "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", "placeholders": { @@ -3219,7 +3219,7 @@ "@queueFlacNoReliableMatches": { "description": "Snackbar when no safe FLAC redownload matches were found" }, - "queueFlacQueuedWithSkipped": "대기목록에 {addedCount} 개의 트랙을 추가하고 {skippedCount} 개의 트랙을 건너뛰었습니다", + "queueFlacQueuedWithSkipped": "다운로드 목록에 {addedCount} 개의 트랙을 추가하고, {skippedCount} 개의 트랙을 건너뜀", "@queueFlacQueuedWithSkipped": { "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", "placeholders": { @@ -3279,7 +3279,7 @@ } } }, - "trackConvertConfirmMessageLossless": "{sourceFormat}에서 {targetFormat}으로 변환하시겠습니까?\n(무손실 — 품질 손실 없음)\n\n변환 후에 원본 파일이 삭제됩니다.", + "trackConvertConfirmMessageLossless": "{sourceFormat}에서 {targetFormat}으로 변환하시겠습니까?\n(무손실 — 음질 손실 없음)\n\n변환 후에 원본 파일이 삭제됩니다", "@trackConvertConfirmMessageLossless": { "description": "Confirmation dialog message for lossless-to-lossless conversion", "placeholders": { @@ -3831,7 +3831,7 @@ "@safMigrationMessage2": { "description": "Second paragraph of SAF migration dialog" }, - "safMigrationSuccess": "다운로드 폴더를 SAF 모드로 업데이트하였습니다", + "safMigrationSuccess": "다운로드 폴더가 SAF 모드로 업데이트됨", "@safMigrationSuccess": { "description": "Snackbar after successfully migrating to SAF" }, @@ -3847,7 +3847,7 @@ "@settingsBackup": { "description": "Settings menu item - backup and restore page" }, - "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "settingsBackupSubtitle": "보관함, 기록 및 설정을 새 기기로 옮기세요", "@settingsBackupSubtitle": { "description": "Subtitle for backup and restore settings item" }, @@ -3859,7 +3859,7 @@ "@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": "설정, 다운로드 기록, 좋아요 표시한 곡, 위시리스트, 즐겨찾는 아티스트 및 재생목록을 하나의 파일로 저장하여 보관하거나 다른 휴대전화로 옮길 수 있습니다", "@backupExportSectionDescription": { "description": "Description of what a backup contains" }, @@ -3871,7 +3871,7 @@ "@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": "데이터를 복원할 백업 파일을 선택하세요. 이 작업을 수행하면 현재 기기에 저장된 설정, 기록 및 보관함이 백업 파일의 내용으로 대체됩니다", "@backupImportSectionDescription": { "description": "Description for the restore action" }, @@ -3899,7 +3899,7 @@ "@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": "현재 설정, 다운로드 기록, 좋아요 표시한 트랙, 위시리스트 및 재생목록이 백업 파일의 내용으로 대체됩니다. 이 작업은 되돌릴 수 없습니다", "@backupRestoreConfirmMessage": { "description": "Confirmation dialog message before restoring a backup" }, @@ -3923,7 +3923,7 @@ "@backupInvalidFile": { "description": "Snackbar when the chosen file is not a valid backup" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "backupRestoreRestartHint": "모든 변경 사항을 적용하려면 앱을 다시 시작하세요", "@backupRestoreRestartHint": { "description": "Hint shown after restoring that an app restart is recommended" }, @@ -3993,11 +3993,11 @@ "@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": "확장 프로그램의 토큰과 API 키가 백업 파일에 함께 저장됩니다. 백업 파일은 안전하게 보관하세요. 비활성화하면 복원 후 다시 입력해야 합니다", "@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 store.", + "backupExtensionsRestoreFailed": "{count} {count, plural, =1{확장 프로그램} other{확장 프로그램}}을 다시 설치할 수 없습니다. 스토어에서 수동으로 설치하세요", "@backupExtensionsRestoreFailed": { "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { @@ -4065,7 +4065,7 @@ "@snackbarMetadataSaved": { "description": "Snackbar after successfully saving track metadata" }, - "snackbarFailedToEmbedLyrics": "가사를 삽입할 수 없습니다", + "snackbarFailedToEmbedLyrics": "가사 삽입 실패", "@snackbarFailedToEmbedLyrics": { "description": "Snackbar when lyrics embedding fails" }, @@ -4166,19 +4166,19 @@ "@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": "로컬/사설 주소에 대한 요청이 허용됨 (로컬 프록시 또는 사용자 지정 DNS용)", "@downloadAllowLocalNetworkEnabled": { "description": "Subtitle when allow local network access is on" }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", + "downloadAllowLocalNetworkDisabled": "보안을 위해 로컬/사설 주소가 차단됨", "@downloadAllowLocalNetworkDisabled": { "description": "Subtitle when allow local network access is off" }, - "downloadSelectServiceToEnable": "이 옵션을 활성화하려면 품질 옵션이 있는 공급자를 선택하세요", + "downloadSelectServiceToEnable": "이 옵션을 활성화하려면 음질 옵션이 있는 공급자를 선택하세요", "@downloadSelectServiceToEnable": { "description": "Subtitle when quality picker is disabled due to extension service" }, - "downloadSelectTidalQobuz": "품질을 선택하려면 품질 옵션이 있는 제공자를 선택하세요", + "downloadSelectTidalQobuz": "음질을 선택하려면 음질 옵션이 있는 제공자를 선택하세요", "@downloadSelectTidalQobuz": { "description": "Legacy info shown when a provider does not expose quality options" }, @@ -4323,7 +4323,7 @@ "@snackbarSelectedPlaylistsEmpty": { "description": "Snackbar when selected playlists contain no tracks" }, - "playlistsCount": "{count, plural, =1{1 재생목록} other{{count} 재생목록}}", + "playlistsCount": "{count, plural, =1{1 개의 재생목록} other{{count} 개의 재생목록}}", "@playlistsCount": { "description": "Playlist count display", "placeholders": { @@ -4421,7 +4421,7 @@ "@editMetadataSelectEmpty": { "description": "Button to select only fields that are currently empty" }, - "queueDownloadingCount": "({count}) 다운로드하는 중", + "queueDownloadingCount": "다운로드하는 중 ({count})", "@queueDownloadingCount": { "description": "Header for active downloads section with count", "placeholders": { @@ -4438,7 +4438,7 @@ "@queueFilteringIndicator": { "description": "Shown while filter results are being computed" }, - "queueTrackCount": "{count, plural, =1{1 트랙} other{{count} 트랙}}", + "queueTrackCount": "{count, plural, =1{1 개의 트랙} other{{count} 개의 트랙}}", "@queueTrackCount": { "description": "Track count label with plural support", "placeholders": { @@ -4447,7 +4447,7 @@ } } }, - "queueAlbumCount": "{count, plural, =1{1 앨범} other{{count} 앨범}}", + "queueAlbumCount": "{count, plural, =1{1 개의 앨범} other{{count} 개의 앨범}}", "@queueAlbumCount": { "description": "Album count label with plural support", "placeholders": { @@ -4492,7 +4492,7 @@ "@selectionSelectPlaylistsToDelete": { "description": "Hint shown when no playlists are selected for deletion" }, - "audioAnalysisTitle": "오디오 품질 분석", + "audioAnalysisTitle": "오디오 음질 분석", "@audioAnalysisTitle": { "description": "Title for audio analysis section" }, @@ -4726,7 +4726,7 @@ "@notifEmbeddingMetadata": { "description": "Notification body while embedding metadata into a downloaded track" }, - "notifAlreadyInLibraryCount": "이미 라이브러리에 있음 ({completed}/{total})", + "notifAlreadyInLibraryCount": "이미 보관함에 있음 ({completed}/{total})", "@notifAlreadyInLibraryCount": { "description": "Notification title when track is already in library, with count", "placeholders": { @@ -4738,7 +4738,7 @@ } } }, - "notifAlreadyInLibrary": "이미 라이브러리에 있음", + "notifAlreadyInLibrary": "이미 보관함에 있음", "@notifAlreadyInLibrary": { "description": "Notification title when track is already in library" }, @@ -4774,7 +4774,7 @@ "@notifAllDownloadsComplete": { "description": "Notification title when all downloads finish successfully" }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 트랙 다운로드 성공} other{{count} 트랙 다운로드 성공}}", + "notifTracksDownloadedSuccess": "{count, plural, =1{1 개의 트랙 다운로드 성공} other{{count} 개의 트랙 다운로드 성공}}", "@notifTracksDownloadedSuccess": { "description": "Notification body for queue complete - how many tracks were downloaded", "placeholders": { @@ -4783,7 +4783,7 @@ } } }, - "notifDownloadsFinishedBody": "{completed, plural, =1{1 트랙 다운로드 성공} other{{completed} 트랙 다운로드 성공}}, {failed, plural, =1{1 실패} other{{failed} 실패}}", + "notifDownloadsFinishedBody": "{completed, plural, =1{1 개의 트랙 다운로드 성공} other{{completed} 개의 트랙 다운로드 성공}}, {failed, plural, =1{1 개 실패} other{{failed} 개 실패}}", "@notifDownloadsFinishedBody": { "description": "Notification body when queue finishes with failures", "placeholders": { @@ -4799,7 +4799,7 @@ "@notifDownloadsCanceledTitle": { "description": "Notification title when downloads are canceled by the user" }, - "notifDownloadsCanceledBody": "{count, plural, =1{1 다운로드가 사용자에 의해 취소됨} other{{count} 다운로드가 사용자에 의해 취소됨}}", + "notifDownloadsCanceledBody": "{count, plural, =1{1 개의 다운로드가 사용자에 의해 취소됨} other{{count} 개의 다운로드가 사용자에 의해 취소됨}}", "@notifDownloadsCanceledBody": { "description": "Notification body when downloads are canceled by the user", "placeholders": { @@ -5363,7 +5363,7 @@ "@libraryFilterMetadataMissingLabel": { "description": "Filter option - items missing record label" }, - "collectionDeletePlaylistsMessage": "{count} {count, plural, =1{playlist} other{playlists}}를 삭제하시겠습니까?", + "collectionDeletePlaylistsMessage": "{count} {count, plural, =1{재생목록} other{재생목록}}을 삭제하시겠습니까?", "@collectionDeletePlaylistsMessage": { "description": "Confirmation message for deleting selected playlists", "placeholders": { @@ -5735,7 +5735,7 @@ "@editMetadataSelectNone": { "description": "Button to clear selected fields for auto-fill" }, - "queueRetryAllFailed": "재시도 {count} 개 실패", + "queueRetryAllFailed": "재시도 {count} 번 실패", "@queueRetryAllFailed": { "description": "Button to retry every failed download in the queue", "placeholders": { @@ -5795,23 +5795,23 @@ "@libraryExternalPlayer": { "description": "Setting option to use an external music player" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "libraryExternalPlayerSubtitle": "감상용으로 권장됩니다. 최고 음질, 갭리스 재생, EQ 및 다양한 오디오 형식을 지원합니다", "@libraryExternalPlayerSubtitle": { "description": "Subtitle for external player option" }, - "libraryBuiltInPreviewPlayer": "내장 미리보기 플레이어", + "libraryBuiltInPreviewPlayer": "내장 미리듣기 플레이어", "@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": "SpotiFLAC Mobile에서 빠른 로컬 미리듣기 전용이며, 일반적인 음악 감상에는 권장되지 않습니다", "@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": "내장 플레이어는 로컬 트랙을 빠르게 미리듣기 위한 도구입니다. 실제 음악 감상은 외부 음악 플레이어를 이용하는 것을 권장합니다", "@libraryBuiltInPlayerInfo": { "description": "Info note explaining the built-in player is for previews only" }, - "nowPlayingTitle": "Now Playing", + "nowPlayingTitle": "현재 재생 중", "@nowPlayingTitle": { "description": "Title for the now playing screen" }, @@ -5851,7 +5851,7 @@ "@nowPlayingLibraryEmpty": { "description": "Snackbar when shuffle library is requested but library has no tracks" }, - "nowPlayingShuffleLibraryFailed": "보관함에서 셔플을 사용할 수 없습니다: {error}", + "nowPlayingShuffleLibraryFailed": "보관함에서 셔플을 사용할 수 없음: {error}", "@nowPlayingShuffleLibraryFailed": { "description": "Snackbar when shuffling the library fails", "placeholders": { @@ -5872,7 +5872,7 @@ "@nowPlayingShuffleLibrary": { "description": "Button label to shuffle and play the entire local library" }, - "nowPlayingQueueEmpty": "현재 재생목록이 비어져 있습니다", + "nowPlayingQueueEmpty": "현재 다운로드 목록이 비어져 있습니다", "@nowPlayingQueueEmpty": { "description": "Empty state when the playback queue has no items" }, @@ -5884,7 +5884,7 @@ "@announcementUnableToOpenLink": { "description": "Snackbar shown when an announcement CTA link cannot be opened" }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "trackConvertLosslessOutputWithCap": "{quality} 제한이 있는 무손실 출력", "@trackConvertLosslessOutputWithCap": { "description": "Hint shown when lossless conversion will cap bit depth or sample rate", "placeholders": { @@ -5908,7 +5908,7 @@ } } }, - "selectionBatchConvertConfirmMessageLosslessCapped": "{count} {count, plural, =1{ 개의 트랙} other{ 개의 트랙}}을 {format}({quality})으로 변환하시겠습니까?\n\n출력은 무손실 코덱을 유지하지만 비트 심도/샘플 속도가 제한됩니다. 변환 후 원본 파일이 삭제됩니다", + "selectionBatchConvertConfirmMessageLosslessCapped": "{count} {count, plural, =1{트랙} other{트랙}}을 {format}({quality})으로 변환하시겠습니까?\n\n출력은 무손실 코덱을 유지하지만 비트 심도/샘플 속도가 제한됩니다. 변환 후 원본 파일이 삭제됩니다", "@selectionBatchConvertConfirmMessageLosslessCapped": { "description": "Confirmation dialog message for capped lossless batch conversion", "placeholders": { @@ -5961,11 +5961,11 @@ "@snackbarPlayingNext": { "description": "Snackbar when a track is inserted as the next queue item" }, - "snackbarAddedToQueueGeneric": "현재 재생목록에 추가됨", + "snackbarAddedToQueueGeneric": "현재 다운로드 목록에 추가됨", "@snackbarAddedToQueueGeneric": { "description": "Snackbar when a track is added to the playback queue without naming it" }, - "selectionDeletePlaylistsCount": "{count} {count, plural, =1{ 개의 재생목록} other{ 개의 재생목록}} 삭제", + "selectionDeletePlaylistsCount": "{count} {count, plural, =1{재생목록} other{재생목록}} 삭제", "@selectionDeletePlaylistsCount": { "description": "Button label for deleting multiple selected playlists", "placeholders": { @@ -6018,7 +6018,7 @@ "@trackPlayNext": { "description": "Menu action to play a track as the next queue item" }, - "trackAddToQueue": "현재 재생목록에 추가", + "trackAddToQueue": "현재 다운로드 목록에 추가", "@trackAddToQueue": { "description": "Menu action to add a track to the playback queue" }, From 7a811ad55ef809740e78b8e65f0a7554338ff443 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:56:33 +0700 Subject: [PATCH 092/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 70 ++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 53585a0a..709aef9a 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -33,11 +33,11 @@ "@homeEmptyTitle": { "description": "Title shown on home when no providers are available yet" }, - "homeEmptySubtitle": "계속하려면 확장 프로그램을 설치하세요.", + "homeEmptySubtitle": "계속하려면 확장 프로그램을 설치하세요", "@homeEmptySubtitle": { "description": "Subtitle shown on home when no providers are available yet" }, - "homeSupports": "지원 항목: 트랙, 앨범, 플레이리스트, 아티스트 URL", + "homeSupports": "지원 항목: 트랙, 앨범, 재생목록, 아티스트 URL", "@homeSupports": { "description": "Info text about supported URL types" }, @@ -190,11 +190,11 @@ "@optionsUseExtensionProviders": { "description": "Legacy setting label for extension download providers" }, - "optionsUseExtensionProvidersOn": "확장 프로그램 제공자가 활성화되었습니다", + "optionsUseExtensionProvidersOn": "확장 프로그램 제공자가 활성화됨", "@optionsUseExtensionProvidersOn": { "description": "Status when extension providers enabled" }, - "optionsUseExtensionProvidersOff": "확장 프로그램 제공자가 필요합니다", + "optionsUseExtensionProvidersOff": "확장 프로그램 제공자가 필요함", "@optionsUseExtensionProvidersOff": { "description": "Legacy status when extension providers would be disabled" }, @@ -296,7 +296,7 @@ "@optionsArtistTagModeJoined": { "description": "Artist tag mode option that joins multiple artists into one value" }, - "optionsArtistTagModeJoinedSubtitle": "플레이어 호환성을 최대화하려면 \"아티스트 A, 아티스트 B\"와 같이 하나의 ARTIST 값을 입력하세요.", + "optionsArtistTagModeJoinedSubtitle": "플레이어 호환성을 최대화하려면 '아티스트 A, 아티스트 B'와 같이 하나의 아티스트 값을 입력하세요", "@optionsArtistTagModeJoinedSubtitle": { "description": "Subtitle for joined artist tag mode" }, @@ -320,7 +320,7 @@ "@optionsCheckUpdates": { "description": "Auto update check toggle" }, - "optionsCheckUpdatesSubtitle": "새로운 버전이 출시되면 알림", + "optionsCheckUpdatesSubtitle": "새 버전이 출시되면 알림", "@optionsCheckUpdatesSubtitle": { "description": "Subtitle for update check" }, @@ -447,7 +447,7 @@ "@aboutMobileDeveloper": { "description": "Role description for mobile dev" }, - "aboutOriginalCreator": "오리지널 SpotiFLAC 제작자", + "aboutOriginalCreator": "SpotiFLAC 오리지널 개발자", "@aboutOriginalCreator": { "description": "Role description for original creator" }, @@ -483,7 +483,7 @@ "@aboutReportIssue": { "description": "Link to report bugs" }, - "aboutReportIssueSubtitle": "발생하는 모든 문제를 신고하여 주세요.", + "aboutReportIssueSubtitle": "발생하는 모든 문제를 신고해 주세요", "@aboutReportIssueSubtitle": { "description": "Subtitle for report issue" }, @@ -491,7 +491,7 @@ "@aboutFeatureRequest": { "description": "Link to suggest features" }, - "aboutFeatureRequestSubtitle": "앱의 새로운 기능을 제안하여 주세요.", + "aboutFeatureRequestSubtitle": "앱의 새 기능을 제안해 주세요", "@aboutFeatureRequestSubtitle": { "description": "Subtitle for feature request" }, @@ -523,11 +523,11 @@ "@aboutVersion": { "description": "Version info label" }, - "aboutBinimumDesc": "QQDL 및 HiFi API 개발자입니다. 이 프로젝트는 무손실 다운로드 지원을 형성하는 데 도움을 주셨습니다.", + "aboutBinimumDesc": "QQDL 및 HiFi API 개발자입니다. 이 프로젝트는 무손실 다운로드 지원을 형성하는 데 도움을 주셨습니다", "@aboutBinimumDesc": { "description": "Credit description for binimum" }, - "aboutSachinsenalDesc": "HiFi 프로젝트의 원작자이자, 무손실 음원 소스 통합 기능의 토대를 구축한 개발자입니다.", + "aboutSachinsenalDesc": "HiFi 프로젝트의 원작자이자, 무손실 음원 소스 연동 기능의 토대를 구축한 개발자입니다", "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, @@ -535,7 +535,7 @@ "@aboutSjdonadoDesc": { "description": "Credit description for sjdonado" }, - "aboutAppDescription": "음악 메타데이터 검색, 확장 프로그램 관리, 보관함 정리.", + "aboutAppDescription": "음악 메타데이터를 검색하고, 확장 프로그램을 관리하고, 라이브러리를 정리하세요", "@aboutAppDescription": { "description": "App description in header card" }, @@ -551,7 +551,7 @@ "@artistCompilations": { "description": "Section header for compilations" }, - "artistPopular": "인기순", + "artistPopular": "인기", "@artistPopular": { "description": "Section header for popular/top tracks" }, @@ -593,7 +593,7 @@ "@setupStorageAccessRequired": { "description": "Title when storage access needed" }, - "setupStorageAccessMessageAndroid11": "Android 11 이상 버전에서는 선택한 다운로드 폴더에 파일을 저장하려면 \"모든 파일 접근\" 권한이 필요합니다.", + "setupStorageAccessMessageAndroid11": "Android 11 이상 버전에서는 선택한 다운로드 폴더에 파일을 저장하려면 '모든 파일 접근' 권한이 필요합니다", "@setupStorageAccessMessageAndroid11": { "description": "Android 11+ specific explanation" }, @@ -615,7 +615,7 @@ } } }, - "setupPermissionRequiredMessage": "최상의 사용 경험을 위해 {permissionType} 권한이 필요합니다. 설정에서 나중에 변경할 수 있습니다.", + "setupPermissionRequiredMessage": "최상의 사용 경험을 위해 {permissionType} 권한이 필요합니다. 설정에서 나중에 변경할 수 있습니다", "@setupPermissionRequiredMessage": { "description": "Generic permission required message", "placeholders": { @@ -640,7 +640,7 @@ "@setupDownloadLocationTitle": { "description": "Download location dialog title" }, - "setupDownloadLocationIosMessage": "iOS에서는 다운로드한 파일이 앱의 문서 폴더에 저장됩니다. 파일 앱을 통해 해당 파일에 접근할 수 있습니다.", + "setupDownloadLocationIosMessage": "iOS에서는 다운로드한 파일이 앱의 문서 폴더에 저장됩니다. 파일 앱을 통해 해당 파일에 접근할 수 있습니다", "@setupDownloadLocationIosMessage": { "description": "iOS-specific folder info" }, @@ -676,7 +676,7 @@ "@setupStorageGranted": { "description": "Success message for storage permission" }, - "setupStorageRequired": "저장소 접근 권한이 필요합니다.", + "setupStorageRequired": "저장소 접근 권한 필요", "@setupStorageRequired": { "description": "Title when storage permission needed" }, @@ -696,7 +696,7 @@ "@setupFolderChoose": { "description": "Button to choose folder" }, - "setupFolderDescription": "다운로드한 음악 파일이 저장될 폴더를 선택하세요.", + "setupFolderDescription": "다운로드한 음악 파일이 저장될 폴더를 선택하세요", "@setupFolderDescription": { "description": "Explanation for folder selection" }, @@ -712,7 +712,7 @@ "@setupNotificationBackgroundDescription": { "description": "Detailed notification explanation" }, - "setupSkipForNow": "다음에 할래요.", + "setupSkipForNow": "다음에 할래요", "@setupSkipForNow": { "description": "Skip button text" }, @@ -752,7 +752,7 @@ "@dialogDelete": { "description": "Dialog button - delete item" }, - "dialogRetry": "재시도", + "dialogRetry": "다시 시도", "@dialogRetry": { "description": "Dialog button - retry action" }, @@ -1248,7 +1248,7 @@ "@updateDownloading": { "description": "Update status - downloading" }, - "updateWhatsNew": "새로운 기능", + "updateWhatsNew": "새 기능", "@updateWhatsNew": { "description": "Changelog section title" }, @@ -1748,7 +1748,7 @@ "@storeFilterLyrics": { "description": "Store filter - lyrics providers" }, - "storeFilterIntegration": "통합", + "storeFilterIntegration": "연동", "@storeFilterIntegration": { "description": "Store filter - integrations" }, @@ -1931,7 +1931,7 @@ "@extensionsInstallButton": { "description": "Button to install extension from file" }, - "extensionsInfoTip": "확장 프로그램은 새로운 메타데이터와 다운로드 제공자를 추가할 수 있습니다. 신뢰할 수 있는 출처에서만 확장 프로그램을 설치하세요.", + "extensionsInfoTip": "확장 프로그램은 새 메타데이터와 다운로드 제공자를 추가할 수 있습니다. 신뢰할 수 있는 출처에서만 확장 프로그램을 설치하세요", "@extensionsInfoTip": { "description": "Security warning about extensions" }, @@ -2902,7 +2902,7 @@ "@cleanupOrphanedDownloadsSubtitle": { "description": "Subtitle for orphaned cleanup button" }, - "cleanupOrphanedDownloadsResult": "기록에서 {count} 개의 불필요한 항목을 제거하였습니다", + "cleanupOrphanedDownloadsResult": "기록에서 {count} 개의 불필요한 항목이 제거됨", "@cleanupOrphanedDownloadsResult": { "description": "Snackbar after orphan cleanup", "placeholders": { @@ -3408,7 +3408,7 @@ "@collectionWishlist": { "description": "Custom folder for saved tracks to download later" }, - "collectionLoved": "좋아요 표시한 곡", + "collectionLoved": "좋아요 표시한 트랙", "@collectionLoved": { "description": "Custom folder for favorite tracks" }, @@ -3521,7 +3521,7 @@ "@collectionWishlistEmptySubtitle": { "description": "Wishlist empty state subtitle" }, - "collectionLovedEmptyTitle": "'좋아요 표시한 곡' 폴더가 비워져 있습니다", + "collectionLovedEmptyTitle": "'좋아요 표시한 트랙' 폴더가 비어 있음", "@collectionLovedEmptyTitle": { "description": "Loved empty state title" }, @@ -3562,7 +3562,7 @@ } } }, - "collectionAddedToLoved": "'{trackName}'이 '좋아요 표시한 곡'에 추가됨", + "collectionAddedToLoved": "'{trackName}'이 '좋아요 표시한 트랙'에 추가됨", "@collectionAddedToLoved": { "description": "Snackbar after adding track to loved folder", "placeholders": { @@ -3571,7 +3571,7 @@ } } }, - "collectionRemovedFromLoved": "'{trackName}'이 '좋아요 표시한 곡'에서 제거됨", + "collectionRemovedFromLoved": "'{trackName}'이 '좋아요 표시한 트랙'에서 제거됨", "@collectionRemovedFromLoved": { "description": "Snackbar after removing track from loved folder", "placeholders": { @@ -3616,11 +3616,11 @@ } } }, - "trackOptionAddToLoved": "'좋아요 표시한 곡'에 추가", + "trackOptionAddToLoved": "'좋아요 표시한 트랙'에 추가", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" }, - "trackOptionRemoveFromLoved": "'좋아요 표시한 곡'에서 제거", + "trackOptionRemoveFromLoved": "'좋아요 표시한 트랙'에서 제거", "@trackOptionRemoveFromLoved": { "description": "Bottom sheet action label - remove track from loved folder" }, @@ -3859,7 +3859,7 @@ "@backupExportSectionTitle": { "description": "Section title for the export/backup card" }, - "backupExportSectionDescription": "설정, 다운로드 기록, 좋아요 표시한 곡, 위시리스트, 즐겨찾는 아티스트 및 재생목록을 하나의 파일로 저장하여 보관하거나 다른 휴대전화로 옮길 수 있습니다", + "backupExportSectionDescription": "설정, 다운로드 기록, 좋아요 표시한 트랙, 위시리스트, 즐겨찾는 아티스트 및 재생목록을 하나의 파일로 저장하여 보관하거나 다른 휴대전화로 옮길 수 있습니다", "@backupExportSectionDescription": { "description": "Description of what a backup contains" }, @@ -4014,7 +4014,7 @@ "@tooltipAddToPlaylist": { "description": "Tooltip for the Add to Playlist button" }, - "snackbarRemovedTracksFromLoved": "'좋아요 표시한 곡'에서 {count} 트랙이 제거됨", + "snackbarRemovedTracksFromLoved": "'좋아요 표시한 트랙'에서 {count} 개의 트랙이 제거됨", "@snackbarRemovedTracksFromLoved": { "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { @@ -4023,7 +4023,7 @@ } } }, - "snackbarAddedTracksToLoved": "'좋아요 표시한 곡'에 {count} 트랙이 추가됨", + "snackbarAddedTracksToLoved": "'좋아요 표시한 트랙'에 {count} 개의 트랙이 추가됨", "@snackbarAddedTracksToLoved": { "description": "Snackbar after adding multiple tracks to Loved folder", "placeholders": { @@ -5417,7 +5417,7 @@ } } }, - "trackReEnrichSuccessWithFailures": "메타데이터가 성공적으로 재구성됨 ({successCount}/{total}) - 실패: {failedCount}", + "trackReEnrichSuccessWithFailures": "메타데이터 재구성 성공 ({successCount}/{total}) - 실패: {failedCount}", "@trackReEnrichSuccessWithFailures": { "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", "placeholders": { @@ -5723,7 +5723,7 @@ "@storeCategoryLyrics": { "description": "Store extension category - lyrics" }, - "storeCategoryIntegration": "통합", + "storeCategoryIntegration": "연동", "@storeCategoryIntegration": { "description": "Store extension category - integration" }, From 8c7c168fdf58a885b5e94b59a1aa5e4f8602cba9 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:52:34 +0700 Subject: [PATCH 093/137] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 52 ++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index acdb996e..e17b743b 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -5811,7 +5811,7 @@ "@libraryBuiltInPlayerInfo": { "description": "Info note explaining the built-in player is for previews only" }, - "nowPlayingTitle": "Now Playing", + "nowPlayingTitle": "En cours de lecture", "@nowPlayingTitle": { "description": "Title for the now playing screen" }, @@ -5823,7 +5823,7 @@ "@nowPlayingMinimize": { "description": "Tooltip for minimizing the now playing screen" }, - "nowPlayingUpNext": "Up next", + "nowPlayingUpNext": "À suivre", "@nowPlayingUpNext": { "description": "Title for the playback queue sheet" }, @@ -5860,7 +5860,7 @@ } } }, - "nowPlayingShuffleOn": "Shuffle on", + "nowPlayingShuffleOn": "Lecture aléatoire activée", "@nowPlayingShuffleOn": { "description": "Tooltip when shuffle mode is enabled" }, @@ -5868,7 +5868,7 @@ "@nowPlayingPlayInOrder": { "description": "Tooltip when shuffle mode is disabled" }, - "nowPlayingShuffleLibrary": "Shuffle library", + "nowPlayingShuffleLibrary": "Lecture aléatoire de la bibliothèque", "@nowPlayingShuffleLibrary": { "description": "Button label to shuffle and play the entire local library" }, @@ -5893,7 +5893,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": "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": { @@ -5953,7 +5953,7 @@ } } }, - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "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" }, @@ -5961,7 +5961,7 @@ "@snackbarPlayingNext": { "description": "Snackbar when a track is inserted as the next queue item" }, - "snackbarAddedToQueueGeneric": "Added to queue", + "snackbarAddedToQueueGeneric": "Ajouté à la file d'attente", "@snackbarAddedToQueueGeneric": { "description": "Snackbar when a track is added to the playback queue without naming it" }, @@ -5986,11 +5986,11 @@ "@downloadPrimaryArtistOnlyOff": { "description": "Status label when primary-artist-only folder naming is disabled" }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "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" }, - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "downloadAlbumArtistMetadataFull": "Métadonnées de l'artiste de l'album : complètes", "@downloadAlbumArtistMetadataFull": { "description": "Status label when album-artist folder filtering uses full metadata" }, @@ -5998,7 +5998,7 @@ "@trackConvertOriginal": { "description": "Label for keeping original bit depth or sample rate during conversion" }, - "trackConvertOriginalQuality": "Original quality", + "trackConvertOriginalQuality": "Qualité d'origine", "@trackConvertOriginalQuality": { "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" }, @@ -6006,7 +6006,7 @@ "@trackConvertLosslessSuffix": { "description": "Suffix used in converted lossless quality labels" }, - "updateSeeReleaseNotes": "See release notes for details.", + "updateSeeReleaseNotes": "Pour plus de détails, consultez les notes de mise à jour.", "@updateSeeReleaseNotes": { "description": "Fallback changelog text when release notes cannot be parsed" }, @@ -6022,7 +6022,7 @@ "@trackAddToQueue": { "description": "Menu action to add a track to the playback queue" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "snackbarExtensionInstalledEnable": "{extensionName} est installée. Activez-la dans Paramètres > Extensions", "@snackbarExtensionInstalledEnable": { "description": "Snackbar after installing an extension from the repo tab", "placeholders": { @@ -6031,7 +6031,7 @@ } } }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "snackbarExtensionUpdatedVersion": "{extensionName} a été mis à jour vers la version {version}", "@snackbarExtensionUpdatedVersion": { "description": "Snackbar after updating an extension from the repo tab", "placeholders": { @@ -6043,7 +6043,7 @@ } } }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "snackbarFailedToInstallNamed": "Échec de l'installation de {extensionName}", "@snackbarFailedToInstallNamed": { "description": "Snackbar when extension install fails in the repo tab", "placeholders": { @@ -6052,7 +6052,7 @@ } } }, - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "snackbarFailedToUpdateNamed": "Échec de la mise à jour de {extensionName}", "@snackbarFailedToUpdateNamed": { "description": "Snackbar when extension update fails in the repo tab", "placeholders": { @@ -6069,15 +6069,15 @@ "@releaseTypeSingle": { "description": "Badge label for single releases" }, - "trackCoverOnline": "Online cover", + "trackCoverOnline": "Pochette en ligne", "@trackCoverOnline": { "description": "Label shown when metadata autofill downloaded cover art from the internet" }, - "regionCountryUS": "United States", + "regionCountryUS": "États-Unis", "@regionCountryUS": { "description": "Country name for SongLink region picker" }, - "regionCountryGB": "United Kingdom", + "regionCountryGB": "Royaume-Uni", "@regionCountryGB": { "description": "Country name for SongLink region picker" }, @@ -6085,35 +6085,35 @@ "@regionCountryFR": { "description": "Country name for SongLink region picker" }, - "regionCountryDE": "Germany", + "regionCountryDE": "Allemagne", "@regionCountryDE": { "description": "Country name for SongLink region picker" }, - "regionCountryJP": "Japan", + "regionCountryJP": "Japon", "@regionCountryJP": { "description": "Country name for SongLink region picker" }, - "regionCountryKR": "South Korea", + "regionCountryKR": "Corée du Sud", "@regionCountryKR": { "description": "Country name for SongLink region picker" }, - "regionCountryIN": "India", + "regionCountryIN": "Inde", "@regionCountryIN": { "description": "Country name for SongLink region picker" }, - "regionCountryID": "Indonesia", + "regionCountryID": "Indonésie", "@regionCountryID": { "description": "Country name for SongLink region picker" }, - "regionCountryBR": "Brazil", + "regionCountryBR": "Brésil", "@regionCountryBR": { "description": "Country name for SongLink region picker" }, - "regionCountryMX": "Mexico", + "regionCountryMX": "Mexique", "@regionCountryMX": { "description": "Country name for SongLink region picker" }, - "regionCountryAU": "Australia", + "regionCountryAU": "Australie", "@regionCountryAU": { "description": "Country name for SongLink region picker" }, From e35ea061d5f23bda89d917c8eccc4af6df062434 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:52:36 +0700 Subject: [PATCH 094/137] 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 709aef9a..38212598 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -29,7 +29,7 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, - "homeEmptyTitle": "아직 검색 공급자가 없습니다", + "homeEmptyTitle": "아직 검색 제공자가 없음", "@homeEmptyTitle": { "description": "Title shown on home when no providers are available yet" }, From bce05eb0710cb255179d20674c6a03c4dce20c95 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 19:03:54 +0700 Subject: [PATCH 095/137] 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 e17b743b..54bd5a84 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -3935,7 +3935,7 @@ "@backupContentsSettings": { "description": "Backup contents row label for settings" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "backupContentsHistory": "{count} historique {count, plural, one {}=1{élément} other{éléments}}", "@backupContentsHistory": { "description": "Backup contents row for history count", "placeholders": { @@ -3944,7 +3944,7 @@ } } }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "backupContentsLiked": "{count} favoris {count, plural, one {}=1{titre} other{titres}}", "@backupContentsLiked": { "description": "Backup contents row for liked tracks count", "placeholders": { @@ -3953,7 +3953,7 @@ } } }, - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "backupContentsWishlist": "{count} liste de souhaits {count, plural, one {}=1{titre} other{titres}}", "@backupContentsWishlist": { "description": "Backup contents row for wishlist tracks count", "placeholders": { @@ -3971,7 +3971,7 @@ } } }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "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": { @@ -3997,7 +3997,7 @@ "@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 store.", + "backupExtensionsRestoreFailed": "{count} {count, plural, one {}=1{extension} other{extensions}} n'ont pas pu être réinstallées. Installez-les manuellement depuis la boutique.", "@backupExtensionsRestoreFailed": { "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { @@ -5908,7 +5908,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": "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": { @@ -5957,7 +5957,7 @@ "@aboutPaxsenixSubtitle": { "description": "Subtitle for Paxsenix special thanks entry on the about page" }, - "snackbarPlayingNext": "Playing next", + "snackbarPlayingNext": "Prochainement", "@snackbarPlayingNext": { "description": "Snackbar when a track is inserted as the next queue item" }, @@ -5965,7 +5965,7 @@ "@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": "Supprimer {count} {count, plural, one {}=1{playlist} other{playlists}}", "@selectionDeletePlaylistsCount": { "description": "Button label for deleting multiple selected playlists", "placeholders": { @@ -5974,7 +5974,7 @@ } } }, - "actionShuffle": "Shuffle", + "actionShuffle": "Lecture aléatoire", "@actionShuffle": { "description": "Tooltip for shuffle playback action" }, @@ -6014,7 +6014,7 @@ "@unknownTitle": { "description": "Fallback track title when metadata is missing" }, - "trackPlayNext": "Play next", + "trackPlayNext": "Suivant", "@trackPlayNext": { "description": "Menu action to play a track as the next queue item" }, From a3d6c6f9160d02a297cab624ff017a452b490842 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 19:03:56 +0700 Subject: [PATCH 096/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 72 ++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 38212598..14321e81 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -9,7 +9,7 @@ "@navHome": { "description": "Bottom navigation - Home tab" }, - "navLibrary": "보관함", + "navLibrary": "라이브러리", "@navLibrary": { "description": "Bottom navigation - Library tab" }, @@ -899,7 +899,7 @@ } } }, - "snackbarAlreadyInLibrary": "보관함에 '{trackName}'이 이미 존재함", + "snackbarAlreadyInLibrary": "라이브러리에 '{trackName}'이 이미 존재함", "@snackbarAlreadyInLibrary": { "description": "Snackbar - track already exists in local library", "placeholders": { @@ -2456,7 +2456,7 @@ "@allFilesAccessDisabledMessage": { "description": "Snackbar message when user disables all files access" }, - "settingsLocalLibrary": "로컬 보관함", + "settingsLocalLibrary": "로컬 라이브러리", "@settingsLocalLibrary": { "description": "Settings menu item - local library" }, @@ -2472,7 +2472,7 @@ "@settingsCacheSubtitle": { "description": "Subtitle for cache management menu" }, - "libraryTitle": "로컬 보관함", + "libraryTitle": "로컬 라이브러리", "@libraryTitle": { "description": "Library settings page title" }, @@ -2480,7 +2480,7 @@ "@libraryScanSettings": { "description": "Section header for scan settings" }, - "libraryEnableLocalLibrary": "로컬 보관함 활성화", + "libraryEnableLocalLibrary": "로컬 라이브러리 활성화", "@libraryEnableLocalLibrary": { "description": "Toggle to enable library scanning" }, @@ -2488,7 +2488,7 @@ "@libraryEnableLocalLibrarySubtitle": { "description": "Subtitle for enable toggle" }, - "libraryFolder": "보관함 폴더", + "libraryFolder": "라이브러리 폴더", "@libraryFolder": { "description": "Folder selection setting" }, @@ -2508,7 +2508,7 @@ "@libraryAutoScan": { "description": "Setting for automatic library scanning" }, - "libraryAutoScanSubtitle": "보관함에서 새 파일을 자동으로 스캔합니다", + "libraryAutoScanSubtitle": "라이브러리에서 새 파일을 자동으로 스캔합니다", "@libraryAutoScanSubtitle": { "description": "Subtitle for auto scan setting" }, @@ -2532,7 +2532,7 @@ "@libraryActions": { "description": "Section header for library actions" }, - "libraryScan": "보관함 스캔", + "libraryScan": "라이브러리 스캔", "@libraryScan": { "description": "Button to start library scan" }, @@ -2552,7 +2552,7 @@ "@libraryCleanupMissingFilesSubtitle": { "description": "Subtitle for cleanup button" }, - "libraryClear": "보관함 지우기", + "libraryClear": "라이브러리 정리", "@libraryClear": { "description": "Button to clear all library entries" }, @@ -2560,11 +2560,11 @@ "@libraryClearSubtitle": { "description": "Subtitle for clear button" }, - "libraryClearConfirmTitle": "보관함 지우기", + "libraryClearConfirmTitle": "라이브러리 정리", "@libraryClearConfirmTitle": { "description": "Dialog title for clear confirmation" }, - "libraryClearConfirmMessage": "이렇게 하면 보관함에서 스캔된 모든 트랙이 제거됩니다. 실제 음악 파일은 삭제되지 않습니다.", + "libraryClearConfirmMessage": "이렇게 하면 라이브러리에서 스캔된 모든 트랙이 제거됩니다. 실제 음악 파일은 삭제되지 않습니다", "@libraryClearConfirmMessage": { "description": "Dialog message for clear confirmation" }, @@ -2611,7 +2611,7 @@ "@libraryScanning": { "description": "Status during scan" }, - "libraryScanFinalizing": "보관함을 마무리하는 중...", + "libraryScanFinalizing": "라이브러리를 마무리하는 중...", "@libraryScanFinalizing": { "description": "Status shown after file scanning finishes but library persistence is still running" }, @@ -2627,11 +2627,11 @@ } } }, - "libraryInLibrary": "보관함에서", + "libraryInLibrary": "라이브러리에서", "@libraryInLibrary": { "description": "Badge shown on tracks that exist in local library" }, - "libraryRemovedMissingFiles": "보관함에서 누락된 파일 {count} 개가 제거됨", + "libraryRemovedMissingFiles": "라이브러리에서 누락된 파일 {count} 개가 제거됨", "@libraryRemovedMissingFiles": { "description": "Snackbar after cleanup", "placeholders": { @@ -2640,7 +2640,7 @@ } } }, - "libraryCleared": "보관함이 초기화됨", + "libraryCleared": "라이브러리가 초기화됨", "@libraryCleared": { "description": "Snackbar after clearing library" }, @@ -2648,7 +2648,7 @@ "@libraryStorageAccessRequired": { "description": "Dialog title for storage permission" }, - "libraryStorageAccessMessage": "SpotifyFLAC은 음악 보관함을 스캔하기 위해 저장소 접근 권한이 필요합니다. 설정에서 권한을 부여해 주세요", + "libraryStorageAccessMessage": "SpotifyFLAC은 음악 라이브러리를 스캔하기 위해 저장소 접근 권한이 필요합니다. 설정에서 권한을 부여해 주세요", "@libraryStorageAccessMessage": { "description": "Dialog message for storage permission" }, @@ -2822,15 +2822,15 @@ "@tutorialDownloadDesc": { "description": "Tutorial download page description" }, - "tutorialLibraryTitle": "내 보관함", + "tutorialLibraryTitle": "내 라이브러리", "@tutorialLibraryTitle": { "description": "Tutorial library page title" }, - "tutorialLibraryDesc": "다운로드한 모든 음악은 보관함 탭에 정리되어 있습니다.", + "tutorialLibraryDesc": "다운로드한 모든 음악은 라이브러리 탭에 정리되어 있습니다.", "@tutorialLibraryDesc": { "description": "Tutorial library page description" }, - "tutorialLibraryTip1": "보관함 탭에서 다운로드 진행 상황과 다운로드 목록을 확인하세요", + "tutorialLibraryTip1": "라이브러리 탭에서 다운로드 진행 상황과 다운로드 목록을 확인하세요", "@tutorialLibraryTip1": { "description": "Tutorial library tip 1" }, @@ -2968,7 +2968,7 @@ "@cacheCoverImageDesc": { "description": "Description of what cover image cache contains" }, - "cacheLibraryCover": "보관함 표지 캐시", + "cacheLibraryCover": "라이브러리 표지 캐시", "@cacheLibraryCover": { "description": "Cache item title for local library cover art images" }, @@ -2992,7 +2992,7 @@ "@cacheTrackLookupDesc": { "description": "Description of what track lookup cache contains" }, - "cacheCleanupUnusedDesc": "누락된 파일에 대한 불필요한 다운로드 기록 및 보관함 항목을 제거합니다.", + "cacheCleanupUnusedDesc": "누락된 파일에 대한 불필요한 다운로드 기록 및 라이브러리 항목을 제거합니다", "@cacheCleanupUnusedDesc": { "description": "Description of what cleanup unused data does" }, @@ -3068,11 +3068,11 @@ "@cacheCleanupUnused": { "description": "Action title for cleaning unused entries" }, - "cacheCleanupUnusedSubtitle": "불필요한 다운로드 기록 및 누락된 보관함 항목을 제거합니다", + "cacheCleanupUnusedSubtitle": "불필요한 다운로드 기록 및 누락된 라이브러리 항목을 제거합니다", "@cacheCleanupUnusedSubtitle": { "description": "Subtitle for cleanup unused data action" }, - "cacheCleanupResult": "정리 완료: {downloadCount} 개의 사용되지 않는 다운로드, {libraryCount} 개의 누락된 보관함 항목", + "cacheCleanupResult": "정리 완료: {downloadCount} 개의 사용되지 않는 다운로드, {libraryCount} 개의 누락된 라이브러리 항목", "@cacheCleanupResult": { "description": "Snackbar after unused data cleanup", "placeholders": { @@ -3847,7 +3847,7 @@ "@settingsBackup": { "description": "Settings menu item - backup and restore page" }, - "settingsBackupSubtitle": "보관함, 기록 및 설정을 새 기기로 옮기세요", + "settingsBackupSubtitle": "라이브러리, 기록 및 설정을 새 기기로 옮겨보세요", "@settingsBackupSubtitle": { "description": "Subtitle for backup and restore settings item" }, @@ -3871,7 +3871,7 @@ "@backupImportSectionTitle": { "description": "Section title for the import/restore card" }, - "backupImportSectionDescription": "데이터를 복원할 백업 파일을 선택하세요. 이 작업을 수행하면 현재 기기에 저장된 설정, 기록 및 보관함이 백업 파일의 내용으로 대체됩니다", + "backupImportSectionDescription": "데이터를 복원할 백업 파일을 선택하세요. 이 작업을 수행하면 현재 기기에 저장된 설정, 기록 및 라이브러리가 백업 파일의 내용으로 대체됩니다", "@backupImportSectionDescription": { "description": "Description for the restore action" }, @@ -4696,11 +4696,11 @@ "@notifChannelDownloadDesc": { "description": "Android notification channel description for download progress" }, - "notifChannelLibraryScanName": "보관함 스캔", + "notifChannelLibraryScanName": "라이브러리 스캔", "@notifChannelLibraryScanName": { "description": "Android notification channel name for library scan" }, - "notifChannelLibraryScanDesc": "로컬 보관함 스캔 진행률을 표시합니다", + "notifChannelLibraryScanDesc": "로컬 라이브러리 스캔 진행률을 표시합니다", "@notifChannelLibraryScanDesc": { "description": "Android notification channel description for library scan" }, @@ -4726,7 +4726,7 @@ "@notifEmbeddingMetadata": { "description": "Notification body while embedding metadata into a downloaded track" }, - "notifAlreadyInLibraryCount": "이미 보관함에 있음 ({completed}/{total})", + "notifAlreadyInLibraryCount": "이미 라이브러리에 있음 ({completed}/{total})", "@notifAlreadyInLibraryCount": { "description": "Notification title when track is already in library, with count", "placeholders": { @@ -4738,7 +4738,7 @@ } } }, - "notifAlreadyInLibrary": "이미 보관함에 있음", + "notifAlreadyInLibrary": "이미 라이브러리에 있음", "@notifAlreadyInLibrary": { "description": "Notification title when track is already in library" }, @@ -4808,7 +4808,7 @@ } } }, - "notifScanningLibrary": "로컬 보관함을 스캔하는 중", + "notifScanningLibrary": "로컬 라이브러리를 스캔하는 중", "@notifScanningLibrary": { "description": "Notification title while scanning local library" }, @@ -4839,7 +4839,7 @@ } } }, - "notifLibraryScanComplete": "보관함 스캔 완료", + "notifLibraryScanComplete": "라이브러리 스캔 완료", "@notifLibraryScanComplete": { "description": "Notification title when library scan finishes" }, @@ -4870,7 +4870,7 @@ } } }, - "notifLibraryScanFailed": "보관함 스캔 실패", + "notifLibraryScanFailed": "라이브러리 스캔 실패", "@notifLibraryScanFailed": { "description": "Notification title when library scan fails" }, @@ -5748,7 +5748,7 @@ "@settingsSaveDownloadHistory": { "description": "Settings switch title for storing completed downloads in history" }, - "settingsSaveDownloadHistorySubtitle": "완료된 다운로드를 기록 및 보관함 보기에 유지합니다", + "settingsSaveDownloadHistorySubtitle": "완료된 다운로드를 기록 및 라이브러리 보기에 유지합니다", "@settingsSaveDownloadHistorySubtitle": { "description": "Settings switch subtitle for storing completed downloads in history" }, @@ -5847,11 +5847,11 @@ "@nowPlayingNoLyrics": { "description": "Empty state when the playing file has no embedded lyrics" }, - "nowPlayingLibraryEmpty": "보관함이 비어져 있습니다", + "nowPlayingLibraryEmpty": "라이브러리가 비어 있음", "@nowPlayingLibraryEmpty": { "description": "Snackbar when shuffle library is requested but library has no tracks" }, - "nowPlayingShuffleLibraryFailed": "보관함에서 셔플을 사용할 수 없음: {error}", + "nowPlayingShuffleLibraryFailed": "라이브러리에서 셔플을 사용할 수 없음: {error}", "@nowPlayingShuffleLibraryFailed": { "description": "Snackbar when shuffling the library fails", "placeholders": { @@ -5868,7 +5868,7 @@ "@nowPlayingPlayInOrder": { "description": "Tooltip when shuffle mode is disabled" }, - "nowPlayingShuffleLibrary": "보관함 셔플", + "nowPlayingShuffleLibrary": "라이브러리 셔플", "@nowPlayingShuffleLibrary": { "description": "Button label to shuffle and play the entire local library" }, From 42625530360054d5498ae4c50609e9c912fdb173 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 20:35:15 +0700 Subject: [PATCH 097/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 90 ++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 14321e81..5b356a47 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -101,7 +101,7 @@ "@downloadSingleFilenameFormat": { "description": "Setting for output filename pattern for singles/EPs" }, - "downloadSingleFilenameFormatDescription": "싱글 및 EP용 파일 이름 패턴입니다. 앨범 형식과 동일한 태그를 사용합니다.", + "downloadSingleFilenameFormatDescription": "싱글 및 EP용 파일 이름 패턴입니다. 앨범 형식과 동일한 태그를 사용합니다", "@downloadSingleFilenameFormatDescription": { "description": "Subtitle description for single filename format setting" }, @@ -170,7 +170,7 @@ "@optionsDefaultSearchTab": { "description": "Title for the preferred default search tab setting" }, - "optionsDefaultSearchTabSubtitle": "새 검색 결과를 표시할 탭을 먼저 선택하세요.", + "optionsDefaultSearchTabSubtitle": "새 검색 결과를 표시할 탭을 먼저 선택하세요", "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, @@ -206,11 +206,11 @@ "@optionsEmbedLyricsSubtitle": { "description": "Subtitle for embed lyrics" }, - "optionsMaxQualityCover": "고품질 커버 이미지", + "optionsMaxQualityCover": "고품질 표지 이미지", "@optionsMaxQualityCover": { "description": "Download highest quality album art" }, - "optionsMaxQualityCoverSubtitle": "최고 품질의 커버 이미지를 다운로드", + "optionsMaxQualityCoverSubtitle": "최고 해상도의 표지 이미지를 다운로드", "@optionsMaxQualityCoverSubtitle": { "description": "Subtitle for max quality cover" }, @@ -288,7 +288,7 @@ "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" }, - "optionsArtistTagModeDescription": "여러 아티스트를 내장 태그에 작성하는 방법을 선택하세요.", + "optionsArtistTagModeDescription": "여러 아티스트를 내장 태그에 작성하는 방법을 선택하세요", "@optionsArtistTagModeDescription": { "description": "Bottom-sheet description for artist tag mode setting" }, @@ -304,7 +304,7 @@ "@optionsArtistTagModeSplitVorbis": { "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "optionsArtistTagModeSplitVorbisSubtitle": "FLAC 및 Opus의 경우 아티스트당 하나의 아티스트 태그를 작성하세요. MP3 및 M4A는 병합된 상태로 유지됩니다.", + "optionsArtistTagModeSplitVorbisSubtitle": "FLAC 및 Opus의 경우 아티스트당 하나의 아티스트 태그를 작성하세요. MP3 및 M4A는 병합된 상태로 유지됩니다", "@optionsArtistTagModeSplitVorbisSubtitle": { "description": "Subtitle for split Vorbis artist tag mode" }, @@ -377,7 +377,7 @@ "@optionsSpotifyCredentialsRequired": { "description": "Prompt to set up credentials" }, - "optionsSpotifyWarning": "Spotify는 사용자 고유의 API 자격 증명을 요구합니다. developer.spotify.com에서 무료로 발급받으세요", + "optionsSpotifyWarning": "Spotify는 사용자 고유의 API 자격 증명을 요구합니다. 'developer.spotify.com'에서 무료로 발급받으세요", "@optionsSpotifyWarning": { "description": "Info about Spotify API requirement" }, @@ -597,15 +597,15 @@ "@setupStorageAccessMessageAndroid11": { "description": "Android 11+ specific explanation" }, - "setupOpenSettings": "설정으로 이동", + "setupOpenSettings": "설정 열기", "@setupOpenSettings": { "description": "Button to open system settings" }, - "setupPermissionDeniedMessage": "권한이 거부되었습니다. 계속하려면 모든 권한을 허용해 주세요.", + "setupPermissionDeniedMessage": "권한이 거부되었습니다. 계속하려면 모든 권한을 허용해 주세요", "@setupPermissionDeniedMessage": { "description": "Error when permission denied" }, - "setupPermissionRequired": "{permissionType} 권한 필요", + "setupPermissionRequired": "'{permissionType}' 권한 필요", "@setupPermissionRequired": { "description": "Generic permission required title", "placeholders": { @@ -615,7 +615,7 @@ } } }, - "setupPermissionRequiredMessage": "최상의 사용 경험을 위해 {permissionType} 권한이 필요합니다. 설정에서 나중에 변경할 수 있습니다", + "setupPermissionRequiredMessage": "최상의 사용 경험을 위해 '{permissionType}' 권한이 필요합니다. 설정에서 나중에 변경할 수 있습니다", "@setupPermissionRequiredMessage": { "description": "Generic permission required message", "placeholders": { @@ -841,7 +841,7 @@ "@dialogDeleteSelectedTitle": { "description": "Dialog title - delete selected items" }, - "dialogDeleteSelectedMessage": "기록에서 {count} {count, plural, =1{트랙} other{트랙}}을 삭제하시겠습니까?\n\n이렇게 하면 저장소에서 파일도 삭제됩니다", + "dialogDeleteSelectedMessage": "기록에서 {count} 개의 {count, plural, =1{트랙} other{트랙}}을 삭제하시겠습니까?\n\n이렇게 하면 저장소에서도 파일이 삭제됩니다", "@dialogDeleteSelectedMessage": { "description": "Dialog message - delete selected tracks", "placeholders": { @@ -881,7 +881,7 @@ } } }, - "snackbarAddedTracksToQueue": "{count} 개의 트랙이 다운로드 목록에 추가됨", + "snackbarAddedTracksToQueue": "다운로드 목록에 {count} 개의 트랙이 추가됨", "@snackbarAddedTracksToQueue": { "description": "Snackbar - multiple tracks added to queue", "placeholders": { @@ -912,15 +912,15 @@ "@snackbarHistoryCleared": { "description": "Snackbar - history deleted" }, - "snackbarCredentialsSaved": "자격 증명이 저장되었습니다.", + "snackbarCredentialsSaved": "자격 증명이 저장됨", "@snackbarCredentialsSaved": { "description": "Snackbar - Spotify credentials saved" }, - "snackbarCredentialsCleared": "자격 증명이 제거되었습니다.", + "snackbarCredentialsCleared": "자격 증명이 삭제됨", "@snackbarCredentialsCleared": { "description": "Snackbar - Spotify credentials removed" }, - "snackbarDeletedTracks": "{count}{count, plural, =1{트랙} other{트랙}}이 제거됨", + "snackbarDeletedTracks": "{count} 개의 {count, plural, =1{트랙} other{트랙}}이 제거됨", "@snackbarDeletedTracks": { "description": "Snackbar - tracks deleted", "placeholders": { @@ -938,7 +938,7 @@ } } }, - "snackbarFillAllFields": "모든 항목을 입력해 주세요.", + "snackbarFillAllFields": "모든 항목을 입력해 주세요", "@snackbarFillAllFields": { "description": "Snackbar - validation error" }, @@ -960,15 +960,15 @@ "@snackbarFileNotFound": { "description": "Snackbar - file doesn't exist" }, - "snackbarSelectExtFile": ".spotiflac-ext 확장자 파일을 선택", + "snackbarSelectExtFile": ".spotiflac-ext 파일을 선택하세요", "@snackbarSelectExtFile": { "description": "Snackbar - wrong file type selected" }, - "snackbarProviderPrioritySaved": "제공자 우선순위 저장됨", + "snackbarProviderPrioritySaved": "제공자 우선순위가 저장됨", "@snackbarProviderPrioritySaved": { "description": "Snackbar - provider order saved" }, - "snackbarMetadataProviderSaved": "메타데이터 제공자 우선순위 저장됨", + "snackbarMetadataProviderSaved": "메타데이터 제공자 우선순위가 저장됨", "@snackbarMetadataProviderSaved": { "description": "Snackbar - metadata provider order saved" }, @@ -1002,11 +1002,11 @@ "@errorRateLimited": { "description": "Error title - too many requests" }, - "errorRateLimitedMessage": "요청이 너무 많습니다. 잠시 후 다시 검색해 주세요.", + "errorRateLimitedMessage": "요청이 너무 많습니다. 잠시 후 다시 검색해 주세요", "@errorRateLimitedMessage": { "description": "Error message - rate limit explanation" }, - "errorNoTracksFound": "트랙을 찾을 수 없습니다", + "errorNoTracksFound": "트랙을 찾을 수 없음", "@errorNoTracksFound": { "description": "Error - search returned no results" }, @@ -1014,11 +1014,11 @@ "@searchEmptyResultSubtitle": { "description": "Subtitle shown under the empty search result state on the home screen" }, - "errorUrlNotRecognized": "링크를 인식할 수 없습니다", + "errorUrlNotRecognized": "링크를 인식할 수 없음", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "errorUrlNotRecognizedMessage": "이 링크는 지원되지 않습니다. URL이 올바른지, 호환되는 확장 프로그램이 설치되어 있는지 확인하세요.", + "errorUrlNotRecognizedMessage": "이 링크는 지원되지 않습니다. URL이 올바른지, 호환되는 확장 프로그램이 설치되어 있는지 확인하세요", "@errorUrlNotRecognizedMessage": { "description": "Error message - URL not recognized explanation" }, @@ -1035,11 +1035,11 @@ } } }, - "actionPause": "멈추기", + "actionPause": "일시 중지", "@actionPause": { "description": "Action button - pause download" }, - "actionResume": "재시작", + "actionResume": "계속", "@actionResume": { "description": "Action button - resume download" }, @@ -1096,7 +1096,7 @@ "@progressReadingCsv": { "description": "Progress indicator - parsing CSV file" }, - "searchSongs": "곡", + "searchSongs": "노래", "@searchSongs": { "description": "Search result category - songs" }, @@ -3678,7 +3678,7 @@ "@selectionBatchConvertConfirmTitle": { "description": "Confirmation dialog title for batch conversion" }, - "selectionBatchConvertConfirmMessage": "{count} {count, plural, =1{트랙} other{트랙}}을 {bitrate} 비트레이트로 {format} 으로 변환하시겠습니까?\n\n변환 후 원본 파일이 삭제됩니다", + "selectionBatchConvertConfirmMessage": "{count} {count, plural, =1{트랙} other{트랙}}을 {bitrate} 비트레이트로 {format}으로 변환하시겠습니까?\n\n변환 후 원본 파일이 삭제됩니다", "@selectionBatchConvertConfirmMessage": { "description": "Confirmation dialog message for batch conversion", "placeholders": { @@ -3693,7 +3693,7 @@ } } }, - "selectionBatchConvertConfirmMessageLossless": "{count} {count, plural, =1{트랙} other{트랙}}을 {format} 으로 변환하시겠습니까? (무손실 — 음질 손실 없음)\n\n변환 후 원본 파일이 삭제됩니다", + "selectionBatchConvertConfirmMessageLossless": "{count} {count, plural, =1{트랙} other{트랙}}을 {format}으로 변환하시겠습니까? (무손실 — 음질 손실 없음)\n\n변환 후 원본 파일이 삭제됩니다", "@selectionBatchConvertConfirmMessageLossless": { "description": "Confirmation dialog message for lossless batch conversion", "placeholders": { @@ -3997,7 +3997,7 @@ "@backupIncludeSecretsDescription": { "description": "Explanation for the include-credentials toggle" }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{확장 프로그램} other{확장 프로그램}}을 다시 설치할 수 없습니다. 스토어에서 수동으로 설치하세요", + "backupExtensionsRestoreFailed": "{count} 개의 {count, plural, =1{확장 프로그램} other{확장 프로그램}}을 다시 설치할 수 없습니다. 스토어에서 수동으로 설치하세요", "@backupExtensionsRestoreFailed": { "description": "Snackbar/hint when some extensions failed to reinstall during restore", "placeholders": { @@ -4294,7 +4294,7 @@ "@cacheRefresh": { "description": "Tooltip for refresh button on cache management page" }, - "dialogDownloadPlaylistsMessage": "{playlistCount} {playlistCount, plural, =1{재생목록} other{재생록록}}에서 {trackCount} {trackCount, plural, =1{트랙} other{트랙}}을 다운로드하시겠습니까?", + "dialogDownloadPlaylistsMessage": "{playlistCount} 개의 {playlistCount, plural, =1{재생목록} other{재생록록}}에서 {trackCount} 개의 {trackCount, plural, =1{트랙} other{트랙}}을 다운로드하시겠습니까?", "@dialogDownloadPlaylistsMessage": { "description": "Dialog message for bulk playlist download confirmation", "placeholders": { @@ -4306,7 +4306,7 @@ } } }, - "bulkDownloadPlaylistsButton": "{count} {count, plural, =1{재생목록} other{재생목록}} 다운로드", + "bulkDownloadPlaylistsButton": "{count} 개의 {count, plural, =1{재생목록} other{재생목록}} 다운로드", "@bulkDownloadPlaylistsButton": { "description": "Button label for bulk downloading selected playlists", "placeholders": { @@ -4352,7 +4352,7 @@ "@editMetadataAutoFillNoResults": { "description": "Snackbar when online metadata search returns no results" }, - "editMetadataAutoFillDone": "온라인 메타데이터로부터 {count} {count, plural, =1{필드} other{필드}}가 채워졌습니다", + "editMetadataAutoFillDone": "온라인 메타데이터로부터 {count} 개의 {count, plural, =1{필드} other{필드}}가 채워짐", "@editMetadataAutoFillDone": { "description": "Snackbar confirming how many fields were auto-filled", "placeholders": { @@ -5182,7 +5182,7 @@ } } }, - "a11yOpenItemCount": "{title}, {count} {count, plural, =1{항목} other{항목}} 열기", + "a11yOpenItemCount": "{title}, {count} 개의 {count, plural, =1{항목} other{항목}} 열기", "@a11yOpenItemCount": { "description": "Accessibility label for opening a grouped item with count", "placeholders": { @@ -5363,7 +5363,7 @@ "@libraryFilterMetadataMissingLabel": { "description": "Filter option - items missing record label" }, - "collectionDeletePlaylistsMessage": "{count} {count, plural, =1{재생목록} other{재생목록}}을 삭제하시겠습니까?", + "collectionDeletePlaylistsMessage": "{count} 개의 {count, plural, =1{재생목록} other{재생목록}}을 삭제하시겠습니까?", "@collectionDeletePlaylistsMessage": { "description": "Confirmation message for deleting selected playlists", "placeholders": { @@ -5372,7 +5372,7 @@ } } }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{재생목록} other{재생목록}} 삭제됨", + "collectionPlaylistsDeleted": "{count} 개의 {count, plural, =1{재생목록} other{재생목록}}이 삭제됨", "@collectionPlaylistsDeleted": { "description": "Snackbar after deleting selected playlists", "placeholders": { @@ -5381,7 +5381,7 @@ } } }, - "collectionAddedTracksToPlaylist": "{playlistName} 에 {count} {count, plural, =1{트랙} other{트랙}}이 추가됨", + "collectionAddedTracksToPlaylist": "{playlistName} 에 {count} 개의 {count, plural, =1{트랙} other{트랙}}이 추가됨", "@collectionAddedTracksToPlaylist": { "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { @@ -5393,7 +5393,7 @@ } } }, - "collectionAddedTracksToPlaylistWithExisting": "{count} {count, plural, =1{트랙} other{트랙}}이 {playlistName}에 추가됨 ({alreadyCount}트랙은 이미 재생목록에 있음)", + "collectionAddedTracksToPlaylistWithExisting": "{count} 개의 {count, plural, =1{트랙} other{트랙}}이 {playlistName}에 추가됨 ({alreadyCount}트랙은 이미 재생목록에 있음)", "@collectionAddedTracksToPlaylistWithExisting": { "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { @@ -5408,7 +5408,7 @@ } } }, - "itemCount": "{count} {count, plural, =1{항목} other{항목}}", + "itemCount": "{count} 개의 {count, plural, =1{항목} other{항목}}", "@itemCount": { "description": "Generic item count label", "placeholders": { @@ -5432,7 +5432,7 @@ } } }, - "selectionDeleteTracksCount": "{count} {count, plural, =1{트랙} other{트랙}} 삭제", + "selectionDeleteTracksCount": "{count} 개의 {count, plural, =1{트랙} other{트랙}} 삭제", "@selectionDeleteTracksCount": { "description": "Button label for deleting selected tracks", "placeholders": { @@ -5474,7 +5474,7 @@ } } }, - "storeExtensionsCount": "{count} {count, plural, =1{확장 프로그램} other{확장 프로그램}}", + "storeExtensionsCount": "{count} 개의 {count, plural, =1{확장 프로그램} other{확장 프로그램}}", "@storeExtensionsCount": { "description": "Store extension result count", "placeholders": { @@ -5555,7 +5555,7 @@ "@extensionServiceHealth": { "description": "Extension capability label for service health checks" }, - "extensionHealthChecksConfigured": "{count} {count, plural, =1{검사} other{검사}}가 설정됨", + "extensionHealthChecksConfigured": "{count} 개의 {count, plural, =1{검사} other{검사}}가 설정됨", "@extensionHealthChecksConfigured": { "description": "Extension service health check count", "placeholders": { @@ -5593,7 +5593,7 @@ "@extensionCustomUrlHandlingShareHint": { "description": "Extension detail hint explaining share-to-app URL handling" }, - "extensionSettingsCount": "{count} {count, plural, =1{설정} other{설정}}", + "extensionSettingsCount": "{count} 개의 {count, plural, =1{설정} other{설정}}", "@extensionSettingsCount": { "description": "Count of settings exposed by an extension quality option", "placeholders": { @@ -5908,7 +5908,7 @@ } } }, - "selectionBatchConvertConfirmMessageLosslessCapped": "{count} {count, plural, =1{트랙} other{트랙}}을 {format}({quality})으로 변환하시겠습니까?\n\n출력은 무손실 코덱을 유지하지만 비트 심도/샘플 속도가 제한됩니다. 변환 후 원본 파일이 삭제됩니다", + "selectionBatchConvertConfirmMessageLosslessCapped": "{count} 개의 {count, plural, =1{트랙} other{트랙}}을 {format}({quality})으로 변환하시겠습니까?\n\n출력은 무손실 코덱을 유지하지만 비트 심도/샘플 속도가 제한됩니다. 변환 후 원본 파일이 삭제됩니다", "@selectionBatchConvertConfirmMessageLosslessCapped": { "description": "Confirmation dialog message for capped lossless batch conversion", "placeholders": { @@ -5965,7 +5965,7 @@ "@snackbarAddedToQueueGeneric": { "description": "Snackbar when a track is added to the playback queue without naming it" }, - "selectionDeletePlaylistsCount": "{count} {count, plural, =1{재생목록} other{재생목록}} 삭제", + "selectionDeletePlaylistsCount": "{count} 개의 {count, plural, =1{재생목록} other{재생목록}} 삭제", "@selectionDeletePlaylistsCount": { "description": "Button label for deleting multiple selected playlists", "placeholders": { From aacf1bef9cd1b4b7baf45fa03995a278f7ea3ffa Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 21:38:38 +0700 Subject: [PATCH 098/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 120 ++++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 5b356a47..7c5cd3cc 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -660,15 +660,15 @@ "@setupChooseFromFilesSubtitle": { "description": "Subtitle for file picker" }, - "setupIosEmptyFolderWarning": "iOS 제한 사항: 빈 폴더는 선택할 수 없습니다. 파일이 하나 이상 있는 폴더를 선택하세요.", + "setupIosEmptyFolderWarning": "iOS 제한 사항: 빈 폴더는 선택할 수 없습니다. 파일이 하나 이상 있는 폴더를 선택하세요", "@setupIosEmptyFolderWarning": { "description": "iOS folder selection warning" }, - "setupIcloudNotSupported": "iCloud Drive는 지원되지 않습니다. 앱의 문서 폴더를 사용해 주세요.", + "setupIcloudNotSupported": "iCloud Drive는 지원되지 않습니다. 앱의 문서 폴더를 사용해 주세요", "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, - "setupDownloadInFlac": "Spotify 음악을 FLAC 형식으로 다운로드하세요.", + "setupDownloadInFlac": "Spotify 음악을 FLAC 형식으로 다운로드하세요", "@setupDownloadInFlac": { "description": "App tagline in setup" }, @@ -680,7 +680,7 @@ "@setupStorageRequired": { "description": "Title when storage permission needed" }, - "setupStorageDescription": "SpotiFLAC은 다운로드한 음악 파일을 저장하기 위해 저장소 접근 권한이 필요합니다.", + "setupStorageDescription": "SpotiFLAC은 다운로드한 음악 파일을 저장하기 위해 저장소 접근 권한이 필요합니다", "@setupStorageDescription": { "description": "Explanation for storage permission" }, @@ -708,7 +708,7 @@ "@setupEnableNotifications": { "description": "Button to enable notifications" }, - "setupNotificationBackgroundDescription": "알림으로 다운로드 진행 상황을 확인하세요. 앱이 백그라운드에서 실행 중일 때 다운로드 상태와 완료 여부를 확인할 수 있습니다.", + "setupNotificationBackgroundDescription": "알림으로 다운로드 진행 상황을 확인하세요. 앱이 백그라운드에서 실행 중일 때 다운로드 상태와 완료 여부를 확인할 수 있습니다", "@setupNotificationBackgroundDescription": { "description": "Detailed notification explanation" }, @@ -724,7 +724,7 @@ "@setupGetStarted": { "description": "Final setup button" }, - "setupAllowAccessToManageFiles": "다음 화면에서 \"모든 파일 관리 권한 허용\"을 활성화해 주세요.", + "setupAllowAccessToManageFiles": "다음 화면에서 '모든 파일 관리 권한 허용'을 활성화해 주세요", "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, @@ -732,7 +732,7 @@ "@setupLanguageTitle": { "description": "Title for the language selection step in setup" }, - "setupLanguageDescription": "앱에서 사용할 언어를 선택하세요. 나중에 설정에서 변경할 수 있습니다.", + "setupLanguageDescription": "앱에서 사용할 언어를 선택하세요. 나중에 설정에서 변경할 수 있습니다", "@setupLanguageDescription": { "description": "Description for the language selection step in setup" }, @@ -780,7 +780,7 @@ "@previewStop": { "description": "Tooltip for the button that stops the playing track preview snippet" }, - "previewUnavailable": "미리듣기 사용할 수 없음", + "previewUnavailable": "미리듣기를 사용할 수 없음", "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, @@ -796,7 +796,7 @@ "@dialogUninstall": { "description": "Dialog button - uninstall extension" }, - "dialogDiscardChanges": "변경사항 취소", + "dialogDiscardChanges": "변경 사항 취소", "@dialogDiscardChanges": { "description": "Dialog title - unsaved changes warning" }, @@ -812,7 +812,7 @@ "@dialogRemoveExtension": { "description": "Dialog title - uninstall extension" }, - "dialogRemoveExtensionMessage": "이 확장 프로그램을 정말로 제거하시겠습니까? 이 작업은 되돌릴 수 없습니다.", + "dialogRemoveExtensionMessage": "이 확장 프로그램을 제거하시겠습니까? 이 작업은 되돌릴 수 없습니다", "@dialogRemoveExtensionMessage": { "description": "Dialog message - uninstall confirmation" }, @@ -820,7 +820,7 @@ "@dialogUninstallExtension": { "description": "Dialog title - uninstall extension" }, - "dialogUninstallExtensionMessage": "{extensionName}을 정말로 삭제하시겠습니까?", + "dialogUninstallExtensionMessage": "'{extensionName}'을 제거하시겠습니까?", "@dialogUninstallExtensionMessage": { "description": "Dialog message - uninstall specific extension", "placeholders": { @@ -829,15 +829,15 @@ } } }, - "dialogClearHistoryTitle": "기록 삭제", + "dialogClearHistoryTitle": "기록 지우기", "@dialogClearHistoryTitle": { "description": "Dialog title - clear download history" }, - "dialogClearHistoryMessage": "다운로드 기록을 모두 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", + "dialogClearHistoryMessage": "모든 다운로드 기록을 지우시겠습니까? 이 작업은 되돌릴 수 없습니다", "@dialogClearHistoryMessage": { "description": "Dialog message - clear history confirmation" }, - "dialogDeleteSelectedTitle": "선택한 항목 삭제", + "dialogDeleteSelectedTitle": "선택 항목 삭제", "@dialogDeleteSelectedTitle": { "description": "Dialog title - delete selected items" }, @@ -850,7 +850,7 @@ } } }, - "dialogImportPlaylistTitle": "재생 목록 가져오기", + "dialogImportPlaylistTitle": "재생목록 가져오기", "@dialogImportPlaylistTitle": { "description": "Dialog title - import CSV playlist" }, @@ -1080,7 +1080,7 @@ "@selectionSelectToDelete": { "description": "Placeholder when nothing selected" }, - "progressFetchingMetadata": "메타데이터 가져오는 중... {current}/{total}", + "progressFetchingMetadata": "메타데이터를 가져오는 중... {current}/{total}", "@progressFetchingMetadata": { "description": "Progress indicator - loading track info", "placeholders": { @@ -1164,7 +1164,7 @@ "@filenameShowAdvancedTags": { "description": "Toggle label for showing advanced filename tags" }, - "filenameShowAdvancedTagsDescription": "트랙 패딩 및 날짜 패턴에 대한 서식 있는 태그를 활성화합니다.", + "filenameShowAdvancedTagsDescription": "트랙 패딩 및 날짜 패턴에 대한 서식 있는 태그를 활성화합니다", "@filenameShowAdvancedTagsDescription": { "description": "Description for advanced filename tag toggle" }, @@ -1236,11 +1236,11 @@ "@updateNewVersionReady": { "description": "Update subtitle" }, - "updateCurrent": "현재", + "updateCurrent": "현재 버전", "@updateCurrent": { "description": "Label for current version" }, - "updateNew": "신규", + "updateNew": "새 버전", "@updateNew": { "description": "Label for new version" }, @@ -1264,11 +1264,11 @@ "@providerPriorityTitle": { "description": "Provider priority page title" }, - "providerPriorityDescription": "드래그하여 다운로드 제공자 순서를 변경하세요. 앱은 트랙을 다운로드할 경우에 위에서 아래로 제공자를 차례로 시도합니다.", + "providerPriorityDescription": "드래그하여 다운로드 제공자 순서를 변경하세요. 앱은 트랙을 다운로드할 경우에 위에서 아래로 제공자를 차례로 시도합니다", "@providerPriorityDescription": { "description": "Provider priority page description" }, - "providerPriorityInfo": "첫 ​​번째 제공자에서 트랙을 사용할 수 없는 경우에 앱은 자동으로 다음 제공자를 시도합니다.", + "providerPriorityInfo": "첫 ​​번째 제공자에서 트랙을 사용할 수 없는 경우에 앱은 자동으로 다음 제공자를 시도합니다", "@providerPriorityInfo": { "description": "Info tip about fallback behavior" }, @@ -1276,11 +1276,11 @@ "@providerPriorityFallbackExtensionsTitle": { "description": "Section title for choosing which download extensions can be used as fallback providers" }, - "providerPriorityFallbackExtensionsDescription": "자동 대체 중에 사용할 수 있는 설치된 다운로드 확장 프로그램을 선택하세요.", + "providerPriorityFallbackExtensionsDescription": "자동 대체 중에 사용할 수 있는 설치된 다운로드 확장 프로그램을 선택하세요", "@providerPriorityFallbackExtensionsDescription": { "description": "Section description for extension fallback selection" }, - "providerPriorityFallbackExtensionsHint": "다운로드 공급자 기능이 활성화된 확장 프로그램만 여기에 나열됩니다.", + "providerPriorityFallbackExtensionsHint": "다운로드 공급자 기능이 활성화된 확장 프로그램만 여기에 나열됩니다", "@providerPriorityFallbackExtensionsHint": { "description": "Hint below the extension fallback selection list" }, @@ -1296,11 +1296,11 @@ "@metadataProviderPriorityTitle": { "description": "Metadata priority page title" }, - "metadataProviderPriorityDescription": "드래그하여 메타데이터 제공자 순서를 변경하세요. 앱은 트랙을 검색하고 메타데이터를 가져올 경우에 위에서 아래로 제공자를 시도합니다.", + "metadataProviderPriorityDescription": "드래그하여 메타데이터 제공자 순서를 변경하세요. 앱은 트랙을 검색하고 메타데이터를 가져올 경우에 위에서 아래로 제공자를 시도합니다", "@metadataProviderPriorityDescription": { "description": "Metadata priority page description" }, - "metadataProviderPriorityInfo": "Deezer는 요청 횟수 제한이 없으므로 기본 앱으로 사용하는 것이 좋습니다. Spotify는 요청 횟수가 많아지면 요청 횟수를 제한할 수 있습니다.", + "metadataProviderPriorityInfo": "Deezer는 요청 횟수 제한이 없으므로 기본 앱으로 사용하는 것이 좋습니다. Spotify는 요청 횟수가 많아지면 요청 횟수를 제한할 수 있습니다", "@metadataProviderPriorityInfo": { "description": "Info tip about rate limits" }, @@ -1316,7 +1316,7 @@ "@logTitle": { "description": "Logs screen title" }, - "logCopied": "로그를 클립보드에 복사하였습니다", + "logCopied": "로그가 클립보드에 복사됨", "@logCopied": { "description": "Snackbar - logs copied" }, @@ -1352,11 +1352,11 @@ "@logFilterBySeverity": { "description": "Filter dialog title" }, - "logNoLogsYet": "어떠한 로그도 없음", + "logNoLogsYet": "아직 로그 없음", "@logNoLogsYet": { "description": "Empty state title" }, - "logNoLogsYetSubtitle": "앱을 사용하는 동안 로그가 여기에 표시됩니다.", + "logNoLogsYetSubtitle": "앱을 사용하는 동안에 로그가 여기에 표시됩니다", "@logNoLogsYetSubtitle": { "description": "Empty state subtitle" }, @@ -1382,7 +1382,7 @@ "@credentialsTitle": { "description": "Credentials dialog title" }, - "credentialsDescription": "Spotify 애플리케이션 할당량을 사용하려면 클라이언트 ID와 비밀키를 입력하세요.", + "credentialsDescription": "Spotify 애플리케이션 할당량을 사용하려면 클라이언트 ID와 비밀키를 입력하세요", "@credentialsDescription": { "description": "Credentials dialog explanation" }, @@ -1390,15 +1390,15 @@ "@credentialsClientId": { "description": "Client ID field label - DO NOT TRANSLATE" }, - "credentialsClientIdHint": "Client ID를 붙여넣으세요", + "credentialsClientIdHint": "클라이언트 ID를 붙여넣으세요", "@credentialsClientIdHint": { "description": "Client ID placeholder" }, - "credentialsClientSecret": "비밀키", + "credentialsClientSecret": "클라이언트 비밀키", "@credentialsClientSecret": { "description": "Client Secret field label - DO NOT TRANSLATE" }, - "credentialsClientSecretHint": "비밀키를 붙여넣으세요", + "credentialsClientSecretHint": "클라이언트 비밀키를 붙여넣으세요", "@credentialsClientSecretHint": { "description": "Client Secret placeholder" }, @@ -1454,7 +1454,7 @@ "@lyricsMode": { "description": "Setting - how to save lyrics" }, - "lyricsModeDescription": "다운로드한 파일에 가사를 저장하는 방법을 선택하세요.", + "lyricsModeDescription": "다운로드한 파일에 가사를 저장하는 방법을 선택하세요", "@lyricsModeDescription": { "description": "Lyrics mode picker description" }, @@ -1462,7 +1462,7 @@ "@lyricsModeEmbed": { "description": "Lyrics mode option - embed in audio file" }, - "lyricsModeEmbedSubtitle": "FLAC 메타데이터 내에 저장됩니다.", + "lyricsModeEmbedSubtitle": "FLAC 메타데이터 내에 저장됩니다", "@lyricsModeEmbedSubtitle": { "description": "Subtitle for embed option" }, @@ -1478,7 +1478,7 @@ "@lyricsModeBoth": { "description": "Lyrics mode option - embed and external" }, - "lyricsModeBothSubtitle": ".lrc 파일을 삽입하고 저장합니다.", + "lyricsModeBothSubtitle": ".lrc 파일을 삽입하고 저장합니다", "@lyricsModeBothSubtitle": { "description": "Subtitle for both option" }, @@ -1572,7 +1572,7 @@ "@trackLyrics": { "description": "Tab title - lyrics" }, - "trackFileNotFound": "파일을 찾을 수 없습니다", + "trackFileNotFound": "파일을 찾을 수 없음", "@trackFileNotFound": { "description": "Error - file doesn't exist" }, @@ -1640,7 +1640,7 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, - "trackLyricsSource": "소스: {source}", + "trackLyricsSource": "출처: {source}", "@trackLyricsSource": { "description": "Label showing the lyrics source/provider", "placeholders": { @@ -1661,7 +1661,7 @@ "@trackFetchOnlineLyrics": { "description": "Action - fetch lyrics from online providers" }, - "trackLyricsTimeout": "요청 시간이 초과되었습니다. 나중에 다시 시도하세요.", + "trackLyricsTimeout": "요청 시간이 초과되었습니다. 나중에 다시 시도하세요", "@trackLyricsTimeout": { "description": "Message when lyrics request times out" }, @@ -1689,7 +1689,7 @@ "@trackDeleteConfirmTitle": { "description": "Delete confirmation title" }, - "trackDeleteConfirmMessage": "이렇게 하면 다운로드한 파일이 영구적으로 삭제되고 기록에서 제거됩니다.", + "trackDeleteConfirmMessage": "이렇게 하면 다운로드한 파일이 영구적으로 삭제되고 기록에서 제거됩니다", "@trackDeleteConfirmMessage": { "description": "Delete confirmation message" }, @@ -1979,7 +1979,7 @@ "@extensionsFallbackSubtitle": { "description": "Subtitle for download fallback extensions menu" }, - "extensionsNoDownloadProvider": "다운로드 제공자가 있는 확장 프로그램가 없습니다", + "extensionsNoDownloadProvider": "다운로드 제공자가 있는 확장 프로그램가 없음", "@extensionsNoDownloadProvider": { "description": "Empty state - no download providers" }, @@ -1991,7 +1991,7 @@ "@extensionsMetadataPrioritySubtitle": { "description": "Subtitle for metadata priority" }, - "extensionsNoMetadataProvider": "메타데이터 제공자가 있는 확장 프로그램이 없습니다", + "extensionsNoMetadataProvider": "메타데이터 제공자가 있는 확장 프로그램이 없음", "@extensionsNoMetadataProvider": { "description": "Empty state - no metadata providers" }, @@ -1999,7 +1999,7 @@ "@extensionsSearchProvider": { "description": "Setting - search provider selection" }, - "extensionsNoCustomSearch": "사용자 정의 검색이 있는 확장 프로그램이 없습니다", + "extensionsNoCustomSearch": "사용자 정의 검색이 있는 확장 프로그램이 없음", "@extensionsNoCustomSearch": { "description": "Empty state - no search providers" }, @@ -2043,15 +2043,15 @@ "@downloadLossy320": { "description": "Quality option label for lossy 320kbps" }, - "downloadLossyFormat": "손실 압축 형식", + "downloadLossyFormat": "손실 압축 포맷", "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadLossy320Format": "손실 압축 320kbps 형식", + "downloadLossy320Format": "손실 압축 320kbps 포맷", "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" }, - "downloadLossy320FormatDesc": "320kbps 손실 다운로드의 출력 형식을 선택하세요. 필요에 따라 원본 스트림이 선택한 형식으로 변환됩니다.", + "downloadLossy320FormatDesc": "320kbps 손실 다운로드의 출력 형식을 선택하세요. 필요에 따라 원본 스트림이 선택한 형식으로 변환됩니다", "@downloadLossy320FormatDesc": { "description": "Description in the lossy format picker" }, @@ -2802,7 +2802,7 @@ "@tutorialWelcomeTip2": { "description": "Tutorial welcome tip 2" }, - "tutorialWelcomeTip3": "메타데이터, 앨범 아트 및 가사 자동 삽입", + "tutorialWelcomeTip3": "메타데이터, 표지 이미지 및 가사 자동 삽입", "@tutorialWelcomeTip3": { "description": "Tutorial welcome tip 3" }, @@ -3092,7 +3092,7 @@ "@trackSaveCoverArt": { "description": "Menu action - save album cover art as file" }, - "trackSaveCoverArtSubtitle": "앨범 아트를 .jpg 파일로 저장", + "trackSaveCoverArtSubtitle": "표지 이미지를 .jpg 파일로 저장", "@trackSaveCoverArtSubtitle": { "description": "Subtitle for save cover art action" }, @@ -3120,7 +3120,7 @@ "@trackReEnrichFieldsTitle": { "description": "Section title for field selection in re-enrich dialog" }, - "trackReEnrichFieldCover": "표지 아트", + "trackReEnrichFieldCover": "표지 이미지", "@trackReEnrichFieldCover": { "description": "Checkbox label for cover art field in re-enrich" }, @@ -3152,7 +3152,7 @@ "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" }, - "trackCoverSaved": "표지 아트가 {fileName}에 저장됨", + "trackCoverSaved": "표지 이미지가 {fileName}에 저장됨", "@trackCoverSaved": { "description": "Snackbar after cover art saved", "placeholders": { @@ -3161,7 +3161,7 @@ } } }, - "trackCoverNoSource": "표지 이미지 소스를 사용할 수 없습니다", + "trackCoverNoSource": "사용할 수 있는 표지 소스가 없음", "@trackCoverNoSource": { "description": "Snackbar when no cover art URL or embedded cover" }, @@ -4409,7 +4409,7 @@ "@editMetadataFieldCopyright": { "description": "Chip label for copyright field in auto-fill selector" }, - "editMetadataFieldCover": "표지 아트", + "editMetadataFieldCover": "표지 이미지", "@editMetadataFieldCover": { "description": "Chip label for cover art field in auto-fill selector" }, @@ -4984,7 +4984,7 @@ "@optionsEmbedMetadata": { "description": "Settings toggle title for writing metadata into downloaded files" }, - "optionsEmbedMetadataSubtitleOn": "메타데이터, 표지 이미지 및 내장 가사를 파일에 기록합니다", + "optionsEmbedMetadataSubtitleOn": "메타데이터, 표지 이미지 및 내장 가사를 파일에 기록", "@optionsEmbedMetadataSubtitleOn": { "description": "Subtitle when metadata embedding is enabled" }, @@ -5000,27 +5000,27 @@ "@downloadFilenameHintExample": { "description": "Example placeholder for the download filename format input" }, - "trackCoverNoEmbeddedArt": "내장된 앨범 아트가 없습니다", + "trackCoverNoEmbeddedArt": "내장된 표지 이미지가 없습니다", "@trackCoverNoEmbeddedArt": { "description": "Message shown when a track file has no embedded cover art" }, - "trackCoverReplace": "커버 교체", + "trackCoverReplace": "표지 교체", "@trackCoverReplace": { "description": "Button label for replacing selected cover art" }, - "trackCoverPick": "커버 선택", + "trackCoverPick": "표지 선택", "@trackCoverPick": { "description": "Button label for selecting cover art" }, - "trackCoverClearSelected": "선택된 커버 지우기", + "trackCoverClearSelected": "선택된 표지 지우기", "@trackCoverClearSelected": { "description": "Tooltip for clearing the newly selected cover art" }, - "trackCoverCurrent": "현재 커버", + "trackCoverCurrent": "현재 표지", "@trackCoverCurrent": { "description": "Label for the currently embedded cover preview" }, - "trackCoverSelected": "선택된 커버", + "trackCoverSelected": "선택된 표지", "@trackCoverSelected": { "description": "Label for the newly selected cover preview" }, @@ -5259,7 +5259,7 @@ "@settingsMetadata": { "description": "Settings menu item - metadata settings" }, - "settingsMetadataSubtitle": "앨범 아트, 태그, 리플레이게인, 제공자", + "settingsMetadataSubtitle": "표지 이미지, 태그, 리플레이게인, 제공자", "@settingsMetadataSubtitle": { "description": "Subtitle for metadata settings" }, @@ -6069,7 +6069,7 @@ "@releaseTypeSingle": { "description": "Badge label for single releases" }, - "trackCoverOnline": "온라인 커버", + "trackCoverOnline": "온라인 표지", "@trackCoverOnline": { "description": "Label shown when metadata autofill downloaded cover art from the internet" }, From 6528d445d344dc99c272c00d2b91c3d7b3650422 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Wed, 1 Jul 2026 22:52:54 +0700 Subject: [PATCH 099/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 142 ++++++++++++++++++++-------------------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 7c5cd3cc..7bdd911d 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -1336,11 +1336,11 @@ "@logShareLogs": { "description": "Share button tooltip" }, - "logClearLogs": "로그 제거", + "logClearLogs": "로그 삭제", "@logClearLogs": { "description": "Clear button tooltip" }, - "logClearLogsTitle": "로그 제거", + "logClearLogsTitle": "로그 삭제", "@logClearLogsTitle": { "description": "Clear logs dialog title" }, @@ -1410,7 +1410,7 @@ "@channelPreview": { "description": "Update channel - beta/preview releases" }, - "sectionSearchSource": "검색 소스", + "sectionSearchSource": "검색 출처", "@sectionSearchSource": { "description": "Settings section header" }, @@ -1760,7 +1760,7 @@ "@storeAddRepoTitle": { "description": "Store setup screen - heading when no repo is configured" }, - "storeAddRepoDescription": "확장 프로그램을 찾아보고 설치하려면 registry.json 파일이 포함된 GitHub 리포지토리 URL을 입력하세요.", + "storeAddRepoDescription": "확장 프로그램을 찾아보고 설치하려면 registry.json 파일이 포함된 GitHub 리포지토리 URL을 입력하세요", "@storeAddRepoDescription": { "description": "Store setup screen - explanatory text" }, @@ -1772,7 +1772,7 @@ "@storeRepoUrlHint": { "description": "Hint/placeholder for the repository URL input field" }, - "storeRepoUrlHelper": "예: https://github.com/user/extensions-repo", + "storeRepoUrlHelper": "예시: https://github.com/user/extensions-repo", "@storeRepoUrlHelper": { "description": "Helper text below the repository URL input field" }, @@ -1800,11 +1800,11 @@ "@storeLoadError": { "description": "Error heading when the store cannot be loaded" }, - "storeEmptyNoExtensions": "사용 가능한 확장 프로그램이 없습니다", + "storeEmptyNoExtensions": "사용 가능한 확장 프로그램이 없음", "@storeEmptyNoExtensions": { "description": "Message when store has no extensions" }, - "storeEmptyNoResults": "확장 프로그램을 찾을 수 없습니다", + "storeEmptyNoResults": "확장 프로그램을 찾을 수 없음", "@storeEmptyNoResults": { "description": "Message when search/filter returns no results" }, @@ -1919,7 +1919,7 @@ "@extensionsInstalledSection": { "description": "Section header - installed extensions" }, - "extensionsNoExtensions": "설치된 확장 프로그램이 없습니다", + "extensionsNoExtensions": "설치된 확장 프로그램이 없음", "@extensionsNoExtensions": { "description": "Empty state - no extensions" }, @@ -1987,7 +1987,7 @@ "@extensionsMetadataPriority": { "description": "Setting - metadata provider order" }, - "extensionsMetadataPrioritySubtitle": "검색 & 메타데이터 소스 순서 설정", + "extensionsMetadataPrioritySubtitle": "검색 & 메타데이터 출처 순서 설정", "@extensionsMetadataPrioritySubtitle": { "description": "Subtitle for metadata priority" }, @@ -2171,7 +2171,7 @@ "@settingsDownloadNetworkWifiOnly": { "description": "Network option - only use WiFi" }, - "settingsDownloadNetworkSubtitle": "다운로드에 사용할 네트워크를 선택하세요. Wi-Fi 전용으로 설정하면 모바일 데이터 사용 시 다운로드가 일시 중지됩니다.", + "settingsDownloadNetworkSubtitle": "다운로드에 사용할 네트워크를 선택하세요. Wi-Fi 전용으로 설정하면 모바일 데이터 사용 시 다운로드가 일시 중지됩니다", "@settingsDownloadNetworkSubtitle": { "description": "Subtitle explaining network preference" }, @@ -2292,7 +2292,7 @@ "@recentTypePlaylist": { "description": "Recent access item type - playlist" }, - "recentEmpty": "최근 항목이 없습니다", + "recentEmpty": "최근 항목이 없음", "@recentEmpty": { "description": "Empty state text for recent access list" }, @@ -2374,7 +2374,7 @@ "@discographyFetchingTracks": { "description": "Progress - fetching album tracks" }, - "discographyFetchingAlbum": "{total} 개 중에 {current} 개를 가져오는 중...", + "discographyFetchingAlbum": "{total} 개 중 {current} 개를 가져오는 중...", "@discographyFetchingAlbum": { "description": "Progress - fetching specific album", "placeholders": { @@ -2399,7 +2399,7 @@ "@discographyDownloadSelected": { "description": "Button - download selected albums" }, - "discographyAddedToQueue": "{count} 개의 트랙이 다운로드 목록에 추가됨", + "discographyAddedToQueue": "다운로드 목록에 {count} 개의 트랙이 추가됨", "@discographyAddedToQueue": { "description": "Snackbar - tracks added from discography", "placeholders": { @@ -2420,7 +2420,7 @@ } } }, - "discographyNoAlbums": "사용 가능한 앨범이 없습니다", + "discographyNoAlbums": "사용 가능한 앨범이 없음", "@discographyNoAlbums": { "description": "Error - no albums found for artist" }, @@ -2440,19 +2440,19 @@ "@allFilesAccessEnabledSubtitle": { "description": "Subtitle when all files access is enabled" }, - "allFilesAccessDisabledSubtitle": "미디아 폴더에만 제한됨", + "allFilesAccessDisabledSubtitle": "미디어 폴더에만 제한됨", "@allFilesAccessDisabledSubtitle": { "description": "Subtitle when all files access is disabled" }, - "allFilesAccessDescription": "사용자 정의 폴더에 저장할 경우에 쓰기 오류가 발생하면 이 옵션을 활성화하세요. Android 13 이상에서는 기본적으로 특정 디렉터리에 대한 액세스가 제한됩니다.", + "allFilesAccessDescription": "사용자 정의 폴더에 저장할 경우에 쓰기 오류가 발생하면 이 옵션을 활성화하세요. Android 13 이상에서는 기본적으로 특정 디렉터리에 대한 액세스가 제한됩니다", "@allFilesAccessDescription": { "description": "Description explaining when to enable all files access" }, - "allFilesAccessDeniedMessage": "권한이 거부되었습니다. 시스템 설정에서 '모든 파일 접근'를 수동으로 활성화하세요.", + "allFilesAccessDeniedMessage": "권한이 거부되었습니다. 시스템 설정에서 '모든 파일 접근'를 수동으로 활성화하세요", "@allFilesAccessDeniedMessage": { "description": "Message when permission is permanently denied" }, - "allFilesAccessDisabledMessage": "모든 파일 액세스를 비활성화하였습니다. 앱은 제한된 저장소 액세스를 사용합니다.", + "allFilesAccessDisabledMessage": "모든 파일 액세스를 비활성화하였습니다. 앱은 제한된 저장소 액세스를 사용합니다", "@allFilesAccessDisabledMessage": { "description": "Snackbar message when user disables all files access" }, @@ -2516,7 +2516,7 @@ "@libraryAutoScanOff": { "description": "Auto scan disabled" }, - "libraryAutoScanOnOpen": "열려 있는 모든 앱", + "libraryAutoScanOnOpen": "앱을 열 때마다", "@libraryAutoScanOnOpen": { "description": "Auto scan when app opens" }, @@ -2572,7 +2572,7 @@ "@libraryAbout": { "description": "Section header for about info" }, - "libraryAboutDescription": "Scans your existing music collection to detect duplicates when downloading. Supports FLAC, M4A, MP3, Opus, and OGG formats. Metadata is read from file tags when available.", + "libraryAboutDescription": "기존 음악 라이브러리를 검사하여 다운로드 시 중복 곡을 감지합니다. FLAC, ALAC, M4A, MP3, Opus, OGG, WAV, AIFF 및 APE 형식을 지원합니다. 가능한 경우 파일 태그의 메타데이터를 읽어 사용합니다", "@libraryAboutDescription": { "description": "Description of local library feature" }, @@ -2652,7 +2652,7 @@ "@libraryStorageAccessMessage": { "description": "Dialog message for storage permission" }, - "libraryFolderNotExist": "선택한 폴더가 없습니다", + "libraryFolderNotExist": "선택한 폴더가 존재하지 않음", "@libraryFolderNotExist": { "description": "Error when folder doesn't exist" }, @@ -2688,7 +2688,7 @@ "@libraryFilterApply": { "description": "Apply filters button" }, - "libraryFilterSource": "소스", + "libraryFilterSource": "출처", "@libraryFilterSource": { "description": "Filter section - source type" }, @@ -2810,7 +2810,7 @@ "@tutorialSearchTitle": { "description": "Tutorial search page title" }, - "tutorialSearchDesc": "다운로드하고 싶은 음악을 찾는 두 가지 쉬운 방법이 있습니다.", + "tutorialSearchDesc": "다운로드하고 싶은 음악을 찾는 두 가지 쉬운 방법이 있습니다", "@tutorialSearchDesc": { "description": "Tutorial search page description" }, @@ -2818,7 +2818,7 @@ "@tutorialDownloadTitle": { "description": "Tutorial download page title" }, - "tutorialDownloadDesc": "음악 다운로드는 간단하고 빠릅니다. 작동 방식은 다음과 같습니다.", + "tutorialDownloadDesc": "음악 다운로드는 간단하고 빠릅니다. 작동 방식은 다음과 같습니다", "@tutorialDownloadDesc": { "description": "Tutorial download page description" }, @@ -2826,7 +2826,7 @@ "@tutorialLibraryTitle": { "description": "Tutorial library page title" }, - "tutorialLibraryDesc": "다운로드한 모든 음악은 라이브러리 탭에 정리되어 있습니다.", + "tutorialLibraryDesc": "다운로드한 모든 음악은 라이브러리 탭에 정리되어 있습니다", "@tutorialLibraryDesc": { "description": "Tutorial library page description" }, @@ -2846,7 +2846,7 @@ "@tutorialExtensionsTitle": { "description": "Tutorial extensions page title" }, - "tutorialExtensionsDesc": "커뮤니티 확장 프로그램을 사용하여 앱의 기능을 확장하세요.", + "tutorialExtensionsDesc": "커뮤니티 확장 프로그램을 사용하여 앱의 기능을 확장하세요", "@tutorialExtensionsDesc": { "description": "Tutorial extensions page description" }, @@ -2854,7 +2854,7 @@ "@tutorialExtensionsTip1": { "description": "Tutorial extensions tip 1" }, - "tutorialExtensionsTip2": "새 다운로드 제공즈 또는 검색 소스를 추가하세요", + "tutorialExtensionsTip2": "새 다운로드 제공자 또는 검색 출처를 추가하세요", "@tutorialExtensionsTip2": { "description": "Tutorial extensions tip 2" }, @@ -2866,7 +2866,7 @@ "@tutorialSettingsTitle": { "description": "Tutorial settings page title" }, - "tutorialSettingsDesc": "설정에서 앱을 원하는 대로 맞춤 설정하세요.", + "tutorialSettingsDesc": "설정에서 앱을 원하는 대로 맞춤 설정하세요", "@tutorialSettingsDesc": { "description": "Tutorial settings page description" }, @@ -2882,7 +2882,7 @@ "@tutorialSettingsTip3": { "description": "Tutorial settings tip 3" }, - "tutorialReadyMessage": "모든 준비가 완료되었습니다! 지금 바로 좋아하는 음악을 다운로드하세요.", + "tutorialReadyMessage": "모든 준비가 완료되었습니다! 지금 바로 좋아하는 음악을 다운로드하세요", "@tutorialReadyMessage": { "description": "Tutorial completion message" }, @@ -2923,7 +2923,7 @@ "@cacheSummaryTitle": { "description": "Heading for cache summary card" }, - "cacheSummarySubtitle": "캐시를 지워도 다운로드한 음악 파일은 삭제되지 않습니다.", + "cacheSummarySubtitle": "캐시를 지워도 다운로드한 음악 파일은 삭제되지 않습니다", "@cacheSummarySubtitle": { "description": "Helper text for cache summary card" }, @@ -2948,7 +2948,7 @@ "@cacheAppDirectory": { "description": "Cache item title for app cache directory" }, - "cacheAppDirectoryDesc": "HTTP 응답, WebView 데이터 및 기타 임시 앱 데이터.", + "cacheAppDirectoryDesc": "HTTP 응답, WebView 데이터 및 기타 임시 앱 데이터", "@cacheAppDirectoryDesc": { "description": "Description of what app cache directory contains" }, @@ -2956,7 +2956,7 @@ "@cacheTempDirectory": { "description": "Cache item title for temporary files directory" }, - "cacheTempDirectoryDesc": "다운로드 및 오디오 변환으로 생성된 임시 파일.", + "cacheTempDirectoryDesc": "다운로드 및 오디오 변환으로 생성된 임시 파일", "@cacheTempDirectoryDesc": { "description": "Description of what temporary directory contains" }, @@ -2964,7 +2964,7 @@ "@cacheCoverImage": { "description": "Cache item title for persistent cover images" }, - "cacheCoverImageDesc": "다운로드된 앨범 및 트랙 표지 이미지입니다. 볼 때 다시 다운로드됩니다.", + "cacheCoverImageDesc": "다운로드된 앨범 및 트랙 표지 이미지입니다. 볼 때 다시 다운로드됩니다", "@cacheCoverImageDesc": { "description": "Description of what cover image cache contains" }, @@ -2972,7 +2972,7 @@ "@cacheLibraryCover": { "description": "Cache item title for local library cover art images" }, - "cacheLibraryCoverDesc": "로컬 음악 파일에서 표지 이미지를 추출하였습니다. 다음 스캔 시 다시 추출합니다.", + "cacheLibraryCoverDesc": "로컬 음악 파일에서 표지 이미지를 추출하였습니다. 다음 스캔 시 다시 추출합니다", "@cacheLibraryCoverDesc": { "description": "Description of what library cover cache contains" }, @@ -2980,7 +2980,7 @@ "@cacheExploreFeed": { "description": "Cache item title for explore home feed cache" }, - "cacheExploreFeedDesc": "탐색 탭 콘텐츠(신규 발매, 인기 콘텐츠). 다음 방문 시 새로 고쳐집니다.", + "cacheExploreFeedDesc": "탐색 탭 콘텐츠(신규 발매, 인기 콘텐츠)는 다음 방문 시 새로 고쳐집니다", "@cacheExploreFeedDesc": { "description": "Description of what explore feed cache contains" }, @@ -2988,7 +2988,7 @@ "@cacheTrackLookup": { "description": "Cache item title for track ID lookup cache" }, - "cacheTrackLookupDesc": "Spotify/Deezer 트랙 ID을 조회합니다. 지우면 속도가 느려질 수 있습니다.", + "cacheTrackLookupDesc": "Spotify/Deezer 트랙 ID을 조회합니다. 지우면 속도가 느려질 수 있습니다", "@cacheTrackLookupDesc": { "description": "Description of what track lookup cache contains" }, @@ -2996,7 +2996,7 @@ "@cacheCleanupUnusedDesc": { "description": "Description of what cleanup unused data does" }, - "cacheNoData": "캐시된 데이터가 없습니다", + "cacheNoData": "캐시된 데이터가 없음", "@cacheNoData": { "description": "Label when cache category has no data" }, @@ -3152,7 +3152,7 @@ "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" }, - "trackCoverSaved": "표지 이미지가 {fileName}에 저장됨", + "trackCoverSaved": "표지 이미지가 '{fileName}'에 저장됨", "@trackCoverSaved": { "description": "Snackbar after cover art saved", "placeholders": { @@ -3161,11 +3161,11 @@ } } }, - "trackCoverNoSource": "사용할 수 있는 표지 소스가 없음", + "trackCoverNoSource": "사용할 수 있는 표지 출처가 없음", "@trackCoverNoSource": { "description": "Snackbar when no cover art URL or embedded cover" }, - "trackLyricsSaved": "가사가 {fileName}에 저장됨", + "trackLyricsSaved": "가사가 '{fileName}'에 저장됨", "@trackLyricsSaved": { "description": "Snackbar after lyrics saved", "placeholders": { @@ -3215,7 +3215,7 @@ } } }, - "queueFlacNoReliableMatches": "선택한 항목에 대한 신뢰할 수 있는 온라인 일치 항목을 찾을 수 없습니다", + "queueFlacNoReliableMatches": "선택한 항목에 대한 신뢰할 수 있는 온라인 일치 항목을 찾을 수 없음", "@queueFlacNoReliableMatches": { "description": "Snackbar when no safe FLAC redownload matches were found" }, @@ -3256,7 +3256,7 @@ "@trackConvertTargetFormat": { "description": "Label for format selection" }, - "trackConvertBitrate": "Bitrate", + "trackConvertBitrate": "비트레이트", "@trackConvertBitrate": { "description": "Label for bitrate selection" }, @@ -3264,7 +3264,7 @@ "@trackConvertConfirmTitle": { "description": "Confirmation dialog title" }, - "trackConvertConfirmMessage": "{bitrate} 비트레이트로 {sourceFormat} 에서 {targetFormat} 으로 변환하시겠습니까?\n\n변환 후 원본 파일이 삭제됩니다", + "trackConvertConfirmMessage": "{bitrate} 비트레이트로 {sourceFormat}에서 {targetFormat}으로 변환하시겠습니까?\n\n변환 후 원본 파일이 삭제됩니다", "@trackConvertConfirmMessage": { "description": "Confirmation dialog message", "placeholders": { @@ -3279,7 +3279,7 @@ } } }, - "trackConvertConfirmMessageLossless": "{sourceFormat}에서 {targetFormat}으로 변환하시겠습니까?\n(무손실 — 음질 손실 없음)\n\n변환 후에 원본 파일이 삭제됩니다", + "trackConvertConfirmMessageLossless": "{sourceFormat}에서 {targetFormat}으로 변환하시겠습니까? (무손실 — 음질 손실 없음)\n\n변환 후에 원본 파일이 삭제됩니다", "@trackConvertConfirmMessageLossless": { "description": "Confirmation dialog message for lossless-to-lossless conversion", "placeholders": { @@ -3316,7 +3316,7 @@ "@cueSplitTitle": { "description": "Title for CUE split bottom sheet" }, - "cueSplitSubtitle": "CUE+FLAC을 개별 트랙으로 분할합니다", + "cueSplitSubtitle": "CUE+FLAC을 개별 트랙으로 분할", "@cueSplitSubtitle": { "description": "Subtitle for CUE split menu item" }, @@ -3351,7 +3351,7 @@ "@cueSplitConfirmTitle": { "description": "CUE split confirmation dialog title" }, - "cueSplitConfirmMessage": "\"{album}\"을 {count} 개의 개별 FLAC 파일로 분할하시겠습니까?\n\n파일은 동일한 디렉토리에 저장됩니다.", + "cueSplitConfirmMessage": "'{album}'을 {count} 개의 개별 FLAC 파일로 분할하시겠습니까?\n\n파일은 동일한 디렉토리에 저장됩니다", "@cueSplitConfirmMessage": { "description": "CUE split confirmation dialog message", "placeholders": { @@ -3375,7 +3375,7 @@ } } }, - "cueSplitSuccess": "{count} 개의 트랙으로 성공적으로 분할", + "cueSplitSuccess": "{count} 개의 트랙 분할 성공", "@cueSplitSuccess": { "description": "Snackbar after successful CUE split", "placeholders": { @@ -3432,7 +3432,7 @@ "@collectionCreatePlaylist": { "description": "Action to create a new playlist" }, - "collectionNoPlaylistsYet": "아직 재생목록이 없습니다", + "collectionNoPlaylistsYet": "아직 재생목록이 없음", "@collectionNoPlaylistsYet": { "description": "Empty state title when user has no playlists" }, @@ -3458,7 +3458,7 @@ } } }, - "collectionAddedToPlaylist": "\"{playlistName}\"에 추가하였습니다", + "collectionAddedToPlaylist": "'{playlistName}'에 추가됨", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", "placeholders": { @@ -3467,7 +3467,7 @@ } } }, - "collectionAlreadyInPlaylist": "이미 \"{playlistName}\"에 있습니다", + "collectionAlreadyInPlaylist": "이미 '{playlistName}'에 있음", "@collectionAlreadyInPlaylist": { "description": "Snackbar when track already exists in playlist", "placeholders": { @@ -3476,7 +3476,7 @@ } } }, - "collectionPlaylistCreated": "재생목록이 생성됨", + "collectionPlaylistCreated": "재생목록 만들기 완료", "@collectionPlaylistCreated": { "description": "Snackbar after creating playlist" }, @@ -3505,15 +3505,15 @@ } } }, - "collectionPlaylistDeleted": "재생목록이 삭제됨", + "collectionPlaylistDeleted": "재생목록 삭제 완료", "@collectionPlaylistDeleted": { "description": "Snackbar after deleting playlist" }, - "collectionPlaylistRenamed": "재생목록 이름이 변경됨", + "collectionPlaylistRenamed": "재생목록 이름 변경 완료", "@collectionPlaylistRenamed": { "description": "Snackbar after renaming playlist" }, - "collectionWishlistEmptyTitle": "위시리스트가 비워져 있습니다", + "collectionWishlistEmptyTitle": "위시리스트가 비어 있음", "@collectionWishlistEmptyTitle": { "description": "Wishlist empty state title" }, @@ -3529,7 +3529,7 @@ "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, - "collectionFavoriteArtistsEmptyTitle": "아직 좋아하는 아티스트가 없습니다", + "collectionFavoriteArtistsEmptyTitle": "아직 좋아하는 아티스트가 없음", "@collectionFavoriteArtistsEmptyTitle": { "description": "Favorite artists empty state title" }, @@ -3537,7 +3537,7 @@ "@collectionFavoriteArtistsEmptySubtitle": { "description": "Favorite artists empty state subtitle" }, - "collectionPlaylistEmptyTitle": "재생목록이 비워져 있습니다", + "collectionPlaylistEmptyTitle": "재생목록이 비어 있음", "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" }, @@ -3553,7 +3553,7 @@ "@collectionRemoveFromFolder": { "description": "Tooltip for removing track from wishlist/loved folder" }, - "collectionRemoved": "\"{trackName}\"가 제거됨", + "collectionRemoved": "'{trackName}' 제거 완료", "@collectionRemoved": { "description": "Snackbar after removing a track from a collection", "placeholders": { @@ -3580,7 +3580,7 @@ } } }, - "collectionAddedToWishlist": "\"{trackName}\"가 위시리스트에 추가됨", + "collectionAddedToWishlist": "'{trackName}'가 위시리스트에 추가됨", "@collectionAddedToWishlist": { "description": "Snackbar after adding track to wishlist", "placeholders": { @@ -3589,7 +3589,7 @@ } } }, - "collectionRemovedFromWishlist": "\"{trackName}\"가 위시리스트에서 제거됨", + "collectionRemovedFromWishlist": "'{trackName}'가 위시리스트에서 제거됨", "@collectionRemovedFromWishlist": { "description": "Snackbar after removing track from wishlist", "placeholders": { @@ -3598,7 +3598,7 @@ } } }, - "collectionAddedToFavoriteArtists": "\"{artistName}\"가 좋아하는 아티스트에 추가됨", + "collectionAddedToFavoriteArtists": "'{artistName}'가 좋아하는 아티스트에 추가됨", "@collectionAddedToFavoriteArtists": { "description": "Snackbar after adding artist to favorite artists", "placeholders": { @@ -3607,7 +3607,7 @@ } } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\"가 좋아하는 아티스트에서 제거됨", + "collectionRemovedFromFavoriteArtists": "'{artistName}'가 좋아하는 아티스트에서 제거됨", "@collectionRemovedFromFavoriteArtists": { "description": "Snackbar after removing artist from favorite artists", "placeholders": { @@ -3616,11 +3616,11 @@ } } }, - "trackOptionAddToLoved": "'좋아요 표시한 트랙'에 추가", + "trackOptionAddToLoved": "좋아요 표시한 트랙에 추가", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" }, - "trackOptionRemoveFromLoved": "'좋아요 표시한 트랙'에서 제거", + "trackOptionRemoveFromLoved": "좋아요 표시한 트랙에서 제거", "@trackOptionRemoveFromLoved": { "description": "Bottom sheet action label - remove track from loved folder" }, @@ -3732,7 +3732,7 @@ } } }, - "downloadedAlbumDownloadedCount": "{count} 다운로드됨", + "downloadedAlbumDownloadedCount": "{count} 개 다운로드됨", "@downloadedAlbumDownloadedCount": { "description": "Downloaded tracks count badge", "placeholders": { @@ -3753,7 +3753,7 @@ "@lyricsProvidersTitle": { "description": "Settings item title for lyrics provider order" }, - "lyricsProvidersDescription": "가사 소스를 활성화, 비활성화 및 재정렬합니다.\n가사가 발견될 때까지 위에서 아래로 제공자를 시도합니다.", + "lyricsProvidersDescription": "가사 출처를 활성화, 비활성화 및 재정렬합니다. 가사가 발견될 때까지 위에서 아래로 제공자를 시도합니다", "@lyricsProvidersDescription": { "description": "Description on the lyrics provider priority page" }, @@ -3823,11 +3823,11 @@ "@safMigrationTitle": { "description": "Title of SAF migration dialog" }, - "safMigrationMessage1": "SpotiFLAC은 이제 다운로드에 Android 저장소 접근 프레임워크(SAF)를 사용합니다. 이로써 Android 10 이상에서 \"권한 거부\" 오류가 해결됩니다.", + "safMigrationMessage1": "SpotiFLAC은 이제 다운로드에 Android 저장소 접근 프레임워크(SAF)를 사용합니다. 이로써 Android 10 이상에서 '권한 거부' 오류가 해결됩니다", "@safMigrationMessage1": { "description": "First paragraph of SAF migration dialog" }, - "safMigrationMessage2": "새 저장소 시스템으로 전환하려면 다운로드 폴더를 다시 선택하세요.", + "safMigrationMessage2": "새 저장소 시스템으로 전환하려면 다운로드 폴더를 다시 선택하세요", "@safMigrationMessage2": { "description": "Second paragraph of SAF migration dialog" }, @@ -4036,7 +4036,7 @@ "@dialogDownloadAllTitle": { "description": "Dialog title for bulk download confirmation" }, - "dialogDownloadAllMessage": "{count} 트랙을 다운로드하시겠습니까?", + "dialogDownloadAllMessage": "{count} 개의 트랙을 다운로드하시겠습니까?", "@dialogDownloadAllMessage": { "description": "Body of the Download All confirmation dialog", "placeholders": { @@ -4110,7 +4110,7 @@ "@storageModeSafSubtitle": { "description": "Subtitle for SAF storage mode" }, - "downloadFilenameDescription": "{artist}, {title}, {album}, {track}, {year}, {date}, {disc}를 자리표시자로 사용하세요", + "downloadFilenameDescription": "'{artist}', '{title}', '{album}', '{track}', '{year}', '{date}', '{disc}'를 자리표시자로 사용하세요", "@downloadFilenameDescription": { "description": "Description shown in filename format editor" }, @@ -4134,7 +4134,7 @@ "@downloadCreatePlaylistSourceFolder": { "description": "Setting to create a subfolder per playlist source" }, - "downloadCreatePlaylistSourceFolderEnabled": "각 재생 목록에 대한 하위 폴더를 생성합니다.", + "downloadCreatePlaylistSourceFolderEnabled": "각 재생 목록에 대한 하위 폴더를 생성합니다", "@downloadCreatePlaylistSourceFolderEnabled": { "description": "Subtitle when playlist folder is enabled" }, @@ -5295,7 +5295,7 @@ "@metadataProvidersTitle": { "description": "Settings item title for metadata provider order" }, - "metadataProvidersSubtitle": "드래그하여 검색 및 메타데이터 소스 순서를 설정하세요", + "metadataProvidersSubtitle": "드래그하여 검색 및 메타데이터 출처 순서를 설정하세요", "@metadataProvidersSubtitle": { "description": "Subtitle for metadata provider priority item" }, From ec5e7ed1cd1d8348fad90e3d91823843d0a8521a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 00:01:10 +0700 Subject: [PATCH 100/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index 46575ffd..bb64f304 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -772,15 +772,15 @@ "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "previewPlay": "Play preview", + "previewPlay": "تشغيل المعاينة", "@previewPlay": { "description": "Tooltip for the button that plays a short track preview snippet" }, - "previewStop": "Stop preview", + "previewStop": "إيقاف المعاينة", "@previewStop": { "description": "Tooltip for the button that stops the playing track preview snippet" }, - "previewUnavailable": "Preview unavailable", + "previewUnavailable": "المعاينة غير متوفرة", "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, @@ -1935,11 +1935,11 @@ "@extensionsInfoTip": { "description": "Security warning about extensions" }, - "extensionsInstalledSuccess": "Extension installed successfully", + "extensionsInstalledSuccess": "تم تثبيت الإضافة بنجاح", "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "extensionsInstalledCount": "{count} extensions installed successfully", + "extensionsInstalledCount": "تم تثبيت {count} إضافات بنجاح", "@extensionsInstalledCount": { "description": "Success message after installing multiple extensions", "placeholders": { @@ -1949,7 +1949,7 @@ } } }, - "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", + "extensionsInstallPartialSuccess": "تم تثبيت {count} من أصل {attempted} إضافات", "@extensionsInstallPartialSuccess": { "description": "Message when installing multiple extensions partially succeeds", "placeholders": { @@ -1963,35 +1963,35 @@ } } }, - "extensionsDownloadPriority": "Download Priority", + "extensionsDownloadPriority": "أولوية التحميل", "@extensionsDownloadPriority": { "description": "Setting - download provider order" }, - "extensionsDownloadPrioritySubtitle": "Set download service order", + "extensionsDownloadPrioritySubtitle": "تعيين ترتيب خدمة التحميل", "@extensionsDownloadPrioritySubtitle": { "description": "Subtitle for download priority" }, - "extensionsFallbackTitle": "Fallback Extensions", + "extensionsFallbackTitle": "الإضافات الاحتياطية", "@extensionsFallbackTitle": { "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", + "extensionsFallbackSubtitle": "اختر إضافات التحميل المثبتة التي يمكن استخدامها أثناء الرجوع التلقائي للمزود الاحتياطي", "@extensionsFallbackSubtitle": { "description": "Subtitle for download fallback extensions menu" }, - "extensionsNoDownloadProvider": "No extensions with download provider", + "extensionsNoDownloadProvider": "لا توجد إضافات مع إمكانية مزود التحميل", "@extensionsNoDownloadProvider": { "description": "Empty state - no download providers" }, - "extensionsMetadataPriority": "Metadata Priority", + "extensionsMetadataPriority": "أولوية البيانات الوصفية (metadata)", "@extensionsMetadataPriority": { "description": "Setting - metadata provider order" }, - "extensionsMetadataPrioritySubtitle": "Set search & metadata source order", + "extensionsMetadataPrioritySubtitle": "تعيين ترتيب مصدر البحث والبيانات الوصفية", "@extensionsMetadataPrioritySubtitle": { "description": "Subtitle for metadata priority" }, - "extensionsNoMetadataProvider": "No extensions with metadata provider", + "extensionsNoMetadataProvider": "لا توجد إضافات مع إمكانية مزود البيانات الوصفية", "@extensionsNoMetadataProvider": { "description": "Empty state - no metadata providers" }, From bda41a0c1ae628ac9880c7bd2254fff8e68154ff Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 00:01:11 +0700 Subject: [PATCH 101/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 112 ++++++++++++++++++++-------------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 7bdd911d..c5ebcbc5 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -2043,11 +2043,11 @@ "@downloadLossy320": { "description": "Quality option label for lossy 320kbps" }, - "downloadLossyFormat": "손실 압축 포맷", + "downloadLossyFormat": "손실 압축 형식 ", "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadLossy320Format": "손실 압축 320kbps 포맷", + "downloadLossy320Format": "손실 압축 320kbps 형식", "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" }, @@ -2594,7 +2594,7 @@ } } }, - "libraryLastScanned": "마지막 스캔: {time}", + "libraryLastScanned": "마지막 스캔 시간: {time}", "@libraryLastScanned": { "description": "Last scan time display", "placeholders": { @@ -3717,7 +3717,7 @@ } } }, - "selectionBatchConvertSuccess": "{total} 개 중 {success} 개를 {format} 로 변환 완료", + "selectionBatchConvertSuccess": "{total} 개 중 {success} 개를 {format}로 변환 완료", "@selectionBatchConvertSuccess": { "description": "Snackbar after batch conversion completes", "placeholders": { @@ -3757,7 +3757,7 @@ "@lyricsProvidersDescription": { "description": "Description on the lyrics provider priority page" }, - "lyricsProvidersInfoText": "확장 프로그램 가사 제공자는 내장 가사 제공자보다 먼저 실행됩니다. 하나 이상의 제공자가 활성화되어 있어야 합니다.", + "lyricsProvidersInfoText": "확장 프로그램 가사 제공자는 내장 가사 제공자보다 먼저 실행됩니다. 하나 이상의 제공자가 활성화되어 있어야 합니다", "@lyricsProvidersInfoText": { "description": "Info tip on lyrics provider priority page" }, @@ -3783,11 +3783,11 @@ "@lyricsProvidersAtLeastOne": { "description": "Snackbar when user tries to disable the last enabled provider" }, - "lyricsProvidersSaved": "가사 제공자 우선순위 저장됨", + "lyricsProvidersSaved": "가사 제공자 우선순위가 저장됨", "@lyricsProvidersSaved": { "description": "Snackbar after saving lyrics provider priority" }, - "lyricsProvidersDiscardContent": "저장되지 않은 변경 사항이 손실됩니다.", + "lyricsProvidersDiscardContent": "저장되지 않은 변경 사항이 손실됩니다", "@lyricsProvidersDiscardContent": { "description": "Body text of the discard-changes dialog on lyrics provider page" }, @@ -3883,7 +3883,7 @@ "@backupCreating": { "description": "Progress text while a backup is being created" }, - "backupCreated": "백업이 생성됨", + "backupCreated": "백업 생성 완료", "@backupCreated": { "description": "Snackbar after a backup file is created" }, @@ -4006,7 +4006,7 @@ } } }, - "tooltipLoveAll": "모든 즐겨찾기", + "tooltipLoveAll": "모두 좋아요 표시", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" }, @@ -4053,7 +4053,7 @@ "@homeGoToAlbum": { "description": "Context menu item to navigate to the album page" }, - "homeAlbumInfoUnavailable": "앨범 정보를 사용할 수 없습니다", + "homeAlbumInfoUnavailable": "앨범 정보를 사용할 수 없음", "@homeAlbumInfoUnavailable": { "description": "Snackbar when album info cannot be loaded" }, @@ -4082,11 +4082,11 @@ } } }, - "snackbarNoActionDefined": "이 버튼에 대해 정의된 작업이 없습니다", + "snackbarNoActionDefined": "이 버튼에 대해 정의된 작업이 없음", "@snackbarNoActionDefined": { "description": "Snackbar when an extension button has no action configured" }, - "noTracksFoundForAlbum": "이 앨범에서 트랙을 찾을 수 없습니다", + "noTracksFoundForAlbum": "이 앨범에서 트랙을 찾을 수 없음", "@noTracksFoundForAlbum": { "description": "Empty state message when an album has no tracks" }, @@ -4134,7 +4134,7 @@ "@downloadCreatePlaylistSourceFolder": { "description": "Setting to create a subfolder per playlist source" }, - "downloadCreatePlaylistSourceFolderEnabled": "각 재생 목록에 대한 하위 폴더를 생성합니다", + "downloadCreatePlaylistSourceFolderEnabled": "각 재생 목록에 대한 하위 폴더를 만듭니다", "@downloadCreatePlaylistSourceFolderEnabled": { "description": "Subtitle when playlist folder is enabled" }, @@ -4254,7 +4254,7 @@ "@downloadFilterContributingDisabled": { "description": "Subtitle when contributing artist filter is off" }, - "downloadProvidersNoneEnabled": "활성화된 제공자가 없습니다", + "downloadProvidersNoneEnabled": "활성화된 제공자가 없음", "@downloadProvidersNoneEnabled": { "description": "Shown when no lyrics providers are active" }, @@ -4262,11 +4262,11 @@ "@downloadMusixmatchLanguageCode": { "description": "Label for Musixmatch language input field" }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "downloadMusixmatchLanguageHint": "예시: en, de, ja", "@downloadMusixmatchLanguageHint": { "description": "Placeholder for Musixmatch language input" }, - "downloadMusixmatchLanguageDesc": "Musixmatch에서 번역된 가사를 요청하려면 BCP-47 언어 코드(예: en, de, ja)를 입력하세요.", + "downloadMusixmatchLanguageDesc": "Musixmatch에서 번역된 가사를 요청하려면 BCP-47 언어 코드를 입력하세요 (예시: en, de, ja)", "@downloadMusixmatchLanguageDesc": { "description": "Description in Musixmatch language picker" }, @@ -4282,7 +4282,7 @@ "@downloadNetworkWifiOnlySubtitle": { "description": "Subtitle for WiFi-only option in picker" }, - "downloadSongLinkRegionDesc": "SongLink를 통해 트랙 링크를 해결할 경우에 사용되는 지역입니다. 스트리밍 서비스를 이용할 수 있는 국가를 선택하세요.", + "downloadSongLinkRegionDesc": "SongLink를 통해 트랙 링크를 해결할 경우에 사용되는 지역입니다. 스트리밍 서비스를 이용할 수 있는 국가를 선택하세요", "@downloadSongLinkRegionDesc": { "description": "Description in SongLink region picker" }, @@ -4348,7 +4348,7 @@ "@editMetadataAutoFillSearching": { "description": "Snackbar shown while searching for online metadata" }, - "editMetadataAutoFillNoResults": "온라인에서 일치하는 메타데이터를 찾을 수 없습니다", + "editMetadataAutoFillNoResults": "온라인에서 일치하는 메타데이터를 찾을 수 없음", "@editMetadataAutoFillNoResults": { "description": "Snackbar when online metadata search returns no results" }, @@ -4456,7 +4456,7 @@ } } }, - "queueEmptyAlbums": "앨범 다운로드가 없습니다", + "queueEmptyAlbums": "앨범 다운로드가 없음", "@queueEmptyAlbums": { "description": "Empty state title when no album downloads exist" }, @@ -4464,7 +4464,7 @@ "@queueEmptyAlbumsSubtitle": { "description": "Empty state subtitle for album downloads" }, - "queueEmptySingles": "싱글 다운로드가 없습니다", + "queueEmptySingles": "싱글 다운로드가 없음", "@queueEmptySingles": { "description": "Empty state title when no single track downloads exist" }, @@ -4472,7 +4472,7 @@ "@queueEmptySinglesSubtitle": { "description": "Empty state subtitle for single track downloads" }, - "queueEmptyHistory": "다운로드 기록이 없습니다", + "queueEmptyHistory": "다운로드 기록이 없음", "@queueEmptyHistory": { "description": "Empty state title when download history is empty" }, @@ -4516,7 +4516,7 @@ "@audioAnalysisContainer": { "description": "Audio container metric label" }, - "audioAnalysisDecodedFormat": "디코딩된 형식", + "audioAnalysisDecodedFormat": "디코딩 형식", "@audioAnalysisDecodedFormat": { "description": "Decoded sample format metric label" }, @@ -4556,7 +4556,7 @@ "@audioAnalysisLufs": { "description": "Integrated loudness metric label" }, - "audioAnalysisTruePeak": "True Peak", + "audioAnalysisTruePeak": "트루 피크", "@audioAnalysisTruePeak": { "description": "True peak metric label" }, @@ -4588,7 +4588,7 @@ "@audioAnalysisRescanning": { "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "extensionsSearchWith": "{providerName}으로 검색", + "extensionsSearchWith": "'{providerName}'으로 검색", "@extensionsSearchWith": { "description": "Extensions page - subtitle for default metadata search provider option", "placeholders": { @@ -4630,7 +4630,7 @@ } } }, - "extensionsNoHomeFeedExtensions": "홈 피드가 있는 확장 프로그램가 없습니드", + "extensionsNoHomeFeedExtensions": "홈 피드가 있는 확장 프로그램가 없음", "@extensionsNoHomeFeedExtensions": { "description": "Extensions page - shown when no installed extension has home feed" }, @@ -4704,7 +4704,7 @@ "@notifChannelLibraryScanDesc": { "description": "Android notification channel description for library scan" }, - "notifDownloadingTrack": "{trackName}를 다운로드하는 중", + "notifDownloadingTrack": "'{trackName}'를 다운로드하는 중", "@notifDownloadingTrack": { "description": "Notification title while downloading a track", "placeholders": { @@ -4713,7 +4713,7 @@ } } }, - "notifFinalizingTrack": "{trackName}를 마무리하는 중", + "notifFinalizingTrack": "'{trackName}'를 마무리하는 중", "@notifFinalizingTrack": { "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { @@ -4812,7 +4812,7 @@ "@notifScanningLibrary": { "description": "Notification title while scanning local library" }, - "notifLibraryScanProgressWithTotal": "{scanned}/{total} 파일 • {percentage}%", + "notifLibraryScanProgressWithTotal": "{scanned}/{total} 개의 파일 • {percentage}%", "@notifLibraryScanProgressWithTotal": { "description": "Notification body for library scan progress when total is known", "placeholders": { @@ -4827,7 +4827,7 @@ } } }, - "notifLibraryScanProgressNoTotal": "{scanned} 파일 스캔됨 • {percentage}%", + "notifLibraryScanProgressNoTotal": "{scanned} 게의 파일이 스캔됨 • {percentage}%", "@notifLibraryScanProgressNoTotal": { "description": "Notification body for library scan progress when total is unknown", "placeholders": { @@ -4843,7 +4843,7 @@ "@notifLibraryScanComplete": { "description": "Notification title when library scan finishes" }, - "notifLibraryScanCompleteBody": "{count} 개의 파일이 색인됨", + "notifLibraryScanCompleteBody": "{count} 개의 트랙이 색인됨", "@notifLibraryScanCompleteBody": { "description": "Notification body for library scan complete - number of indexed tracks", "placeholders": { @@ -4874,7 +4874,7 @@ "@notifLibraryScanFailed": { "description": "Notification title when library scan fails" }, - "notifLibraryScanCancelled": "보관함 스캔 취소됨", + "notifLibraryScanCancelled": "라이브러리 스캔이 취소됨", "@notifLibraryScanCancelled": { "description": "Notification title when library scan is cancelled by the user" }, @@ -4910,7 +4910,7 @@ "@notifUpdateReady": { "description": "Notification title when app update download is complete" }, - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} 다운로드 완료. 설치하려면 탭하세요.", + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} 다운로드 완료. 설치하려면 탭하세요", "@notifUpdateReadyBody": { "description": "Notification body when app update is ready to install", "placeholders": { @@ -4935,7 +4935,7 @@ "@homeSearchHintDefault": { "description": "Default placeholder for the main search field on Home" }, - "homeSearchHintProvider": "{providerName}으로 검색...", + "homeSearchHintProvider": "'{providerName}'으로 검색...", "@homeSearchHintProvider": { "description": "Placeholder for the main search field when a provider is selected", "placeholders": { @@ -5000,7 +5000,7 @@ "@downloadFilenameHintExample": { "description": "Example placeholder for the download filename format input" }, - "trackCoverNoEmbeddedArt": "내장된 표지 이미지가 없습니다", + "trackCoverNoEmbeddedArt": "내장된 표지 이미지가 없음", "@trackCoverNoEmbeddedArt": { "description": "Message shown when a track file has no embedded cover art" }, @@ -5048,7 +5048,7 @@ "@queueRateLimitTitle": { "description": "Title shown on a failed queue item when the download service rate limits requests" }, - "queueRateLimitMessage": "이 트랙은 아직 사용 가능할 수 있습니다. 몇 분 기다렸다가 병렬 다운로드를 줄인 후에 다시 시도하세요.", + "queueRateLimitMessage": "이 트랙은 아직 사용 가능할 수 있습니다. 몇 분 기다렸다가 병렬 다운로드를 줄인 후에 다시 시도하세요", "@queueRateLimitMessage": { "description": "Explanation shown on a failed queue item when the download service rate limits requests" }, @@ -5061,11 +5061,11 @@ } } }, - "logAutoScrollOn": "자동 스크롤 켜기", + "logAutoScrollOn": "자동 스크롤: ON", "@logAutoScrollOn": { "description": "Tooltip when auto-scroll is enabled on the log screen" }, - "logAutoScrollOff": "자동 스크롤 끄기", + "logAutoScrollOff": "자동 스크롤: OFF", "@logAutoScrollOff": { "description": "Tooltip when auto-scroll is disabled on the log screen" }, @@ -5158,7 +5158,7 @@ "@setupChangeFolderTooltip": { "description": "Tooltip for editing the selected download folder" }, - "a11yOpenTrackByArtist": "{artistName}의 트랙 {trackName} 열기", + "a11yOpenTrackByArtist": "'{artistName}'의 트랙 '{trackName}' 열기", "@a11yOpenTrackByArtist": { "description": "Accessibility label for opening a track item", "placeholders": { @@ -5194,7 +5194,7 @@ } } }, - "a11yOpenAlbumByArtistTrackCount": "{artistName} 의 앨범 {albumName} 열기 ({trackCount} 곡)", + "a11yOpenAlbumByArtistTrackCount": "'{artistName}'의 앨범 '{albumName}' 열기 ({trackCount} 번째 곡)", "@a11yOpenAlbumByArtistTrackCount": { "description": "Accessibility label for opening an album item with track count", "placeholders": { @@ -5209,7 +5209,7 @@ } } }, - "a11yTrackByArtist": "{artistName} 의 {trackName}", + "a11yTrackByArtist": "'{artistName}'의 '{trackName}'", "@a11yTrackByArtist": { "description": "Accessibility label for a queue or list track item", "placeholders": { @@ -5221,7 +5221,7 @@ } } }, - "a11ySelectAlbum": "앨범 {albumName} 선택", + "a11ySelectAlbum": "앨범 '{albumName}' 선택", "@a11ySelectAlbum": { "description": "Accessibility label for selecting an album", "placeholders": { @@ -5230,7 +5230,7 @@ } } }, - "a11yOpenAlbum": "앨범 {albumName} 열기", + "a11yOpenAlbum": "앨범 '{albumName}' 열기", "@a11yOpenAlbum": { "description": "Accessibility label for opening an album", "placeholders": { @@ -5267,7 +5267,7 @@ "@settingsLyrics": { "description": "Settings menu item - lyrics settings" }, - "settingsLyricsSubtitle": "임베드, 모드, 제공자, 언어 옵션", + "settingsLyricsSubtitle": "삽입, 모드, 제공자, 언어 옵션", "@settingsLyricsSubtitle": { "description": "Subtitle for lyrics settings" }, @@ -5462,7 +5462,7 @@ "@a11yDeselectTrack": { "description": "Accessibility label for deselecting a track" }, - "a11yPlayTrackByArtist": "{artistName} 의 {trackName} 재생", + "a11yPlayTrackByArtist": "'{artistName}'의 '{trackName}' 재생", "@a11yPlayTrackByArtist": { "description": "Accessibility label for playing a local library track", "placeholders": { @@ -5518,7 +5518,7 @@ } } }, - "libraryScanCancelled": "스캔 취소됨", + "libraryScanCancelled": "스캔이 취소됨", "@libraryScanCancelled": { "description": "Library scan status when a scan was cancelled" }, @@ -5535,11 +5535,11 @@ } } }, - "downloadNativeWorker": "네이티브 다운로드 워커", + "downloadNativeWorker": "기본 다운로드 워커", "@downloadNativeWorker": { "description": "Setting title for Android native download worker" }, - "downloadNativeWorkerSubtitle": "확장 프로그램용 베타 Android service worker", + "downloadNativeWorkerSubtitle": "확장 프로그램용 베타 Android 서비스 워커", "@downloadNativeWorkerSubtitle": { "description": "Setting subtitle for Android native download worker" }, @@ -5589,7 +5589,7 @@ "@extensionCustomUrlHandlingSubtitle": { "description": "Extension detail subtitle for custom URL handling" }, - "extensionCustomUrlHandlingShareHint": "이 사이트의 링크를 SpotiFLAC Mobile로 공유하면 이 확장 프로그램이 처리합니다.", + "extensionCustomUrlHandlingShareHint": "이 사이트의 링크를 SpotiFLAC Mobile로 공유하면 이 확장 프로그램이 처리합니다", "@extensionCustomUrlHandlingShareHint": { "description": "Extension detail hint explaining share-to-app URL handling" }, @@ -5768,11 +5768,11 @@ "@openInOtherServices": { "description": "Title and tooltip for finding the current collection in other services" }, - "shareSheetNoExtensions": "호환되는 다른 서비스가 없습니다", + "shareSheetNoExtensions": "호환되는 다른 서비스가 없음", "@shareSheetNoExtensions": { "description": "Empty state when no extensions can be searched for cross-service links" }, - "shareSheetNotFound": "찾을 수 없습니다", + "shareSheetNotFound": "찾을 수 없음", "@shareSheetNotFound": { "description": "Cross-service share sheet row subtitle when a service has no match" }, @@ -5815,7 +5815,7 @@ "@nowPlayingTitle": { "description": "Title for the now playing screen" }, - "nowPlayingNothingPlaying": "재생 중인 노래가 없습니다", + "nowPlayingNothingPlaying": "재생 중인 노래가 없음", "@nowPlayingNothingPlaying": { "description": "Empty state when no track is currently playing" }, @@ -5843,7 +5843,7 @@ "@nowPlayingTabLyrics": { "description": "Tab label for the lyrics view" }, - "nowPlayingNoLyrics": "이 파일에는 가사가 없습니다", + "nowPlayingNoLyrics": "이 파일에는 가사가 없음", "@nowPlayingNoLyrics": { "description": "Empty state when the playing file has no embedded lyrics" }, @@ -5872,7 +5872,7 @@ "@nowPlayingShuffleLibrary": { "description": "Button label to shuffle and play the entire local library" }, - "nowPlayingQueueEmpty": "현재 다운로드 목록이 비어져 있습니다", + "nowPlayingQueueEmpty": "현재 다운로드 목록이 비어 있음", "@nowPlayingQueueEmpty": { "description": "Empty state when the playback queue has no items" }, @@ -6018,11 +6018,11 @@ "@trackPlayNext": { "description": "Menu action to play a track as the next queue item" }, - "trackAddToQueue": "현재 다운로드 목록에 추가", + "trackAddToQueue": "다운로드 목록에 추가", "@trackAddToQueue": { "description": "Menu action to add a track to the playback queue" }, - "snackbarExtensionInstalledEnable": "{extensionName} 이 설치됨. '설정 > 확장 프로그램'에서 활성화하세요", + "snackbarExtensionInstalledEnable": "'{extensionName}'이 설치됨. '설정 > 확장 프로그램'에서 활성화하세요", "@snackbarExtensionInstalledEnable": { "description": "Snackbar after installing an extension from the repo tab", "placeholders": { @@ -6031,7 +6031,7 @@ } } }, - "snackbarExtensionUpdatedVersion": "{extensionName} 이 v{version} 으로 업데이트됨", + "snackbarExtensionUpdatedVersion": "'{extensionName}'이 v{version}으로 업데이트됨", "@snackbarExtensionUpdatedVersion": { "description": "Snackbar after updating an extension from the repo tab", "placeholders": { From 308a75037e6f0b9097239c1ea57b9a5ea6c11d4e Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 00:58:11 +0700 Subject: [PATCH 102/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index c5ebcbc5..e5db0aa7 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -841,7 +841,7 @@ "@dialogDeleteSelectedTitle": { "description": "Dialog title - delete selected items" }, - "dialogDeleteSelectedMessage": "기록에서 {count} 개의 {count, plural, =1{트랙} other{트랙}}을 삭제하시겠습니까?\n\n이렇게 하면 저장소에서도 파일이 삭제됩니다", + "dialogDeleteSelectedMessage": "기록에서 {count} 개의 {count, plural, =1{트랙} other{트랙}}을 삭제하시겠습니까?\n\n저장소에서도 파일이 삭제됩니다", "@dialogDeleteSelectedMessage": { "description": "Dialog message - delete selected tracks", "placeholders": { @@ -2043,7 +2043,7 @@ "@downloadLossy320": { "description": "Quality option label for lossy 320kbps" }, - "downloadLossyFormat": "손실 압축 형식 ", + "downloadLossyFormat": "손실 압축 형식", "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, @@ -2227,7 +2227,7 @@ "@downloadedAlbumDeleteSelected": { "description": "Button - delete selected tracks" }, - "downloadedAlbumDeleteMessage": "앨범에서 {count} {count, plural, =1{트랙} other{트랙}}을 삭제하시겠습니까?\n\n이렇게 하면 저장소에서 파일도 삭제됩니다", + "downloadedAlbumDeleteMessage": "앨범에서 {count} 개의 {count, plural, =1{트랙} other{트랙}}을 삭제하시겠습니까?\n\n저장소에서도 파일이 삭제됩니다", "@downloadedAlbumDeleteMessage": { "description": "Delete confirmation with count", "placeholders": { @@ -2627,7 +2627,7 @@ } } }, - "libraryInLibrary": "라이브러리에서", + "libraryInLibrary": "라이브러리에 있음", "@libraryInLibrary": { "description": "Badge shown on tracks that exist in local library" }, @@ -3396,7 +3396,7 @@ "@cueSplitButton": { "description": "Button text to start CUE splitting" }, - "actionCreate": "만들기", + "actionCreate": "생성", "@actionCreate": { "description": "Generic action button - create" }, @@ -3428,7 +3428,7 @@ "@collectionAddToPlaylist": { "description": "Action to add a track to user playlist" }, - "collectionCreatePlaylist": "재생목록 만들기", + "collectionCreatePlaylist": "재생목록 생성", "@collectionCreatePlaylist": { "description": "Action to create a new playlist" }, @@ -3476,7 +3476,7 @@ } } }, - "collectionPlaylistCreated": "재생목록 만들기 완료", + "collectionPlaylistCreated": "재생목록 생성 완료", "@collectionPlaylistCreated": { "description": "Snackbar after creating playlist" }, @@ -3678,7 +3678,7 @@ "@selectionBatchConvertConfirmTitle": { "description": "Confirmation dialog title for batch conversion" }, - "selectionBatchConvertConfirmMessage": "{count} {count, plural, =1{트랙} other{트랙}}을 {bitrate} 비트레이트로 {format}으로 변환하시겠습니까?\n\n변환 후 원본 파일이 삭제됩니다", + "selectionBatchConvertConfirmMessage": "{count} 개의 {count, plural, =1{트랙} other{트랙}}을 {bitrate} 비트레이트로 {format}으로 변환하시겠습니까?\n\n변환 후 원본 파일이 삭제됩니다", "@selectionBatchConvertConfirmMessage": { "description": "Confirmation dialog message for batch conversion", "placeholders": { @@ -3693,7 +3693,7 @@ } } }, - "selectionBatchConvertConfirmMessageLossless": "{count} {count, plural, =1{트랙} other{트랙}}을 {format}으로 변환하시겠습니까? (무손실 — 음질 손실 없음)\n\n변환 후 원본 파일이 삭제됩니다", + "selectionBatchConvertConfirmMessageLossless": "{count} 개의 {count, plural, =1{트랙} other{트랙}}을 {format}으로 변환하시겠습니까? (무손실 — 음질 손실 없음)\n\n변환 후 원본 파일이 삭제됩니다", "@selectionBatchConvertConfirmMessageLossless": { "description": "Confirmation dialog message for lossless batch conversion", "placeholders": { @@ -4646,7 +4646,7 @@ "@cancelDownloadTitle": { "description": "Dialog title when confirming cancellation of an active download" }, - "cancelDownloadContent": "\"{trackName}\"에 대한 활성 다운로드를 취소합니다.", + "cancelDownloadContent": "'{trackName}'에 대한 활성 다운로드를 취소합니다", "@cancelDownloadContent": { "description": "Dialog body when confirming cancellation of an active download", "placeholders": { @@ -5028,7 +5028,7 @@ "@trackCoverReplaceNotice": { "description": "Notice shown when a new cover has been selected but not saved yet" }, - "actionStop": "정지", + "actionStop": "중지", "@actionStop": { "description": "Generic action - stop" }, @@ -5036,7 +5036,7 @@ "@queueFinalizingDownload": { "description": "Accessibility label for a queue item that is finalizing" }, - "queueDownloadedFileMissing": "다운로드한 파일이 없습니다", + "queueDownloadedFileMissing": "다운로드한 파일이 없음", "@queueDownloadedFileMissing": { "description": "Accessibility label when a downloaded file is missing from disk" }, @@ -5381,7 +5381,7 @@ } } }, - "collectionAddedTracksToPlaylist": "{playlistName} 에 {count} 개의 {count, plural, =1{트랙} other{트랙}}이 추가됨", + "collectionAddedTracksToPlaylist": "\"{playlistName}\"에 {count} 개의 {count, plural, =1{트랙} other{트랙}}이 추가됨", "@collectionAddedTracksToPlaylist": { "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { @@ -5393,7 +5393,7 @@ } } }, - "collectionAddedTracksToPlaylistWithExisting": "{count} 개의 {count, plural, =1{트랙} other{트랙}}이 {playlistName}에 추가됨 ({alreadyCount}트랙은 이미 재생목록에 있음)", + "collectionAddedTracksToPlaylistWithExisting": "{count} 개의 {count, plural, =1{트랙} other{트랙}}이 \"{playlistName}\"에 추가됨 ({alreadyCount} 개의 트랙은 이미 재생목록에 있음)", "@collectionAddedTracksToPlaylistWithExisting": { "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { @@ -5432,7 +5432,7 @@ } } }, - "selectionDeleteTracksCount": "{count} 개의 {count, plural, =1{트랙} other{트랙}} 삭제", + "selectionDeleteTracksCount": "{count} {count, plural, =1{트랙} other{트랙}} 삭제", "@selectionDeleteTracksCount": { "description": "Button label for deleting selected tracks", "placeholders": { @@ -5614,7 +5614,7 @@ "@extensionHealthOffline": { "description": "Extension service health status - offline" }, - "extensionHealthNotConfigured": "구성되지 않음", + "extensionHealthNotConfigured": "설정되지 않음", "@extensionHealthNotConfigured": { "description": "Extension service health status - not configured" }, @@ -5756,7 +5756,7 @@ "@dialogDisableHistoryTitle": { "description": "Confirmation dialog title shown before disabling download history" }, - "dialogDisableHistoryMessage": "기존 기록이 삭제됩니다. 다운로드한 파일은 삭제되지 않습니다.", + "dialogDisableHistoryMessage": "기존 기록이 삭제됩니다. 다운로드한 파일은 삭제되지 않습니다", "@dialogDisableHistoryMessage": { "description": "Confirmation dialog message shown before disabling download history" }, @@ -5965,7 +5965,7 @@ "@snackbarAddedToQueueGeneric": { "description": "Snackbar when a track is added to the playback queue without naming it" }, - "selectionDeletePlaylistsCount": "{count} 개의 {count, plural, =1{재생목록} other{재생목록}} 삭제", + "selectionDeletePlaylistsCount": "{count} {count, plural, =1{재생목록} other{재생목록}} 삭제", "@selectionDeletePlaylistsCount": { "description": "Button label for deleting multiple selected playlists", "placeholders": { From f86b2b816b585eda50f3cf8ab18781f7df56a23c Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:35 +0700 Subject: [PATCH 103/137] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index 54bd5a84..5e0caec0 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -6006,6 +6006,34 @@ "@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": "Pour plus de détails, consultez les notes de mise à jour.", "@updateSeeReleaseNotes": { "description": "Fallback changelog text when release notes cannot be parsed" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From b39d4fa15aeeb8c00fac39c99ed18f75c558bab0 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:37 +0700 Subject: [PATCH 104/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 80 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 10544dbd..379c7b7e 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From a3ebe27b76c15641162c7f93803b88a439872191 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:38 +0700 Subject: [PATCH 105/137] New translations app_en.arb (Arabic) [ci skip] --- lib/l10n/arb/app_ar.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index bb64f304..50127c47 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From e8d95178c7798c425e0acd59b9eef213387adc8f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:40 +0700 Subject: [PATCH 106/137] New translations app_en.arb (German) [ci skip] --- lib/l10n/arb/app_de.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb index a5ca8e94..aef562c6 100644 --- a/lib/l10n/arb/app_de.arb +++ b/lib/l10n/arb/app_de.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From 2185ccf2c9ace0e1a18348f385124beedafac818 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:42 +0700 Subject: [PATCH 107/137] New translations app_en.arb (Japanese) [ci skip] --- lib/l10n/arb/app_ja.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_ja.arb b/lib/l10n/arb/app_ja.arb index f2259420..ceb5ca05 100644 --- a/lib/l10n/arb/app_ja.arb +++ b/lib/l10n/arb/app_ja.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From 45188ef87d43e1de1c69e28f21063d7505d37876 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:43 +0700 Subject: [PATCH 108/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 96 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 88 insertions(+), 8 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index e5db0aa7..10fa6be3 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -157,7 +157,7 @@ "@optionsPrimaryProviderSubtitle": { "description": "Subtitle for primary provider" }, - "optionsUsingExtension": "확장 프로그램을 사용: {extensionName}", + "optionsUsingExtension": "확장 프로그램 사용: {extensionName}", "@optionsUsingExtension": { "description": "Shows active extension name", "placeholders": { @@ -332,11 +332,11 @@ "@optionsUpdateChannelStable": { "description": "Only stable updates" }, - "optionsUpdateChannelPreview": "개발 버전을 받기", + "optionsUpdateChannelPreview": "베타 버전을 받기", "@optionsUpdateChannelPreview": { "description": "Include beta/preview updates" }, - "optionsUpdateChannelWarning": "개발 버전은 불안정할 수 있습니다", + "optionsUpdateChannelWarning": "베타 버전은 불안정할 수 있습니다", "@optionsUpdateChannelWarning": { "description": "Warning about preview channel" }, @@ -1406,7 +1406,7 @@ "@channelStable": { "description": "Update channel - stable releases" }, - "channelPreview": "개발", + "channelPreview": "베타", "@channelPreview": { "description": "Update channel - beta/preview releases" }, @@ -2444,7 +2444,7 @@ "@allFilesAccessDisabledSubtitle": { "description": "Subtitle when all files access is disabled" }, - "allFilesAccessDescription": "사용자 정의 폴더에 저장할 경우에 쓰기 오류가 발생하면 이 옵션을 활성화하세요. Android 13 이상에서는 기본적으로 특정 디렉터리에 대한 액세스가 제한됩니다", + "allFilesAccessDescription": "사용자 정의 폴더에 저장할 경우에 쓰기 오류가 발생하면 이 옵션을 활성화하세요. Android 13 이상에서는 기본적으로 특정 디렉터리에 대한 접근이 제한됩니다", "@allFilesAccessDescription": { "description": "Description explaining when to enable all files access" }, @@ -2452,7 +2452,7 @@ "@allFilesAccessDeniedMessage": { "description": "Message when permission is permanently denied" }, - "allFilesAccessDisabledMessage": "모든 파일 액세스를 비활성화하였습니다. 앱은 제한된 저장소 액세스를 사용합니다", + "allFilesAccessDisabledMessage": "모든 파일 접근을 비활성화하였습니다. 앱은 제한된 저장소 접근을 사용합니다", "@allFilesAccessDisabledMessage": { "description": "Snackbar message when user disables all files access" }, @@ -4162,7 +4162,7 @@ "@downloadNetworkCompatibilityModeDisabled": { "description": "Subtitle when network compatibility mode is off" }, - "downloadAllowLocalNetwork": "로컬 네트워크 액세스 허용", + "downloadAllowLocalNetwork": "로컬 네트워크 접근 허용", "@downloadAllowLocalNetwork": { "description": "Setting title for allowing requests to private/local network targets" }, @@ -5699,7 +5699,7 @@ "@errorInvalidFolderSelected": { "description": "Error when the selected folder is invalid" }, - "errorCouldNotKeepFolderAccess": "선택한 폴더에 대한 액세스 권한을 유지할 수 없습니다", + "errorCouldNotKeepFolderAccess": "선택한 폴더에 대한 접근 권한을 유지할 수 없습니다", "@errorCouldNotKeepFolderAccess": { "description": "Error when persistent folder access cannot be saved" }, @@ -6006,6 +6006,34 @@ "@trackConvertLosslessSuffix": { "description": "Suffix used in converted lossless quality labels" }, + "trackConvertDithering": "디더링", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "리샘플러", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "없음", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "삼각형 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": "자세한 내용은 릴리스 노트를 참조하세요", "@updateSeeReleaseNotes": { "description": "Fallback changelog text when release notes cannot be parsed" @@ -6124,5 +6152,57 @@ "regionCountryXK": "코소보", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "인증 브라우저", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "인증을 기본 브라우저에서 먼저 실행합니다", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "인증을 앱 내 브라우저에서 먼저 실행합니다", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "외부", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "앱 내", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "extensionVerificationHelpTitleManual": "수동으로 인증 열기", + "@extensionVerificationHelpTitleManual": { + "description": "Dialog title when automatic browser launch for verification fails" + }, + "extensionVerificationHelpTitleWaiting": "아직 인증을 기다리는 중", + "@extensionVerificationHelpTitleWaiting": { + "description": "Dialog title when verification is taking longer than expected" + }, + "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile에서 브라우저를 자동으로 열지 못하였습니다. 아래 링크를 브라우저에서 열거나 직접 복사하세요", + "@extensionVerificationHelpMessageManual": { + "description": "Dialog message when automatic browser launch for verification fails" + }, + "extensionVerificationHelpMessageWaiting": "브라우저가 열리지 않았거나 인증을 완료한 후에도 SpotiFLAC Mobile로 돌아오지 않았다면, 아래 링크를 다시 열거나 직접 복사하세요", + "@extensionVerificationHelpMessageWaiting": { + "description": "Dialog message when verification may need manual browser help" + }, + "extensionVerificationClose": "닫기", + "@extensionVerificationClose": { + "description": "Button to dismiss the extension verification help dialog" + }, + "extensionVerificationCopyLink": "링크 복사", + "@extensionVerificationCopyLink": { + "description": "Button to copy the extension verification URL" + }, + "extensionVerificationLinkCopied": "인증 링크가 복사됨", + "@extensionVerificationLinkCopied": { + "description": "Snackbar after copying the extension verification URL" + }, + "extensionVerificationOpenBrowser": "브라우저 열기", + "@extensionVerificationOpenBrowser": { + "description": "Button to open the extension verification URL in a browser" } } \ No newline at end of file From 62b894a7ba153958eafc255a8079df06348e94c0 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:45 +0700 Subject: [PATCH 109/137] New translations app_en.arb (Dutch) [ci skip] --- lib/l10n/arb/app_nl.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_nl.arb b/lib/l10n/arb/app_nl.arb index f3d98d86..af3706f9 100644 --- a/lib/l10n/arb/app_nl.arb +++ b/lib/l10n/arb/app_nl.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From b1220b4c192f7887c4c3084a40125ca259b6e70d Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:47 +0700 Subject: [PATCH 110/137] New translations app_en.arb (Portuguese) [ci skip] --- lib/l10n/arb/app_pt_PT.arb | 80 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_pt_PT.arb b/lib/l10n/arb/app_pt_PT.arb index 98c0351b..6ffdf7d8 100644 --- a/lib/l10n/arb/app_pt_PT.arb +++ b/lib/l10n/arb/app_pt_PT.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From 7b7ee523fdf67fe873423f6a2bd9e2633c1a2d00 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:49 +0700 Subject: [PATCH 111/137] New translations app_en.arb (Russian) [ci skip] --- lib/l10n/arb/app_ru.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_ru.arb b/lib/l10n/arb/app_ru.arb index fb9888a0..c162c8bb 100644 --- a/lib/l10n/arb/app_ru.arb +++ b/lib/l10n/arb/app_ru.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From 959206b0be81c504d82f6f84ddf9d5198f0258bb Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:51 +0700 Subject: [PATCH 112/137] New translations app_en.arb (Turkish) [ci skip] --- lib/l10n/arb/app_tr.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_tr.arb b/lib/l10n/arb/app_tr.arb index 516097b6..0b308c02 100644 --- a/lib/l10n/arb/app_tr.arb +++ b/lib/l10n/arb/app_tr.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From 38815fa0aa8a898374f675cdc1ed63ad97a9dc0f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:52 +0700 Subject: [PATCH 113/137] New translations app_en.arb (Ukrainian) [ci skip] --- lib/l10n/arb/app_uk.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_uk.arb b/lib/l10n/arb/app_uk.arb index 510be971..2a6b5c25 100644 --- a/lib/l10n/arb/app_uk.arb +++ b/lib/l10n/arb/app_uk.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From 1206c57d6ca129c26a5d636893a139ba0ed4fcd7 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:54 +0700 Subject: [PATCH 114/137] New translations app_en.arb (Chinese Simplified) [ci skip] --- lib/l10n/arb/app_zh_CN.arb | 80 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_zh_CN.arb b/lib/l10n/arb/app_zh_CN.arb index 921530c0..1d6c96fd 100644 --- a/lib/l10n/arb/app_zh_CN.arb +++ b/lib/l10n/arb/app_zh_CN.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From 5fd67e53c4af166c5790c8ad687987520d0bea2e Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:56 +0700 Subject: [PATCH 115/137] New translations app_en.arb (Chinese Traditional) [ci skip] --- lib/l10n/arb/app_zh_TW.arb | 80 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_zh_TW.arb b/lib/l10n/arb/app_zh_TW.arb index 0c06cdbd..cb5a6bbe 100644 --- a/lib/l10n/arb/app_zh_TW.arb +++ b/lib/l10n/arb/app_zh_TW.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From f6ddd62b131b08574659c504b7df0f4350e71dc7 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:58 +0700 Subject: [PATCH 116/137] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 1c409e72..2d939910 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From 0c441b2c86d79a16ba3c9f0ab3d7d2b2a7446dc2 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:32:59 +0700 Subject: [PATCH 117/137] New translations app_en.arb (Hindi) [ci skip] --- lib/l10n/arb/app_hi.arb | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/l10n/arb/app_hi.arb b/lib/l10n/arb/app_hi.arb index f59ef207..1350fc51 100644 --- a/lib/l10n/arb/app_hi.arb +++ b/lib/l10n/arb/app_hi.arb @@ -6006,6 +6006,34 @@ "@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" @@ -6124,5 +6152,57 @@ "regionCountryXK": "Kosovo", "@regionCountryXK": { "description": "Country name for SongLink region picker" + }, + "extensionVerificationBrowserTitle": "Verification browser", + "@extensionVerificationBrowserTitle": { + "description": "Settings option title for extension verification browser preference" + }, + "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "@extensionVerificationBrowserSubtitleExternal": { + "description": "Subtitle when external browser is preferred for extension verification" + }, + "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "@extensionVerificationBrowserSubtitleInApp": { + "description": "Subtitle when in-app browser is preferred for extension verification" + }, + "extensionVerificationBrowserExternal": "External", + "@extensionVerificationBrowserExternal": { + "description": "Chip label for external browser verification mode" + }, + "extensionVerificationBrowserInApp": "In-app", + "@extensionVerificationBrowserInApp": { + "description": "Chip label for in-app browser verification mode" + }, + "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" } } \ No newline at end of file From 4c85a8f05edb535cba67fdc35c4aa4bb2fbec0aa Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 05:43:37 +0700 Subject: [PATCH 118/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 379c7b7e..28392f84 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -1,7 +1,7 @@ { "@@locale": "es-ES", "@@last_modified": "2026-04-28", - "appName": "SpotiFLAC Mobile", + "appName": "SpotiFLAC Móvil", "@appName": { "description": "App name - DO NOT TRANSLATE" }, @@ -174,7 +174,7 @@ "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, - "optionsSwitchBack": "Choose the default search provider to switch back from an extension", + "optionsSwitchBack": "Elija el proveedor de búsqueda por defecto para volver de una extensión", "@optionsSwitchBack": { "description": "Hint to switch back from extension search" }, @@ -190,11 +190,11 @@ "@optionsUseExtensionProviders": { "description": "Legacy setting label for extension download providers" }, - "optionsUseExtensionProvidersOn": "Extension providers are enabled", + "optionsUseExtensionProvidersOn": "Proveedores de extensiones habilitados", "@optionsUseExtensionProvidersOn": { "description": "Status when extension providers enabled" }, - "optionsUseExtensionProvidersOff": "Extension providers are required", + "optionsUseExtensionProvidersOff": "Proveedores de extensiones habilitados", "@optionsUseExtensionProvidersOff": { "description": "Legacy status when extension providers would be disabled" }, From 471b412dc5d235977e6ee1ecff7c8aa91ed443d7 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 07:02:34 +0700 Subject: [PATCH 119/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 84 +++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 28392f84..ea560643 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -226,23 +226,23 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, - "trackReplayGain": "Rescan ReplayGain", + "trackReplayGain": "Reescanear ReplayGain", "@trackReplayGain": { "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "trackReplayGainSubtitle": "Analizar el volumen y guardar las etiquetas ReplayGain", "@trackReplayGainSubtitle": { "description": "Subtitle for the rescan ReplayGain menu option" }, - "trackReplayGainScanning": "Analyzing loudness...", + "trackReplayGainScanning": "Analizando el nivel de volumen...", "@trackReplayGainScanning": { "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "trackReplayGainSuccess": "ReplayGain tags added", + "trackReplayGainSuccess": "Etiquetas ReplayGain agregadas", "@trackReplayGainSuccess": { "description": "Snackbar message after ReplayGain tags written for a single track" }, - "trackReplayGainFailed": "Failed to add ReplayGain tags", + "trackReplayGainFailed": "No se pudieron agregar las etiquetas ReplayGain", "@trackReplayGainFailed": { "description": "Snackbar message when ReplayGain scan/write fails" }, @@ -255,11 +255,11 @@ } } }, - "replayGainBatchConfirmTitle": "Add ReplayGain", + "replayGainBatchConfirmTitle": "Agregar ReplayGain", "@replayGainBatchConfirmTitle": { "description": "Title of the batch ReplayGain confirmation dialog" }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "replayGainBatchConfirmMessage": "¿Analizar el volumen y escribir las etiquetas ReplayGain en {count} pista(s)?", "@replayGainBatchConfirmMessage": { "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { @@ -268,11 +268,11 @@ } } }, - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "replayGainBatchAnalyzing": "Analizando ReplayGain...", "@replayGainBatchAnalyzing": { "description": "Progress dialog title while batch scanning ReplayGain" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainBatchSuccess": "Se agregaron las etiquetas ReplayGain a {success} de {total} pistas", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -523,11 +523,11 @@ "@aboutVersion": { "description": "Version info label" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "aboutBinimumDesc": "El creador de QQDL & HiFi API. Este proyecto ayudó a impulsar el soporte para descargas sin pérdida de calidad.", "@aboutBinimumDesc": { "description": "Credit description for binimum" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "aboutSachinsenalDesc": "El creador del proyecto HiFi original. Sentó las bases para la integración de fuentes de audio sin pérdida de calidad.", "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, @@ -772,15 +772,15 @@ "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "previewPlay": "Play preview", + "previewPlay": "Reproducir vista previa", "@previewPlay": { "description": "Tooltip for the button that plays a short track preview snippet" }, - "previewStop": "Stop preview", + "previewStop": "Detener vista previa", "@previewStop": { "description": "Tooltip for the button that stops the playing track preview snippet" }, - "previewUnavailable": "Preview unavailable", + "previewUnavailable": "Vista previa no disponible", "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, @@ -1010,7 +1010,7 @@ "@errorNoTracksFound": { "description": "Error - search returned no results" }, - "searchEmptyResultSubtitle": "Try another keyword", + "searchEmptyResultSubtitle": "Prueba con otra palabra clave", "@searchEmptyResultSubtitle": { "description": "Subtitle shown under the empty search result state on the home screen" }, @@ -1284,7 +1284,7 @@ "@providerPriorityFallbackExtensionsHint": { "description": "Hint below the extension fallback selection list" }, - "providerBuiltIn": "Legacy", + "providerBuiltIn": "Heredado", "@providerBuiltIn": { "description": "Legacy label retained for old generated localization compatibility" }, @@ -1808,11 +1808,11 @@ "@storeEmptyNoResults": { "description": "Message when search/filter returns no results" }, - "extensionDefaultProvider": "Default Search", + "extensionDefaultProvider": "Búsqueda predeterminada", "@extensionDefaultProvider": { "description": "Default search provider option" }, - "extensionDefaultProviderSubtitle": "Use the default metadata search", + "extensionDefaultProviderSubtitle": "Usar la búsqueda de metadatos predeterminada", "@extensionDefaultProviderSubtitle": { "description": "Subtitle for default provider" }, @@ -2051,7 +2051,7 @@ "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "downloadLossy320FormatDesc": "Elige el formato de salida para las descargas con pérdida de calidad a 320 kbps. Cuando sea necesario, el audio original se convertirá al formato seleccionado.", "@downloadLossy320FormatDesc": { "description": "Description in the lossy format picker" }, @@ -2107,7 +2107,7 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, - "albumFolderStructureDescription": "Choose how album folders are structured", + "albumFolderStructureDescription": "Elige cómo se estructuran las carpetas de los álbumes", "@albumFolderStructureDescription": { "description": "Album folder structure picker description" }, @@ -2576,7 +2576,7 @@ "@libraryAboutDescription": { "description": "Description of local library feature" }, - "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "libraryTracksUnit": "{count, plural, =1{pista} other{pistas}}", "@libraryTracksUnit": { "description": "Unit label for tracks count (without the number itself)", "placeholders": { @@ -2585,7 +2585,7 @@ } } }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", + "libraryFilesUnit": "{count, plural, =1{archivo} other{archivos}}", "@libraryFilesUnit": { "description": "Unit label for files count during library scanning", "placeholders": { @@ -2798,7 +2798,7 @@ "@tutorialWelcomeTip1": { "description": "Tutorial welcome tip 1" }, - "tutorialWelcomeTip2": "Get FLAC quality audio from installed download extensions", + "tutorialWelcomeTip2": "Obtén audio de calidad FLAC mediante las extensiones de descarga instaladas", "@tutorialWelcomeTip2": { "description": "Tutorial welcome tip 2" }, @@ -3312,11 +3312,11 @@ "@trackConvertFailed": { "description": "Snackbar when conversion fails" }, - "cueSplitTitle": "Split CUE Sheet", + "cueSplitTitle": "Dividir hoja CUE", "@cueSplitTitle": { "description": "Title for CUE split bottom sheet" }, - "cueSplitSubtitle": "Split CUE+FLAC into individual tracks", + "cueSplitSubtitle": "Dividir CUE + FLAC en pistas individuales", "@cueSplitSubtitle": { "description": "Subtitle for CUE split menu item" }, @@ -3347,7 +3347,7 @@ } } }, - "cueSplitConfirmTitle": "Split CUE Album", + "cueSplitConfirmTitle": "Dividir álbum CUE", "@cueSplitConfirmTitle": { "description": "CUE split confirmation dialog title" }, @@ -3375,7 +3375,7 @@ } } }, - "cueSplitSuccess": "Split into {count} tracks successfully", + "cueSplitSuccess": "Se dividió correctamente en {count} pistas", "@cueSplitSuccess": { "description": "Snackbar after successful CUE split", "placeholders": { @@ -3384,11 +3384,11 @@ } } }, - "cueSplitFailed": "CUE split failed", + "cueSplitFailed": "Fallo al dividir CUE", "@cueSplitFailed": { "description": "Snackbar when CUE split fails" }, - "cueSplitNoAudioFile": "Audio file not found for this CUE sheet", + "cueSplitNoAudioFile": "No se encontró el archivo de audio para esta hoja CUE", "@cueSplitNoAudioFile": { "description": "Error when CUE audio file is missing" }, @@ -3408,7 +3408,7 @@ "@collectionWishlist": { "description": "Custom folder for saved tracks to download later" }, - "collectionLoved": "Loved", + "collectionLoved": "Me gusta", "@collectionLoved": { "description": "Custom folder for favorite tracks" }, @@ -3440,7 +3440,7 @@ "@collectionNoPlaylistsSubtitle": { "description": "Empty state subtitle when user has no playlists" }, - "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", + "collectionPlaylistTracks": "{count, plural, =1{1 pista} other{{count} pistas}}", "@collectionPlaylistTracks": { "description": "Track count label for custom playlists", "placeholders": { @@ -3449,7 +3449,7 @@ } } }, - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", + "collectionArtistCount": "{count, plural, =1{1 artista} other{{count} artistas}}", "@collectionArtistCount": { "description": "Artist count label for favorite artists", "placeholders": { @@ -3484,7 +3484,7 @@ "@collectionPlaylistNameHint": { "description": "Hint text for playlist name input" }, - "collectionPlaylistNameRequired": "Playlist name is required", + "collectionPlaylistNameRequired": "El nombre de la lista de reproducción es obligatorio", "@collectionPlaylistNameRequired": { "description": "Validation error for empty playlist name" }, @@ -3496,7 +3496,7 @@ "@collectionDeletePlaylist": { "description": "Action to delete playlist" }, - "collectionDeletePlaylistMessage": "Delete \"{playlistName}\" and all tracks inside it?", + "collectionDeletePlaylistMessage": "¿Eliminar \"{playlistName}\" y todas las pistas que contiene?", "@collectionDeletePlaylistMessage": { "description": "Confirmation message for deleting playlist", "placeholders": { @@ -3509,7 +3509,7 @@ "@collectionPlaylistDeleted": { "description": "Snackbar after deleting playlist" }, - "collectionPlaylistRenamed": "Playlist renamed", + "collectionPlaylistRenamed": "Lista de reproducción renombrada", "@collectionPlaylistRenamed": { "description": "Snackbar after renaming playlist" }, @@ -3517,15 +3517,15 @@ "@collectionWishlistEmptyTitle": { "description": "Wishlist empty state title" }, - "collectionWishlistEmptySubtitle": "Tap + on tracks to save what you want to download later", + "collectionWishlistEmptySubtitle": "Toca el botón + en las pistas para guardar las que quieras descargar más tarde", "@collectionWishlistEmptySubtitle": { "description": "Wishlist empty state subtitle" }, - "collectionLovedEmptyTitle": "Loved folder is empty", + "collectionLovedEmptyTitle": "La carpeta «Me gusta» está vacía", "@collectionLovedEmptyTitle": { "description": "Loved empty state title" }, - "collectionLovedEmptySubtitle": "Tap love on tracks to keep your favorites", + "collectionLovedEmptySubtitle": "Toca «Me gusta» en las pistas para guardar tus favoritas.", "@collectionLovedEmptySubtitle": { "description": "Loved empty state subtitle" }, @@ -3533,7 +3533,7 @@ "@collectionFavoriteArtistsEmptyTitle": { "description": "Favorite artists empty state title" }, - "collectionFavoriteArtistsEmptySubtitle": "Tap the heart on an artist page to keep them here", + "collectionFavoriteArtistsEmptySubtitle": "Toca el corazón en la página del artista para guardarlo aquí", "@collectionFavoriteArtistsEmptySubtitle": { "description": "Favorite artists empty state subtitle" }, @@ -3541,7 +3541,7 @@ "@collectionPlaylistEmptyTitle": { "description": "Playlist empty state title" }, - "collectionPlaylistEmptySubtitle": "Long-press + on any track to add it here", + "collectionPlaylistEmptySubtitle": "Mantén presionado el botón + en cualquier pista para añadirla aquí", "@collectionPlaylistEmptySubtitle": { "description": "Playlist empty state subtitle" }, @@ -3553,7 +3553,7 @@ "@collectionRemoveFromFolder": { "description": "Tooltip for removing track from wishlist/loved folder" }, - "collectionRemoved": "\"{trackName}\" removed", + "collectionRemoved": "Se eliminó \"{trackName}\"", "@collectionRemoved": { "description": "Snackbar after removing a track from a collection", "placeholders": { @@ -3562,7 +3562,7 @@ } } }, - "collectionAddedToLoved": "\"{trackName}\" added to Loved", + "collectionAddedToLoved": "\"{trackName}\" se agregó a «Me gusta»", "@collectionAddedToLoved": { "description": "Snackbar after adding track to loved folder", "placeholders": { From 52972eefef227061d7cce24299618ae4aabad29a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 09:09:05 +0700 Subject: [PATCH 120/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 78 ++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 10fa6be3..d6c9b1ee 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -605,7 +605,7 @@ "@setupPermissionDeniedMessage": { "description": "Error when permission denied" }, - "setupPermissionRequired": "'{permissionType}' 권한 필요", + "setupPermissionRequired": "''{permissionType}'' 권한 필요", "@setupPermissionRequired": { "description": "Generic permission required title", "placeholders": { @@ -615,7 +615,7 @@ } } }, - "setupPermissionRequiredMessage": "최상의 사용 경험을 위해 '{permissionType}' 권한이 필요합니다. 설정에서 나중에 변경할 수 있습니다", + "setupPermissionRequiredMessage": "최상의 사용 경험을 위해 ''{permissionType}'' 권한이 필요합니다. 설정에서 나중에 변경할 수 있습니다", "@setupPermissionRequiredMessage": { "description": "Generic permission required message", "placeholders": { @@ -820,7 +820,7 @@ "@dialogUninstallExtension": { "description": "Dialog title - uninstall extension" }, - "dialogUninstallExtensionMessage": "'{extensionName}'을 제거하시겠습니까?", + "dialogUninstallExtensionMessage": "''{extensionName}''을 제거하시겠습니까?", "@dialogUninstallExtensionMessage": { "description": "Dialog message - uninstall specific extension", "placeholders": { @@ -872,7 +872,7 @@ } } }, - "snackbarAddedToQueue": "'{trackName}'가 다운로드 목록에 추가됨", + "snackbarAddedToQueue": "''{trackName}''가 다운로드 목록에 추가됨", "@snackbarAddedToQueue": { "description": "Snackbar - track added to download queue", "placeholders": { @@ -890,7 +890,7 @@ } } }, - "snackbarAlreadyDownloaded": "'{trackName}'은 이미 다운로드되어 있음", + "snackbarAlreadyDownloaded": "''{trackName}''은 이미 다운로드되어 있음", "@snackbarAlreadyDownloaded": { "description": "Snackbar - track already exists", "placeholders": { @@ -899,7 +899,7 @@ } } }, - "snackbarAlreadyInLibrary": "라이브러리에 '{trackName}'이 이미 존재함", + "snackbarAlreadyInLibrary": "라이브러리에 ''{trackName}''이 이미 존재함", "@snackbarAlreadyInLibrary": { "description": "Snackbar - track already exists in local library", "placeholders": { @@ -972,7 +972,7 @@ "@snackbarMetadataProviderSaved": { "description": "Snackbar - metadata provider order saved" }, - "snackbarExtensionInstalled": "'{extensionName}'이 설치됨", + "snackbarExtensionInstalled": "''{extensionName}''이 설치됨", "@snackbarExtensionInstalled": { "description": "Snackbar - extension installed successfully", "placeholders": { @@ -981,7 +981,7 @@ } } }, - "snackbarExtensionUpdated": "'{extensionName}'이 설치됨", + "snackbarExtensionUpdated": "''{extensionName}''이 설치됨", "@snackbarExtensionUpdated": { "description": "Snackbar - extension updated successfully", "placeholders": { @@ -1026,7 +1026,7 @@ "@errorUrlFetchFailed": { "description": "Error message - generic URL fetch failure" }, - "errorMissingExtensionSource": "'{item}'을 불러올 수 없음: 확장 소스가 누락됨", + "errorMissingExtensionSource": "''{item}''을 불러올 수 없음: 확장 소스가 누락됨", "@errorMissingExtensionSource": { "description": "Error - extension source not available", "placeholders": { @@ -3043,7 +3043,7 @@ "@cacheClearConfirmTitle": { "description": "Dialog title before clearing one cache category" }, - "cacheClearConfirmMessage": "'{target}'의 캐시된 데이터를 지웁니다. 다운로드한 음악 파일은 삭제되지 않습니다", + "cacheClearConfirmMessage": "''{target}''의 캐시된 데이터를 지웁니다. 다운로드한 음악 파일은 삭제되지 않습니다", "@cacheClearConfirmMessage": { "description": "Dialog message before clearing selected cache", "placeholders": { @@ -3152,7 +3152,7 @@ "@trackEditMetadata": { "description": "Menu action - edit embedded metadata" }, - "trackCoverSaved": "표지 이미지가 '{fileName}'에 저장됨", + "trackCoverSaved": "표지 이미지가 ''{fileName}''에 저장됨", "@trackCoverSaved": { "description": "Snackbar after cover art saved", "placeholders": { @@ -3165,7 +3165,7 @@ "@trackCoverNoSource": { "description": "Snackbar when no cover art URL or embedded cover" }, - "trackLyricsSaved": "가사가 '{fileName}'에 저장됨", + "trackLyricsSaved": "가사가 ''{fileName}''에 저장됨", "@trackLyricsSaved": { "description": "Snackbar after lyrics saved", "placeholders": { @@ -3351,7 +3351,7 @@ "@cueSplitConfirmTitle": { "description": "CUE split confirmation dialog title" }, - "cueSplitConfirmMessage": "'{album}'을 {count} 개의 개별 FLAC 파일로 분할하시겠습니까?\n\n파일은 동일한 디렉토리에 저장됩니다", + "cueSplitConfirmMessage": "''{album}''을 {count} 개의 개별 FLAC 파일로 분할하시겠습니까?\n\n파일은 동일한 디렉토리에 저장됩니다", "@cueSplitConfirmMessage": { "description": "CUE split confirmation dialog message", "placeholders": { @@ -3458,7 +3458,7 @@ } } }, - "collectionAddedToPlaylist": "'{playlistName}'에 추가됨", + "collectionAddedToPlaylist": "''{playlistName}''에 추가됨", "@collectionAddedToPlaylist": { "description": "Snackbar after adding track to playlist", "placeholders": { @@ -3467,7 +3467,7 @@ } } }, - "collectionAlreadyInPlaylist": "이미 '{playlistName}'에 있음", + "collectionAlreadyInPlaylist": "이미 ''{playlistName}''에 있음", "@collectionAlreadyInPlaylist": { "description": "Snackbar when track already exists in playlist", "placeholders": { @@ -3496,7 +3496,7 @@ "@collectionDeletePlaylist": { "description": "Action to delete playlist" }, - "collectionDeletePlaylistMessage": "'{playlistName}'과 그 안에 있는 모든 트랙을 삭제하시겠습니까?", + "collectionDeletePlaylistMessage": "''{playlistName}''과 그 안에 있는 모든 트랙을 삭제하시겠습니까?", "@collectionDeletePlaylistMessage": { "description": "Confirmation message for deleting playlist", "placeholders": { @@ -3553,7 +3553,7 @@ "@collectionRemoveFromFolder": { "description": "Tooltip for removing track from wishlist/loved folder" }, - "collectionRemoved": "'{trackName}' 제거 완료", + "collectionRemoved": "''{trackName}'' 제거 완료", "@collectionRemoved": { "description": "Snackbar after removing a track from a collection", "placeholders": { @@ -3562,7 +3562,7 @@ } } }, - "collectionAddedToLoved": "'{trackName}'이 '좋아요 표시한 트랙'에 추가됨", + "collectionAddedToLoved": "''{trackName}''이 '좋아요 표시한 트랙'에 추가됨", "@collectionAddedToLoved": { "description": "Snackbar after adding track to loved folder", "placeholders": { @@ -3571,7 +3571,7 @@ } } }, - "collectionRemovedFromLoved": "'{trackName}'이 '좋아요 표시한 트랙'에서 제거됨", + "collectionRemovedFromLoved": "''{trackName}''이 '좋아요 표시한 트랙'에서 제거됨", "@collectionRemovedFromLoved": { "description": "Snackbar after removing track from loved folder", "placeholders": { @@ -3580,7 +3580,7 @@ } } }, - "collectionAddedToWishlist": "'{trackName}'가 위시리스트에 추가됨", + "collectionAddedToWishlist": "''{trackName}''가 위시리스트에 추가됨", "@collectionAddedToWishlist": { "description": "Snackbar after adding track to wishlist", "placeholders": { @@ -3589,7 +3589,7 @@ } } }, - "collectionRemovedFromWishlist": "'{trackName}'가 위시리스트에서 제거됨", + "collectionRemovedFromWishlist": "''{trackName}''가 위시리스트에서 제거됨", "@collectionRemovedFromWishlist": { "description": "Snackbar after removing track from wishlist", "placeholders": { @@ -3598,7 +3598,7 @@ } } }, - "collectionAddedToFavoriteArtists": "'{artistName}'가 좋아하는 아티스트에 추가됨", + "collectionAddedToFavoriteArtists": "''{artistName}''가 좋아하는 아티스트에 추가됨", "@collectionAddedToFavoriteArtists": { "description": "Snackbar after adding artist to favorite artists", "placeholders": { @@ -3607,7 +3607,7 @@ } } }, - "collectionRemovedFromFavoriteArtists": "'{artistName}'가 좋아하는 아티스트에서 제거됨", + "collectionRemovedFromFavoriteArtists": "''{artistName}''가 좋아하는 아티스트에서 제거됨", "@collectionRemovedFromFavoriteArtists": { "description": "Snackbar after removing artist from favorite artists", "placeholders": { @@ -4110,7 +4110,7 @@ "@storageModeSafSubtitle": { "description": "Subtitle for SAF storage mode" }, - "downloadFilenameDescription": "'{artist}', '{title}', '{album}', '{track}', '{year}', '{date}', '{disc}'를 자리표시자로 사용하세요", + "downloadFilenameDescription": "''{artist}'', ''{title}'', ''{album}'', ''{track}'', ''{year}'', ''{date}'', ''{disc}''를 자리표시자로 사용하세요", "@downloadFilenameDescription": { "description": "Description shown in filename format editor" }, @@ -4588,7 +4588,7 @@ "@audioAnalysisRescanning": { "description": "Loading text while audio is being re-analyzed after an explicit refresh" }, - "extensionsSearchWith": "'{providerName}'으로 검색", + "extensionsSearchWith": "{providerName}으로 검색", "@extensionsSearchWith": { "description": "Extensions page - subtitle for default metadata search provider option", "placeholders": { @@ -4646,7 +4646,7 @@ "@cancelDownloadTitle": { "description": "Dialog title when confirming cancellation of an active download" }, - "cancelDownloadContent": "'{trackName}'에 대한 활성 다운로드를 취소합니다", + "cancelDownloadContent": "''{trackName}''에 대한 활성 다운로드를 취소합니다", "@cancelDownloadContent": { "description": "Dialog body when confirming cancellation of an active download", "placeholders": { @@ -4704,7 +4704,7 @@ "@notifChannelLibraryScanDesc": { "description": "Android notification channel description for library scan" }, - "notifDownloadingTrack": "'{trackName}'를 다운로드하는 중", + "notifDownloadingTrack": "''{trackName}''를 다운로드하는 중", "@notifDownloadingTrack": { "description": "Notification title while downloading a track", "placeholders": { @@ -4713,7 +4713,7 @@ } } }, - "notifFinalizingTrack": "'{trackName}'를 마무리하는 중", + "notifFinalizingTrack": "''{trackName}''를 마무리하는 중", "@notifFinalizingTrack": { "description": "Notification title while finalizing (embedding metadata) a track", "placeholders": { @@ -4935,7 +4935,7 @@ "@homeSearchHintDefault": { "description": "Default placeholder for the main search field on Home" }, - "homeSearchHintProvider": "'{providerName}'으로 검색...", + "homeSearchHintProvider": "{providerName}으로 검색...", "@homeSearchHintProvider": { "description": "Placeholder for the main search field when a provider is selected", "placeholders": { @@ -5158,7 +5158,7 @@ "@setupChangeFolderTooltip": { "description": "Tooltip for editing the selected download folder" }, - "a11yOpenTrackByArtist": "'{artistName}'의 트랙 '{trackName}' 열기", + "a11yOpenTrackByArtist": "''{artistName}''의 트랙 ''{trackName}'' 열기", "@a11yOpenTrackByArtist": { "description": "Accessibility label for opening a track item", "placeholders": { @@ -5194,7 +5194,7 @@ } } }, - "a11yOpenAlbumByArtistTrackCount": "'{artistName}'의 앨범 '{albumName}' 열기 ({trackCount} 번째 곡)", + "a11yOpenAlbumByArtistTrackCount": "''{artistName}''의 앨범 ''{albumName}'' 열기 ({trackCount} 번째 곡)", "@a11yOpenAlbumByArtistTrackCount": { "description": "Accessibility label for opening an album item with track count", "placeholders": { @@ -5209,7 +5209,7 @@ } } }, - "a11yTrackByArtist": "'{artistName}'의 '{trackName}'", + "a11yTrackByArtist": "''{artistName}''의 ''{trackName}''", "@a11yTrackByArtist": { "description": "Accessibility label for a queue or list track item", "placeholders": { @@ -5221,7 +5221,7 @@ } } }, - "a11ySelectAlbum": "앨범 '{albumName}' 선택", + "a11ySelectAlbum": "앨범 ''{albumName}'' 선택", "@a11ySelectAlbum": { "description": "Accessibility label for selecting an album", "placeholders": { @@ -5230,7 +5230,7 @@ } } }, - "a11yOpenAlbum": "앨범 '{albumName}' 열기", + "a11yOpenAlbum": "앨범 ''{albumName}'' 열기", "@a11yOpenAlbum": { "description": "Accessibility label for opening an album", "placeholders": { @@ -5381,7 +5381,7 @@ } } }, - "collectionAddedTracksToPlaylist": "\"{playlistName}\"에 {count} 개의 {count, plural, =1{트랙} other{트랙}}이 추가됨", + "collectionAddedTracksToPlaylist": "''{playlistName}''에 {count} 개의 {count, plural, =1{트랙} other{트랙}}이 추가됨", "@collectionAddedTracksToPlaylist": { "description": "Snackbar after adding multiple tracks to a playlist", "placeholders": { @@ -5393,7 +5393,7 @@ } } }, - "collectionAddedTracksToPlaylistWithExisting": "{count} 개의 {count, plural, =1{트랙} other{트랙}}이 \"{playlistName}\"에 추가됨 ({alreadyCount} 개의 트랙은 이미 재생목록에 있음)", + "collectionAddedTracksToPlaylistWithExisting": "{count} 개의 {count, plural, =1{트랙} other{트랙}}이 ''{playlistName}''에 추가됨 ({alreadyCount} 개의 트랙은 이미 재생목록에 있음)", "@collectionAddedTracksToPlaylistWithExisting": { "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { @@ -5462,7 +5462,7 @@ "@a11yDeselectTrack": { "description": "Accessibility label for deselecting a track" }, - "a11yPlayTrackByArtist": "'{artistName}'의 '{trackName}' 재생", + "a11yPlayTrackByArtist": "''{artistName}''의 ''{trackName}'' 재생", "@a11yPlayTrackByArtist": { "description": "Accessibility label for playing a local library track", "placeholders": { @@ -6050,7 +6050,7 @@ "@trackAddToQueue": { "description": "Menu action to add a track to the playback queue" }, - "snackbarExtensionInstalledEnable": "'{extensionName}'이 설치됨. '설정 > 확장 프로그램'에서 활성화하세요", + "snackbarExtensionInstalledEnable": "''{extensionName}''이 설치됨. '설정 > 확장 프로그램'에서 활성화하세요", "@snackbarExtensionInstalledEnable": { "description": "Snackbar after installing an extension from the repo tab", "placeholders": { @@ -6059,7 +6059,7 @@ } } }, - "snackbarExtensionUpdatedVersion": "'{extensionName}'이 v{version}으로 업데이트됨", + "snackbarExtensionUpdatedVersion": "''{extensionName}''이 v{version}으로 업데이트됨", "@snackbarExtensionUpdatedVersion": { "description": "Snackbar after updating an extension from the repo tab", "placeholders": { From 4d251a2a0d3cd25ac604115a001c10c54ab32251 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 10:04:54 +0700 Subject: [PATCH 121/137] 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 d6c9b1ee..5621b4dc 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -5393,7 +5393,7 @@ } } }, - "collectionAddedTracksToPlaylistWithExisting": "{count} 개의 {count, plural, =1{트랙} other{트랙}}이 ''{playlistName}''에 추가됨 ({alreadyCount} 개의 트랙은 이미 재생목록에 있음)", + "collectionAddedTracksToPlaylistWithExisting": "''{playlistName}''에 {count} 개의 {count, plural, =1{트랙} other{트랙}}이 추가됨 ({alreadyCount} 개의 트랙은 이미 재생목록에 있음)", "@collectionAddedTracksToPlaylistWithExisting": { "description": "Snackbar after adding multiple tracks to a playlist when some were already present", "placeholders": { From 24408e0cba21c66851778651b2b1197c1f220d99 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 12:18:01 +0700 Subject: [PATCH 122/137] 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 5621b4dc..2d78a747 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -2131,7 +2131,7 @@ "@downloadSelectQuality": { "description": "Dialog title - choose audio quality" }, - "downloadFrom": "다운로드 대상", + "downloadFrom": "다운로드 출처", "@downloadFrom": { "description": "Label - download source" }, @@ -2627,7 +2627,7 @@ } } }, - "libraryInLibrary": "라이브러리에 있음", + "libraryInLibrary": "In Library", "@libraryInLibrary": { "description": "Badge shown on tracks that exist in local library" }, From 9dedb66800386ea6bbfa067cb9046d64ba812154 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 14:36:38 +0700 Subject: [PATCH 123/137] New translations app_en.arb (French) [ci skip] --- lib/l10n/arb/app_fr.arb | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/l10n/arb/app_fr.arb b/lib/l10n/arb/app_fr.arb index 5e0caec0..a39b9bd2 100644 --- a/lib/l10n/arb/app_fr.arb +++ b/lib/l10n/arb/app_fr.arb @@ -6006,15 +6006,15 @@ "@trackConvertLosslessSuffix": { "description": "Suffix used in converted lossless quality labels" }, - "trackConvertDithering": "Dithering", + "trackConvertDithering": "Hésitation", "@trackConvertDithering": { "description": "Section label for lossless conversion dithering options" }, - "trackConvertResampler": "Resampler", + "trackConvertResampler": "Rééchantillonneur", "@trackConvertResampler": { "description": "Section label for lossless conversion resampler options" }, - "trackConvertDitherNone": "None", + "trackConvertDitherNone": "Aucun", "@trackConvertDitherNone": { "description": "Lossless conversion dither option with no dithering applied" }, @@ -6022,7 +6022,7 @@ "@trackConvertDitherTriangular": { "description": "Lossless conversion triangular probability density function dither option" }, - "trackConvertDitherTriangularHp": "Triangular HP", + "trackConvertDitherTriangularHp": "HP triangulaire", "@trackConvertDitherTriangularHp": { "description": "Lossless conversion high-pass triangular dither option" }, @@ -6153,55 +6153,55 @@ "@regionCountryXK": { "description": "Country name for SongLink region picker" }, - "extensionVerificationBrowserTitle": "Verification browser", + "extensionVerificationBrowserTitle": "Navigateur de vérification", "@extensionVerificationBrowserTitle": { "description": "Settings option title for extension verification browser preference" }, - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", + "extensionVerificationBrowserSubtitleExternal": "Ouvrez d'abord les défis dans le navigateur par défaut", "@extensionVerificationBrowserSubtitleExternal": { "description": "Subtitle when external browser is preferred for extension verification" }, - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", + "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" }, - "extensionVerificationBrowserExternal": "External", + "extensionVerificationBrowserExternal": "Externe", "@extensionVerificationBrowserExternal": { "description": "Chip label for external browser verification mode" }, - "extensionVerificationBrowserInApp": "In-app", + "extensionVerificationBrowserInApp": "Dans l'application", "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, - "extensionVerificationHelpTitleManual": "Open verification manually", + "extensionVerificationHelpTitleManual": "Lancer la vérification manuellement", "@extensionVerificationHelpTitleManual": { "description": "Dialog title when automatic browser launch for verification fails" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", + "extensionVerificationHelpTitleWaiting": "La vérification est toujours en attente", "@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 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" }, - "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": "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" }, - "extensionVerificationClose": "Close", + "extensionVerificationClose": "Fermer", "@extensionVerificationClose": { "description": "Button to dismiss the extension verification help dialog" }, - "extensionVerificationCopyLink": "Copy link", + "extensionVerificationCopyLink": "Copier le lien", "@extensionVerificationCopyLink": { "description": "Button to copy the extension verification URL" }, - "extensionVerificationLinkCopied": "Verification link copied", + "extensionVerificationLinkCopied": "Lien de vérification copié", "@extensionVerificationLinkCopied": { "description": "Snackbar after copying the extension verification URL" }, - "extensionVerificationOpenBrowser": "Open browser", + "extensionVerificationOpenBrowser": "Ouvrir le navigateur", "@extensionVerificationOpenBrowser": { "description": "Button to open the extension verification URL in a browser" } From 02213d1edf8f5db4fe5399c8c37d99fd114294c3 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Thu, 2 Jul 2026 21:58:18 +0700 Subject: [PATCH 124/137] 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 2d78a747..7c7077f8 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -2627,7 +2627,7 @@ } } }, - "libraryInLibrary": "In Library", + "libraryInLibrary": "in 라이브러리", "@libraryInLibrary": { "description": "Badge shown on tracks that exist in local library" }, From 89de08e08c7e962de3695582df745e29e309fbf7 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 3 Jul 2026 00:04:38 +0700 Subject: [PATCH 125/137] 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 7c7077f8..1fc3087b 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -555,7 +555,7 @@ "@artistPopular": { "description": "Section header for popular/top tracks" }, - "artistMonthlyListeners": "월간 청취자: {count}", + "artistMonthlyListeners": "월별 청취자: {count}", "@artistMonthlyListeners": { "description": "Monthly listener count display", "placeholders": { From 7d843ca02ad06ff47e4d67d64e646b9eab041670 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 3 Jul 2026 01:58:22 +0700 Subject: [PATCH 126/137] New translations app_en.arb (Indonesian) [ci skip] --- lib/l10n/arb/app_id.arb | 144 ++++++++++++++++++++-------------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index 2d939910..cc025719 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 Track, Album, Playlist, Artis", + "homeSupports": "Mendukung: URL Lagu, Album, Daftar Putar, dan Artis", "@homeSupports": { "description": "Info text about supported URL types" }, @@ -226,23 +226,23 @@ "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, - "trackReplayGain": "Rescan ReplayGain", + "trackReplayGain": "Pindai ulang ReplayGain", "@trackReplayGain": { "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "trackReplayGainSubtitle": "Analisis kenyaringan dan tulis tag ReplayGain", "@trackReplayGainSubtitle": { "description": "Subtitle for the rescan ReplayGain menu option" }, - "trackReplayGainScanning": "Analyzing loudness...", + "trackReplayGainScanning": "Menganalisis kenyaringan...", "@trackReplayGainScanning": { "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "trackReplayGainSuccess": "ReplayGain tags added", + "trackReplayGainSuccess": "Tag ReplayGain ditambahkan", "@trackReplayGainSuccess": { "description": "Snackbar message after ReplayGain tags written for a single track" }, - "trackReplayGainFailed": "Failed to add ReplayGain tags", + "trackReplayGainFailed": "Gagal menambahkan tag ReplayGain", "@trackReplayGainFailed": { "description": "Snackbar message when ReplayGain scan/write fails" }, @@ -255,11 +255,11 @@ } } }, - "replayGainBatchConfirmTitle": "Add ReplayGain", + "replayGainBatchConfirmTitle": "Tambah ReplayGain", "@replayGainBatchConfirmTitle": { "description": "Title of the batch ReplayGain confirmation dialog" }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "replayGainBatchConfirmMessage": "Analisis kenyaringan dan tulis tag ReplayGain ke {count} trek?", "@replayGainBatchConfirmMessage": { "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { @@ -268,11 +268,11 @@ } } }, - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "replayGainBatchAnalyzing": "Menganalisis ReplayGain...", "@replayGainBatchAnalyzing": { "description": "Progress dialog title while batch scanning ReplayGain" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainBatchSuccess": "ReplayGain ditambahkan ke {success} dari {total} trek", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -308,11 +308,11 @@ "@optionsArtistTagModeSplitVorbisSubtitle": { "description": "Subtitle for split Vorbis artist tag mode" }, - "optionsExtensionStore": "Extension Repo", + "optionsExtensionStore": "Repositori Ekstensi", "@optionsExtensionStore": { "description": "Show/hide store tab" }, - "optionsExtensionStoreSubtitle": "Show Repo tab in navigation", + "optionsExtensionStoreSubtitle": "Tampilkan tab Repo di navigasi", "@optionsExtensionStoreSubtitle": { "description": "Subtitle for extension store toggle" }, @@ -415,7 +415,7 @@ "@extensionsUninstall": { "description": "Uninstall extension button" }, - "storeTitle": "Extension Repo", + "storeTitle": "Repositori Ekstensi", "@storeTitle": { "description": "Store screen title" }, @@ -447,7 +447,7 @@ "@aboutMobileDeveloper": { "description": "Role description for mobile dev" }, - "aboutOriginalCreator": "Pembuat SpotiFLAC asli", + "aboutOriginalCreator": "Pencipta SpotiFLAC asli", "@aboutOriginalCreator": { "description": "Role description for original creator" }, @@ -475,7 +475,7 @@ "@aboutPCSource": { "description": "Link to PC GitHub repo" }, - "aboutKeepAndroidOpen": "Keep Android Open", + "aboutKeepAndroidOpen": "Biarkan Android tetap terbuka", "@aboutKeepAndroidOpen": { "description": "Link to Keep Android Open campaign website" }, @@ -523,11 +523,11 @@ "@aboutVersion": { "description": "Version info label" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "aboutBinimumDesc": "Pencipta QQDL & HiFi API. Proyek ini membantu membentuk dukungan unduhan lossless.", "@aboutBinimumDesc": { "description": "Credit description for binimum" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "aboutSachinsenalDesc": "Pencipta proyek HiFi asli. Sebuah fondasi untuk integrasi sumber lossless.", "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, @@ -535,7 +535,7 @@ "@aboutSjdonadoDesc": { "description": "Credit description for sjdonado" }, - "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", + "aboutAppDescription": "Cari metadata musik, kelola ekstensi, dan atur perpustakaan Anda.", "@aboutAppDescription": { "description": "App description in header card" }, @@ -732,11 +732,11 @@ "@setupLanguageTitle": { "description": "Title for the language selection step in setup" }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "setupLanguageDescription": "Pilih bahasa pilihan Anda untuk aplikasi ini. Anda dapat mengubahnya nanti di Pengaturan.", "@setupLanguageDescription": { "description": "Description for the language selection step in setup" }, - "setupLanguageSystemDefault": "System Default", + "setupLanguageSystemDefault": "Bawaan Sistem", "@setupLanguageSystemDefault": { "description": "Option to use the system language" }, @@ -768,19 +768,19 @@ "@dialogImport": { "description": "Dialog button - import data" }, - "dialogDownload": "Download", + "dialogDownload": "Unduh", "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "previewPlay": "Play preview", + "previewPlay": "Putar pratinjau", "@previewPlay": { "description": "Tooltip for the button that plays a short track preview snippet" }, - "previewStop": "Stop preview", + "previewStop": "Hentikan pratinjau", "@previewStop": { "description": "Tooltip for the button that stops the playing track preview snippet" }, - "previewUnavailable": "Preview unavailable", + "previewUnavailable": "Pratinjau tidak tersedia", "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, @@ -1010,7 +1010,7 @@ "@errorNoTracksFound": { "description": "Error - search returned no results" }, - "searchEmptyResultSubtitle": "Try another keyword", + "searchEmptyResultSubtitle": "Coba kata kunci lain", "@searchEmptyResultSubtitle": { "description": "Subtitle shown under the empty search result state on the home screen" }, @@ -1112,7 +1112,7 @@ "@searchPlaylists": { "description": "Search result category - playlists" }, - "searchSortTitle": "Sort Results", + "searchSortTitle": "Urutkan hasil", "@searchSortTitle": { "description": "Bottom sheet title for search sort options" }, @@ -1120,35 +1120,35 @@ "@searchSortDefault": { "description": "Sort option - default API order" }, - "searchSortTitleAZ": "Title (A-Z)", + "searchSortTitleAZ": "Judul (A-Z)", "@searchSortTitleAZ": { "description": "Sort option - title ascending" }, - "searchSortTitleZA": "Title (Z-A)", + "searchSortTitleZA": "Judul (Z-A)", "@searchSortTitleZA": { "description": "Sort option - title descending" }, - "searchSortArtistAZ": "Artist (A-Z)", + "searchSortArtistAZ": "Artis (A-Z)", "@searchSortArtistAZ": { "description": "Sort option - artist ascending" }, - "searchSortArtistZA": "Artist (Z-A)", + "searchSortArtistZA": "Artis (Z-A)", "@searchSortArtistZA": { "description": "Sort option - artist descending" }, - "searchSortDurationShort": "Duration (Shortest)", + "searchSortDurationShort": "Durasi (Terpendek)", "@searchSortDurationShort": { "description": "Sort option - shortest duration first" }, - "searchSortDurationLong": "Duration (Longest)", + "searchSortDurationLong": "Durasi (Terpanjang)", "@searchSortDurationLong": { "description": "Sort option - longest duration first" }, - "searchSortDateOldest": "Release Date (Oldest)", + "searchSortDateOldest": "Tanggal rilis (Terlama)", "@searchSortDateOldest": { "description": "Sort option - oldest release first" }, - "searchSortDateNewest": "Release Date (Newest)", + "searchSortDateNewest": "Tanggal rilis (Terbaru)", "@searchSortDateNewest": { "description": "Sort option - newest release first" }, @@ -1248,7 +1248,7 @@ "@updateDownloading": { "description": "Update status - downloading" }, - "updateWhatsNew": "Yang Baru", + "updateWhatsNew": "Apa yang baru", "@updateWhatsNew": { "description": "Changelog section title" }, @@ -1272,19 +1272,19 @@ "@providerPriorityInfo": { "description": "Info tip about fallback behavior" }, - "providerPriorityFallbackExtensionsTitle": "Extension Fallback", + "providerPriorityFallbackExtensionsTitle": "Ekstensi Cadangan", "@providerPriorityFallbackExtensionsTitle": { "description": "Section title for choosing which download extensions can be used as fallback providers" }, - "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", + "providerPriorityFallbackExtensionsDescription": "Pilih ekstensi unduhan terpasang mana yang dapat digunakan selama fallback otomatis.", "@providerPriorityFallbackExtensionsDescription": { "description": "Section description for extension fallback selection" }, - "providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.", + "providerPriorityFallbackExtensionsHint": "Hanya ekstensi yang diaktifkan dengan kemampuan penyedia unduhan yang tercantum di sini.", "@providerPriorityFallbackExtensionsHint": { "description": "Hint below the extension fallback selection list" }, - "providerBuiltIn": "Legacy", + "providerBuiltIn": "Warisan", "@providerBuiltIn": { "description": "Legacy label retained for old generated localization compatibility" }, @@ -1506,11 +1506,11 @@ "@settingsAppearanceSubtitle": { "description": "Appearance settings description" }, - "settingsDownloadSubtitle": "Service, quality, fallback", + "settingsDownloadSubtitle": "Layanan, kualitas, cadangan", "@settingsDownloadSubtitle": { "description": "Download settings description" }, - "settingsOptionsSubtitle": "Fallback, metadata, lyrics, cover art", + "settingsOptionsSubtitle": "Cadangan, metadata, lirik, sampul album", "@settingsOptionsSubtitle": { "description": "Options settings description" }, @@ -1624,7 +1624,7 @@ "@trackGenre": { "description": "Metadata label - music genre" }, - "trackLabel": "Lebel", + "trackLabel": "Label", "@trackLabel": { "description": "Metadata label - record label" }, @@ -1640,7 +1640,7 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, - "trackLyricsSource": "Source: {source}", + "trackLyricsSource": "Sumber: {source}", "@trackLyricsSource": { "description": "Label showing the lyrics source/provider", "placeholders": { @@ -1653,15 +1653,15 @@ "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" }, - "trackLyricsNotInFile": "No lyrics found in this file", + "trackLyricsNotInFile": "Tidak ditemukan lirik dalam file ini", "@trackLyricsNotInFile": { "description": "Message when no embedded lyrics in audio file" }, - "trackFetchOnlineLyrics": "Fetch from Online", + "trackFetchOnlineLyrics": "Ambil dari Online", "@trackFetchOnlineLyrics": { "description": "Action - fetch lyrics from online providers" }, - "trackLyricsTimeout": "Permintaan timeout. Coba lagi nanti.", + "trackLyricsTimeout": "Permintaan habis waktu. Coba lagi nanti.", "@trackLyricsTimeout": { "description": "Message when lyrics request times out" }, @@ -1756,15 +1756,15 @@ "@storeClearFilters": { "description": "Button to clear all filters" }, - "storeAddRepoTitle": "Add Extension Repository", + "storeAddRepoTitle": "Tambahkan Repositori Ekstensi", "@storeAddRepoTitle": { "description": "Store setup screen - heading when no repo is configured" }, - "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", + "storeAddRepoDescription": "Masukkan URL repositori GitHub yang berisi file registry.json untuk menelusuri dan memasang ekstensi.", "@storeAddRepoDescription": { "description": "Store setup screen - explanatory text" }, - "storeRepoUrlLabel": "Repository URL", + "storeRepoUrlLabel": "Tautan Repositori", "@storeRepoUrlLabel": { "description": "Label for the repository URL input field" }, @@ -1772,47 +1772,47 @@ "@storeRepoUrlHint": { "description": "Hint/placeholder for the repository URL input field" }, - "storeRepoUrlHelper": "e.g. https://github.com/user/extensions-repo", + "storeRepoUrlHelper": "misalnya https://github.com/user/extensions-repo", "@storeRepoUrlHelper": { "description": "Helper text below the repository URL input field" }, - "storeAddRepoButton": "Add Repository", + "storeAddRepoButton": "Tambahkan Repositori", "@storeAddRepoButton": { "description": "Button to submit a new repository URL" }, - "storeChangeRepoTooltip": "Change repository", + "storeChangeRepoTooltip": "Ubah repositori", "@storeChangeRepoTooltip": { "description": "Tooltip for the change-repository icon button in the app bar" }, - "storeRepoDialogTitle": "Extension Repository", + "storeRepoDialogTitle": "Repositori Ekstensi", "@storeRepoDialogTitle": { "description": "Title of the change/remove repository dialog" }, - "storeRepoDialogCurrent": "Current repository:", + "storeRepoDialogCurrent": "Repositori saat ini:", "@storeRepoDialogCurrent": { "description": "Label shown above the current repository URL in the dialog" }, - "storeNewRepoUrlLabel": "New Repository URL", + "storeNewRepoUrlLabel": "URL Repositori Baru", "@storeNewRepoUrlLabel": { "description": "Label for the new repository URL field inside the dialog" }, - "storeLoadError": "Failed to load repository", + "storeLoadError": "Gagal memuat repositori", "@storeLoadError": { "description": "Error heading when the store cannot be loaded" }, - "storeEmptyNoExtensions": "No extensions available", + "storeEmptyNoExtensions": "Tidak ada ekstensi yang tersedia", "@storeEmptyNoExtensions": { "description": "Message when store has no extensions" }, - "storeEmptyNoResults": "No extensions found", + "storeEmptyNoResults": "Tidak ada ekstensi ditemukan", "@storeEmptyNoResults": { "description": "Message when search/filter returns no results" }, - "extensionDefaultProvider": "Default Search", + "extensionDefaultProvider": "Pencarian default", "@extensionDefaultProvider": { "description": "Default search provider option" }, - "extensionDefaultProviderSubtitle": "Use the default metadata search", + "extensionDefaultProviderSubtitle": "Gunakan pencarian metadata default", "@extensionDefaultProviderSubtitle": { "description": "Subtitle for default provider" }, @@ -1939,7 +1939,7 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "extensionsInstalledCount": "{count} extensions installed successfully", + "extensionsInstalledCount": "{count} ekstensi berhasil terpasang", "@extensionsInstalledCount": { "description": "Success message after installing multiple extensions", "placeholders": { @@ -1949,7 +1949,7 @@ } } }, - "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", + "extensionsInstallPartialSuccess": "Ekstensi yang terpasang berjumlah {installed} dari {attempted}", "@extensionsInstallPartialSuccess": { "description": "Message when installing multiple extensions partially succeeds", "placeholders": { @@ -1971,11 +1971,11 @@ "@extensionsDownloadPrioritySubtitle": { "description": "Subtitle for download priority" }, - "extensionsFallbackTitle": "Fallback Extensions", + "extensionsFallbackTitle": "Ekstensi Cadangan", "@extensionsFallbackTitle": { "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", + "extensionsFallbackSubtitle": "Pilih ekstensi unduhan terpasang mana yang dapat digunakan sebagai cadangan", "@extensionsFallbackSubtitle": { "description": "Subtitle for download fallback extensions menu" }, @@ -2043,15 +2043,15 @@ "@downloadLossy320": { "description": "Quality option label for lossy 320kbps" }, - "downloadLossyFormat": "Lossy Format", + "downloadLossyFormat": "Format Lossy", "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "downloadLossy320Format": "Lossy 320kbps Format", + "downloadLossy320Format": "Format Lossy 320kbps", "@downloadLossy320Format": { "description": "Title of the lossy format picker bottom sheet" }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", + "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" }, @@ -2059,7 +2059,7 @@ "@downloadLossyMp3": { "description": "Lossy format option - MP3 320kbps" }, - "downloadLossyMp3Subtitle": "Best compatibility, ~10MB per track", + "downloadLossyMp3Subtitle": "Kompatibilitas terbaik, ~10MB per trek", "@downloadLossyMp3Subtitle": { "description": "Subtitle for MP3 320kbps lossy option" }, @@ -2067,7 +2067,7 @@ "@downloadLossyAac": { "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "downloadLossyAacSubtitle": "Kompatibilitas seluler terbaik, kontainer M4A", "@downloadLossyAacSubtitle": { "description": "Subtitle for AAC/M4A 320kbps lossy option" }, @@ -2075,7 +2075,7 @@ "@downloadLossyOpus256": { "description": "Lossy format option - Opus 256kbps" }, - "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", + "downloadLossyOpus256Subtitle": "Opus kualitas terbaik, ~8MB per trek", "@downloadLossyOpus256Subtitle": { "description": "Subtitle for Opus 256kbps lossy option" }, @@ -2083,7 +2083,7 @@ "@downloadLossyOpus128": { "description": "Lossy format option - Opus 128kbps" }, - "downloadLossyOpus128Subtitle": "Smallest size, ~4MB per track", + "downloadLossyOpus128Subtitle": "Ukuran terkecil, ~4MB per trek", "@downloadLossyOpus128Subtitle": { "description": "Subtitle for Opus 128kbps lossy option" }, @@ -2107,7 +2107,7 @@ "@downloadAlbumFolderStructure": { "description": "Setting - album folder organization" }, - "albumFolderStructureDescription": "Choose how album folders are structured", + "albumFolderStructureDescription": "Pilih bagaimana struktur folder album akan dibuat", "@albumFolderStructureDescription": { "description": "Album folder structure picker description" }, From 4577ce5ca71720614dea5c7e701800d6c5a0c695 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 3 Jul 2026 03:26:55 +0700 Subject: [PATCH 127/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index ea560643..78964f53 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -3571,7 +3571,7 @@ } } }, - "collectionRemovedFromLoved": "\"{trackName}\" removed from Loved", + "collectionRemovedFromLoved": "\"{trackName}\" se eliminó de «Me gusta»", "@collectionRemovedFromLoved": { "description": "Snackbar after removing track from loved folder", "placeholders": { @@ -3580,7 +3580,7 @@ } } }, - "collectionAddedToWishlist": "\"{trackName}\" added to Wishlist", + "collectionAddedToWishlist": "\"{trackName}\" se agregó a la lista de deseos", "@collectionAddedToWishlist": { "description": "Snackbar after adding track to wishlist", "placeholders": { @@ -3589,7 +3589,7 @@ } } }, - "collectionRemovedFromWishlist": "\"{trackName}\" removed from Wishlist", + "collectionRemovedFromWishlist": "\"{trackName}\" se eliminó de la lista de deseos", "@collectionRemovedFromWishlist": { "description": "Snackbar after removing track from wishlist", "placeholders": { @@ -3598,7 +3598,7 @@ } } }, - "collectionAddedToFavoriteArtists": "\"{artistName}\" added to Favorite Artists", + "collectionAddedToFavoriteArtists": "\"{artistName}\" se agregó a Artistas favoritos", "@collectionAddedToFavoriteArtists": { "description": "Snackbar after adding artist to favorite artists", "placeholders": { @@ -3607,7 +3607,7 @@ } } }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" removed from Favorite Artists", + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" se eliminó de Artistas favoritos", "@collectionRemovedFromFavoriteArtists": { "description": "Snackbar after removing artist from favorite artists", "placeholders": { @@ -3616,11 +3616,11 @@ } } }, - "trackOptionAddToLoved": "Add to Loved", + "trackOptionAddToLoved": "Agregar a «Me gusta»", "@trackOptionAddToLoved": { "description": "Bottom sheet action label - add track to loved folder" }, - "trackOptionRemoveFromLoved": "Remove from Loved", + "trackOptionRemoveFromLoved": "Quitar de «Me gusta»", "@trackOptionRemoveFromLoved": { "description": "Bottom sheet action label - remove track from loved folder" }, From 91c141b7eeb5c60437da1f1884f1f22f87ff8d9a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Fri, 3 Jul 2026 04:25:28 +0700 Subject: [PATCH 128/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 144 ++++++++++++++++++------------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 78964f53..be359fa5 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -3628,7 +3628,7 @@ "@trackOptionAddToWishlist": { "description": "Bottom sheet action label - add track to wishlist" }, - "trackOptionRemoveFromWishlist": "Remove from Wishlist", + "trackOptionRemoveFromWishlist": "Quitar de la lista de deseos", "@trackOptionRemoveFromWishlist": { "description": "Bottom sheet action label - remove track from wishlist" }, @@ -3636,7 +3636,7 @@ "@artistOptionAddToFavorites": { "description": "Action label - add artist to favorite artists" }, - "artistOptionRemoveFromFavorites": "Remove from Favorite Artists", + "artistOptionRemoveFromFavorites": "Quitar de Artistas favoritos", "@artistOptionRemoveFromFavorites": { "description": "Action label - remove artist from favorite artists" }, @@ -3648,7 +3648,7 @@ "@collectionPlaylistRemoveCover": { "description": "Bottom sheet action to remove custom cover image from a playlist" }, - "selectionShareCount": "Share {count} {count, plural, =1{track} other{tracks}}", + "selectionShareCount": "Compartir {count} {count, plural, =1{pista} other{pistas}}", "@selectionShareCount": { "description": "Share button text with count in selection mode", "placeholders": { @@ -3657,11 +3657,11 @@ } } }, - "selectionShareNoFiles": "No shareable files found", + "selectionShareNoFiles": "No se encontraron archivos para compartir", "@selectionShareNoFiles": { "description": "Snackbar when no selected files exist on disk" }, - "selectionConvertCount": "Convert {count} {count, plural, =1{track} other{tracks}}", + "selectionConvertCount": "Convertir {count} {count, plural, =1{pista} other{pistas}}", "@selectionConvertCount": { "description": "Convert button text with count in selection mode", "placeholders": { @@ -3670,7 +3670,7 @@ } } }, - "selectionConvertNoConvertible": "No convertible tracks selected", + "selectionConvertNoConvertible": "No se seleccionaron pistas que se puedan convertir", "@selectionConvertNoConvertible": { "description": "Snackbar when no selected tracks support conversion" }, @@ -3678,7 +3678,7 @@ "@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": "¿Convertir {count} {count, plural, =1{pista} other{pistas}} a {format} con una tasa de bits de {bitrate}?\n\nLos archivos originales se eliminarán después de la conversión.", "@selectionBatchConvertConfirmMessage": { "description": "Confirmation dialog message for batch conversion", "placeholders": { @@ -3693,7 +3693,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": "¿Convertir {count} {count, plural, =1{pista} other{pistas}} a {format}? (Sin pérdida — no hay pérdida de calidad)\n\nLos archivos originales se eliminarán después de la conversión.", "@selectionBatchConvertConfirmMessageLossless": { "description": "Confirmation dialog message for lossless batch conversion", "placeholders": { @@ -3705,7 +3705,7 @@ } } }, - "selectionBatchConvertProgress": "Converting {current} of {total}...", + "selectionBatchConvertProgress": "Convirtiendo {current} de {total}...", "@selectionBatchConvertProgress": { "description": "Snackbar during batch conversion progress", "placeholders": { @@ -3717,7 +3717,7 @@ } } }, - "selectionBatchConvertSuccess": "Converted {success} of {total} tracks to {format}", + "selectionBatchConvertSuccess": "Se convirtieron {success} de {total} pistas a {format}", "@selectionBatchConvertSuccess": { "description": "Snackbar after batch conversion completes", "placeholders": { @@ -3741,11 +3741,11 @@ } } }, - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Folder named after Album Artist tag", + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Carpeta nombrada según la etiqueta Artista del álbum", "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { "description": "Subtitle when album artist is used for folder names" }, - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Folder named after Track Artist tag", + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Carpeta nombrada según la etiqueta Artista de la pista", "@downloadUseAlbumArtistForFoldersTrackSubtitle": { "description": "Subtitle when track artist is used for folder names" }, @@ -3753,11 +3753,11 @@ "@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": "Activa, desactiva y reordena las fuentes de letras. Los proveedores se prueban de arriba hacia abajo hasta encontrar letras.", "@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": "Los proveedores de letras de extensiones se ejecutan antes que los proveedores integrados. Debe permanecer habilitado al menos un proveedor.", "@lyricsProvidersInfoText": { "description": "Info tip on lyrics provider priority page" }, @@ -3779,39 +3779,39 @@ } } }, - "lyricsProvidersAtLeastOne": "At least one provider must remain enabled", + "lyricsProvidersAtLeastOne": "Debe permanecer habilitado al menos un proveedor", "@lyricsProvidersAtLeastOne": { "description": "Snackbar when user tries to disable the last enabled provider" }, - "lyricsProvidersSaved": "Lyrics provider priority saved", + "lyricsProvidersSaved": "Prioridad de proveedores de letras guardada", "@lyricsProvidersSaved": { "description": "Snackbar after saving lyrics provider priority" }, - "lyricsProvidersDiscardContent": "You have unsaved changes that will be lost.", + "lyricsProvidersDiscardContent": "Tienes cambios sin guardar que se perderán.", "@lyricsProvidersDiscardContent": { "description": "Body text of the discard-changes dialog on lyrics provider page" }, - "lyricsProviderLrclibDesc": "Open-source synced lyrics database", + "lyricsProviderLrclibDesc": "Base de datos de letras sincronizadas de código abierto", "@lyricsProviderLrclibDesc": { "description": "Description for LRCLIB provider" }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (good for Asian songs)", + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (buena para canciones asiáticas)", "@lyricsProviderNeteaseDesc": { "description": "Description for Netease provider" }, - "lyricsProviderMusixmatchDesc": "Largest lyrics database (multi-language)", + "lyricsProviderMusixmatchDesc": "La base de datos de letras más grande (multilingüe)", "@lyricsProviderMusixmatchDesc": { "description": "Description for Musixmatch provider" }, - "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", + "lyricsProviderAppleMusicDesc": "Letras sincronizadas palabra por palabra (a través de proxy)", "@lyricsProviderAppleMusicDesc": { "description": "Description for Apple Music provider" }, - "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, via proxy)", + "lyricsProviderQqMusicDesc": "QQ Music (buena para canciones chinas, a\ntravés de proxy)", "@lyricsProviderQqMusicDesc": { "description": "Description for QQ Music provider" }, - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", + "lyricsProviderLyricsPlusDesc": "Letras tipo karaoke palabra por palabra (Apple/ Musixmatch/Spotify/QQ, a través de proxy)", "@lyricsProviderLyricsPlusDesc": { "description": "Description for LyricsPlus provider" }, @@ -3819,19 +3819,19 @@ "@lyricsProviderExtensionDesc": { "description": "Generic description for extension-based lyrics providers" }, - "safMigrationTitle": "Storage Update Required", + "safMigrationTitle": "Se requiere actualización del almacenamiento", "@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 ahora utiliza el Android Storage Access Framework (SAF) para las descargas. Esto soluciona los errores de «permiso denegado» en Android 10 y versiones posteriores.", "@safMigrationMessage1": { "description": "First paragraph of SAF migration dialog" }, - "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", + "safMigrationMessage2": "Por favor, vuelve a seleccionar la carpeta de descargas para cambiar al nuevo sistema de almacenamiento.", "@safMigrationMessage2": { "description": "Second paragraph of SAF migration dialog" }, - "safMigrationSuccess": "Download folder updated to SAF mode", + "safMigrationSuccess": "Carpeta de descargas actualizada al modo SAF", "@safMigrationSuccess": { "description": "Snackbar after successfully migrating to SAF" }, @@ -3843,99 +3843,99 @@ "@settingsDonateSubtitle": { "description": "Subtitle for donate menu item" }, - "settingsBackup": "Backup & Restore", + "settingsBackup": "Copia de seguridad y Restauración", "@settingsBackup": { "description": "Settings menu item - backup and restore page" }, - "settingsBackupSubtitle": "Move your library, history and settings to a new device", + "settingsBackupSubtitle": "Transfiere tu biblioteca, historial y configuración a un nuevo dispositivo", "@settingsBackupSubtitle": { "description": "Subtitle for backup and restore settings item" }, - "backupTitle": "Backup & Restore", + "backupTitle": "Copia de seguridad y Restauración", "@backupTitle": { "description": "App bar title for the backup and restore page" }, - "backupExportSectionTitle": "Create backup", + "backupExportSectionTitle": "Crear copia de seguridad", "@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": "Guarda tu configuración, historial de descargas, pistas con «Me gusta», lista de deseos, artistas favoritos y listas de reproducción en un solo archivo que puedes conservar o transferir a otro teléfono.", "@backupExportSectionDescription": { "description": "Description of what a backup contains" }, - "backupExportButton": "Create backup file", + "backupExportButton": "Crear archivo de copia de seguridad", "@backupExportButton": { "description": "Button to create and share a backup file" }, - "backupImportSectionTitle": "Restore backup", + "backupImportSectionTitle": "Restaurar copia de seguridad", "@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": "Selecciona un archivo de copia de seguridad para restaurar tus datos. Esto reemplazará la configuración, el historial y la biblioteca actuales en este dispositivo.", "@backupImportSectionDescription": { "description": "Description for the restore action" }, - "backupImportButton": "Choose backup file", + "backupImportButton": "Elegir archivo de copia de seguridad", "@backupImportButton": { "description": "Button to pick a backup file to restore" }, - "backupCreating": "Creating backup...", + "backupCreating": "Creando copia de seguridad...", "@backupCreating": { "description": "Progress text while a backup is being created" }, - "backupCreated": "Backup created", + "backupCreated": "Copia de seguridad creada", "@backupCreated": { "description": "Snackbar after a backup file is created" }, - "backupCreateFailed": "Failed to create backup", + "backupCreateFailed": "No se pudo crear la copia de seguridad", "@backupCreateFailed": { "description": "Snackbar when backup creation fails" }, - "backupEmpty": "There is nothing to back up yet", + "backupEmpty": "Aún no hay nada que respaldar", "@backupEmpty": { "description": "Snackbar when there is no data to back up" }, - "backupRestoreConfirmTitle": "Restore this backup?", + "backupRestoreConfirmTitle": "¿Restaurar esta copia de seguridad?", "@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": "Esto reemplazará tu configuración actual, historial de descargas, pistas con «Me gusta», lista de deseos y listas de reproducción con el contenido de la copia de seguridad. Esto no se puede deshacer.", "@backupRestoreConfirmMessage": { "description": "Confirmation dialog message before restoring a backup" }, - "backupRestoreConfirmButton": "Restore", + "backupRestoreConfirmButton": "Restaurar", "@backupRestoreConfirmButton": { "description": "Confirm button to proceed with restore" }, - "backupRestoring": "Restoring backup...", + "backupRestoring": "Restaurando copia de seguridad...", "@backupRestoring": { "description": "Progress text while restoring a backup" }, - "backupRestored": "Backup restored successfully", + "backupRestored": "Copia de seguridad restaurada correctamente", "@backupRestored": { "description": "Snackbar after a successful restore" }, - "backupRestoreFailed": "Failed to restore backup", + "backupRestoreFailed": "Fallo al restaurar la copia de seguridad", "@backupRestoreFailed": { "description": "Snackbar when restore fails" }, - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", + "backupInvalidFile": "Este archivo no es una copia de seguridad válida de SpotiFLAC", "@backupInvalidFile": { "description": "Snackbar when the chosen file is not a valid backup" }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", + "backupRestoreRestartHint": "Reinicie la aplicación para asegurarse de que cada cambio se aplique.", "@backupRestoreRestartHint": { "description": "Hint shown after restoring that an app restart is recommended" }, - "backupContentsTitle": "Backup contents", + "backupContentsTitle": "Contenido de la copia de seguridad", "@backupContentsTitle": { "description": "Header above the list summarizing what the backup contains" }, - "backupContentsSettings": "App settings", + "backupContentsSettings": "Configuración de la aplicación", "@backupContentsSettings": { "description": "Backup contents row label for settings" }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", + "backupContentsHistory": "{count} historial {count, plural, =1{item} other{items}}", "@backupContentsHistory": { "description": "Backup contents row for history count", "placeholders": { @@ -3944,7 +3944,7 @@ } } }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", + "backupContentsLiked": "{count} {count, plural, =1{pista con «Me gusta»} other{pistas con «Me gusta»}}", "@backupContentsLiked": { "description": "Backup contents row for liked tracks count", "placeholders": { @@ -3953,7 +3953,7 @@ } } }, - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", + "backupContentsWishlist": "{count} {count, plural, =1{pista en la lista de deseos} other{pistas en la lista de deseos}}", "@backupContentsWishlist": { "description": "Backup contents row for wishlist tracks count", "placeholders": { @@ -3962,7 +3962,7 @@ } } }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "backupContentsPlaylists": "{count, plural, =1{1 lista de reproducción} other{{count} listas de reproducción}}", "@backupContentsPlaylists": { "description": "Backup contents row for playlist count", "placeholders": { @@ -3971,7 +3971,7 @@ } } }, - "backupContentsArtists": "{count, plural, =1{1 favorite artist} other{{count} favorite artists}}", + "backupContentsArtists": "{count, plural, =1{1 artista favorito} other{{count} artistas favoritos}}", "@backupContentsArtists": { "description": "Backup contents row for favorite artists count", "placeholders": { @@ -3980,7 +3980,7 @@ } } }, - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", + "backupContentsExtensions": "{count, plural, =1{1 extensión} other{{count} extensiones}}", "@backupContentsExtensions": { "description": "Backup contents row for installed extensions count", "placeholders": { @@ -4266,11 +4266,11 @@ "@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": "Introduce un código de idioma BCP-47 (por ejemplo, en, de, ja) para solicitar letras traducidas desde Musixmatch.", "@downloadMusixmatchLanguageDesc": { "description": "Description in Musixmatch language picker" }, - "downloadMusixmatchAuto": "Auto", + "downloadMusixmatchAuto": "Automático", "@downloadMusixmatchAuto": { "description": "Button to clear Musixmatch language (use auto)" }, @@ -4278,11 +4278,11 @@ "@downloadNetworkAnySubtitle": { "description": "Subtitle for any-network option in picker" }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "downloadNetworkWifiOnlySubtitle": "Las descargas se pausan con datos móviles", "@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": "Región usada al resolver enlaces de pistas mediante SongLink. Elige el país donde estén disponibles tus servicios de streaming.", "@downloadSongLinkRegionDesc": { "description": "Description in SongLink region picker" }, @@ -4294,7 +4294,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": "¿Descargar {trackCount} {trackCount, plural, =1{pista} other{pistas}} de {playlistCount} {playlistCount, plural, =1{lista de reproducción} other{listas de reproducción}}?", "@dialogDownloadPlaylistsMessage": { "description": "Dialog message for bulk playlist download confirmation", "placeholders": { @@ -4306,7 +4306,7 @@ } } }, - "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", + "bulkDownloadPlaylistsButton": "Descargar {count} {count, plural, =1{lista de reproducción} other{listas de reproducción}}", "@bulkDownloadPlaylistsButton": { "description": "Button label for bulk downloading selected playlists", "placeholders": { @@ -4315,7 +4315,7 @@ } } }, - "bulkDownloadSelectPlaylists": "Select playlists to download", + "bulkDownloadSelectPlaylists": "Selecciona listas de reproducción para descargar", "@bulkDownloadSelectPlaylists": { "description": "Button label when no playlists are selected for download" }, @@ -4323,7 +4323,7 @@ "@snackbarSelectedPlaylistsEmpty": { "description": "Snackbar when selected playlists contain no tracks" }, - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "playlistsCount": "{count, plural, =1{1 lista de reproducción} other{{count} listas de reproducción}}", "@playlistsCount": { "description": "Playlist count display", "placeholders": { @@ -4332,11 +4332,11 @@ } } }, - "editMetadataAutoFill": "Auto-fill from online", + "editMetadataAutoFill": "Autocompletar desde internet", "@editMetadataAutoFill": { "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" }, - "editMetadataAutoFillDesc": "Select fields to fill automatically from online metadata", + "editMetadataAutoFillDesc": "Selecciona los campos para rellenar automáticamente con metadatos en línea", "@editMetadataAutoFillDesc": { "description": "Description for the auto-fill section" }, @@ -4352,7 +4352,7 @@ "@editMetadataAutoFillNoResults": { "description": "Snackbar when online metadata search returns no results" }, - "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", + "editMetadataAutoFillDone": "Se completaron {count} {count, plural, =1{campo} other{campos}} con metadatos en línea", "@editMetadataAutoFillDone": { "description": "Snackbar confirming how many fields were auto-filled", "placeholders": { @@ -4361,7 +4361,7 @@ } } }, - "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", + "editMetadataAutoFillNoneSelected": "Selecciona al menos un campo para autocompletar", "@editMetadataAutoFillNoneSelected": { "description": "Snackbar when user taps Fetch without selecting any fields" }, @@ -4401,7 +4401,7 @@ "@editMetadataFieldIsrc": { "description": "Chip label for ISRC field in auto-fill selector" }, - "editMetadataFieldLabel": "Label", + "editMetadataFieldLabel": "Discográfica", "@editMetadataFieldLabel": { "description": "Chip label for label field in auto-fill selector" }, @@ -4438,7 +4438,7 @@ "@queueFilteringIndicator": { "description": "Shown while filter results are being computed" }, - "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "queueTrackCount": "{count, plural, =1{1 pista} other{{count} pistas}}", "@queueTrackCount": { "description": "Track count label with plural support", "placeholders": { @@ -4447,7 +4447,7 @@ } } }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "queueAlbumCount": "{count, plural, =1{1 álbum} other{{count} álbumes}}", "@queueAlbumCount": { "description": "Album count label with plural support", "placeholders": { @@ -4468,7 +4468,7 @@ "@queueEmptySingles": { "description": "Empty state title when no single track downloads exist" }, - "queueEmptySinglesSubtitle": "Single track downloads will appear here", + "queueEmptySinglesSubtitle": "Las descargas de pistas individuales aparecerán aquí", "@queueEmptySinglesSubtitle": { "description": "Empty state subtitle for single track downloads" }, From 0266ad5ea50149d4381afc7238d592f5fedb862c Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 5 Jul 2026 01:09:04 +0700 Subject: [PATCH 129/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index be359fa5..cc31be64 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -29,7 +29,7 @@ "@homeSubtitle": { "description": "Subtitle shown below search box" }, - "homeEmptyTitle": "J", + "homeEmptyTitle": "Aún no hay proveedores de búsqueda", "@homeEmptyTitle": { "description": "Title shown on home when no providers are available yet" }, @@ -37,7 +37,7 @@ "@homeEmptySubtitle": { "description": "Subtitle shown on home when no providers are available yet" }, - "homeSupports": "Soporte de URL: pista, álbum, listas de reproducción, artistas", + "homeSupports": "Compatible con: URL de pistas, álbumes, listas de reproducción y artistas", "@homeSupports": { "description": "Info text about supported URL types" }, @@ -97,11 +97,11 @@ "@downloadFilenameFormat": { "description": "Setting for output filename pattern" }, - "downloadSingleFilenameFormat": "Formato de título único", + "downloadSingleFilenameFormat": "Formato del nombre de archivo para pistas individuales", "@downloadSingleFilenameFormat": { "description": "Setting for output filename pattern for singles/EPs" }, - "downloadSingleFilenameFormatDescription": "Patrón de título para sencillos y mini-álbumes. Usa las mismas etiquetas que un álbum completo.", + "downloadSingleFilenameFormatDescription": "Patrón de nombre de archivo para sencillos y EP. Utiliza las mismas etiquetas que el formato para álbumes.", "@downloadSingleFilenameFormatDescription": { "description": "Subtitle description for single filename format setting" }, @@ -125,7 +125,7 @@ "@appearanceThemeDark": { "description": "Dark theme" }, - "appearanceDynamicColor": "Color dinámico", + "appearanceDynamicColor": "Color Dinámico", "@appearanceDynamicColor": { "description": "Material You dynamic colors" }, @@ -133,7 +133,7 @@ "@appearanceDynamicColorSubtitle": { "description": "Subtitle for dynamic color" }, - "appearanceHistoryView": "Vista de Historial", + "appearanceHistoryView": "Vista del Historial", "@appearanceHistoryView": { "description": "Layout style for history" }, @@ -149,11 +149,11 @@ "@optionsTitle": { "description": "Options settings page title" }, - "optionsPrimaryProvider": "Proveedor principal", + "optionsPrimaryProvider": "Proveedor Principal", "@optionsPrimaryProvider": { "description": "Main search provider setting" }, - "optionsPrimaryProviderSubtitle": "Servicio usado para buscar por canción o nombre del álbum", + "optionsPrimaryProviderSubtitle": "Servicio utilizado para buscar por nombre de pista o álbum", "@optionsPrimaryProviderSubtitle": { "description": "Subtitle for primary provider" }, @@ -166,11 +166,11 @@ } } }, - "optionsDefaultSearchTab": "Pestaña de búsqueda por defecto", + "optionsDefaultSearchTab": "Pestaña de búsqueda predeterminada", "@optionsDefaultSearchTab": { "description": "Title for the preferred default search tab setting" }, - "optionsDefaultSearchTabSubtitle": "Escoger cuál pestaña se abre primero para nuevos resultados de búsqueda.", + "optionsDefaultSearchTabSubtitle": "Elige qué pestaña se abre primero al mostrar nuevos resultados de búsqueda.", "@optionsDefaultSearchTabSubtitle": { "description": "Subtitle for the preferred default search tab setting" }, @@ -178,11 +178,11 @@ "@optionsSwitchBack": { "description": "Hint to switch back from extension search" }, - "optionsAutoFallback": "Alternativa automática", + "optionsAutoFallback": "Cambio automático", "@optionsAutoFallback": { "description": "Auto-retry with other services" }, - "optionsAutoFallbackSubtitle": "Pruebe otros servicios si falla la descarga", + "optionsAutoFallbackSubtitle": "Probar otros servicios si la descarga falla", "@optionsAutoFallbackSubtitle": { "description": "Subtitle for auto fallback" }, @@ -202,23 +202,23 @@ "@optionsEmbedLyrics": { "description": "Embed lyrics in audio files" }, - "optionsEmbedLyricsSubtitle": "Guardar letras sincronizadas con las pistas descargadas", + "optionsEmbedLyricsSubtitle": "Guarda las letras sincronizadas junto a las pistas descargadas", "@optionsEmbedLyricsSubtitle": { "description": "Subtitle for embed lyrics" }, - "optionsMaxQualityCover": "Carátula de calidad máxima", + "optionsMaxQualityCover": "Máxima calidad de portada", "@optionsMaxQualityCover": { "description": "Download highest quality album art" }, - "optionsMaxQualityCoverSubtitle": "Descargar carátula de resolución máxima", + "optionsMaxQualityCoverSubtitle": "Descargar la portada en la mayor resolución", "@optionsMaxQualityCoverSubtitle": { "description": "Subtitle for max quality cover" }, - "optionsReplayGain": "Nivelación de ganancia", + "optionsReplayGain": "ReplayGain", "@optionsReplayGain": { "description": "Title for ReplayGain setting toggle" }, - "optionsReplayGainSubtitleOn": "Analizar volumen e incrustar etiquetas de RG (EBU-R128)", + "optionsReplayGainSubtitleOn": "Analizar la sonoridad e incrustar etiquetas ReplayGain (EBU R128)", "@optionsReplayGainSubtitleOn": { "description": "Subtitle when ReplayGain is enabled" }, From 6ec6f79b830f6adee738185b4d4a32d1cc1e166f Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 5 Jul 2026 02:06:22 +0700 Subject: [PATCH 130/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index cc31be64..e51f22a6 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -222,7 +222,7 @@ "@optionsReplayGainSubtitleOn": { "description": "Subtitle when ReplayGain is enabled" }, - "optionsReplayGainSubtitleOff": "Desactivado: sin etiquetas de normalización de volumen", + "optionsReplayGainSubtitleOff": "Desactivado: no hay etiquetas de normalización de sonoridad", "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, @@ -288,35 +288,35 @@ "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" }, - "optionsArtistTagModeDescription": "Elija cómo se ingresan múltiples artistas en etiquetas incrustadas.", + "optionsArtistTagModeDescription": "Elige cómo se escriben varios artistas en las etiquetas incrustadas.", "@optionsArtistTagModeDescription": { "description": "Bottom-sheet description for artist tag mode setting" }, - "optionsArtistTagModeJoined": "Valor único ingresado", + "optionsArtistTagModeJoined": "Valor único combinado", "@optionsArtistTagModeJoined": { "description": "Artist tag mode option that joins multiple artists into one value" }, - "optionsArtistTagModeJoinedSubtitle": "Escribe un valor ARTIST, como \"Artista A, Artista B\" para mejor compatibilidad en reproductores.", + "optionsArtistTagModeJoinedSubtitle": "Escribir un solo valor de ARTISTA como «Artista A, Artista B» para máxima compatibilidad con reproductores.", "@optionsArtistTagModeJoinedSubtitle": { "description": "Subtitle for joined artist tag mode" }, - "optionsArtistTagModeSplitVorbis": "Dividir etiquetas para FLAC/OPUS", + "optionsArtistTagModeSplitVorbis": "Separar etiquetas para FLAC/Opus", "@optionsArtistTagModeSplitVorbis": { "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Escribe una etiqueta de artista por artista para FLAC y OPUS; MP3 y M4A se mantienen agrupados.", + "optionsArtistTagModeSplitVorbisSubtitle": "Escribe una etiqueta de artista por cada artista en FLAC y Opus; MP3 y M4A se mantienen combinados.", "@optionsArtistTagModeSplitVorbisSubtitle": { "description": "Subtitle for split Vorbis artist tag mode" }, - "optionsExtensionStore": "Extensión Repo", + "optionsExtensionStore": "Repositorio de extensiones", "@optionsExtensionStore": { "description": "Show/hide store tab" }, - "optionsExtensionStoreSubtitle": "Mostar barra de navegación repo", + "optionsExtensionStoreSubtitle": "Mostrar la pestaña del repositorio en la navegación", "@optionsExtensionStoreSubtitle": { "description": "Subtitle for extension store toggle" }, - "optionsCheckUpdates": "Comprobar actualizaciones", + "optionsCheckUpdates": "Buscar actualizaciones", "@optionsCheckUpdates": { "description": "Auto update check toggle" }, @@ -332,15 +332,15 @@ "@optionsUpdateChannelStable": { "description": "Only stable updates" }, - "optionsUpdateChannelPreview": "Versión preliminar", + "optionsUpdateChannelPreview": "Obtener versiones preliminares", "@optionsUpdateChannelPreview": { "description": "Include beta/preview updates" }, - "optionsUpdateChannelWarning": "La Versión preliminar puede contener errores o características incompletas", + "optionsUpdateChannelWarning": "La versión preliminar puede contener errores o funciones incompletas", "@optionsUpdateChannelWarning": { "description": "Warning about preview channel" }, - "optionsClearHistory": "Borrar el historial de descargas", + "optionsClearHistory": "Borrar historial de descargas", "@optionsClearHistory": { "description": "Delete all download history" }, @@ -352,11 +352,11 @@ "@optionsDetailedLogging": { "description": "Enable verbose logs for debugging" }, - "optionsDetailedLoggingOn": "Registros detallados están siendo registrados", + "optionsDetailedLoggingOn": "Se están registrando logs detallados", "@optionsDetailedLoggingOn": { "description": "Status when logging enabled" }, - "optionsDetailedLoggingOff": "Habilitar para informes de errores", + "optionsDetailedLoggingOff": "Activar para informes de errores", "@optionsDetailedLoggingOff": { "description": "Status when logging disabled" }, @@ -373,15 +373,15 @@ } } }, - "optionsSpotifyCredentialsRequired": "Requerido - toque para configurar", + "optionsSpotifyCredentialsRequired": "Requerido: toca para configurar", "@optionsSpotifyCredentialsRequired": { "description": "Prompt to set up credentials" }, - "optionsSpotifyWarning": "Spotify requiere tus propias credenciales API. Obténgalas gratis de developer.spotify.com", + "optionsSpotifyWarning": "Spotify requiere tus propias credenciales de API. Consíguelas gratis en developer.spotify.com", "@optionsSpotifyWarning": { "description": "Info about Spotify API requirement" }, - "optionsSpotifyDeprecationWarning": "La función de búsqueda de Spotify dejará de estar disponible el 3 de marzo de 2026 debido a cambios en la API de Spotify. Te recomendamos que te pases a Deezer.", + "optionsSpotifyDeprecationWarning": "La búsqueda de Spotify quedará obsoleta el 3 de marzo de 2026 debido a cambios en la API de Spotify. Por favor, cambia a Deezer.", "@optionsSpotifyDeprecationWarning": { "description": "Warning about Spotify API deprecation" }, @@ -389,7 +389,7 @@ "@extensionsTitle": { "description": "Extensions page title" }, - "extensionsDisabled": "Deshabilitado", + "extensionsDisabled": "Desactivado", "@extensionsDisabled": { "description": "Extension status - inactive" }, @@ -415,7 +415,7 @@ "@extensionsUninstall": { "description": "Uninstall extension button" }, - "storeTitle": "Extensión Repo", + "storeTitle": "Repositorio de extensiones", "@storeTitle": { "description": "Store screen title" }, @@ -451,7 +451,7 @@ "@aboutOriginalCreator": { "description": "Role description for original creator" }, - "aboutLogoArtist": "¡El talentoso artista que creó nuestro hermoso logo!", + "aboutLogoArtist": "¡El talentoso artista que creó el hermoso logo de nuestra app!", "@aboutLogoArtist": { "description": "Role description for logo artist" }, @@ -467,11 +467,11 @@ "@aboutLinks": { "description": "Section for external links" }, - "aboutMobileSource": "Código fuente móvil", + "aboutMobileSource": "Código fuente de la versión móvil", "@aboutMobileSource": { "description": "Link to mobile GitHub repo" }, - "aboutPCSource": "Código fuente de PC", + "aboutPCSource": "Código fuente de la versión para PC", "@aboutPCSource": { "description": "Link to PC GitHub repo" }, From aba72ca6b638ec47ee2a49cdf2c161f82bfa6fc1 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 5 Jul 2026 11:16:45 +0700 Subject: [PATCH 131/137] 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 1fc3087b..76c2df6b 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -6169,7 +6169,7 @@ "@extensionVerificationBrowserExternal": { "description": "Chip label for external browser verification mode" }, - "extensionVerificationBrowserInApp": "앱 내", + "extensionVerificationBrowserInApp": "내부", "@extensionVerificationBrowserInApp": { "description": "Chip label for in-app browser verification mode" }, From 25f1bd3f10193120f661ff19377ce35f969c495a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 5 Jul 2026 12:15:35 +0700 Subject: [PATCH 132/137] New translations app_en.arb (Portuguese) [ci skip] --- lib/l10n/arb/app_pt_PT.arb | 190 ++++++++++++++++++------------------- 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/lib/l10n/arb/app_pt_PT.arb b/lib/l10n/arb/app_pt_PT.arb index 6ffdf7d8..e1017145 100644 --- a/lib/l10n/arb/app_pt_PT.arb +++ b/lib/l10n/arb/app_pt_PT.arb @@ -190,11 +190,11 @@ "@optionsUseExtensionProviders": { "description": "Legacy setting label for extension download providers" }, - "optionsUseExtensionProvidersOn": "Extension providers are enabled", + "optionsUseExtensionProvidersOn": "Provedores de extensão estão habilitados", "@optionsUseExtensionProvidersOn": { "description": "Status when extension providers enabled" }, - "optionsUseExtensionProvidersOff": "Extension providers are required", + "optionsUseExtensionProvidersOff": "Provedores de extensão são necessários", "@optionsUseExtensionProvidersOff": { "description": "Legacy status when extension providers would be disabled" }, @@ -202,7 +202,7 @@ "@optionsEmbedLyrics": { "description": "Embed lyrics in audio files" }, - "optionsEmbedLyricsSubtitle": "Save synced lyrics alongside your downloaded tracks", + "optionsEmbedLyricsSubtitle": "Salve letras sincronizadas ao lado das suas faixas baixadas", "@optionsEmbedLyricsSubtitle": { "description": "Subtitle for embed lyrics" }, @@ -218,31 +218,31 @@ "@optionsReplayGain": { "description": "Title for ReplayGain setting toggle" }, - "optionsReplayGainSubtitleOn": "Scan loudness and embed ReplayGain tags (EBU R128)", + "optionsReplayGainSubtitleOn": "Analisar o volume e incorporar tags ReplayGain (EBU R128)", "@optionsReplayGainSubtitleOn": { "description": "Subtitle when ReplayGain is enabled" }, - "optionsReplayGainSubtitleOff": "Disabled: no loudness normalization tags", + "optionsReplayGainSubtitleOff": "Desativado: sem etiquetas de normalização de intensidade", "@optionsReplayGainSubtitleOff": { "description": "Subtitle when ReplayGain is disabled" }, - "trackReplayGain": "Rescan ReplayGain", + "trackReplayGain": "Reanalisar ReplayGain", "@trackReplayGain": { "description": "Three-dot menu option to scan loudness and write ReplayGain tags" }, - "trackReplayGainSubtitle": "Analyze loudness and write ReplayGain tags", + "trackReplayGainSubtitle": "Analisar o volume e gravar etiquetas ReplayGain", "@trackReplayGainSubtitle": { "description": "Subtitle for the rescan ReplayGain menu option" }, - "trackReplayGainScanning": "Analyzing loudness...", + "trackReplayGainScanning": "Analisando o volume...", "@trackReplayGainScanning": { "description": "Snackbar/progress message while scanning ReplayGain for a single track" }, - "trackReplayGainSuccess": "ReplayGain tags added", + "trackReplayGainSuccess": "Etiquetas ReplayGain adicionadas", "@trackReplayGainSuccess": { "description": "Snackbar message after ReplayGain tags written for a single track" }, - "trackReplayGainFailed": "Failed to add ReplayGain tags", + "trackReplayGainFailed": "Falha ao adicionar etiquetas ReplayGain", "@trackReplayGainFailed": { "description": "Snackbar message when ReplayGain scan/write fails" }, @@ -255,11 +255,11 @@ } } }, - "replayGainBatchConfirmTitle": "Add ReplayGain", + "replayGainBatchConfirmTitle": "Adicionar ReplayGain", "@replayGainBatchConfirmTitle": { "description": "Title of the batch ReplayGain confirmation dialog" }, - "replayGainBatchConfirmMessage": "Analyze loudness and write ReplayGain tags to {count} track(s)?", + "replayGainBatchConfirmMessage": "Analisar o volume e gravar etiquetas ReplayGain em {count} faixa(s)?", "@replayGainBatchConfirmMessage": { "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { @@ -268,11 +268,11 @@ } } }, - "replayGainBatchAnalyzing": "Analyzing ReplayGain...", + "replayGainBatchAnalyzing": "Analisando ReplayGain...", "@replayGainBatchAnalyzing": { "description": "Progress dialog title while batch scanning ReplayGain" }, - "replayGainBatchSuccess": "ReplayGain added to {success} of {total} tracks", + "replayGainBatchSuccess": "ReplayGain adicionado a {success} de {total} faixas", "@replayGainBatchSuccess": { "description": "Snackbar after batch ReplayGain completes", "placeholders": { @@ -284,35 +284,35 @@ } } }, - "optionsArtistTagMode": "Artist Tag Mode", + "optionsArtistTagMode": "Modo de etiqueta de artista", "@optionsArtistTagMode": { "description": "Setting title for how artist metadata is written into files" }, - "optionsArtistTagModeDescription": "Choose how multiple artists are written into embedded tags.", + "optionsArtistTagModeDescription": "Escolha como múltiplos artistas são escritos em etiquetas incorporadas.", "@optionsArtistTagModeDescription": { "description": "Bottom-sheet description for artist tag mode setting" }, - "optionsArtistTagModeJoined": "Single joined value", + "optionsArtistTagModeJoined": "Valor único combinado", "@optionsArtistTagModeJoined": { "description": "Artist tag mode option that joins multiple artists into one value" }, - "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", + "optionsArtistTagModeJoinedSubtitle": "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" }, - "optionsArtistTagModeSplitVorbis": "Split tags for FLAC/Opus", + "optionsArtistTagModeSplitVorbis": "Dividir etiquetas para FLAC/Opus", "@optionsArtistTagModeSplitVorbis": { "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", + "optionsArtistTagModeSplitVorbisSubtitle": "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" }, - "optionsExtensionStore": "Extension Repo", + "optionsExtensionStore": "Repositório de extensões", "@optionsExtensionStore": { "description": "Show/hide store tab" }, - "optionsExtensionStoreSubtitle": "Show Repo tab in navigation", + "optionsExtensionStoreSubtitle": "Mostrar aba de repositório na navegação", "@optionsExtensionStoreSubtitle": { "description": "Subtitle for extension store toggle" }, @@ -364,7 +364,7 @@ "@optionsSpotifyCredentials": { "description": "Spotify API credentials setting" }, - "optionsSpotifyCredentialsConfigured": "Client ID: {clientId}...", + "optionsSpotifyCredentialsConfigured": "ID do cliente: {clientId}...", "@optionsSpotifyCredentialsConfigured": { "description": "Shows configured client ID preview", "placeholders": { @@ -381,7 +381,7 @@ "@optionsSpotifyWarning": { "description": "Info about Spotify API requirement" }, - "optionsSpotifyDeprecationWarning": "Spotify search will be deprecated on March 3, 2026 due to Spotify API changes. Please switch to Deezer.", + "optionsSpotifyDeprecationWarning": "A busca do Spotify será descontinuada em 3 de março de 2026 devido a mudanças na API do Spotify. Por favor, mude para o Deezer.", "@optionsSpotifyDeprecationWarning": { "description": "Warning about Spotify API deprecation" }, @@ -415,7 +415,7 @@ "@extensionsUninstall": { "description": "Uninstall extension button" }, - "storeTitle": "Extension Repo", + "storeTitle": "Repositório de extensões", "@storeTitle": { "description": "Store screen title" }, @@ -475,7 +475,7 @@ "@aboutPCSource": { "description": "Link to PC GitHub repo" }, - "aboutKeepAndroidOpen": "Keep Android Open", + "aboutKeepAndroidOpen": "Manter o Android aberto", "@aboutKeepAndroidOpen": { "description": "Link to Keep Android Open campaign website" }, @@ -523,19 +523,19 @@ "@aboutVersion": { "description": "Version info label" }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "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" }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "aboutSachinsenalDesc": "O criador original do projeto HiFi. Uma base para integração de fontes sem perdas.", "@aboutSachinsenalDesc": { "description": "Credit description for sachinsenal0x64" }, - "aboutSjdonadoDesc": "Creator of I Don't Have Spotify (IDHS). The fallback link resolver that saves the day!", + "aboutSjdonadoDesc": "Criador do I Don't Have Spotify (IDHS). O resolvedor de link alternativo que salva o dia!", "@aboutSjdonadoDesc": { "description": "Credit description for sjdonado" }, - "aboutAppDescription": "Search music metadata, manage extensions, and organize your library.", + "aboutAppDescription": "Pesquisar metadados de músicas, gerenciar extensões e organizar sua biblioteca.", "@aboutAppDescription": { "description": "App description in header card" }, @@ -664,7 +664,7 @@ "@setupIosEmptyFolderWarning": { "description": "iOS folder selection warning" }, - "setupIcloudNotSupported": "iCloud Drive is not supported. Please use the app Documents folder.", + "setupIcloudNotSupported": "O iCloud Drive não é compatível. Use a pasta Documentos do aplicativo.", "@setupIcloudNotSupported": { "description": "Error when user selects iCloud Drive on iOS" }, @@ -728,15 +728,15 @@ "@setupAllowAccessToManageFiles": { "description": "Instruction for file access permission" }, - "setupLanguageTitle": "Choose Language", + "setupLanguageTitle": "Escolher idioma", "@setupLanguageTitle": { "description": "Title for the language selection step in setup" }, - "setupLanguageDescription": "Select your preferred language for the app. You can change this later in Settings.", + "setupLanguageDescription": "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" }, - "setupLanguageSystemDefault": "System Default", + "setupLanguageSystemDefault": "Padrão do sistema", "@setupLanguageSystemDefault": { "description": "Option to use the system language" }, @@ -768,19 +768,19 @@ "@dialogImport": { "description": "Dialog button - import data" }, - "dialogDownload": "Download", + "dialogDownload": "Baixar", "@dialogDownload": { "description": "Confirm button in Download All dialog" }, - "previewPlay": "Play preview", + "previewPlay": "Reproduzir prévia", "@previewPlay": { "description": "Tooltip for the button that plays a short track preview snippet" }, - "previewStop": "Stop preview", + "previewStop": "Parar prévia", "@previewStop": { "description": "Tooltip for the button that stops the playing track preview snippet" }, - "previewUnavailable": "Preview unavailable", + "previewUnavailable": "Prévia indisponível", "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, @@ -899,7 +899,7 @@ } } }, - "snackbarAlreadyInLibrary": "\"{trackName}\" already exists in your library", + "snackbarAlreadyInLibrary": "\"{trackName}\" já existe na sua biblioteca", "@snackbarAlreadyInLibrary": { "description": "Snackbar - track already exists in local library", "placeholders": { @@ -1010,19 +1010,19 @@ "@errorNoTracksFound": { "description": "Error - search returned no results" }, - "searchEmptyResultSubtitle": "Try another keyword", + "searchEmptyResultSubtitle": "Tente outra palavra-chave", "@searchEmptyResultSubtitle": { "description": "Subtitle shown under the empty search result state on the home screen" }, - "errorUrlNotRecognized": "Link not recognized", + "errorUrlNotRecognized": "Link não reconhecido", "@errorUrlNotRecognized": { "description": "Error title - URL not handled by any extension or service" }, - "errorUrlNotRecognizedMessage": "This link is not supported. Make sure the URL is correct and a compatible extension is installed.", + "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" }, - "errorUrlFetchFailed": "Failed to load content from this link. Please try again.", + "errorUrlFetchFailed": "Falha ao carregar o conteúdo deste link. Por favor, tente novamente.", "@errorUrlFetchFailed": { "description": "Error message - generic URL fetch failure" }, @@ -1108,47 +1108,47 @@ "@searchAlbums": { "description": "Search result category - albums" }, - "searchPlaylists": "Playlists", + "searchPlaylists": "Listas de reprodução", "@searchPlaylists": { "description": "Search result category - playlists" }, - "searchSortTitle": "Sort Results", + "searchSortTitle": "Ordenar resultados", "@searchSortTitle": { "description": "Bottom sheet title for search sort options" }, - "searchSortDefault": "Default", + "searchSortDefault": "Padrão", "@searchSortDefault": { "description": "Sort option - default API order" }, - "searchSortTitleAZ": "Title (A-Z)", + "searchSortTitleAZ": "Título (A-Z)", "@searchSortTitleAZ": { "description": "Sort option - title ascending" }, - "searchSortTitleZA": "Title (Z-A)", + "searchSortTitleZA": "Título (Z-A)", "@searchSortTitleZA": { "description": "Sort option - title descending" }, - "searchSortArtistAZ": "Artist (A-Z)", + "searchSortArtistAZ": "Artista (A-Z)", "@searchSortArtistAZ": { "description": "Sort option - artist ascending" }, - "searchSortArtistZA": "Artist (Z-A)", + "searchSortArtistZA": "Artista (Z-A)", "@searchSortArtistZA": { "description": "Sort option - artist descending" }, - "searchSortDurationShort": "Duration (Shortest)", + "searchSortDurationShort": "Duração (mais curta)", "@searchSortDurationShort": { "description": "Sort option - shortest duration first" }, - "searchSortDurationLong": "Duration (Longest)", + "searchSortDurationLong": "Duração (mais longa)", "@searchSortDurationLong": { "description": "Sort option - longest duration first" }, - "searchSortDateOldest": "Release Date (Oldest)", + "searchSortDateOldest": "Data de lançamento (mais antiga)", "@searchSortDateOldest": { "description": "Sort option - oldest release first" }, - "searchSortDateNewest": "Release Date (Newest)", + "searchSortDateNewest": "Data de lançamento (mais recente)", "@searchSortDateNewest": { "description": "Sort option - newest release first" }, @@ -1160,11 +1160,11 @@ "@filenameFormat": { "description": "Setting title - filename pattern" }, - "filenameShowAdvancedTags": "Show advanced tags", + "filenameShowAdvancedTags": "Exibir etiquetas avançadas", "@filenameShowAdvancedTags": { "description": "Toggle label for showing advanced filename tags" }, - "filenameShowAdvancedTagsDescription": "Enable formatted tags for track padding and date patterns", + "filenameShowAdvancedTagsDescription": "Ativar etiquetas formatadas para preenchimento de faixas e padrões de data", "@filenameShowAdvancedTagsDescription": { "description": "Description for advanced filename tag toggle" }, @@ -1172,11 +1172,11 @@ "@folderOrganizationNone": { "description": "Folder option - flat structure" }, - "folderOrganizationByPlaylist": "By Playlist", + "folderOrganizationByPlaylist": "Por playlist", "@folderOrganizationByPlaylist": { "description": "Folder option - playlist folders" }, - "folderOrganizationByPlaylistSubtitle": "Separate folder for each playlist", + "folderOrganizationByPlaylistSubtitle": "Pasta separada para cada playlist", "@folderOrganizationByPlaylistSubtitle": { "description": "Subtitle for playlist folder option" }, @@ -1272,19 +1272,19 @@ "@providerPriorityInfo": { "description": "Info tip about fallback behavior" }, - "providerPriorityFallbackExtensionsTitle": "Extension Fallback", + "providerPriorityFallbackExtensionsTitle": "Alternativa de extensão", "@providerPriorityFallbackExtensionsTitle": { "description": "Section title for choosing which download extensions can be used as fallback providers" }, - "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", + "providerPriorityFallbackExtensionsDescription": "Escolha quais extensões de download instaladas podem ser usadas durante a alternativa automática.", "@providerPriorityFallbackExtensionsDescription": { "description": "Section description for extension fallback selection" }, - "providerPriorityFallbackExtensionsHint": "Only enabled extensions with download-provider capability are listed here.", + "providerPriorityFallbackExtensionsHint": "Apenas extensões ativadas com capacidade de provedor de download são listadas aqui.", "@providerPriorityFallbackExtensionsHint": { "description": "Hint below the extension fallback selection list" }, - "providerBuiltIn": "Legacy", + "providerBuiltIn": "Legado", "@providerBuiltIn": { "description": "Legacy label retained for old generated localization compatibility" }, @@ -1386,7 +1386,7 @@ "@credentialsDescription": { "description": "Credentials dialog explanation" }, - "credentialsClientId": "Client ID", + "credentialsClientId": "ID do cliente", "@credentialsClientId": { "description": "Client ID field label - DO NOT TRANSLATE" }, @@ -1394,7 +1394,7 @@ "@credentialsClientIdHint": { "description": "Client ID placeholder" }, - "credentialsClientSecret": "Client Secret", + "credentialsClientSecret": "Segredo do cliente", "@credentialsClientSecret": { "description": "Client Secret field label - DO NOT TRANSLATE" }, @@ -1414,7 +1414,7 @@ "@sectionSearchSource": { "description": "Settings section header" }, - "sectionDownload": "Download", + "sectionDownload": "Baixar", "@sectionDownload": { "description": "Settings section header" }, @@ -1490,7 +1490,7 @@ "@sectionTheme": { "description": "Settings section header" }, - "sectionLayout": "Layout", + "sectionLayout": "Aparência\n", "@sectionLayout": { "description": "Settings section header" }, @@ -1506,11 +1506,11 @@ "@settingsAppearanceSubtitle": { "description": "Appearance settings description" }, - "settingsDownloadSubtitle": "Service, quality, fallback", + "settingsDownloadSubtitle": "Serviço, qualidade, alternativa", "@settingsDownloadSubtitle": { "description": "Download settings description" }, - "settingsOptionsSubtitle": "Fallback, metadata, lyrics, cover art", + "settingsOptionsSubtitle": "Alternativa, metadados, letras, capa do álbum", "@settingsOptionsSubtitle": { "description": "Options settings description" }, @@ -1640,7 +1640,7 @@ "@trackCopyLyrics": { "description": "Action - copy lyrics to clipboard" }, - "trackLyricsSource": "Source: {source}", + "trackLyricsSource": "Fonte: {source}", "@trackLyricsSource": { "description": "Label showing the lyrics source/provider", "placeholders": { @@ -1653,11 +1653,11 @@ "@trackLyricsNotAvailable": { "description": "Message when lyrics not found" }, - "trackLyricsNotInFile": "No lyrics found in this file", + "trackLyricsNotInFile": "Nenhuma letra encontrada neste arquivo", "@trackLyricsNotInFile": { "description": "Message when no embedded lyrics in audio file" }, - "trackFetchOnlineLyrics": "Fetch from Online", + "trackFetchOnlineLyrics": "Buscar online", "@trackFetchOnlineLyrics": { "description": "Action - fetch lyrics from online providers" }, @@ -1736,7 +1736,7 @@ "@storeFilterMetadata": { "description": "Store filter - metadata providers" }, - "storeFilterDownload": "Download", + "storeFilterDownload": "Baixar", "@storeFilterDownload": { "description": "Store filter - download providers" }, @@ -1756,63 +1756,63 @@ "@storeClearFilters": { "description": "Button to clear all filters" }, - "storeAddRepoTitle": "Add Extension Repository", + "storeAddRepoTitle": "Adicionar repositório de extensões", "@storeAddRepoTitle": { "description": "Store setup screen - heading when no repo is configured" }, - "storeAddRepoDescription": "Enter a GitHub repository URL that contains a registry.json file to browse and install extensions.", + "storeAddRepoDescription": "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" }, - "storeRepoUrlLabel": "Repository URL", + "storeRepoUrlLabel": "URL do repositório", "@storeRepoUrlLabel": { "description": "Label for the repository URL input field" }, - "storeRepoUrlHint": "https://github.com/user/repo", + "storeRepoUrlHint": "https://github.com/usuario/repositorio", "@storeRepoUrlHint": { "description": "Hint/placeholder for the repository URL input field" }, - "storeRepoUrlHelper": "e.g. https://github.com/user/extensions-repo", + "storeRepoUrlHelper": "e.g. https://github.com/usuario/repositorio-extensao", "@storeRepoUrlHelper": { "description": "Helper text below the repository URL input field" }, - "storeAddRepoButton": "Add Repository", + "storeAddRepoButton": "Adicionar repositório", "@storeAddRepoButton": { "description": "Button to submit a new repository URL" }, - "storeChangeRepoTooltip": "Change repository", + "storeChangeRepoTooltip": "Mudar repositório", "@storeChangeRepoTooltip": { "description": "Tooltip for the change-repository icon button in the app bar" }, - "storeRepoDialogTitle": "Extension Repository", + "storeRepoDialogTitle": "Repositório de extensões", "@storeRepoDialogTitle": { "description": "Title of the change/remove repository dialog" }, - "storeRepoDialogCurrent": "Current repository:", + "storeRepoDialogCurrent": "Repositório atual:", "@storeRepoDialogCurrent": { "description": "Label shown above the current repository URL in the dialog" }, - "storeNewRepoUrlLabel": "New Repository URL", + "storeNewRepoUrlLabel": "URL do novo repositório", "@storeNewRepoUrlLabel": { "description": "Label for the new repository URL field inside the dialog" }, - "storeLoadError": "Failed to load repository", + "storeLoadError": "Falha ao carregar o repositório", "@storeLoadError": { "description": "Error heading when the store cannot be loaded" }, - "storeEmptyNoExtensions": "No extensions available", + "storeEmptyNoExtensions": "Nenhuma extensão disponível", "@storeEmptyNoExtensions": { "description": "Message when store has no extensions" }, - "storeEmptyNoResults": "No extensions found", + "storeEmptyNoResults": "Nenhuma extensão encontrada", "@storeEmptyNoResults": { "description": "Message when search/filter returns no results" }, - "extensionDefaultProvider": "Default Search", + "extensionDefaultProvider": "Pesquisa padrão", "@extensionDefaultProvider": { "description": "Default search provider option" }, - "extensionDefaultProviderSubtitle": "Use the default metadata search", + "extensionDefaultProviderSubtitle": "Usar a pesquisa padrão de metadados", "@extensionDefaultProviderSubtitle": { "description": "Subtitle for default provider" }, @@ -1939,7 +1939,7 @@ "@extensionsInstalledSuccess": { "description": "Success message after install" }, - "extensionsInstalledCount": "{count} extensions installed successfully", + "extensionsInstalledCount": "{count} extensões instaladas com sucesso", "@extensionsInstalledCount": { "description": "Success message after installing multiple extensions", "placeholders": { @@ -1949,7 +1949,7 @@ } } }, - "extensionsInstallPartialSuccess": "Installed {installed} of {attempted} extensions", + "extensionsInstallPartialSuccess": "Instaladas {installed} de {attempted} extensões", "@extensionsInstallPartialSuccess": { "description": "Message when installing multiple extensions partially succeeds", "placeholders": { @@ -1971,11 +1971,11 @@ "@extensionsDownloadPrioritySubtitle": { "description": "Subtitle for download priority" }, - "extensionsFallbackTitle": "Fallback Extensions", + "extensionsFallbackTitle": "Extensões alternativas", "@extensionsFallbackTitle": { "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", + "extensionsFallbackSubtitle": "Escolha quais extensões de download instaladas podem ser usadas como alternativa", "@extensionsFallbackSubtitle": { "description": "Subtitle for download fallback extensions menu" }, @@ -2015,15 +2015,15 @@ "@extensionsErrorLoading": { "description": "Error message when extension fails to load" }, - "qualityFlacLossless": "FLAC Lossless", + "qualityFlacLossless": "FLAC sem perdas", "@qualityFlacLossless": { "description": "Quality option - CD quality FLAC" }, - "qualityFlacLosslessSubtitle": "16-bit / 44.1kHz", + "qualityFlacLosslessSubtitle": "16 bits / 44,1 kHz", "@qualityFlacLosslessSubtitle": { "description": "Technical spec for lossless" }, - "qualityHiResFlac": "Hi-Res FLAC", + "qualityHiResFlac": "FLAC de alta resolução", "@qualityHiResFlac": { "description": "Quality option - high resolution FLAC" }, @@ -2031,7 +2031,7 @@ "@qualityHiResFlacSubtitle": { "description": "Technical spec for hi-res" }, - "qualityHiResFlacMax": "Hi-Res FLAC Max", + "qualityHiResFlacMax": "FLAC Max de alta resolução", "@qualityHiResFlacMax": { "description": "Quality option - maximum resolution FLAC" }, From 0f3a16c79a34cd6911d9c460bbb2dfb675560bbb Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 5 Jul 2026 13:29:43 +0700 Subject: [PATCH 133/137] New translations app_en.arb (Portuguese) [ci skip] --- lib/l10n/arb/app_pt_PT.arb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/l10n/arb/app_pt_PT.arb b/lib/l10n/arb/app_pt_PT.arb index e1017145..81adf54b 100644 --- a/lib/l10n/arb/app_pt_PT.arb +++ b/lib/l10n/arb/app_pt_PT.arb @@ -2508,15 +2508,15 @@ "@libraryAutoScan": { "description": "Setting for automatic library scanning" }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", + "libraryAutoScanSubtitle": "Escanear automaticamente sua biblioteca em busca de novos arquivos", "@libraryAutoScanSubtitle": { "description": "Subtitle for auto scan setting" }, - "libraryAutoScanOff": "Off", + "libraryAutoScanOff": "Desligar", "@libraryAutoScanOff": { "description": "Auto scan disabled" }, - "libraryAutoScanOnOpen": "Every app open", + "libraryAutoScanOnOpen": "Sempre que abrir o aplicativo", "@libraryAutoScanOnOpen": { "description": "Auto scan when app opens" }, @@ -2960,7 +2960,7 @@ "@cacheTempDirectoryDesc": { "description": "Description of what temporary directory contains" }, - "cacheCoverImage": "Cover image cache", + "cacheCoverImage": "Cache da imagem de capa", "@cacheCoverImage": { "description": "Cache item title for persistent cover images" }, From 4b69278becc0a27a766d9c4cb1df67d4e1410547 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Sun, 5 Jul 2026 22:15:21 +0700 Subject: [PATCH 134/137] New translations app_en.arb (Korean) [ci skip] --- lib/l10n/arb/app_ko.arb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/l10n/arb/app_ko.arb b/lib/l10n/arb/app_ko.arb index 76c2df6b..b24269ff 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -784,7 +784,7 @@ "@previewUnavailable": { "description": "Snackbar shown when a track preview snippet cannot be played" }, - "dialogDiscard": "취소", + "dialogDiscard": "폐기", "@dialogDiscard": { "description": "Dialog button - discard changes" }, @@ -796,11 +796,11 @@ "@dialogUninstall": { "description": "Dialog button - uninstall extension" }, - "dialogDiscardChanges": "변경 사항 취소", + "dialogDiscardChanges": "변경 사항 폐기", "@dialogDiscardChanges": { "description": "Dialog title - unsaved changes warning" }, - "dialogUnsavedChanges": "저장되지 않은 변경 사항이 있습니다. 삭제하시겠습니까?", + "dialogUnsavedChanges": "저장되지 않은 변경 사항이 있습니다. 폐기하시겠습니까?", "@dialogUnsavedChanges": { "description": "Dialog message - unsaved changes" }, From 9e299c52cde68b4b385b5e3781efb19ca9ab01cf Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 7 Jul 2026 00:23:25 +0700 Subject: [PATCH 135/137] 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 b24269ff..e6830aac 100644 --- a/lib/l10n/arb/app_ko.arb +++ b/lib/l10n/arb/app_ko.arb @@ -1868,7 +1868,7 @@ "@extensionRemoveButton": { "description": "Button to uninstall extension" }, - "extensionUpdated": "다운로드됨", + "extensionUpdated": "업데이트됨", "@extensionUpdated": { "description": "Extension detail - last update" }, From 5fe644b07970e830ffd54e89b8cc68d861453b6a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 7 Jul 2026 04:05:05 +0700 Subject: [PATCH 136/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index e51f22a6..55d943b8 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -3993,7 +3993,7 @@ "@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": "Los tokens y las claves API de las extensiones se guardarán en el archivo de copia de seguridad. Mantenga el archivo privado. Cuando está desactivado, volverá a introducirlos después de restaurar.", "@backupIncludeSecretsDescription": { "description": "Explanation for the include-credentials toggle" }, From e2b2e2aac6b4c702aa4c6e89046686439f5b33a8 Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 7 Jul 2026 05:19:13 +0700 Subject: [PATCH 137/137] New translations app_en.arb (Spanish) [ci skip] --- lib/l10n/arb/app_es_ES.arb | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/lib/l10n/arb/app_es_ES.arb b/lib/l10n/arb/app_es_ES.arb index 55d943b8..4c49a2c8 100644 --- a/lib/l10n/arb/app_es_ES.arb +++ b/lib/l10n/arb/app_es_ES.arb @@ -4006,7 +4006,7 @@ } } }, - "tooltipLoveAll": "Love All", + "tooltipLoveAll": "Favoritos", "@tooltipLoveAll": { "description": "Tooltip for the Love All button on album/playlist screens" }, @@ -4014,7 +4014,7 @@ "@tooltipAddToPlaylist": { "description": "Tooltip for the Add to Playlist button" }, - "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", + "snackbarRemovedTracksFromLoved": "Eliminadas {count} pistas de Favoritos", "@snackbarRemovedTracksFromLoved": { "description": "Snackbar after removing multiple tracks from Loved folder", "placeholders": { @@ -4023,7 +4023,7 @@ } } }, - "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", + "snackbarAddedTracksToLoved": "Agregadas {count} pistas de Favoritos", "@snackbarAddedTracksToLoved": { "description": "Snackbar after adding multiple tracks to Loved folder", "placeholders": { @@ -4036,7 +4036,7 @@ "@dialogDownloadAllTitle": { "description": "Dialog title for bulk download confirmation" }, - "dialogDownloadAllMessage": "Download {count} tracks?", + "dialogDownloadAllMessage": "¿Descargar {count} pistas?", "@dialogDownloadAllMessage": { "description": "Body of the Download All confirmation dialog", "placeholders": { @@ -4045,7 +4045,7 @@ } } }, - "homeSkipAlreadyDownloaded": "Skip already downloaded songs", + "homeSkipAlreadyDownloaded": "Omitir canciones ya descargadas", "@homeSkipAlreadyDownloaded": { "description": "Checkbox label in import dialog to skip already-downloaded songs" }, @@ -4053,23 +4053,23 @@ "@homeGoToAlbum": { "description": "Context menu item to navigate to the album page" }, - "homeAlbumInfoUnavailable": "Album info not available", + "homeAlbumInfoUnavailable": "La información del álbum no está disponible", "@homeAlbumInfoUnavailable": { "description": "Snackbar when album info cannot be loaded" }, - "snackbarLoadingCueSheet": "Loading CUE sheet...", + "snackbarLoadingCueSheet": "Cargando hoja CUE...", "@snackbarLoadingCueSheet": { "description": "Snackbar while loading a CUE sheet file" }, - "snackbarMetadataSaved": "Metadata saved successfully", + "snackbarMetadataSaved": "Metadatos guardados correctamente", "@snackbarMetadataSaved": { "description": "Snackbar after successfully saving track metadata" }, - "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", + "snackbarFailedToEmbedLyrics": "Error al incrustar letras", "@snackbarFailedToEmbedLyrics": { "description": "Snackbar when lyrics embedding fails" }, - "snackbarFailedToWriteStorage": "Failed to write back to storage", + "snackbarFailedToWriteStorage": "Error al escribir de vuelta al almacenamiento", "@snackbarFailedToWriteStorage": { "description": "Snackbar when writing metadata back to file fails" }, @@ -4082,23 +4082,23 @@ } } }, - "snackbarNoActionDefined": "No action defined for this button", + "snackbarNoActionDefined": "Ninguna acción definida para este botón", "@snackbarNoActionDefined": { "description": "Snackbar when an extension button has no action configured" }, - "noTracksFoundForAlbum": "No tracks found for this album", + "noTracksFoundForAlbum": "No se encontraron pistas para este álbum", "@noTracksFoundForAlbum": { "description": "Empty state message when an album has no tracks" }, - "downloadLocationSubtitle": "Choose where to save your downloaded tracks", + "downloadLocationSubtitle": "Elige dónde guardar tus pistas descargadas", "@downloadLocationSubtitle": { "description": "Subtitle shown in the download location picker sheet" }, - "storageModeAppFolder": "App Folder (Recommended)", + "storageModeAppFolder": "Carpeta de la App (Recomendado)", "@storageModeAppFolder": { "description": "Storage mode option - app-managed folder" }, - "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", + "storageModeAppFolderSubtitle": "Guarda en Music/SpotiFLAC por defecto", "@storageModeAppFolderSubtitle": { "description": "Subtitle for app folder storage mode" }, @@ -4114,19 +4114,19 @@ "@downloadFilenameDescription": { "description": "Description shown in filename format editor" }, - "downloadFilenameInsertTag": "Tap to insert tag:", + "downloadFilenameInsertTag": "Toca para insertar etiqueta:", "@downloadFilenameInsertTag": { "description": "Label above filename tag chips" }, - "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", + "downloadSeparateSinglesEnabled": "Sencillos y EPs guardados en una carpeta separada", "@downloadSeparateSinglesEnabled": { "description": "Subtitle when separate singles folder is on" }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", + "downloadSeparateSinglesDisabled": "Sencillos y álbumes guardados en la misma carpeta", "@downloadSeparateSinglesDisabled": { "description": "Subtitle when separate singles folder is off" }, - "downloadArtistNameFilters": "Artist Name Filters", + "downloadArtistNameFilters": "Filtros de Nombre del Artista", "@downloadArtistNameFilters": { "description": "Setting title for artist folder filter options" },