From 4173332cc6ff4ce4522de6d960d0a285b6d2319a Mon Sep 17 00:00:00 2001 From: Zarz Eleutherius <42882290+zarzet@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:23:49 +0700 Subject: [PATCH] New translations app_en.arb (Russian) [ci skip] --- lib/l10n/arb/app_ru.arb | 11598 ++++++++++++++++++++------------------ 1 file changed, 6022 insertions(+), 5576 deletions(-) diff --git a/lib/l10n/arb/app_ru.arb b/lib/l10n/arb/app_ru.arb index 4a981021..5570f308 100644 --- a/lib/l10n/arb/app_ru.arb +++ b/lib/l10n/arb/app_ru.arb @@ -1,78 +1,229 @@ { "@@locale": "ru", "@@last_modified": "2026-04-28", - "libraryEnableLocalLibrarySubtitle": "Сканировать и отслеживать вашу существующую музыку", - "@libraryEnableLocalLibrarySubtitle": { - "description": "Subtitle for enable toggle" + "appName": "Spotify", + "@appName": { + "description": "App name - DO NOT TRANSLATE" }, - "@audioAnalysisCodec": { - "description": "Audio codec metric label" + "navHome": "Главная", + "@navHome": { + "description": "Bottom navigation - Home tab" }, - "extensionUtilityFunctions": "Utility Functions", - "@extensionUtilityFunctions": { - "description": "Capability label for utility-only extensions" + "navLibrary": "Библиотека", + "@navLibrary": { + "description": "Bottom navigation - Library tab" }, - "logClearLogsMessage": "Вы уверены, что хотите очистить все логи?", - "@logClearLogsMessage": { - "description": "Clear logs confirmation message" + "navSettings": "Настройки", + "@navSettings": { + "description": "Bottom navigation - Settings tab" }, - "@storeClearFilters": { - "description": "Button to clear all filters" + "navStore": "Репозиторий", + "@navStore": { + "description": "Bottom navigation - Extension repo tab" }, - "cacheCleanupUnused": "Очистка неиспользуемых данных", - "@cacheCleanupUnused": { - "description": "Action title for cleaning unused entries" + "homeTitle": "Главная", + "@homeTitle": { + "description": "Home screen title" }, - "trackConvertDitherNone": "None", - "@trackConvertDitherNone": { - "description": "Lossless conversion dither option with no dithering applied" + "homeSubtitle": "Вставьте URL или ищите по названию", + "@homeSubtitle": { + "description": "Subtitle shown below search box" }, - "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", - "@libraryTracksUnit": { - "description": "Unit label for tracks count (without the number itself)", + "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": "Поддерживается: Трек, Альбом, Плейлист, URL исполнителя", + "@homeSupports": { + "description": "Info text about supported URL types" + }, + "homeRecent": "Недавние", + "@homeRecent": { + "description": "Section header for recent searches" + }, + "historyFilterAll": "Все", + "@historyFilterAll": { + "description": "Filter chip - show all items" + }, + "historyFilterAlbums": "Альбомы", + "@historyFilterAlbums": { + "description": "Filter chip - show albums only" + }, + "historyFilterSingles": "Синглы", + "@historyFilterSingles": { + "description": "Filter chip - show singles only" + }, + "historySearchHint": "Поиск в истории...", + "@historySearchHint": { + "description": "Search bar placeholder in history" + }, + "settingsTitle": "Настройки", + "@settingsTitle": { + "description": "Settings screen title" + }, + "settingsDownload": "Скачивание", + "@settingsDownload": { + "description": "Settings section - download options" + }, + "settingsAppearance": "Внешний вид", + "@settingsAppearance": { + "description": "Settings section - visual customization" + }, + "settingsExtensions": "Расширения", + "@settingsExtensions": { + "description": "Settings section - extension management" + }, + "settingsAbout": "О программе", + "@settingsAbout": { + "description": "Settings section - app info" + }, + "downloadTitle": "Скачать", + "@downloadTitle": { + "description": "Download settings page title" + }, + "downloadAskQualitySubtitle": "Показывать выбор качества для каждого скачивания", + "@downloadAskQualitySubtitle": { + "description": "Subtitle for ask quality toggle" + }, + "downloadFilenameFormat": "Формат имени файла", + "@downloadFilenameFormat": { + "description": "Setting for output filename pattern" + }, + "downloadSingleFilenameFormat": "Формат имени файла", + "@downloadSingleFilenameFormat": { + "description": "Setting for output filename pattern for singles/EPs" + }, + "downloadSingleFilenameFormatDescription": "Формат имени файла для синглов и EP. Используются те же теги, что и для альбомов.", + "@downloadSingleFilenameFormatDescription": { + "description": "Subtitle description for single filename format setting" + }, + "downloadFolderOrganization": "Организация папок", + "@downloadFolderOrganization": { + "description": "Title of the folder organization picker bottom sheet" + }, + "appearanceTitle": "Внешний вид", + "@appearanceTitle": { + "description": "Appearance settings page title" + }, + "appearanceThemeSystem": "Системная", + "@appearanceThemeSystem": { + "description": "Follow system theme" + }, + "appearanceThemeLight": "Светлая", + "@appearanceThemeLight": { + "description": "Light theme" + }, + "appearanceThemeDark": "Тёмная", + "@appearanceThemeDark": { + "description": "Dark theme" + }, + "appearanceDynamicColor": "Динамический цвет", + "@appearanceDynamicColor": { + "description": "Material You dynamic colors" + }, + "appearanceDynamicColorSubtitle": "Использовать цвета из ваших обоев", + "@appearanceDynamicColorSubtitle": { + "description": "Subtitle for dynamic color" + }, + "appearanceHistoryView": "Отображение истории", + "@appearanceHistoryView": { + "description": "Layout style for history" + }, + "appearanceHistoryViewList": "Список", + "@appearanceHistoryViewList": { + "description": "List layout option" + }, + "appearanceHistoryViewGrid": "Сетка", + "@appearanceHistoryViewGrid": { + "description": "Grid layout option" + }, + "optionsPrimaryProvider": "Основной провайдер", + "@optionsPrimaryProvider": { + "description": "Main search provider setting" + }, + "optionsPrimaryProviderSubtitle": "Сервис для поиска по названию трека или альбома", + "@optionsPrimaryProviderSubtitle": { + "description": "Subtitle for primary provider" + }, + "optionsUsingExtension": "Используется расширение: {extensionName}", + "@optionsUsingExtension": { + "description": "Shows active extension name", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "optionsDefaultSearchTab": "Вкладка поиска по умолчанию", + "@optionsDefaultSearchTab": { + "description": "Title for the preferred default search tab setting" + }, + "optionsDefaultSearchTabSubtitle": "Выберите, какая вкладка открывает новые результаты поиска.", + "@optionsDefaultSearchTabSubtitle": { + "description": "Subtitle for the preferred default search tab setting" + }, + "optionsAutoFallback": "Автоматический переход", + "@optionsAutoFallback": { + "description": "Auto-retry with other services" + }, + "optionsAutoFallbackSubtitle": "Попробовать другие сервисы при сбое загрузки", + "@optionsAutoFallbackSubtitle": { + "description": "Subtitle for auto fallback" + }, + "optionsEmbedLyrics": "Вписать текст песни", + "@optionsEmbedLyrics": { + "description": "Embed lyrics in audio files" + }, + "optionsEmbedLyricsSubtitle": "Сохранять синхронизированный текст песни рядом с загруженным треком", + "@optionsEmbedLyricsSubtitle": { + "description": "Subtitle for embed lyrics" + }, + "optionsReplayGain": "ReplayGain", + "@optionsReplayGain": { + "description": "Title for ReplayGain setting toggle" + }, + "optionsReplayGainSubtitleOn": "Сканировать громкость и вставить теги ReplayGain (EBU R128)", + "@optionsReplayGainSubtitleOn": { + "description": "Subtitle when ReplayGain is enabled" + }, + "optionsReplayGainSubtitleOff": "Выключено: нет тегов нормализации громкости", + "@optionsReplayGainSubtitleOff": { + "description": "Subtitle when ReplayGain is disabled" + }, + "trackReplayGain": "Пересканировать ReplayGain", + "@trackReplayGain": { + "description": "Three-dot menu option to scan loudness and write ReplayGain tags" + }, + "trackReplayGainScanning": "Анализ громкости...", + "@trackReplayGainScanning": { + "description": "Snackbar/progress message while scanning ReplayGain for a single track" + }, + "trackReplayGainSuccess": "Добавлены теги ReplayGain", + "@trackReplayGainSuccess": { + "description": "Snackbar message after ReplayGain tags written for a single track" + }, + "trackReplayGainFailed": "Не удалось добавить теги ReplayGain", + "@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" } } }, - "folderOrganizationNone": "Без организации", - "@folderOrganizationNone": { - "description": "Folder option - flat structure" - }, - "@storeRepoUrlHint": { - "description": "Hint/placeholder for the repository URL input field" - }, - "@trackConvertConfirmTitle": { - "description": "Confirmation dialog title" - }, - "@extensionPatternsCount": { - "description": "URL patterns count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "audioAnalysisContainer": "Container", - "@audioAnalysisContainer": { - "description": "Audio container metric label" - }, - "libraryAutoScanOff": "Off", - "@libraryAutoScanOff": { - "description": "Auto scan disabled" - }, - "shareSheetLinkCopied": "{service} link copied", - "@shareSheetLinkCopied": { - "description": "Snackbar after copying a cross-service link", - "placeholders": { - "service": {} - } - }, - "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", - "@providerPriorityFallbackExtensionsDescription": { - "description": "Section description for extension fallback selection" + "replayGainBatchConfirmTitle": "Добавить ReplayGain", + "@replayGainBatchConfirmTitle": { + "description": "Title of the batch ReplayGain confirmation dialog" }, + "replayGainBatchConfirmMessage": "Проанализировать громкость и записать ReplayGain теги на {count} трек(-а)?", "@replayGainBatchConfirmMessage": { "description": "Message of the batch ReplayGain confirmation dialog", "placeholders": { @@ -81,73 +232,9 @@ } } }, - "@extensionsHomeFeedUse": { - "description": "Extensions page - subtitle for a specific extension home feed option", - "placeholders": { - "extensionName": { - "type": "String" - } - } - }, - "selectionShareCount": "Отправить {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", - "@selectionShareCount": { - "description": "Share button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@storeExtensionsCount": { - "description": "Store extension result count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@logSearchHint": { - "description": "Log search placeholder" - }, - "@audioAnalysisSamples": { - "description": "Total samples metric label" - }, - "trackCoverReplace": "Replace Cover", - "@trackCoverReplace": { - "description": "Button label for replacing selected cover art" - }, - "@discographyAddedToQueue": { - "description": "Snackbar - tracks added from discography", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "downloadAppleElrcWordSyncEnabled": "Raw word-by-word timestamps preserved", - "@downloadAppleElrcWordSyncEnabled": { - "description": "Subtitle when Apple Music eLRC word sync is enabled" - }, - "@nowPlayingDetails": { - "description": "Menu item and section title for track metadata details" - }, - "@trackGenre": { - "description": "Metadata label - music genre" - }, - "recentTypeSong": "Песня", - "@recentTypeSong": { - "description": "Recent access item type - song/track" - }, - "logShareLogs": "Поделиться логами", - "@logShareLogs": { - "description": "Share button tooltip" - }, - "@storeFilterLyrics": { - "description": "Repo filter - lyrics providers" - }, - "extensionsInstallButton": "Установить расширение", - "@extensionsInstallButton": { - "description": "Button to install extension from file" + "replayGainBatchAnalyzing": "Анализ ReplayGain...", + "@replayGainBatchAnalyzing": { + "description": "Progress dialog title while batch scanning ReplayGain" }, "replayGainBatchSuccess": "ReplayGain добавлен к {success} треков {total}", "@replayGainBatchSuccess": { @@ -161,548 +248,536 @@ } } }, - "nowPlayingMinimize": "Minimize", - "@nowPlayingMinimize": { - "description": "Tooltip for minimizing the now playing screen" + "optionsArtistTagMode": "Режим тега исполнителя", + "@optionsArtistTagMode": { + "description": "Setting title for how artist metadata is written into files" }, - "logIssueNetworkErrorSuggestion": "Check your internet connection", - "@logIssueNetworkErrorSuggestion": { - "description": "Diagnostic badge suggestion for generic network errors" + "optionsArtistTagModeDescription": "Выберите, как несколько исполнителей записываются встроенные теги.", + "@optionsArtistTagModeDescription": { + "description": "Bottom-sheet description for artist tag mode setting" }, - "extensionsNoExtensions": "Нет установленных расширений", - "@extensionsNoExtensions": { - "description": "Empty state - no extensions" + "optionsArtistTagModeJoined": "Single joined value", + "@optionsArtistTagModeJoined": { + "description": "Artist tag mode option that joins multiple artists into one value" }, - "@cacheRefresh": { - "description": "Tooltip for refresh button on cache management page" + "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", + "@optionsArtistTagModeJoinedSubtitle": { + "description": "Subtitle for joined artist tag mode" }, - "@snackbarHistoryCleared": { - "description": "Snackbar - history deleted" + "optionsArtistTagModeSplitVorbis": "Разделить теги для FLAC/Opus", + "@optionsArtistTagModeSplitVorbis": { + "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" }, - "cueSplitFailed": "Разделение CUE не удалось", - "@cueSplitFailed": { - "description": "Snackbar when CUE split fails" - }, - "trackConvertLosslessSuffix": "Lossless", - "@trackConvertLosslessSuffix": { - "description": "Suffix used in converted lossless quality labels" - }, - "homeSubtitle": "Вставьте URL или ищите по названию", - "@homeSubtitle": { - "description": "Subtitle shown below search box" - }, - "selectionBatchConvertConfirmMessageLossless": "Конвертировать {count} {count, plural, =1{track} other{tracks}} в {format}? (Без потери качества)\n\nОригинальные файлы будут удалены после конвертации.", - "@selectionBatchConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless batch conversion", - "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - } - } - }, - "@extensionVerificationHelpMessageManual": { - "description": "Dialog message when automatic browser launch for verification fails" - }, - "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", - "@queueRateLimitMessage": { - "description": "Explanation shown on a failed queue item when the download service rate limits requests" - }, - "searchSortDateOldest": "Дата релиза (старейшая)", - "@searchSortDateOldest": { - "description": "Sort option - oldest release first" - }, - "nowPlayingShuffleOn": "Shuffle on", - "@nowPlayingShuffleOn": { - "description": "Tooltip when shuffle mode is enabled" - }, - "sectionColor": "Цвет", - "@sectionColor": { - "description": "Settings section header" - }, - "@providerPriorityFallbackExtensionsHint": { - "description": "Hint below the extension fallback selection list" - }, - "cacheCoverImage": "Кэш обложек", - "@cacheCoverImage": { - "description": "Cache item title for persistent cover images" - }, - "@navSettings": { - "description": "Bottom navigation - Settings tab" - }, - "@trackCoverReplaceNotice": { - "description": "Notice shown when a new cover has been selected but not saved yet" - }, - "cueSplitConfirmTitle": "Разделенный CUE-альбом", - "@cueSplitConfirmTitle": { - "description": "CUE split confirmation dialog title" - }, - "@trackDeleteConfirmMessage": { - "description": "Delete confirmation message" - }, - "cacheClearSuccess": "Очищено: {target}", - "@cacheClearSuccess": { - "description": "Snackbar after clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } - }, - "editMetadataFieldCover": "Обложка", - "@editMetadataFieldCover": { - "description": "Chip label for cover art field in auto-fill selector" - }, - "snackbarSelectExtFile": "Пожалуйста, выберите .spotiflac-ext-файл", - "@snackbarSelectExtFile": { - "description": "Snackbar - wrong file type selected" - }, - "libraryFilterFormat": "Формат", - "@libraryFilterFormat": { - "description": "Filter section - file format" - }, - "@downloadLossyAac": { - "description": "Lossy format option - AAC in M4A container at 320kbps" - }, - "@setupNext": { - "description": "Next button text" - }, - "@releaseTypeSingle": { - "description": "Badge label for single releases" - }, - "@optionsDefaultSearchTab": { - "description": "Title for the preferred default search tab setting" - }, - "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", - "@trackConvertLosslessOutputWithCap": { - "description": "Hint shown when lossless conversion will cap bit depth or sample rate", - "placeholders": { - "quality": { - "type": "String" - } - } - }, - "bulkDownloadSelectPlaylists": "Select playlists to download", - "@bulkDownloadSelectPlaylists": { - "description": "Button label when no playlists are selected for download" - }, - "artistOptionAddToFavorites": "Добавить в избранные исполнители", - "@artistOptionAddToFavorites": { - "description": "Action label - add artist to favorite artists" - }, - "@timeJustNow": { - "description": "Relative time - less than a minute ago" - }, - "downloadLossyOpus256": "Opus 256 кбит/с", - "@downloadLossyOpus256": { - "description": "Lossy format option - Opus 256kbps" - }, - "discographySinglesOnlySubtitle": "{count} треков из {albumCount} синглов", - "@discographySinglesOnlySubtitle": { - "description": "Subtitle showing singles tracks count", - "placeholders": { - "count": { - "type": "int" - }, - "albumCount": { - "type": "int" - } - } + "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": "Репозиторий расширения", "@optionsExtensionStore": { "description": "Show/hide repo tab" }, - "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", - "@libraryDownloadsHistoryExcluded": { - "description": "Library count note for downloaded history items excluded from the local list", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsExtensionStoreSubtitle": "Показывать вкладку репозитория в навигации", + "@optionsExtensionStoreSubtitle": { + "description": "Subtitle for extension repo toggle" }, - "@errorUrlFetchFailed": { - "description": "Error message - generic URL fetch failure" + "optionsCheckUpdates": "Проверить обновления", + "@optionsCheckUpdates": { + "description": "Auto update check toggle" }, - "@trackOptionAddToWishlist": { - "description": "Bottom sheet action label - add track to wishlist" + "optionsCheckUpdatesSubtitle": "Уведомлять о наличии новой версии", + "@optionsCheckUpdatesSubtitle": { + "description": "Subtitle for update check" }, - "discographySinglesOnly": "Только синглы и EP", - "@discographySinglesOnly": { - "description": "Option - download only singles" + "optionsUpdateChannel": "Канал обновлений", + "@optionsUpdateChannel": { + "description": "Stable vs preview releases" }, - "@downloadSongLinkRegionDesc": { - "description": "Description in SongLink region picker" + "optionsUpdateChannelStable": "Только стабильные релизы", + "@optionsUpdateChannelStable": { + "description": "Only stable updates" }, - "notifEmbeddingMetadata": "Встраивание метаданных...", - "@notifEmbeddingMetadata": { - "description": "Notification body while embedding metadata into a downloaded track" + "optionsUpdateChannelPreview": "Предварительные версии", + "@optionsUpdateChannelPreview": { + "description": "Include beta/preview updates" }, - "@settingsLocalLibrarySubtitle": { - "description": "Subtitle for local library settings" + "optionsUpdateChannelWarning": "Предварительная версия может содержать ошибки или неполные функции", + "@optionsUpdateChannelWarning": { + "description": "Warning about preview channel" }, - "@downloadLocationSubtitle": { - "description": "Subtitle shown in the download location picker sheet" + "optionsClearHistory": "Очистить историю загрузок", + "@optionsClearHistory": { + "description": "Delete all download history" }, - "trackConvertOriginalQuality": "Original quality", - "@trackConvertOriginalQuality": { - "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + "optionsClearHistorySubtitle": "Удалить все скачанные треки из истории", + "@optionsClearHistorySubtitle": { + "description": "Subtitle for clear history" }, - "nowPlayingTabLyrics": "Lyrics", - "@nowPlayingTabLyrics": { - "description": "Tab label for the lyrics view" + "optionsDetailedLogging": "Подробный лог", + "@optionsDetailedLogging": { + "description": "Enable verbose logs for debugging" }, - "selectionConvertCount": "Конвертировать {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", - "@selectionConvertCount": { - "description": "Convert button text with count in selection mode", - "placeholders": { - "count": { - "type": "int" - } - } + "optionsDetailedLoggingOn": "Ведутся подробные логи", + "@optionsDetailedLoggingOn": { + "description": "Status when logging enabled" }, - "@extensionsInstalledSection": { - "description": "Section header - installed extensions" + "optionsDetailedLoggingOff": "Включить для отчётов об ошибках", + "@optionsDetailedLoggingOff": { + "description": "Status when logging disabled" }, - "@downloadNetworkCompatibilityModeDisabled": { - "description": "Subtitle when network compatibility mode is off" + "extensionsTitle": "Расширения", + "@extensionsTitle": { + "description": "Extensions page title" }, - "nowPlayingShuffleLibrary": "Shuffle library", - "@nowPlayingShuffleLibrary": { - "description": "Button label to shuffle and play the entire local library" + "extensionsDisabled": "Выключено", + "@extensionsDisabled": { + "description": "Extension status - inactive" }, - "trackReEnrichFieldCover": "Обложка", - "@trackReEnrichFieldCover": { - "description": "Checkbox label for cover art field in re-enrich" - }, - "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", - "@tutorialExtensionsTip3": { - "description": "Tutorial extensions tip 3" - }, - "@cacheCleanupUnusedDesc": { - "description": "Description of what cleanup unused data does" - }, - "a11yOpenAlbum": "Open album {albumName}", - "@a11yOpenAlbum": { - "description": "Accessibility label for opening an album", - "placeholders": { - "albumName": { - "type": "String" - } - } - }, - "@settingsLyrics": { - "description": "Settings menu item - lyrics settings" - }, - "nowPlayingQueueEmpty": "Queue is empty", - "@nowPlayingQueueEmpty": { - "description": "Empty state when the playback queue has no items" - }, - "@settingsDownload": { - "description": "Settings section - download options" - }, - "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", - "@notifTracksDownloadedSuccess": { - "description": "Notification body for queue complete - how many tracks were downloaded", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "storeCategoryDownload": "Download", - "@storeCategoryDownload": { - "description": "Store extension category - download" - }, - "aboutTelegramChannel": "Telegram канал", - "@aboutTelegramChannel": { - "description": "Link to Telegram channel" - }, - "@downloadedAlbumDiscHeader": { - "description": "Header for disc separator in multi-disc albums", - "placeholders": { - "discNumber": { - "type": "int", - "example": "1" - } - } - }, - "@recentEmpty": { - "description": "Empty state text for recent access list" - }, - "@backupRestoreConfirmMessage": { - "description": "Confirmation dialog message before restoring a backup" - }, - "@shareSheetCopyLink": { - "description": "Tooltip for copying a cross-service link" - }, - "regionCountryID": "Indonesia", - "@regionCountryID": { - "description": "Country name for SongLink region picker" - }, - "@libraryInLibrary": { - "description": "Badge shown on tracks that exist in local library" - }, - "extensionPostProcessingHooks": "Хуки постобработки", - "@extensionPostProcessingHooks": { - "description": "Capability - post-processing" - }, - "@setupGrantPermission": { - "description": "Button to request permission" - }, - "storeFilterDownload": "Скачивание", - "@storeFilterDownload": { - "description": "Repo filter - download providers" - }, - "@collectionAddToPlaylist": { - "description": "Action to add a track to user playlist" - }, - "@discographyFailedToFetch": { - "description": "Error - some albums failed to load" - }, - "@updateWhatsNew": { - "description": "Changelog section title" - }, - "@setupLanguageDescription": { - "description": "Description for the language selection step in setup" - }, - "dialogDeleteSelectedTitle": "Удалить выбранные", - "@dialogDeleteSelectedTitle": { - "description": "Dialog title - delete selected items" - }, - "trackCoverPick": "Pick Cover", - "@trackCoverPick": { - "description": "Button label for selecting cover art" - }, - "@collectionCreatePlaylist": { - "description": "Action to create a new playlist" - }, - "selectionBatchConvertSuccess": "Конвертировано {success} треков {total} в {format}", - "@selectionBatchConvertSuccess": { - "description": "Snackbar after batch conversion completes", - "placeholders": { - "success": { - "type": "int" - }, - "total": { - "type": "int" - }, - "format": { - "type": "String" - } - } - }, - "qualityHiResFlacMax": "Hi-Res FLAC Макс.", - "@qualityHiResFlacMax": { - "description": "Quality option - maximum resolution FLAC" - }, - "audioAnalysisStereo": "Stereo", - "@audioAnalysisStereo": { - "description": "Audio channel layout label - stereo" - }, - "backupExportButton": "Create backup file", - "@backupExportButton": { - "description": "Button to create and share a backup file" - }, - "settingsApp": "App", - "@settingsApp": { - "description": "Settings menu item - app settings" - }, - "clickableInformationUnavailable": "{type} information not available", - "@clickableInformationUnavailable": { - "description": "Snackbar shown when clickable metadata cannot open a destination", - "placeholders": { - "type": { - "type": "String" - } - } - }, - "@logFilterLevel": { - "description": "Filter by log level" - }, - "sectionTheme": "Тема", - "@sectionTheme": { - "description": "Settings section header" - }, - "@extensionActionFailed": { - "description": "Fallback error when an extension action fails without details" - }, - "@downloadAppleElrcWordSync": { - "description": "Setting for preserving Apple Music word-by-word eLRC timestamps" - }, - "@extensionsNoCustomSearch": { - "description": "Empty state - no search providers" - }, - "@collectionPlaylistRemoveCover": { - "description": "Bottom sheet action to remove custom cover image from a playlist" - }, - "@tutorialWelcomeDesc": { - "description": "Tutorial welcome page description" - }, - "@tutorialSearchDesc": { - "description": "Tutorial search page description" - }, - "collectionAddedToWishlist": "\"{trackName}\" добавлен в список желаний", - "@collectionAddedToWishlist": { - "description": "Snackbar after adding track to wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "logAffectedDomains": "Affected: {domains}", - "@logAffectedDomains": { - "description": "Affected domains in log issue analysis", - "placeholders": { - "domains": { - "type": "String" - } - } - }, - "@folderOrganizationByArtistSubtitle": { - "description": "Subtitle for artist folder option" - }, - "errorNoTracksFound": "Треки не найдены", - "@errorNoTracksFound": { - "description": "Error - search returned no results" - }, - "providerPriorityTitle": "Приоритет провайдера", - "@providerPriorityTitle": { - "description": "Provider priority page title" - }, - "@notifUpdateReadyBody": { - "description": "Notification body when app update is ready to install", + "extensionsVersion": "Версия {version}", + "@extensionsVersion": { + "description": "Extension version display", "placeholders": { "version": { "type": "String" } } }, - "@settingsExtensions": { - "description": "Settings section - extension management" + "extensionsUninstall": "Удалить", + "@extensionsUninstall": { + "description": "Uninstall extension button" }, - "trackDeleteConfirmTitle": "Удалить с устройства?", - "@trackDeleteConfirmTitle": { - "description": "Delete confirmation title" + "storeTitle": "Репозиторий расширения", + "@storeTitle": { + "description": "Repo screen title" }, - "@settingsDownloadNetwork": { - "description": "Setting for network type preference" + "storeSearch": "Поиск расширений...", + "@storeSearch": { + "description": "Repo search placeholder" }, - "downloadProvidersNoneEnabled": "No providers enabled", - "@downloadProvidersNoneEnabled": { - "description": "Shown when no lyrics providers are active" + "storeInstall": "Установить", + "@storeInstall": { + "description": "Install extension button" }, - "@homeEmptySubtitle": { - "description": "Subtitle shown on home when no providers are available yet" + "storeInstalled": "Установлено", + "@storeInstalled": { + "description": "Already installed badge" }, - "trackReEnrichFieldBasicTags": "Альбом, Исполнитель альбома", - "@trackReEnrichFieldBasicTags": { - "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + "storeUpdate": "Обновить", + "@storeUpdate": { + "description": "Update available button" }, - "@audioAnalysisSpectralCutoff": { - "description": "Estimated spectral cutoff metric label" + "aboutTitle": "О программе", + "@aboutTitle": { + "description": "About page title" }, - "@logClearLogsTitle": { - "description": "Clear logs dialog title" + "aboutContributors": "Участники", + "@aboutContributors": { + "description": "Section for contributors" }, - "storageModeSafSubtitle": "Pick any folder, including SD card", - "@storageModeSafSubtitle": { - "description": "Subtitle for SAF storage mode" + "aboutMobileDeveloper": "Разработчик мобильной версии", + "@aboutMobileDeveloper": { + "description": "Role description for mobile dev" }, - "@notifUpdateProgress": { - "description": "Notification body showing update download progress", + "aboutOriginalCreator": "Создатель оригинального SpotiFLAC", + "@aboutOriginalCreator": { + "description": "Role description for original creator" + }, + "aboutLogoArtist": "Талантливый художник, который создал наш красивый логотип приложения!", + "@aboutLogoArtist": { + "description": "Role description for logo artist" + }, + "aboutTranslators": "Переводчики", + "@aboutTranslators": { + "description": "Section for translators" + }, + "aboutSpecialThanks": "Особая благодарность", + "@aboutSpecialThanks": { + "description": "Section for special thanks" + }, + "aboutLinks": "Ссылки", + "@aboutLinks": { + "description": "Section for external links" + }, + "aboutMobileSource": "Исходный код мобильной версии", + "@aboutMobileSource": { + "description": "Link to mobile GitHub repo" + }, + "aboutPCSource": "Исходный код ПК версии", + "@aboutPCSource": { + "description": "Link to PC GitHub repo" + }, + "aboutKeepAndroidOpen": "Сохранить Android открытым", + "@aboutKeepAndroidOpen": { + "description": "Link to Keep Android Open campaign website" + }, + "aboutReportIssue": "Сообщить о проблеме", + "@aboutReportIssue": { + "description": "Link to report bugs" + }, + "aboutReportIssueSubtitle": "Сообщите о возникших проблемах", + "@aboutReportIssueSubtitle": { + "description": "Subtitle for report issue" + }, + "aboutFeatureRequest": "Предложить новую функцию", + "@aboutFeatureRequest": { + "description": "Link to suggest features" + }, + "aboutFeatureRequestSubtitle": "Предложить новые функции для приложения", + "@aboutFeatureRequestSubtitle": { + "description": "Subtitle for feature request" + }, + "aboutTelegramChannel": "Telegram канал", + "@aboutTelegramChannel": { + "description": "Link to Telegram channel" + }, + "aboutTelegramChannelSubtitle": "Объявления и обновления", + "@aboutTelegramChannelSubtitle": { + "description": "Subtitle for Telegram channel" + }, + "aboutTelegramChat": "Сообщество в Telegram", + "@aboutTelegramChat": { + "description": "Link to Telegram chat group" + }, + "aboutTelegramChatSubtitle": "Чат с другими пользователями", + "@aboutTelegramChatSubtitle": { + "description": "Subtitle for Telegram chat" + }, + "aboutSocial": "Соцсети", + "@aboutSocial": { + "description": "Section for social links" + }, + "aboutApp": "Приложение", + "@aboutApp": { + "description": "Section for app info" + }, + "aboutVersion": "Версия", + "@aboutVersion": { + "description": "Version info label" + }, + "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", + "@aboutBinimumDesc": { + "description": "Credit description for binimum" + }, + "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", + "@aboutSachinsenalDesc": { + "description": "Credit description for sachinsenal0x64" + }, + "aboutUnituneDesc": "Open-source music link resolver by Flaze, used for cross-platform fallback matching.", + "@aboutUnituneDesc": { + "description": "Credit for the UniTune resolver" + }, + "aboutMusicBrainzDesc": "Open music database maintained by MetaBrainz and its community, used for recording cross-references.", + "@aboutMusicBrainzDesc": { + "description": "Credit for the MusicBrainz database" + }, + "aboutSquiglyDesc": "Universal music link service by Liam Macmillan, used as a final cross-platform resolver fallback.", + "@aboutSquiglyDesc": { + "description": "Credit for the Squigly resolver" + }, + "aboutAppDescription": "Ищите метаданных музыки, управляйте расширениями и организуйте свою библиотеку.", + "@aboutAppDescription": { + "description": "App description in header card" + }, + "artistAlbums": "Альбомы", + "@artistAlbums": { + "description": "Section header for artist albums" + }, + "artistSingles": "Синглы и EP", + "@artistSingles": { + "description": "Section header for singles/EPs" + }, + "artistCompilations": "Сборники", + "@artistCompilations": { + "description": "Section header for compilations" + }, + "artistPopular": "Популярное", + "@artistPopular": { + "description": "Section header for popular/top tracks" + }, + "artistMonthlyListeners": "{count} слушателей в месяц", + "@artistMonthlyListeners": { + "description": "Monthly listener count display", "placeholders": { - "received": { - "type": "String" - }, - "total": { - "type": "String" - }, - "percentage": { - "type": "int" + "count": { + "type": "String", + "description": "Formatted listener count" } } }, - "downloadUsePrimaryArtistOnlyEnabled": "Список исполнителей, чьи работы были удалены из названия папки (например, Джастин Бибер, Quavo → Джастин Бибер)", - "@downloadUsePrimaryArtistOnlyEnabled": { - "description": "Subtitle when primary artist only is enabled" + "trackMetadataService": "Сервис", + "@trackMetadataService": { + "description": "Metadata field - download service used" }, - "notifScanningLibrary": "Сканирование локальной библиотеки", - "@notifScanningLibrary": { - "description": "Notification title while scanning local library" + "trackMetadataPlay": "Воспроизвести", + "@trackMetadataPlay": { + "description": "Action button - play track" }, - "@metadataProvidersSubtitle": { - "description": "Subtitle for metadata provider priority item" + "trackMetadataShare": "Поделиться", + "@trackMetadataShare": { + "description": "Action button - share track" + }, + "trackMetadataDelete": "Удалить", + "@trackMetadataDelete": { + "description": "Action button - delete track" + }, + "setupGrantPermission": "Предоставить разрешение", + "@setupGrantPermission": { + "description": "Button to request permission" + }, + "setupSkip": "Пропустить", + "@setupSkip": { + "description": "Skip current step button" + }, + "setupStorageAccessRequired": "Требуется доступ к хранилищу", + "@setupStorageAccessRequired": { + "description": "Title when storage access needed" + }, + "setupStorageAccessMessageAndroid11": "Для Android 11+ требуется разрешение \"Доступ ко всем файлам\" для сохранения файлов в выбранную вами папку загрузки.", + "@setupStorageAccessMessageAndroid11": { + "description": "Android 11+ specific explanation" + }, + "setupOpenSettings": "Открыть настройки", + "@setupOpenSettings": { + "description": "Button to open system settings" + }, + "setupPermissionDeniedMessage": "В разрешении отказано. Пожалуйста, предоставьте все разрешения для продолжения.", + "@setupPermissionDeniedMessage": { + "description": "Error when permission denied" + }, + "setupPermissionRequired": "Требуется разрешение {permissionType}", + "@setupPermissionRequired": { + "description": "Generic permission required title", + "placeholders": { + "permissionType": { + "type": "String", + "description": "Type of permission (Storage/Notification)" + } + } + }, + "setupPermissionRequiredMessage": "Для оптимальной работы требуется разрешение {permissionType}. Вы можете изменить это позже в настройках.", + "@setupPermissionRequiredMessage": { + "description": "Generic permission required message", + "placeholders": { + "permissionType": { + "type": "String" + } + } + }, + "setupUseDefaultFolder": "Использовать папку по умолчанию?", + "@setupUseDefaultFolder": { + "description": "Dialog title for default folder" + }, + "setupNoFolderSelected": "Папка не выбрана. Хотите использовать папку Музыка по умолчанию?", + "@setupNoFolderSelected": { + "description": "Prompt when no folder selected" + }, + "setupUseDefault": "По умолчанию", + "@setupUseDefault": { + "description": "Button to use default folder" + }, + "setupDownloadLocationTitle": "Папка для скачивания", + "@setupDownloadLocationTitle": { + "description": "Download location dialog title" + }, + "setupDownloadLocationIosMessage": "В iOS загрузки сохраняются в папке Документы приложения. Вы можете получить к ним доступ через приложение Файлы.", + "@setupDownloadLocationIosMessage": { + "description": "iOS-specific folder info" + }, + "setupAppDocumentsFolder": "Папка Документы приложения", + "@setupAppDocumentsFolder": { + "description": "iOS documents folder option" + }, + "setupAppDocumentsFolderSubtitle": "Рекомендуется - доступ через Файлы", + "@setupAppDocumentsFolderSubtitle": { + "description": "Subtitle for documents folder" + }, + "setupChooseFromFiles": "Выбрать из файлов", + "@setupChooseFromFiles": { + "description": "iOS file picker option" + }, + "setupChooseFromFilesSubtitle": "Выберите iCloud или другое местоположение", + "@setupChooseFromFilesSubtitle": { + "description": "Subtitle for file picker" + }, + "setupIosEmptyFolderWarning": "Ограничение iOS: пустые папки не могут быть выбраны. Выберите папку, содержащую хотя бы один файл.", + "@setupIosEmptyFolderWarning": { + "description": "iOS folder selection warning" + }, + "setupIcloudNotSupported": "iCloud Drive не поддерживается. Пожалуйста, используйте папку Документы.", + "@setupIcloudNotSupported": { + "description": "Error when user selects iCloud Drive on iOS" + }, + "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", + "@setupDownloadInFlac": { + "description": "App tagline in setup" + }, + "setupStorageGranted": "Доступ к хранилищу предоставлен!", + "@setupStorageGranted": { + "description": "Success message for storage permission" + }, + "setupStorageRequired": "Требуется доступ к хранилищу", + "@setupStorageRequired": { + "description": "Title when storage permission needed" + }, + "setupStorageDescription": "SpotiFLAC требуется разрешение на хранение для сохранения скачанных файлов.", + "@setupStorageDescription": { + "description": "Explanation for storage permission" + }, + "setupNotificationGranted": "Разрешение на уведомление предоставлено!", + "@setupNotificationGranted": { + "description": "Success message for notification permission" + }, + "setupNotificationEnable": "Включить уведомления", + "@setupNotificationEnable": { + "description": "Button to enable notifications" + }, + "setupFolderChoose": "Выбрать папку для скачивания", + "@setupFolderChoose": { + "description": "Button to choose folder" + }, + "setupFolderDescription": "Выберите папку, в которой будет сохраняться скачанная музыка.", + "@setupFolderDescription": { + "description": "Explanation for folder selection" + }, + "setupSelectFolder": "Выбрать папку", + "@setupSelectFolder": { + "description": "Button to select folder" + }, + "setupEnableNotifications": "Включить уведомления", + "@setupEnableNotifications": { + "description": "Button to enable notifications" + }, + "setupNotificationBackgroundDescription": "Получайте уведомления о ходе и завершении загрузки. Это поможет вам отслеживать загрузки, когда приложение находится в фоновом режиме.", + "@setupNotificationBackgroundDescription": { + "description": "Detailed notification explanation" + }, + "setupSkipForNow": "Пропустить", + "@setupSkipForNow": { + "description": "Skip button text" + }, + "setupNext": "Далее", + "@setupNext": { + "description": "Next button text" }, "setupGetStarted": "Приступить к работе", "@setupGetStarted": { "description": "Final setup button" }, - "libraryFilterQualityCD": "CD (16 бит)", - "@libraryFilterQualityCD": { - "description": "Filter option - CD quality audio" + "setupAllowAccessToManageFiles": "Пожалуйста, включите \"Разрешить доступ для управления всеми файлами\" на следующем экране.", + "@setupAllowAccessToManageFiles": { + "description": "Instruction for file access permission" }, - "sectionLayout": "Разметка", - "@sectionLayout": { - "description": "Settings section header" + "setupLanguageTitle": "Выберите язык", + "@setupLanguageTitle": { + "description": "Title for the language selection step in setup" }, - "@tooltipLoveAll": { - "description": "Tooltip for the Love All button on album/playlist screens" + "setupLanguageDescription": "Выберите язык для приложения. Вы можете изменить его позже в настройках.", + "@setupLanguageDescription": { + "description": "Description for the language selection step in setup" }, - "queueFinalizingDownload": "Finalizing download", - "@queueFinalizingDownload": { - "description": "Accessibility label for a queue item that is finalizing" + "setupLanguageSystemDefault": "Системные настройки", + "@setupLanguageSystemDefault": { + "description": "Option to use the system language" }, - "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", - "@trackConvertActionLabelLossy": { - "description": "Convert button label for lossy conversion", + "dialogCancel": "Отмена", + "@dialogCancel": { + "description": "Dialog button - cancel action" + }, + "dialogSave": "Сохранить", + "@dialogSave": { + "description": "Dialog button - save changes" + }, + "dialogDelete": "Удалить", + "@dialogDelete": { + "description": "Dialog button - delete item" + }, + "dialogRetry": "Повторить", + "@dialogRetry": { + "description": "Dialog button - retry action" + }, + "dialogClear": "Очистить", + "@dialogClear": { + "description": "Dialog button - clear items" + }, + "dialogDone": "Готово", + "@dialogDone": { + "description": "Dialog button - action completed" + }, + "dialogImport": "Импорт", + "@dialogImport": { + "description": "Dialog button - import data" + }, + "dialogDownload": "Скачать", + "@dialogDownload": { + "description": "Confirm button in Download All dialog" + }, + "previewPlay": "Предпросмотр проигрывания", + "@previewPlay": { + "description": "Tooltip for the button that plays a short track preview snippet" + }, + "previewStop": "Остановить предпросмотр", + "@previewStop": { + "description": "Tooltip for the button that stops the playing track preview snippet" + }, + "previewUnavailable": "Предпросмотр недоступен", + "@previewUnavailable": { + "description": "Snackbar shown when a track preview snippet cannot be played" + }, + "dialogDiscard": "Отменить", + "@dialogDiscard": { + "description": "Dialog button - discard changes" + }, + "dialogRemove": "Убрать", + "@dialogRemove": { + "description": "Dialog button - remove item" + }, + "dialogUninstall": "Удалить", + "@dialogUninstall": { + "description": "Dialog button - uninstall extension" + }, + "dialogDiscardChanges": "Отменить изменения?", + "@dialogDiscardChanges": { + "description": "Dialog title - unsaved changes warning" + }, + "dialogUnsavedChanges": "Есть несохраненные изменения. Отменить их?", + "@dialogUnsavedChanges": { + "description": "Dialog message - unsaved changes" + }, + "dialogClearAll": "Очистить всё", + "@dialogClearAll": { + "description": "Dialog title - clear all items" + }, + "dialogRemoveExtension": "Удалить расширение", + "@dialogRemoveExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogRemoveExtensionMessage": "Вы уверены, что хотите удалить это расширение? Это действие не может быть отменено.", + "@dialogRemoveExtensionMessage": { + "description": "Dialog message - uninstall confirmation" + }, + "dialogUninstallExtension": "Удалить расширение?", + "@dialogUninstallExtension": { + "description": "Dialog title - uninstall extension" + }, + "dialogUninstallExtensionMessage": "Вы уверены, что хотите удалить {extensionName}?", + "@dialogUninstallExtensionMessage": { + "description": "Dialog message - uninstall specific extension", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { + "extensionName": { "type": "String" } } }, - "extensionsMetadataPriority": "Приоритет метаданных", - "@extensionsMetadataPriority": { - "description": "Setting - metadata provider order" + "dialogClearHistoryTitle": "Очистить историю", + "@dialogClearHistoryTitle": { + "description": "Dialog title - clear download history" }, - "updateCurrent": "Текущая", - "@updateCurrent": { - "description": "Label for current version" + "dialogClearHistoryMessage": "Вы уверены, что хотите удалить всю историю загрузок? Это действие необратимо.", + "@dialogClearHistoryMessage": { + "description": "Dialog message - clear history confirmation" }, - "@aboutFeatureRequest": { - "description": "Link to suggest features" - }, - "@safMigrationSuccess": { - "description": "Snackbar after successfully migrating to SAF" - }, - "backupRestoreConfirmMessage": "This will replace your current settings, download history, liked tracks, wishlist and playlists with the contents of the backup. This cannot be undone.", - "@cleanupOrphanedDownloadsNone": { - "description": "Snackbar when no orphans found" - }, - "lyricsProviderNeteaseDesc": "NetEase Cloud Music (хорош для азиатских песен)", - "@lyricsProviderNeteaseDesc": { - "description": "Description for Netease provider" - }, - "libraryScanCancelledSubtitle": "You can retry the scan when ready.", - "@libraryScanCancelledSubtitle": { - "description": "Library scan status subtitle after cancellation" - }, - "@collectionFavoriteArtists": { - "description": "Custom folder for favorite artists" - }, - "@trackAlbum": { - "description": "Metadata label - album name" + "dialogDeleteSelectedTitle": "Удалить выбранные", + "@dialogDeleteSelectedTitle": { + "description": "Dialog title - delete selected items" }, "dialogDeleteSelectedMessage": "Удалить {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}} из истории?\n\nЭто также удалит файлы из хранилища.", "@dialogDeleteSelectedMessage": { @@ -713,811 +788,29 @@ } } }, - "trackReEnrich": "Обновить", - "@trackReEnrich": { - "description": "Menu action - re-embed metadata into audio file" - }, - "@lyricsProvidersSaved": { - "description": "Snackbar after saving lyrics provider priority" - }, - "@storageModeSaf": { - "description": "Storage mode option - Storage Access Framework" - }, - "libraryStorageAccessRequired": "Требуется доступ к хранилищу", - "@libraryStorageAccessRequired": { - "description": "Dialog title for storage permission" - }, - "@cacheClearAllConfirmTitle": { - "description": "Dialog title before clearing all caches" - }, - "@unknownArtist": { - "description": "Fallback artist name when metadata is missing" - }, - "downloadCreatePlaylistSourceFolderEnabled": "A subfolder is created for each playlist", - "@downloadCreatePlaylistSourceFolderEnabled": { - "description": "Subtitle when playlist folder is enabled" - }, - "dialogClearHistoryMessage": "Вы уверены, что хотите удалить всю историю загрузок? Это действие необратимо.", - "@dialogClearHistoryMessage": { - "description": "Dialog message - clear history confirmation" - }, - "@sectionData": { - "description": "Settings section header" - }, - "audioAnalysisRms": "RMS", - "@audioAnalysisRms": { - "description": "RMS level metric label" - }, - "downloadFilterContributingEnabled": "Contributing artists removed from Album Artist folder name", - "@downloadFilterContributingEnabled": { - "description": "Subtitle when contributing artist filter is on" - }, - "timeJustNow": "Только что", - "@extensionCustomUrlHandlingShareHint": { - "description": "Extension detail hint explaining share-to-app URL handling" - }, - "cleanupOrphanedDownloads": "Очистка отложенных скачиваний", - "@cleanupOrphanedDownloads": { - "description": "Button to remove history entries for deleted files" - }, - "@audioAnalysisNoClipping": { - "description": "Displayed when no clipped samples were detected" - }, - "@tutorialWelcomeTitle": { - "description": "Tutorial welcome page title" - }, - "collectionFavoriteArtists": "Избранный исполнитель", - "audioAnalysisRescanning": "Re-analyzing audio...", - "@audioAnalysisRescanning": { - "description": "Loading text while audio is being re-analyzed after an explicit refresh" - }, - "logTitle": "Логи", - "@logTitle": { - "description": "Logs screen title" - }, - "@regionCountryGB": { - "description": "Country name for SongLink region picker" - }, - "@progressFetchingMetadata": { - "description": "Progress indicator - loading track info", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } - }, - "aboutLogoArtist": "Талантливый художник, который создал наш красивый логотип приложения!", - "@aboutLogoArtist": { - "description": "Role description for logo artist" - }, - "channelPreview": "Предварительный", - "@channelPreview": { - "description": "Update channel - beta/preview releases" - }, - "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", - "@collectionPlaylistsDeleted": { - "description": "Snackbar after deleting selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@libraryFilterMetadataMissingGenre": { - "description": "Filter option - items missing genre" - }, - "homeTitle": "Главная", - "@homeTitle": { - "description": "Home screen title" - }, - "extensionMinAppVersion": "Мин. версия приложения", - "@extensionMinAppVersion": { - "description": "Extension detail - minimum app version" - }, - "backupContentsLiked": "{count} liked {count, plural, =1{track} other{tracks}}", - "@backupContentsLiked": { - "description": "Backup contents row for liked tracks count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "audioAnalysisTruePeak": "True Peak", - "@audioAnalysisTruePeak": { - "description": "True peak metric label" - }, - "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" - } - } - }, - "@dialogRetry": { - "description": "Dialog button - retry action" - }, - "@homeChangeSearchProviderTooltip": { - "description": "Tooltip for the Home search provider picker" - }, - "@sectionLyricsProviderOptions": { - "description": "Settings section header for per-provider lyrics options" - }, - "@trackReEnrichSuccessWithFailures": { - "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", - "placeholders": { - "successCount": { - "type": "int" - }, - "total": { - "type": "int" - }, - "failedCount": { - "type": "int" - } - } - }, - "previewUnavailable": "Предпросмотр недоступен", - "@previewUnavailable": { - "description": "Snackbar shown when a track preview snippet cannot be played" - }, - "nowPlayingTabPlayer": "Player", - "@nowPlayingTabPlayer": { - "description": "Tab label for the player view" - }, - "backupContentsPlaylists": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "@backupContentsPlaylists": { - "description": "Backup contents row for playlist count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "libraryLastScannedNever": "Никогда", - "@libraryLastScannedNever": { - "description": "Shown when library has never been scanned" - }, - "trackTrackNumber": "Номер трека", - "@trackTrackNumber": { - "description": "Metadata label - track number" - }, - "trackReplayGainScanning": "Анализ громкости...", - "@trackReplayGainScanning": { - "description": "Snackbar/progress message while scanning ReplayGain for a single track" - }, - "downloadLossyMp3": "MP3 320 кбит/с", - "@downloadLossyMp3": { - "description": "Lossy format option - MP3 320kbps" - }, - "@albumFolderArtistAlbumSingles": { - "description": "Album folder option with singles inside artist" - }, - "@extensionHealthNotConfigured": { - "description": "Extension service health status - not configured" - }, - "@downloadSeparateSinglesDisabled": { - "description": "Subtitle when separate singles folder is off" - }, - "downloadCreatePlaylistSourceFolder": "Playlist Source Folder", - "@downloadCreatePlaylistSourceFolder": { - "description": "Setting to create a subfolder per playlist source" - }, - "@trackReleaseDate": { - "description": "Metadata label - release date" - }, - "aboutContributors": "Участники", - "@aboutContributors": { - "description": "Section for contributors" - }, - "@audioAnalysisMono": { - "description": "Audio channel layout label - mono" - }, - "@audioAnalysisNyquist": { - "description": "Nyquist frequency metric label" - }, - "permissionStorage": "Storage", - "@permissionStorage": { - "description": "Storage permission type label" - }, - "permissionAudio": "Audio", - "@permissionAudio": { - "description": "Audio permission type label" - }, - "@libraryScanSubtitle": { - "description": "Subtitle for scan button" - }, - "@snackbarUnsupportedAudioFormat": { - "description": "Snackbar when the audio format is not supported for the requested operation" - }, - "@notifLibraryScanStopped": { - "description": "Notification body when library scan is cancelled" - }, - "@downloadMusixmatchAuto": { - "description": "Button to clear Musixmatch language (use auto)" - }, - "@trackLyricsTimeout": { - "description": "Message when lyrics request times out" - }, - "@trackReEnrichFieldReleaseInfo": { - "description": "Checkbox label for release info in re-enrich" - }, - "@regionCountryXK": { - "description": "Country name for SongLink region picker" - }, - "aboutTelegramChatSubtitle": "Чат с другими пользователями", - "@aboutTelegramChatSubtitle": { - "description": "Subtitle for Telegram chat" - }, - "selectionAllPlaylistsSelected": "Выбраны все плейлисты", - "@selectionAllPlaylistsSelected": { - "description": "Shown when all playlists are selected in selection mode" - }, - "cacheTrackLookupDesc": "Поиск ID трека в Spotify/Deezer. Очистка может замедлить следующие несколько поисков.", - "@cacheTrackLookupDesc": { - "description": "Description of what track lookup cache contains" - }, - "@unknownAlbum": { - "description": "Fallback album name when metadata is missing" - }, - "@extensionsErrorLoading": { - "description": "Error message when extension fails to load" - }, - "@cacheTitle": { - "description": "Cache management page title" - }, - "@downloadFilenameFormat": { - "description": "Setting for output filename pattern" - }, - "errorUrlNotRecognized": "Ссылка не распознана", - "@errorUrlNotRecognized": { - "description": "Error title - URL not handled by any extension or service" - }, - "downloadAppleElrcWordSync": "Apple Music eLRC Word Sync", - "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { - "description": "Subtitle when album artist is used for folder names" - }, - "@qualityFlacLossless": { - "description": "Quality option - CD quality FLAC" - }, - "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", - "@downloadNeteaseIncludeTranslationEnabled": { - "description": "Subtitle when Netease translation is on" - }, - "collectionLovedEmptySubtitle": "Нажмите \"любовь\" на треках, чтобы сохранить ваши избранные", - "@collectionLovedEmptySubtitle": { - "description": "Loved empty state subtitle" - }, - "@libraryBuiltInPlayerInfo": { - "description": "Info note explaining the built-in player is for previews only" - }, - "@notifLibraryScanProgressNoTotal": { - "description": "Notification body for library scan progress when total is unknown", - "placeholders": { - "scanned": { - "type": "int" - }, - "percentage": { - "type": "int" - } - } - }, - "@tutorialSearchTitle": { - "description": "Tutorial search page title" - }, - "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", - "@a11yTrackByArtist": { - "description": "Accessibility label for a queue or list track item", - "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" - } - } - }, - "libraryFilterMetadataMissingLabel": "Missing label", - "@libraryFilterMetadataMissingLabel": { - "description": "Filter option - items missing record label" - }, - "@audioAnalysisLufs": { - "description": "Integrated loudness metric label" - }, - "trackMetadata": "Метаданные", - "@trackMetadata": { - "description": "Tab title - track metadata" - }, - "trackOptionRemoveFromLoved": "Исключить из Любимых", - "@trackOptionRemoveFromLoved": { - "description": "Bottom sheet action label - remove track from loved folder" - }, - "@aboutTelegramChat": { - "description": "Link to Telegram chat group" - }, - "@trackCopiedToClipboard": { - "description": "Snackbar - content copied" - }, - "aboutKeepAndroidOpen": "Сохранить Android открытым", - "@aboutKeepAndroidOpen": { - "description": "Link to Keep Android Open campaign website" - }, - "@lyricsProvidersDisabledSection": { - "description": "Section header for disabled providers", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@downloadAllowLocalNetwork": { - "description": "Setting title for allowing requests to private/local network targets" - }, - "@openInOtherServices": { - "description": "Title and tooltip for finding the current collection in other services" - }, - "@extensionVerificationBrowserInApp": { - "description": "Chip label for in-app browser verification mode" - }, - "sectionSearchSource": "Поиск источника", - "@sectionSearchSource": { - "description": "Settings section header" - }, - "allFilesAccess": "Доступ ко всем файлам", - "@allFilesAccess": { - "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" - }, - "extensionsInstalledCount": "{count} extensions installed successfully", - "@extensionsInstalledCount": { - "description": "Success message after installing multiple extensions", - "placeholders": { - "count": { - "type": "int", - "description": "Number of installed extensions" - } - } - }, - "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", - "@snackbarFailedToEmbedLyrics": { - "description": "Snackbar when lyrics embedding fails" - }, - "@lyricsProviderMusixmatchDesc": { - "description": "Description for Musixmatch provider" - }, - "queueRateLimitTitle": "Service rate limited", - "@queueRateLimitTitle": { - "description": "Title shown on a failed queue item when the download service rate limits requests" - }, - "@notifDownloadComplete": { - "description": "Notification title when a single download is complete" - }, - "@homeSupports": { - "description": "Info text about supported URL types" - }, - "notifDownloadsCanceledTitle": "Downloads canceled", - "@notifDownloadsCanceledTitle": { - "description": "Notification title when downloads are canceled by the user" - }, - "@lyricsModeEmbedSubtitle": { - "description": "Subtitle for embed option" - }, - "optionsReplayGain": "ReplayGain", - "@optionsReplayGain": { - "description": "Title for ReplayGain setting toggle" - }, - "@storeLoadError": { - "description": "Error heading when the store cannot be loaded" - }, - "@trackArtist": { - "description": "Metadata label - artist name" - }, - "cacheCoverImageDesc": "Скачанный альбом и трек обложки. Будет заново скачан после просмотра.", - "@cacheCoverImageDesc": { - "description": "Description of what cover image cache contains" - }, - "queueClearAll": "Очистить всё", - "@queueClearAll": { - "description": "Button - clear all queue items" - }, - "downloadUsePrimaryArtistOnlyDisabled": "Полная строка исполнителя, используемая для имени папки", - "@downloadUsePrimaryArtistOnlyDisabled": { - "description": "Subtitle when primary artist only is disabled" - }, - "backupImportSectionTitle": "Restore backup", - "@backupImportSectionTitle": { - "description": "Section title for the import/restore card" - }, - "@downloadMusixmatchLanguageHint": { - "description": "Placeholder for Musixmatch language input" - }, - "collectionRemoveFromFolder": "Убрать из папки", - "@collectionRemoveFromFolder": { - "description": "Tooltip for removing track from wishlist/loved folder" - }, - "storeFilterMetadata": "Метаданные", - "@storeFilterMetadata": { - "description": "Repo filter - metadata providers" - }, - "shareSheetCopyLink": "Copy Link", - "errorRateLimitedMessage": "Слишком много запросов. Пожалуйста, подождите минуту перед повторным поиском.", - "@errorRateLimitedMessage": { - "description": "Error message - rate limit explanation" - }, - "libraryFilterSortGenreDesc": "Жанр (Я-А)", - "@libraryFilterSortGenreDesc": { - "description": "Sort option - genre descending" - }, - "trackFileNotFound": "Файл не найден", - "@trackFileNotFound": { - "description": "Error - file doesn't exist" - }, - "@queueEmptySinglesSubtitle": { - "description": "Empty state subtitle for single track downloads" - }, - "@queueDownloadStarting": { - "description": "Queue status before download progress is available" - }, - "metadataProviderPriorityInfo": "Deezer не имеет ограничений по скорости и рекомендуется в качестве основного. Spotify может ограничивать скорость после большого количества запросов.", - "@metadataProviderPriorityInfo": { - "description": "Info tip about rate limits" - }, - "aboutPCSource": "Исходный код ПК версии", - "@aboutPCSource": { - "description": "Link to PC GitHub repo" - }, - "editMetadataAutoFill": "Auto-fill from online", - "@editMetadataAutoFill": { - "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" - }, - "snackbarDeletedTracks": "Удалено {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", - "@snackbarDeletedTracks": { - "description": "Snackbar - tracks deleted", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@extensionHealthServiceDegraded": { - "description": "Tooltip for degraded extension service" - }, - "lyricsProviderLrclibDesc": "Open-source synced lyrics database", - "@lyricsProviderLrclibDesc": { - "description": "Description for LRCLIB provider" - }, - "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", - "@downloadMusixmatchLanguageDesc": { - "description": "Description in Musixmatch language picker" - }, - "@optionsEmbedMetadataSubtitleOn": { - "description": "Subtitle when metadata embedding is enabled" - }, - "@setupSkipForNow": { - "description": "Skip button text" - }, - "@a11ySelectTrack": { - "description": "Accessibility label for selecting a track" - }, - "@folderOrganizationByAlbumSubtitle": { - "description": "Subtitle for album folder option" - }, - "downloadLossyAac": "AAC/M4A 320kbps", - "@extensionVerificationBrowserTitle": { - "description": "Settings option title for extension verification browser preference" - }, - "@backupContentsExtensions": { - "description": "Backup contents row for installed extensions count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "snackbarUrlCopied": "{platform} ссылка скопирована в буфер обмена", - "@snackbarUrlCopied": { - "description": "Snackbar - URL copied", - "placeholders": { - "platform": { - "type": "String", - "description": "Platform name (Spotify/Deezer)" - } - } - }, - "aboutBinimumDesc": "The creator of QQDL & HiFi API. This project helped shape lossless download support.", - "@aboutBinimumDesc": { - "description": "Credit description for binimum" - }, - "discographyFetchingAlbum": "Получение {current} из {total}...", - "@discographyFetchingAlbum": { - "description": "Progress - fetching specific album", - "placeholders": { - "current": { - "type": "int" - }, - "total": { - "type": "int" - } - } - }, - "logAutoScrollOn": "Auto-scroll ON", - "@logAutoScrollOn": { - "description": "Tooltip when auto-scroll is enabled on the log screen" - }, - "@settingsMetadataSubtitle": { - "description": "Subtitle for metadata settings" - }, - "@regionCountryBR": { - "description": "Country name for SongLink region picker" - }, - "@lyricsProvidersTitle": { - "description": "Settings item title for lyrics provider order" - }, - "trackMetadataService": "Сервис", - "@trackMetadataService": { - "description": "Metadata field - download service used" - }, - "discographyAddedToQueue": "Добавлено {count} треков в очередь", - "cueSplitTrackCount": "{count} треков", - "@cueSplitTrackCount": { - "description": "Number of tracks in CUE sheet", - "placeholders": { - "count": { - "type": "int" - } - } - }, "dialogImportPlaylistTitle": "Импорт плейлиста", "@dialogImportPlaylistTitle": { "description": "Dialog title - import CSV playlist" }, - "@cleanupOrphanedDownloadsSubtitle": { - "description": "Subtitle for orphaned cleanup button" - }, - "settingsLocalLibrary": "Локальная библиотека", - "@settingsLocalLibrary": { - "description": "Settings menu item - local library" - }, - "@metadataSaveFailedStorage": { - "description": "Snackbar error when writing metadata file back to storage fails" - }, - "logCopyLogs": "Copy logs", - "@logCopyLogs": { - "description": "Tooltip for copying logs" - }, - "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", - "@downloadNetworkWifiOnlySubtitle": { - "description": "Subtitle for WiFi-only option in picker" - }, - "@lyricsModeBothSubtitle": { - "description": "Subtitle for both option" - }, - "@collectionAlreadyInPlaylist": { - "description": "Snackbar when track already exists in playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } - }, - "@collectionFoldersTitle": { - "description": "Library section title for custom folders" - }, - "searchSortDateNewest": "Дата релиза (новейшая)", - "@searchSortDateNewest": { - "description": "Sort option - newest release first" - }, - "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", - "@downloadDeduplicationDisabled": { - "description": "Subtitle when deduplication is off" - }, - "@recentTypeAlbum": { - "description": "Recent access item type - album" - }, - "nowPlayingPlayInOrder": "Play in order", - "@nowPlayingPlayInOrder": { - "description": "Tooltip when shuffle mode is disabled" - }, - "@cueSplitConfirmMessage": { - "description": "CUE split confirmation dialog message", - "placeholders": { - "album": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "@audioAnalysisFileSize": { - "description": "File size metric label" - }, - "artistSingles": "Синглы и EP", - "@artistSingles": { - "description": "Section header for singles/EPs" - }, - "@snackbarProviderPrioritySaved": { - "description": "Snackbar - provider order saved" - }, - "@recentPlaylistInfo": { - "description": "Snackbar message when tapping playlist in recent access", - "placeholders": { - "name": { - "type": "String", - "description": "Playlist name" - } - } - }, - "@lyricsProviderLyricsPlusDesc": { - "description": "Description for LyricsPlus provider" - }, - "@libraryFilterDownloaded": { - "description": "Filter chip - show only downloaded items" - }, - "recentPlaylistInfo": "Плейлист: {name}", - "@optionsReplayGainSubtitleOn": { - "description": "Subtitle when ReplayGain is enabled" - }, - "@actionCreate": { - "description": "Generic action button - create" - }, - "@downloadSelectQuality": { - "description": "Dialog title - choose audio quality" - }, - "cueSplitAlbum": "Альбом: {album}", - "@cueSplitAlbum": { - "description": "Album name in CUE split sheet", - "placeholders": { - "album": { - "type": "String" - } - } - }, - "@trackCoverNoSource": { - "description": "Snackbar when no cover art URL or embedded cover" - }, - "@storeRepoUrlLabel": { - "description": "Label for the repository URL input field" - }, - "@notifLibraryScanCompleteBody": { - "description": "Notification body for library scan complete - number of indexed tracks", + "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", + "csvImportTracks": "{count} трек(-ов) из CSV", + "@csvImportTracks": { + "description": "Label shown in quality picker for CSV import", "placeholders": { "count": { "type": "int" } } }, - "optionsDetailedLogging": "Подробный лог", - "@optionsDetailedLogging": { - "description": "Enable verbose logs for debugging" + "collectionExportM3u": "Export as M3U8", + "@collectionExportM3u": { + "description": "Tooltip on the collection screen action that exports the track list as an M3U8 playlist file" }, - "@lyricsProvidersDiscardContent": { - "description": "Body text of the discard-changes dialog on lyrics provider page" - }, - "@dialogDisableHistoryTitle": { - "description": "Confirmation dialog title shown before disabling download history" - }, - "downloadLossyOpus128Subtitle": "Минимальный размер, ~4 Мб на трек", - "@downloadLossyOpus128Subtitle": { - "description": "Subtitle for Opus 128kbps lossy option" - }, - "@appName": { - "description": "App name - DO NOT TRANSLATE" - }, - "libraryActions": "Действия", - "@libraryActions": { - "description": "Section header for library actions" - }, - "setupNoFolderSelected": "Папка не выбрана. Хотите использовать папку Музыка по умолчанию?", - "@setupNoFolderSelected": { - "description": "Prompt when no folder selected" - }, - "downloadMusixmatchLanguageHint": "e.g. en, de, ja", - "trackSaveFailed": "Ошибка: {error}", - "@trackSaveFailed": { - "description": "Snackbar when save operation fails", + "collectionExportM3uDone": "Exported {exported} of {total} tracks", + "@collectionExportM3uDone": { + "description": "Snackbar after M3U8 export; tracks without a local file are not exported", "placeholders": { - "error": { - "type": "String" - } - } - }, - "replayGainBatchConfirmTitle": "Добавить ReplayGain", - "@replayGainBatchConfirmTitle": { - "description": "Title of the batch ReplayGain confirmation dialog" - }, - "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", - "@tutorialExtensionsTip1": { - "description": "Tutorial extensions tip 1" - }, - "@trackAddToQueue": { - "description": "Menu action to add a track to the playback queue" - }, - "@cacheTrackLookup": { - "description": "Cache item title for track ID lookup cache" - }, - "@discographyNoAlbums": { - "description": "Error - no albums found for artist" - }, - "@updateLater": { - "description": "Update button - dismiss" - }, - "@snackbarFailedToInstall": { - "description": "Snackbar - extension install error" - }, - "@albumFolderArtistAlbumFlatSubtitle": { - "description": "Folder structure example for flat singles" - }, - "@errorMissingExtensionSource": { - "description": "Error - extension source not available", - "placeholders": { - "item": { - "type": "String" - } - } - }, - "libraryFilterSortAlbumAsc": "Альбом (А-Я)", - "@libraryFilterSortAlbumAsc": { - "description": "Sort option - album ascending" - }, - "@queueTrackCount": { - "description": "Track count label with plural support", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "audioAnalysisMono": "Mono", - "@trackLyricsSource": { - "description": "Label showing the lyrics source/provider", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "@lyricsModeEmbed": { - "description": "Lyrics mode option - embed in audio file" - }, - "@storeRepoDialogCurrent": { - "description": "Label shown above the current repository URL in the dialog" - }, - "@cacheRefreshStats": { - "description": "Button label to refresh cache statistics" - }, - "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", - "@lyricsProviderAppleMusicDesc": { - "description": "Description for Apple Music provider" - }, - "@downloadDeduplication": { - "description": "Setting - skip tracks already in download history" - }, - "updateFailedMessage": "Сбой загрузки обновления", - "@updateFailedMessage": { - "description": "Update error message" - }, - "cacheEstimatedTotal": "Приблизительное использование кэша: {size}", - "@cacheEstimatedTotal": { - "description": "Total cache size shown in summary", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "@aboutVersion": { - "description": "Version info label" - }, - "dialogRetry": "Повторить", - "@cueSplitSplitting": { - "description": "Snackbar while splitting CUE", - "placeholders": { - "current": { + "exported": { "type": "int" }, "total": { @@ -1525,769 +818,65 @@ } } }, - "@searchSortTitleZA": { - "description": "Sort option - title descending" + "collectionExportM3uNone": "No downloaded files to export", + "@collectionExportM3uNone": { + "description": "Snackbar when an M3U8 export finds no local files" }, - "tutorialLibraryTip2": "Tap a track to play it with the built-in player", - "@tutorialLibraryTip2": { - "description": "Tutorial library tip 2" + "collectionExportM3uFailed": "Export failed", + "@collectionExportM3uFailed": { + "description": "Snackbar when writing or sharing the M3U8 export fails" }, - "extensionHealthServiceOffline": "Service offline", - "@extensionHealthServiceOffline": { - "description": "Tooltip for offline extension service" + "trackOpenOn": "Open on...", + "@trackOpenOn": { + "description": "Track option and sheet title listing streaming platforms where the track can be opened" }, - "actionDeselect": "Снять выделение", - "@actionDeselect": { - "description": "Action button - deselect all" + "trackOpenOnNoLinks": "No platform links found for this track.", + "@trackOpenOnNoLinks": { + "description": "Shown in the Open on sheet when song.link returns no links" }, - "@trackConvertOriginal": { - "description": "Label for keeping original bit depth or sample rate during conversion" + "libraryReviewDuplicates": "Review duplicates", + "@libraryReviewDuplicates": { + "description": "Library settings row opening the duplicate review sheet" }, - "@libraryClearConfirmTitle": { - "description": "Dialog title for clear confirmation" + "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", + "@libraryReviewDuplicatesSubtitle": { + "description": "Subtitle for the duplicate review settings row" }, - "@dialogDownloadAllMessage": { - "description": "Body of the Download All confirmation dialog", - "placeholders": { - "count": { - "type": "int" - } - } + "duplicatesTitle": "Duplicates", + "@duplicatesTitle": { + "description": "Title of the duplicate review sheet" }, - "homeSupports": "Поддерживается: Трек, Альбом, Плейлист, URL исполнителя", - "@downloadedAlbumDeleteSelected": { - "description": "Button - delete selected tracks" + "duplicatesEmpty": "No duplicate tracks found.", + "@duplicatesEmpty": { + "description": "Shown when the duplicate review sheet finds nothing" }, - "@recentShowAllDownloads": { - "description": "Button label to unhide hidden downloads in recent access" + "duplicatesKeepBest": "Keep best", + "@duplicatesKeepBest": { + "description": "Button that deletes all but the highest-quality copy in a duplicate group" }, - "artistOptionRemoveFromFavorites": "Удалить из избранных исполнителей", - "@artistOptionRemoveFromFavorites": { - "description": "Action label - remove artist from favorite artists" - }, - "collectionPlaylistEmptyTitle": "Плейлист пуст", - "@collectionPlaylistEmptyTitle": { - "description": "Playlist empty state title" - }, - "libraryFilterSortLatest": "Последние", - "@libraryFilterSortLatest": { - "description": "Sort option - newest first" - }, - "@libraryFilterMetadataMissingYear": { - "description": "Filter option - items missing release year/date" - }, - "@selectionSelected": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@tracksCount": { - "description": "Track count display", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@optionsCheckUpdates": { - "description": "Auto update check toggle" - }, - "@qualityHiResFlacMaxSubtitle": { - "description": "Technical spec for hi-res max" - }, - "actionStop": "Stop", - "@actionStop": { - "description": "Generic action - stop" - }, - "@selectionSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "folderOrganizationNoneSubtitle": "Все файлы в папке загрузок", - "@folderOrganizationNoneSubtitle": { - "description": "Subtitle for no organization option" - }, - "@updateDownloading": { - "description": "Update status - downloading" - }, - "artistAlbums": "Альбомы", - "@artistAlbums": { - "description": "Section header for artist albums" - }, - "trackConvertDitherTriangular": "TPDF", - "@trackConvertDitherTriangular": { - "description": "Lossless conversion triangular probability density function dither option" - }, - "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", - "@nowPlayingShuffleLibraryFailed": { - "description": "Snackbar when shuffling the library fails", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "@setupIcloudNotSupported": { - "description": "Error when user selects iCloud Drive on iOS" - }, - "@optionsArtistTagModeSplitVorbis": { - "description": "Artist tag mode option that writes repeated ARTIST tags for Vorbis formats" - }, - "@extensionsProviderPrioritySection": { - "description": "Section header - provider priority" - }, - "@libraryShowDuplicateIndicatorSubtitle": { - "description": "Subtitle for duplicate indicator toggle" - }, - "sectionDuplicates": "Duplicates", - "@sectionDuplicates": { - "description": "Settings section header for deduplication" - }, - "@backupTitle": { - "description": "App bar title for the backup and restore page" - }, - "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", - "cacheSectionMaintenance": "Обслуживание", - "@cacheSectionMaintenance": { - "description": "Section header for cleanup actions" - }, - "@editMetadataFieldGenre": { - "description": "Chip label for genre field in auto-fill selector" - }, - "@extensionsFallbackSubtitle": { - "description": "Subtitle for download fallback extensions menu" - }, - "selectionBatchConvertConfirmMessage": "Преобразовать {count} {count, plural, =1{track} other{tracks}} в {format} с {bitrate}?", - "@selectionBatchConvertConfirmMessage": { - "description": "Confirmation dialog message for batch conversion", + "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", + "@duplicatesKeepBestMessage": { + "description": "Confirmation message for the keep-best action", "placeholders": { "count": { "type": "int" }, - "format": { - "type": "String" - }, - "bitrate": { + "trackName": { "type": "String" } } }, - "@selectionTapPlaylistsToSelect": { - "description": "Hint shown in playlist selection mode" - }, - "qualityHiResFlacMaxSubtitle": "24-бит / до 192кГц", - "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", - "@snackbarRemovedTracksFromLoved": { - "description": "Snackbar after removing multiple tracks from Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "folderOrganizationByArtistAlbum": "Исполнитель/Альбом", - "@folderOrganizationByArtistAlbum": { - "description": "Folder option - nested folders" - }, - "snackbarCannotOpenFile": "Невозможно открыть файл: {error}", - "@snackbarCannotOpenFile": { - "description": "Snackbar - file open error", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "@optionsDetailedLoggingOff": { - "description": "Status when logging disabled" - }, - "@setupStorageDescription": { - "description": "Explanation for storage permission" - }, - "audioAnalysisCodec": "Codec", - "@regionCountryFR": { - "description": "Country name for SongLink region picker" - }, - "@optionsArtistTagMode": { - "description": "Setting title for how artist metadata is written into files" - }, - "@libraryClearConfirmMessage": { - "description": "Dialog message for clear confirmation" - }, - "trackLyricsNotAvailable": "Текст песни недоступен для этого трека", - "@trackLyricsNotAvailable": { - "description": "Message when lyrics not found" - }, - "storeFilterUtility": "Утилиты", - "@storeFilterUtility": { - "description": "Repo filter - utility extensions" - }, - "collectionAddedToPlaylist": "Добавлено в \"{playlistName}\"", - "@collectionAddedToPlaylist": { - "description": "Snackbar after adding track to playlist", - "placeholders": { - "playlistName": { - "type": "String" - } - } - }, - "cacheClearConfirmTitle": "Очистить кэш?", - "@cacheClearConfirmTitle": { - "description": "Dialog title before clearing one cache category" - }, - "@downloadAppleElrcWordSyncDisabled": { - "description": "Subtitle when Apple Music eLRC word sync is disabled" - }, - "@aboutMobileDeveloper": { - "description": "Role description for mobile dev" - }, - "albumFolderYearAlbum": "[Год] Альбом", - "@albumFolderYearAlbum": { - "description": "Album folder option with year" - }, - "cacheTitle": "Хранилище и кэш", - "@extensionPostProcessing": { - "description": "Capability - post-download processing" - }, - "extensionsNoMetadataProvider": "Нет расширений с провайдером метаданных", - "@extensionsNoMetadataProvider": { - "description": "Empty state - no metadata providers" - }, - "searchSortTitleZA": "Название (Я-А)", - "@queueClearAllMessage": { - "description": "Clear queue confirmation" - }, - "audioAnalysisTitle": "Audio Quality Analysis", - "@audioAnalysisTitle": { - "description": "Title for audio analysis section" - }, - "@aboutReportIssueSubtitle": { - "description": "Subtitle for report issue" - }, - "@audioAnalysisSampleRate": { - "description": "Sample rate metric label" - }, - "@discographySelectedCount": { - "description": "Selection count badge", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "qualityFlacLosslessSubtitle": "16-бит / 44.1 кГц", - "@qualityFlacLosslessSubtitle": { - "description": "Technical spec for lossless" - }, - "libraryScanFinalizing": "Завершение работы с библиотекой...", - "@libraryScanFinalizing": { - "description": "Status shown after file scanning finishes but library persistence is still running" - }, - "@trackEditMetadata": { - "description": "Menu action - edit embedded metadata" - }, - "@downloadNeteaseIncludeRomanization": { - "description": "Setting to include romanized lyrics from Netease" - }, - "@optionsArtistTagModeJoinedSubtitle": { - "description": "Subtitle for joined artist tag mode" - }, - "regionCountryDE": "Germany", - "@regionCountryDE": { - "description": "Country name for SongLink region picker" - }, - "optionsAutoFallback": "Автоматический переход", - "@optionsAutoFallback": { - "description": "Auto-retry with other services" - }, - "@trackMetadataPlay": { - "description": "Action button - play track" - }, - "settingsFiles": "Files & Folders", - "@settingsFiles": { - "description": "Settings menu item - file and folder settings" - }, - "aboutMobileDeveloper": "Разработчик мобильной версии", - "@trackDownloaded": { - "description": "Metadata label - download date" - }, - "homeSkipAlreadyDownloaded": "Skip already downloaded songs", - "@homeSkipAlreadyDownloaded": { - "description": "Checkbox label in import dialog to skip already-downloaded songs" - }, - "dialogUninstall": "Удалить", - "@dialogUninstall": { - "description": "Dialog button - uninstall extension" - }, - "collectionDeletePlaylist": "Удалить плейлист", - "@collectionDeletePlaylist": { - "description": "Action to delete playlist" - }, - "trackCoverOnline": "Online cover", - "@trackCoverOnline": { - "description": "Label shown when metadata autofill downloaded cover art from the internet" - }, - "downloadTitle": "Скачать", - "@downloadTitle": { - "description": "Download settings page title" - }, - "searchArtists": "Исполнители", - "@searchArtists": { - "description": "Search result category - artists" - }, - "extensionUrlHandler": "URL-обработчик", - "@extensionUrlHandler": { - "description": "Capability - handles URLs" - }, - "@timeHoursAgo": { - "description": "Relative time - hours ago", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "editMetadataAdvanced": "Advanced", - "@editMetadataAdvanced": { - "description": "Expandable section label for advanced metadata fields" - }, - "@actionSelectAll": { - "description": "Action button - select all items" - }, - "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", - "@timeMinutesAgo": { - "description": "Relative time - minutes ago", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "regionCountryXK": "Kosovo", - "@downloadAskQualitySubtitle": { - "description": "Subtitle for ask quality toggle" - }, - "setupLanguageSystemDefault": "Системные настройки", - "@setupLanguageSystemDefault": { - "description": "Option to use the system language" - }, - "@updateAvailable": { - "description": "Update dialog title" - }, - "cacheEntries": "{count} записей", - "@cacheEntries": { - "description": "Track cache entry count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@notifLibraryScanExcluded": { - "description": "Library scan complete suffix - excluded track count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "extensionsMetadataPrioritySubtitle": "Установка порядка поиска и источника метаданных", - "@extensionsMetadataPrioritySubtitle": { - "description": "Subtitle for metadata priority" - }, - "downloadedAlbumSelectToDelete": "Выберите треки для удаления", - "@downloadedAlbumSelectToDelete": { - "description": "Placeholder when nothing selected" - }, - "@dialogClearHistoryTitle": { - "description": "Dialog title - clear download history" - }, - "tutorialSettingsTip1": "Изменить местоположение и организацию папок для скачивания", - "@tutorialSettingsTip1": { - "description": "Tutorial settings tip 1" - }, - "@extensionsInstalledSuccess": { - "description": "Success message after install" - }, - "allFilesAccessDisabledSubtitle": "Ограничено только папками медиа", - "@allFilesAccessDisabledSubtitle": { - "description": "Subtitle when all files access is disabled" - }, - "@appearanceHistoryViewList": { - "description": "List layout option" - }, - "@notifAlreadyInLibraryCount": { - "description": "Notification title when track is already in library, with count", - "placeholders": { - "completed": { - "type": "int" - }, - "total": { - "type": "int" - } - } - }, - "@libraryFilterAll": { - "description": "Filter chip - show all library items" - }, - "settingsDownload": "Скачивание", - "settingsFilesSubtitle": "Download location, filename, folder structure", - "@settingsFilesSubtitle": { - "description": "Subtitle for files & folders settings" - }, - "@libraryFilterSort": { - "description": "Filter section - sort order" - }, - "metadataProvidersSubtitle": "Drag to set search and metadata source order", - "@extensionPermissions": { - "description": "Section header - required permissions" - }, - "selectionSelectToDelete": "Выберите треки для удаления", - "@libraryExternalPlayerSubtitle": { - "description": "Subtitle for external player option" - }, - "extensionVerificationOpenBrowser": "Open browser", - "@extensionVerificationOpenBrowser": { - "description": "Button to open the extension verification URL in a browser" - }, - "@trackConvertConfirmMessageLossless": { - "description": "Confirmation dialog message for lossless-to-lossless conversion", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - } - } - }, - "@snackbarAddedTracksToQueue": { - "description": "Snackbar - multiple tracks added to queue", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@backupContentsWishlist": { - "description": "Backup contents row for wishlist tracks count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@cacheCleanupUnusedSubtitle": { - "description": "Subtitle for cleanup unused data action" - }, - "trackLabel": "Заголовок", - "@trackLabel": { - "description": "Metadata label - record label" - }, - "@collectionAddedToLoved": { - "description": "Snackbar after adding track to loved folder", + "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", + "@duplicatesDeleteCopyMessage": { + "description": "Confirmation message for deleting one duplicate copy", "placeholders": { "trackName": { "type": "String" } } }, - "regionCountryGB": "United Kingdom", - "dialogCancel": "Отмена", - "@dialogCancel": { - "description": "Dialog button - cancel action" - }, - "@folderOrganizationByArtistAlbumSubtitle": { - "description": "Subtitle for nested folder option" - }, - "@notifAllDownloadsComplete": { - "description": "Notification title when all downloads finish successfully" - }, - "setupEnableNotifications": "Включить уведомления", - "@setupEnableNotifications": { - "description": "Button to enable notifications" - }, - "@notifFinalizingTrack": { - "description": "Notification title while finalizing (embedding metadata) a track", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "@downloadLossy320FormatDesc": { - "description": "Description in the lossy format picker" - }, - "filenameFormat": "Формат имени файла", - "@filenameFormat": { - "description": "Setting title - filename pattern" - }, - "historySearchHint": "Поиск в истории...", - "@historySearchHint": { - "description": "Search bar placeholder in history" - }, - "@tutorialReadyMessage": { - "description": "Tutorial completion message" - }, - "cacheTempDirectoryDesc": "Временные файлы из загрузок и аудио конвертации.", - "@cacheTempDirectoryDesc": { - "description": "Description of what temporary directory contains" - }, - "@trackSaveLyrics": { - "description": "Menu action - save lyrics as .lrc file" - }, - "@notifDownloadsFinished": { - "description": "Notification title when queue finishes with some failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "@historyFilterAlbums": { - "description": "Filter chip - show albums only" - }, - "trackEmbedLyrics": "Вписать текст песни", - "@trackEmbedLyrics": { - "description": "Action - embed lyrics into audio file" - }, - "@downloadPrimaryArtistOnlyOff": { - "description": "Status label when primary-artist-only folder naming is disabled" - }, - "@trackReEnrichFieldTrackInfo": { - "description": "Checkbox label for track info in re-enrich" - }, - "snackbarHistoryCleared": "История очищена", - "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", - "@artistPopular": { - "description": "Section header for popular/top tracks" - }, - "@trackFetchOnlineLyrics": { - "description": "Action - fetch lyrics from online providers" - }, - "extensionLyricsProvider": "Провайдер текстов", - "@extensionLyricsProvider": { - "description": "Capability - provides lyrics" - }, - "historyFilterAll": "Все", - "@historyFilterAll": { - "description": "Filter chip - show all items" - }, - "tutorialSearchTitle": "Поиск музыки", - "@lyricsModeExternal": { - "description": "Lyrics mode option - separate LRC file" - }, - "@actionDismiss": { - "description": "Generic action - dismiss" - }, - "trackOpenInSpotify": "Открыть в Spotify", - "@trackOpenInSpotify": { - "description": "Action - open track in Spotify app" - }, - "@libraryClear": { - "description": "Button to clear all library entries" - }, - "discographyFailedToFetch": "Не удалось получить некоторые альбомы", - "@filenameShowAdvancedTagsDescription": { - "description": "Description for advanced filename tag toggle" - }, - "@storeUpdate": { - "description": "Update available button" - }, - "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", - "@collectionPlaylistTracks": { - "description": "Track count label for custom playlists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "optionsPrimaryProviderSubtitle": "Сервис для поиска по названию трека или альбома", - "@optionsPrimaryProviderSubtitle": { - "description": "Subtitle for primary provider" - }, - "@downloadEmbedLyricsDisabled": { - "description": "Subtitle when lyrics embedding is blocked by metadata toggle" - }, - "@librarySourceLocal": { - "description": "Badge for tracks from local library scan" - }, - "@searchSortDurationLong": { - "description": "Sort option - longest duration first" - }, - "@downloadFilterContributingDisabled": { - "description": "Subtitle when contributing artist filter is off" - }, - "queueDownloadingCount": "Скачивание ({count})", - "@queueDownloadingCount": { - "description": "Header for active downloads section with count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "extensionVerificationBrowserInApp": "In-app", - "trackAudioQuality": "Качество записи", - "@trackAudioQuality": { - "description": "Metadata label - audio quality" - }, - "libraryRemovedMissingFiles": "Удалено {count} {count, plural, one{отсутствующий файл} few{трека} many{отсутствующих файлов} other{отсутствующих файлов}} в библиотеке", - "@libraryRemovedMissingFiles": { - "description": "Snackbar after cleanup", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "collectionFavoriteArtistsEmptyTitle": "Нет избранных исполнителей", - "@collectionFavoriteArtistsEmptyTitle": { - "description": "Favorite artists empty state title" - }, - "@errorInvalidFolderSelected": { - "description": "Error when the selected folder is invalid" - }, - "@searchSortArtistZA": { - "description": "Sort option - artist descending" - }, - "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", - "@snackbarAddedTracksToLoved": { - "description": "Snackbar after adding multiple tracks to Loved folder", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", - "@cancelDownloadContent": { - "description": "Dialog body when confirming cancellation of an active download", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "settingsCacheSubtitle": "Просмотреть размер и очистить кэш", - "@settingsCacheSubtitle": { - "description": "Subtitle for cache management menu" - }, - "notifLibraryScanCompleteBody": "{count} треков индексировано", - "@cacheSizeWithFiles": { - "description": "Cache size and file count", - "placeholders": { - "size": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "@downloadAskBeforeDownload": { - "description": "Setting - show quality picker" - }, - "@extensionHealthDegraded": { - "description": "Extension service health status - degraded" - }, - "@sectionPerformance": { - "description": "Settings section header" - }, - "@trackCoverCurrent": { - "description": "Label for the currently embedded cover preview" - }, - "discographySelectAlbums": "Выбрать альбомы...", - "@discographySelectAlbums": { - "description": "Option - manually select albums to download" - }, - "aboutAppDescription": "Ищите метаданных музыки, управляйте расширениями и организуйте свою библиотеку.", - "@aboutAppDescription": { - "description": "App description in header card" - }, - "extensionCustomTrackMatching": "Соответствие пользовательских треков", - "@extensionCustomTrackMatching": { - "description": "Capability - custom track matching algorithm" - }, - "@editMetadataSelectNone": { - "description": "Button to clear selected fields for auto-fill" - }, - "@trackPlayNext": { - "description": "Menu action to play a track as the next queue item" - }, - "extensionCapabilities": "Возможности", - "@extensionCapabilities": { - "description": "Section header - extension features" - }, - "@downloadSelectServiceToEnable": { - "description": "Subtitle when quality picker is disabled due to extension service" - }, - "logIssueRateLimitedDescription": "Too many requests to the service", - "@logIssueRateLimitedDescription": { - "description": "Diagnostic badge description for rate limiting" - }, - "@actionResume": { - "description": "Action button - resume download" - }, - "@updateDownloadInstall": { - "description": "Update button - download and install" - }, - "downloadLossy320Format": "Формат с потерями 320 кбит/с", - "@downloadLossy320Format": { - "description": "Title of the lossy format picker bottom sheet" - }, - "settingsMetadataSubtitle": "Cover art, tags, ReplayGain, providers", - "@trackCopyright": { - "description": "Metadata label - copyright information" - }, - "@snackbarExtensionInstalled": { - "description": "Snackbar - extension installed successfully", - "placeholders": { - "extensionName": { - "type": "String" - } - } - }, - "@regionCountryJP": { - "description": "Country name for SongLink region picker" - }, - "trackReEnrichOnlineSubtitle": "Поиск в сети метаданных и встраивание в файл", - "@trackReEnrichOnlineSubtitle": { - "description": "Subtitle for re-enrich metadata action for local items" - }, - "nowPlayingNothingPlaying": "Nothing is playing", - "@nowPlayingNothingPlaying": { - "description": "Empty state when no track is currently playing" - }, - "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", - "@tutorialDownloadDesc": { - "description": "Tutorial download page description" - }, - "@appearanceTitle": { - "description": "Appearance settings page title" - }, - "@backupExportSectionDescription": { - "description": "Description of what a backup contains" - }, - "@downloadLossyOpus128": { - "description": "Lossy format option - Opus 128kbps" - }, - "@logFilterSection": { - "description": "Filter section title" - }, - "trackReEnrichSuccess": "Метаданные успешно обновлены", - "@trackReEnrichSuccess": { - "description": "Snackbar after successful re-enrichment" - }, - "backupContentsHistory": "{count} history {count, plural, =1{item} other{items}}", - "@backupContentsHistory": { - "description": "Backup contents row for history count", + "@dialogImportPlaylistMessage": { + "description": "Dialog message - import playlist confirmation", "placeholders": { "count": { "type": "int" @@ -2303,692 +892,93 @@ } } }, - "libraryAutoScanOnOpen": "Каждое открытие приложения", - "@libraryAutoScanOnOpen": { - "description": "Auto scan when app opens" + "snackbarAddedTracksToQueue": "Добавлено {count} треков в очередь", + "@snackbarAddedTracksToQueue": { + "description": "Snackbar - multiple tracks added to queue", + "placeholders": { + "count": { + "type": "int" + } + } }, - "audioAnalysisChannels": "Каналы", - "@audioAnalysisChannels": { - "description": "Channels metric label" - }, - "appearanceHistoryViewList": "Список", - "updateDownloadInstall": "Скачать и установить", - "@libraryShowDuplicateIndicator": { - "description": "Toggle for duplicate indicator in search" - }, - "extensionsHomeFeedOff": "Off", - "@extensionsHomeFeedOff": { - "description": "Extensions page - home feed provider option: off" - }, - "searchSortTitleAZ": "Название (А-Я)", - "@searchSortTitleAZ": { - "description": "Sort option - title ascending" - }, - "collectionRemovedFromLoved": "\"{trackName}\" удалено из Любимых", - "@collectionRemovedFromLoved": { - "description": "Snackbar after removing track from loved folder", + "snackbarAlreadyDownloaded": "\"{trackName}\" уже скачан", + "@snackbarAlreadyDownloaded": { + "description": "Snackbar - track already exists", "placeholders": { "trackName": { "type": "String" } } }, - "sectionAudioQuality": "Качество аудио", - "@sectionAudioQuality": { - "description": "Settings section header" - }, - "trackConvertSuccess": "Успешно конвертировано в {format}", - "@trackConvertSuccess": { - "description": "Snackbar after successful conversion", - "placeholders": { - "format": { - "type": "String" - } - } - }, - "dialogUninstallExtensionMessage": "Вы уверены, что хотите удалить {extensionName}?", - "@dialogUninstallExtensionMessage": { - "description": "Dialog message - uninstall specific extension", - "placeholders": { - "extensionName": { - "type": "String" - } - } - }, - "downloadNativeWorkerSubtitle": "Фоновая служба Android для загрузок через расширения", - "@downloadNativeWorkerSubtitle": { - "description": "Setting subtitle for Android native download worker" - }, - "storeUpdate": "Обновить", - "libraryFilterMetadataMissingAny": "Не хватает метаданных", - "@libraryFilterMetadataMissingAny": { - "description": "Filter option - items missing any tracked metadata field" - }, - "@selectionBatchConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless batch conversion", - "placeholders": { - "count": { - "type": "int" - }, - "format": { - "type": "String" - }, - "quality": { - "type": "String" - } - } - }, - "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", - "@editMetadataAutoFillDesc": { - "description": "Description for the auto-fill section" - }, - "@lyricsProviderExtensionDesc": { - "description": "Generic description for extension-based lyrics providers" - }, - "downloadSongLinkRegion": "Регион SongLink", - "@downloadSongLinkRegion": { - "description": "Setting for SongLink region used during fallback resolution" - }, - "shareSheetNoExtensions": "No other compatible services", - "@shareSheetNoExtensions": { - "description": "Empty state when no extensions can be searched for cross-service links" - }, - "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" - } - } - }, - "tooltipAddToPlaylist": "Добавить в плейлист", - "@tooltipAddToPlaylist": { - "description": "Tooltip for the Add to Playlist button" - }, - "@snackbarAddedToQueueGeneric": { - "description": "Snackbar when a track is added to the playback queue without naming it" - }, - "@tutorialSettingsTip2": { - "description": "Tutorial settings tip 2" - }, - "extensionPermissions": "Разрешения", - "releaseTypeSingle": "Single", - "aboutTelegramChannelSubtitle": "Объявления и обновления", - "@aboutTelegramChannelSubtitle": { - "description": "Subtitle for Telegram channel" - }, - "@dialogDisableAndClear": { - "description": "Confirmation action to disable download history and clear existing entries" - }, - "@homeSearchHintProvider": { - "description": "Placeholder for the main search field when a provider is selected", - "placeholders": { - "providerName": { - "type": "String" - } - } - }, - "metadataProvidersTitle": "Metadata Provider Priority", - "@metadataProvidersTitle": { - "description": "Settings item title for metadata provider order" - }, - "trackAddToQueue": "Add to queue", - "audioAnalysisDecodedFormat": "Decoded Format", - "@audioAnalysisDecodedFormat": { - "description": "Decoded sample format metric label" - }, - "@editMetadataSelectEmpty": { - "description": "Button to select only fields that are currently empty" - }, - "collectionAlreadyInPlaylist": "Уже в \"{playlistName}\"", - "discographyAlbumsOnlySubtitle": "{count} треков из {albumCount} альбомов", - "@discographyAlbumsOnlySubtitle": { - "description": "Subtitle showing album tracks count", - "placeholders": { - "count": { - "type": "int" - }, - "albumCount": { - "type": "int" - } - } - }, - "setupNotificationEnable": "Включить уведомления", - "@setupNotificationEnable": { - "description": "Button to enable notifications" - }, - "settingsAppearanceSubtitle": "Тема, цвета, дисплей", - "@settingsAppearanceSubtitle": { - "description": "Appearance settings description" - }, - "@notifUpdateFailedBody": { - "description": "Notification body when app update download fails" - }, - "@aboutOriginalCreator": { - "description": "Role description for original creator" - }, - "libraryBuiltInPreviewPlayer": "Built-in preview player", - "@libraryBuiltInPreviewPlayer": { - "description": "Setting option to use the built-in preview player" - }, - "tooltipPlay": "Воспроизвести", - "@tooltipPlay": { - "description": "Tooltip - play button" - }, - "@safMigrationMessage2": { - "description": "Second paragraph of SAF migration dialog" - }, - "@extensionsSearchProvider": { - "description": "Setting - search provider selection" - }, - "libraryAboutDescription": "Сканирует существующую коллекцию музыки для обнаружения дубликатов при загрузке. Поддерживает форматы FLAC, M4A, MP3, Opus и OGG. Метаданные читаются из тегов файлов, если доступны.", - "@libraryAboutDescription": { - "description": "Description of local library feature" - }, - "downloadAskBeforeDownload": "Спрашивать перед скачиванием", - "nowPlayingNoMetadata": "No metadata available", - "@nowPlayingNoMetadata": { - "description": "Empty state when track metadata cannot be loaded" - }, - "trackInstrumental": "Инструментальный трек", - "@trackInstrumental": { - "description": "Message when track is instrumental (no lyrics)" - }, - "@collectionWishlistEmptyTitle": { - "description": "Wishlist empty state title" - }, - "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", - "downloadDeduplication": "Skip Duplicate Downloads", - "libraryFilterSortOldest": "Старые", - "@libraryFilterSortOldest": { - "description": "Sort option - oldest first" - }, - "setupSkip": "Пропустить", - "@setupSkip": { - "description": "Skip current step button" - }, - "@setupFolderDescription": { - "description": "Explanation for folder selection" - }, - "@settingsLogsSubtitle": { - "description": "Logs settings description" - }, - "storeNewRepoUrlLabel": "Новый URL репозитория", - "@storeNewRepoUrlLabel": { - "description": "Label for the new repository URL field inside the dialog" - }, - "cacheClearConfirmMessage": "Это очистит кэш для {target}. Загруженные музыкальные файлы не будут удалены.", - "@cacheClearConfirmMessage": { - "description": "Dialog message before clearing selected cache", - "placeholders": { - "target": { - "type": "String" - } - } - }, - "trackMetadataPlay": "Воспроизвести", - "@libraryEnableLocalLibrary": { - "description": "Toggle to enable library scanning" - }, - "optionsUpdateChannel": "Канал обновлений", - "@optionsUpdateChannel": { - "description": "Stable vs preview releases" - }, - "@downloadCreatePlaylistSourceFolderDisabled": { - "description": "Subtitle when playlist folder is disabled" - }, - "@extensionRefreshStatus": { - "description": "Tooltip for refreshing extension service health status" - }, - "backupRestoreRestartHint": "Restart the app to make sure every change is applied.", - "@backupRestoreRestartHint": { - "description": "Hint shown after restoring that an app restart is recommended" - }, - "@snackbarExtensionInstalledEnable": { - "description": "Snackbar after installing an extension from the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } - }, - "settingsAutoExportFailedSubtitle": "Автоматическое сохранение неудачных загрузок в TXT файл", - "@settingsAutoExportFailedSubtitle": { - "description": "Subtitle for auto-export setting" - }, - "searchSortArtistAZ": "Исполнитель (А-Я)", - "@searchSortArtistAZ": { - "description": "Sort option - artist ascending" - }, - "editMetadataFieldAlbumArtist": "Исполнитель альбома", - "@editMetadataFieldAlbumArtist": { - "description": "Chip label for album artist field in auto-fill selector" - }, - "@queueEmptyHistory": { - "description": "Empty state title when download history is empty" - }, - "@dialogDisableHistoryMessage": { - "description": "Confirmation dialog message shown before disabling download history" - }, - "queueFlacNoReliableMatches": "No reliable online matches found for the selection", - "@queueFlacNoReliableMatches": { - "description": "Snackbar when no safe FLAC redownload matches were found" - }, - "trackOpenInDeezer": "Открыть в Deezer", - "@trackOpenInDeezer": { - "description": "Action - open track in Deezer app" - }, - "setupChooseFromFilesSubtitle": "Выберите iCloud или другое местоположение", - "@setupChooseFromFilesSubtitle": { - "description": "Subtitle for file picker" - }, - "artistMonthlyListeners": "{count} слушателей в месяц", - "@artistMonthlyListeners": { - "description": "Monthly listener count display", - "placeholders": { - "count": { - "type": "String", - "description": "Formatted listener count" - } - } - }, - "@downloadLossyAacSubtitle": { - "description": "Subtitle for AAC/M4A 320kbps lossy option" - }, - "cacheSectionStorage": "Кэшированные данные", - "@cacheSectionStorage": { - "description": "Section header for cache entries" - }, - "@libraryAutoScanWeekly": { - "description": "Auto scan once per week" - }, - "tutorialDownloadCompletedSemantics": "Download completed", - "@tutorialDownloadCompletedSemantics": { - "description": "Accessibility label for completed download state in tutorial demo" - }, - "@logNoLogsYet": { - "description": "Empty state title" - }, - "@selectionDeletePlaylistsCount": { - "description": "Button label for deleting multiple selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", - "@downloadSeparateSinglesEnabled": { - "description": "Subtitle when separate singles folder is on" - }, - "setupAppDocumentsFolder": "Папка Документы приложения", - "@setupAppDocumentsFolder": { - "description": "iOS documents folder option" - }, - "storeLoadError": "Failed to load repository", - "settingsDownloadNetwork": "Сеть для скачивания", - "metadataSaveFailedStorage": "Не удалось записать метаданные обратно в хранилище", - "@logAutoScrollOff": { - "description": "Tooltip when auto-scroll is disabled on the log screen" - }, - "@trackConvertFormat": { - "description": "Menu item - convert audio format" - }, - "optionsArtistTagModeJoined": "Single joined value", - "@optionsArtistTagModeJoined": { - "description": "Artist tag mode option that joins multiple artists into one value" - }, - "@dateYesterday": { - "description": "Relative date - yesterday" - }, - "@settingsExtensionsSubtitle": { - "description": "Extensions settings description" - }, - "searchSortArtistZA": "Исполнитель (Я-А)", - "@extensionSettings": { - "description": "Section header - extension settings" - }, - "@extensionOauthConnectHint": { - "description": "Hint for an OAuth login link field before connecting Spotify" - }, - "@notifUpdateReady": { - "description": "Notification title when app update download is complete" - }, - "@regionCountryMX": { - "description": "Country name for SongLink region picker" - }, - "@nowPlayingOpenInExternalPlayer": { - "description": "Menu item to open the current track in an external player" - }, - "trackConvertDithering": "Dithering", - "@trackConvertDithering": { - "description": "Section label for lossless conversion dithering options" - }, - "settingsDownloadSubtitle": "Сервис, качество, откат", - "@settingsDownloadSubtitle": { - "description": "Download settings description" - }, - "libraryLastScanned": "Последнее сканирование: {time}", - "@libraryLastScanned": { - "description": "Last scan time display", - "placeholders": { - "time": { - "type": "String" - } - } - }, - "setupIosEmptyFolderWarning": "Ограничение iOS: пустые папки не могут быть выбраны. Выберите папку, содержащую хотя бы один файл.", - "@setupIosEmptyFolderWarning": { - "description": "iOS folder selection warning" - }, - "@storeAddRepoDescription": { - "description": "Store setup screen - explanatory text" - }, - "@snackbarFailedToInstallNamed": { - "description": "Snackbar when extension install fails in the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } - }, - "@collectionAddedTracksToPlaylist": { - "description": "Snackbar after adding multiple tracks to a playlist", - "placeholders": { - "count": { - "type": "int" - }, - "playlistName": { - "type": "String" - } - } - }, - "updateNew": "Новая", - "@updateNew": { - "description": "Label for new version" - }, - "settingsExtensionsSubtitle": "Управление провайдерами скачивания", - "@albumFolderArtistAlbumSinglesSubtitle": { - "description": "Folder structure example" - }, - "trackReEnrichSelectAll": "Выбрать всё", - "@trackReEnrichSelectAll": { - "description": "Select all fields checkbox in re-enrich" - }, - "@extensionsUninstall": { - "description": "Uninstall extension button" - }, - "@downloadUseAlbumArtistForFoldersTrackSubtitle": { - "description": "Subtitle when track artist is used for folder names" - }, - "@logIssueNetworkErrorLabel": { - "description": "Diagnostic badge label for generic network errors" - }, - "albumFolderArtistYearAlbumSubtitle": "Альбомы/Исполнитель/[2005] Название Альбома/", - "@albumFolderArtistYearAlbumSubtitle": { - "description": "Folder structure example" - }, - "itemCount": "{count} {count, plural, =1{item} other{items}}", - "@itemCount": { - "description": "Generic item count label", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "discographyFetchingTracks": "Получение треков...", - "@discographyFetchingTracks": { - "description": "Progress - fetching album tracks" - }, - "@libraryFolder": { - "description": "Folder selection setting" - }, - "queueEmptyAlbums": "No album downloads", - "@queueEmptyAlbums": { - "description": "Empty state title when no album downloads exist" - }, - "@metadataProviderPriorityDescription": { - "description": "Metadata priority page description" - }, - "@extensionVerificationHelpTitleManual": { - "description": "Dialog title when automatic browser launch for verification fails" - }, - "extensionError": "Ошибка", - "@extensionError": { - "description": "Extension detail - error message" - }, - "@trackLyricsLoadFailed": { - "description": "Message when lyrics loading fails" - }, - "@downloadedAlbumDeleteCount": { - "description": "Delete button text with count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@extensionsNoHomeFeedExtensions": { - "description": "Extensions page - shown when no installed extension has home feed" - }, - "@collectionArtistCount": { - "description": "Artist count label for favorite artists", - "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" - } - } - }, - "@trackRemoveFromDevice": { - "description": "Action - delete downloaded file" - }, - "lyricsProvidersEnabledSection": "Включено ({count})", - "@lyricsProvidersEnabledSection": { - "description": "Section header for enabled providers", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@cueSplitTitle": { - "description": "Title for CUE split bottom sheet" - }, - "@downloadedAlbumSelectedCount": { - "description": "Selection count indicator", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@trackOptionRemoveFromWishlist": { - "description": "Bottom sheet action label - remove track from wishlist" - }, - "notifDownloadingTrack": "Downloading {trackName}", - "@notifDownloadingTrack": { - "description": "Notification title while downloading a track", + "snackbarAlreadyInLibrary": "\"{trackName}\" уже есть в вашей библиотеке", + "@snackbarAlreadyInLibrary": { + "description": "Snackbar - track already exists in local library", "placeholders": { "trackName": { "type": "String" } } }, - "@discographySkippedDownloaded": { - "description": "Snackbar - with skipped tracks count", + "snackbarHistoryCleared": "История очищена", + "@snackbarHistoryCleared": { + "description": "Snackbar - history deleted" + }, + "snackbarDeletedTracks": "Удалено {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", + "@snackbarDeletedTracks": { + "description": "Snackbar - tracks deleted", "placeholders": { - "added": { - "type": "int" - }, - "skipped": { + "count": { "type": "int" } } }, - "@tutorialSettingsTip3": { - "description": "Tutorial settings tip 3" - }, - "@announcementUnableToOpenLink": { - "description": "Snackbar shown when an announcement CTA link cannot be opened" - }, - "trackReleaseDate": "Дата выхода", - "discographySelectedCount": "{count} выбрано", - "collectionArtistCount": "{count, plural, =1{1 artist} other{{count} artists}}", - "logIssueNetworkErrorLabel": "NETWORK ERROR", - "updateStartingDownload": "Загрузка началась...", - "@updateStartingDownload": { - "description": "Update status - initializing" - }, - "trackDiscNumber": "Номер диска", - "@trackDiscNumber": { - "description": "Metadata label - disc number" - }, - "optionsUsingExtension": "Используется расширение: {extensionName}", - "@optionsUsingExtension": { - "description": "Shows active extension name", - "placeholders": { - "extensionName": { - "type": "String" - } - } - }, - "dialogDisableHistoryTitle": "Turn off download history?", - "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", - "@tutorialWelcomeTip3": { - "description": "Tutorial welcome tip 3" - }, - "@collectionPlaylistEmptySubtitle": { - "description": "Playlist empty state subtitle" - }, - "@tutorialSearchHint": { - "description": "Placeholder shown in the tutorial search demo" - }, - "cleanupOrphanedDownloadsNone": "Записей без описания не найдено", - "discographySkippedDownloaded": "{added} добавлено, {skipped} уже скачано", - "@updateDontRemind": { - "description": "Update button - skip this version" - }, - "@snackbarLoadingCueSheet": { - "description": "Snackbar while loading a CUE sheet file" - }, - "@dialogUninstallExtension": { - "description": "Dialog title - uninstall extension" - }, - "lyricsProvidersTitle": "Приоритет к поставщику текста песни", - "@dialogRemove": { - "description": "Dialog button - remove item" - }, - "snackbarError": "Ошибка: {error}", - "@snackbarError": { - "description": "Generic error snackbar with error detail", + "snackbarCannotOpenFile": "Невозможно открыть файл: {error}", + "@snackbarCannotOpenFile": { + "description": "Snackbar - file open error", "placeholders": { "error": { "type": "String" } } }, - "@sectionApp": { - "description": "Settings section header" + "snackbarViewQueue": "Просмотр очереди", + "@snackbarViewQueue": { + "description": "Snackbar action - view download queue" }, - "@libraryPlayback": { - "description": "Section header for playback settings in library settings" + "snackbarUrlCopied": "{platform} ссылка скопирована в буфер обмена", + "@snackbarUrlCopied": { + "description": "Snackbar - URL copied", + "placeholders": { + "platform": { + "type": "String", + "description": "Platform name (Spotify/Deezer)" + } + } }, - "@downloadPrimaryArtistOnlyOn": { - "description": "Status label when primary-artist-only folder naming is enabled" + "snackbarFileNotFound": "Файл не найден", + "@snackbarFileNotFound": { + "description": "Snackbar - file doesn't exist" }, - "lyricsProvidersDiscardContent": "У вас есть несохранённые изменения, которые будут потеряны.", - "previewStop": "Остановить предпросмотр", - "@previewStop": { - "description": "Tooltip for the button that stops the playing track preview snippet" + "snackbarSelectExtFile": "Пожалуйста, выберите .spotiflac-ext-файл", + "@snackbarSelectExtFile": { + "description": "Snackbar - wrong file type selected" }, - "trackConvertConfirmMessageLossless": "Конвертировать {sourceFormat} в {targetFormat}? (Lossless — Без потери качества)\n\nОригинальные файлы будут удалены после конвертации.", - "discographyAlbumsOnly": "Только альбомы", - "@discographyAlbumsOnly": { - "description": "Option - download only albums" + "snackbarProviderPrioritySaved": "Приоритет провайдера сохранён", + "@snackbarProviderPrioritySaved": { + "description": "Snackbar - provider order saved" }, - "@editMetadataFieldCopyright": { - "description": "Chip label for copyright field in auto-fill selector" + "snackbarMetadataProviderSaved": "Приоритет провайдера метаданных сохранён", + "@snackbarMetadataProviderSaved": { + "description": "Snackbar - metadata provider order saved" }, - "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", - "aboutSocial": "Соцсети", - "@aboutSocial": { - "description": "Section for social links" - }, - "audioAnalysisNyquist": "Nyquist", - "trackCoverSelected": "Selected cover", - "@trackCoverSelected": { - "description": "Label for the newly selected cover preview" - }, - "downloadDeduplicationEnabled": "Already-downloaded tracks will be skipped", - "@downloadDeduplicationEnabled": { - "description": "Subtitle when deduplication is on" - }, - "homeEmptyTitle": "Нет поставщиков поиска", - "@homeEmptyTitle": { - "description": "Title shown on home when no providers are available yet" - }, - "@extensionHealthUnknown": { - "description": "Extension service health status - unknown" - }, - "storeInstalled": "Установлено", - "@storeInstalled": { - "description": "Already installed badge" - }, - "trackReplayGainSuccess": "Добавлены теги ReplayGain", - "@trackReplayGainSuccess": { - "description": "Snackbar message after ReplayGain tags written for a single track" - }, - "libraryShowDuplicateIndicatorSubtitle": "Показать при поиске существующих треков", - "@collectionPlaylistRenamed": { - "description": "Snackbar after renaming playlist" - }, - "@trackConvertResamplerSoxr": { - "description": "Lossless conversion SoX resampler option" - }, - "@dialogUnsavedChanges": { - "description": "Dialog message - unsaved changes" - }, - "dialogDownload": "Скачать", - "@dialogDownload": { - "description": "Confirm button in Download All dialog" - }, - "trackLyricsLoadFailed": "Не удалось загрузить текст песни", - "@backupContentsTitle": { - "description": "Header above the list summarizing what the backup contains" - }, - "@safMigrationTitle": { - "description": "Title of SAF migration dialog" - }, - "@trackReEnrichFieldLyrics": { - "description": "Checkbox label for lyrics field in re-enrich" - }, - "setupPermissionDeniedMessage": "В разрешении отказано. Пожалуйста, предоставьте все разрешения для продолжения.", - "@setupPermissionDeniedMessage": { - "description": "Error when permission denied" - }, - "settingsDownloadNetworkWifiOnly": "Только WiFi", - "@settingsDownloadNetworkWifiOnly": { - "description": "Network option - only use WiFi" - }, - "@backupIncludeSecrets": { - "description": "Toggle to include secret extension settings (tokens, API keys) in the backup" - }, - "@libraryFilterMetadataMissingAlbumArtist": { - "description": "Filter option - items missing album artist" - }, - "@extensionHealthServiceUnknown": { - "description": "Tooltip for unknown extension service health" + "snackbarExtensionInstalled": "{extensionName} установлено.", + "@snackbarExtensionInstalled": { + "description": "Snackbar - extension installed successfully", + "placeholders": { + "extensionName": { + "type": "String" + } + } }, "snackbarExtensionUpdated": "{extensionName} Обновлено.", "@snackbarExtensionUpdated": { @@ -2999,114 +989,365 @@ } } }, - "homeEmptySubtitle": "Установите расширение, чтобы продолжить.", - "@settingsTitle": { - "description": "Settings screen title" + "snackbarFailedToInstall": "Не удалось установить расширение", + "@snackbarFailedToInstall": { + "description": "Snackbar - extension install error" }, - "@libraryFilterMetadataIncorrectIsrcFormat": { - "description": "Filter option - items with an invalid ISRC format" + "snackbarFailedToUpdate": "Не удалось обновить расширение", + "@snackbarFailedToUpdate": { + "description": "Snackbar - extension update error" }, - "@notifLibraryScanComplete": { - "description": "Notification title when library scan finishes" + "errorRateLimited": "Слишком много запросов", + "@errorRateLimited": { + "description": "Error title - too many requests" }, - "@logIssueIspBlockingLabel": { - "description": "Diagnostic badge label when ISP blocking is detected" + "errorRateLimitedMessage": "Слишком много запросов. Пожалуйста, подождите минуту перед повторным поиском.", + "@errorRateLimitedMessage": { + "description": "Error message - rate limit explanation" }, - "tutorialDownloadTitle": "Скачивание музыки", - "@tutorialDownloadTitle": { - "description": "Tutorial download page title" + "errorNoTracksFound": "Треки не найдены", + "@errorNoTracksFound": { + "description": "Error - search returned no results" }, - "unknownTitle": "Unknown title", - "@unknownTitle": { - "description": "Fallback track title when metadata is missing" + "searchEmptyResultSubtitle": "Попробуйте другое ключевое слово", + "@searchEmptyResultSubtitle": { + "description": "Subtitle shown under the empty search result state on the home screen" }, - "navLibrary": "Библиотека", - "@navLibrary": { - "description": "Bottom navigation - Library tab" + "errorUrlNotRecognized": "Ссылка не распознана", + "@errorUrlNotRecognized": { + "description": "Error title - URL not handled by any extension or service" }, - "@snackbarAlreadyDownloaded": { - "description": "Snackbar - track already exists", + "errorUrlNotRecognizedMessage": "Эта ссылка не поддерживается. Убедитесь, что URL-адрес указан правильно и установлено совместимое расширение.", + "@errorUrlNotRecognizedMessage": { + "description": "Error message - URL not recognized explanation" + }, + "errorUrlFetchFailed": "Не удалось загрузить контент по этой ссылке. Пожалуйста, попробуйте еще раз.", + "@errorUrlFetchFailed": { + "description": "Error message - generic URL fetch failure" + }, + "errorMissingExtensionSource": "Невозможно загрузить {item}: отсутствует источник расширения", + "@errorMissingExtensionSource": { + "description": "Error - extension source not available", "placeholders": { - "trackName": { + "item": { "type": "String" } } }, - "editMetadataSelectAll": "Все", - "@editMetadataSelectAll": { - "description": "Button to select all fields for auto-fill" + "actionPause": "Пауза", + "@actionPause": { + "description": "Action button - pause download" }, - "storeEmptyNoExtensions": "No extensions available", - "@storeEmptyNoExtensions": { - "description": "Message when store has no extensions" + "actionResume": "Возобновить", + "@actionResume": { + "description": "Action button - resume download" }, - "optionsUpdateChannelWarning": "Предварительная версия может содержать ошибки или неполные функции", - "@optionsUpdateChannelWarning": { - "description": "Warning about preview channel" + "actionCancel": "Отмена", + "@actionCancel": { + "description": "Action button - cancel operation" }, - "@collectionPlaylistNameHint": { - "description": "Hint text for playlist name input" + "actionSelectAll": "Выбрать все", + "@actionSelectAll": { + "description": "Action button - select all items" }, - "notifLibraryScanComplete": "Сканирование библиотеки завершено", - "editMetadataFieldIsrc": "ISRC", - "@editMetadataFieldIsrc": { - "description": "Chip label for ISRC field in auto-fill selector" + "actionDeselect": "Снять выделение", + "@actionDeselect": { + "description": "Action button - deselect all" }, - "@libraryFolderHint": { - "description": "Placeholder when no folder selected" - }, - "homeSearchHintDefault": "Paste supported URL or search...", - "@homeSearchHintDefault": { - "description": "Default placeholder for the main search field on Home" - }, - "extensionsNoExtensionsSubtitle": "Установите .spotiflac-ext файлы для добавления новых провайдеров", - "@extensionsNoExtensionsSubtitle": { - "description": "Empty state subtitle" - }, - "@extensionEnterValue": { - "description": "Hint for editing an extension setting value" - }, - "backupRestoreConfirmTitle": "Restore this backup?", - "@backupRestoreConfirmTitle": { - "description": "Confirmation dialog title before restoring a backup" - }, - "@libraryScanSelectFolderFirst": { - "description": "Message when trying to scan without folder" - }, - "@qualityHiResFlac": { - "description": "Quality option - high resolution FLAC" - }, - "aboutSpecialThanks": "Особая благодарность", - "@aboutSpecialThanks": { - "description": "Section for special thanks" - }, - "storeInstall": "Установить", - "@storeInstall": { - "description": "Install extension button" - }, - "@collectionWishlistEmptySubtitle": { - "description": "Wishlist empty state subtitle" - }, - "historyFilterAlbums": "Альбомы", - "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", - "@extensionCustomUrlHandlingSubtitle": { - "description": "Extension detail subtitle for custom URL handling" - }, - "filenameShowAdvancedTagsDescription": "Включить форматированные теги для отслеживания заполнения и шаблонов дат", - "@aboutReportIssue": { - "description": "Link to report bugs" - }, - "@folderOrganizationByPlaylist": { - "description": "Folder option - playlist folders" - }, - "@dateWeeksAgo": { - "description": "Relative date - weeks ago", + "selectionSelected": "{count} выбрано", + "@selectionSelected": { + "description": "Selection count indicator", "placeholders": { "count": { "type": "int" } } }, + "selectionAllSelected": "Все треки выбраны", + "@selectionAllSelected": { + "description": "Status - all items selected" + }, + "selectionSelectToDelete": "Выберите треки для удаления", + "@selectionSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "progressFetchingMetadata": "Получение метаданных... {current}/{total}", + "@progressFetchingMetadata": { + "description": "Progress indicator - loading track info", + "placeholders": { + "current": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "progressReadingCsv": "Чтение CSV...", + "@progressReadingCsv": { + "description": "Progress indicator - parsing CSV file" + }, + "searchSongs": "Песни", + "@searchSongs": { + "description": "Search result category - songs" + }, + "searchArtists": "Исполнители", + "@searchArtists": { + "description": "Search result category - artists" + }, + "searchAlbums": "Альбомы", + "@searchAlbums": { + "description": "Search result category - albums" + }, + "searchPlaylists": "Плейлисты", + "@searchPlaylists": { + "description": "Search result category - playlists" + }, + "searchSortTitle": "Упорядочить результаты", + "@searchSortTitle": { + "description": "Bottom sheet title for search sort options" + }, + "searchSortDefault": "По умолчанию", + "@searchSortDefault": { + "description": "Sort option - default API order" + }, + "searchSortTitleAZ": "Название (А-Я)", + "@searchSortTitleAZ": { + "description": "Sort option - title ascending" + }, + "searchSortTitleZA": "Название (Я-А)", + "@searchSortTitleZA": { + "description": "Sort option - title descending" + }, + "searchSortArtistAZ": "Исполнитель (А-Я)", + "@searchSortArtistAZ": { + "description": "Sort option - artist ascending" + }, + "searchSortArtistZA": "Исполнитель (Я-А)", + "@searchSortArtistZA": { + "description": "Sort option - artist descending" + }, + "searchSortDurationShort": "Продолжительность (наименьшая)", + "@searchSortDurationShort": { + "description": "Sort option - shortest duration first" + }, + "searchSortDurationLong": "Продолжительность (наибольшая)", + "@searchSortDurationLong": { + "description": "Sort option - longest duration first" + }, + "searchSortDateOldest": "Дата релиза (старейшая)", + "@searchSortDateOldest": { + "description": "Sort option - oldest release first" + }, + "searchSortDateNewest": "Дата релиза (новейшая)", + "@searchSortDateNewest": { + "description": "Sort option - newest release first" + }, + "tooltipPlay": "Воспроизвести", + "@tooltipPlay": { + "description": "Tooltip - play button" + }, + "filenameFormat": "Формат имени файла", + "@filenameFormat": { + "description": "Setting title - filename pattern" + }, + "filenameShowAdvancedTags": "Показать расширенные теги", + "@filenameShowAdvancedTags": { + "description": "Toggle label for showing advanced filename tags" + }, + "filenameShowAdvancedTagsDescription": "Включить форматированные теги для отслеживания заполнения и шаблонов дат", + "@filenameShowAdvancedTagsDescription": { + "description": "Description for advanced filename tag toggle" + }, + "folderOrganizationNone": "Без организации", + "@folderOrganizationNone": { + "description": "Folder option - flat structure" + }, + "folderOrganizationByPlaylist": "По плейлисту", + "@folderOrganizationByPlaylist": { + "description": "Folder option - playlist folders" + }, + "folderOrganizationByPlaylistSubtitle": "Отдельная папка для каждого плейлиста", + "@folderOrganizationByPlaylistSubtitle": { + "description": "Subtitle for playlist folder option" + }, + "folderOrganizationByArtist": "По исполнителю", + "@folderOrganizationByArtist": { + "description": "Folder option - artist folders" + }, + "folderOrganizationByAlbum": "По альбому", + "@folderOrganizationByAlbum": { + "description": "Folder option - album folders" + }, + "folderOrganizationByArtistAlbum": "Исполнитель/Альбом", + "@folderOrganizationByArtistAlbum": { + "description": "Folder option - nested folders" + }, + "folderOrganizationDescription": "Сортировать скачанные файлы по папкам", + "@folderOrganizationDescription": { + "description": "Folder organization sheet description" + }, + "folderOrganizationNoneSubtitle": "Все файлы в папке загрузок", + "@folderOrganizationNoneSubtitle": { + "description": "Subtitle for no organization option" + }, + "folderOrganizationByArtistSubtitle": "Отдельная папка для каждого исполнителя", + "@folderOrganizationByArtistSubtitle": { + "description": "Subtitle for artist folder option" + }, + "folderOrganizationByAlbumSubtitle": "Отдельная папка для каждого альбома", + "@folderOrganizationByAlbumSubtitle": { + "description": "Subtitle for album folder option" + }, + "folderOrganizationByArtistAlbumSubtitle": "Вложенные папки для исполнителей и альбомов", + "@folderOrganizationByArtistAlbumSubtitle": { + "description": "Subtitle for nested folder option" + }, + "updateAvailable": "Доступно обновление", + "@updateAvailable": { + "description": "Update dialog title" + }, + "updateLater": "Позже", + "@updateLater": { + "description": "Update button - dismiss" + }, + "updateStartingDownload": "Загрузка началась...", + "@updateStartingDownload": { + "description": "Update status - initializing" + }, + "updateDownloadFailed": "Не удалось скачать", + "@updateDownloadFailed": { + "description": "Update error title" + }, + "updateFailedMessage": "Сбой загрузки обновления", + "@updateFailedMessage": { + "description": "Update error message" + }, + "updateNewVersionReady": "Доступна новая версия", + "@updateNewVersionReady": { + "description": "Update subtitle" + }, + "updateRequiredTitle": "Требуется обновление", + "@updateRequiredTitle": { + "description": "Title of the mandatory update dialog shown when the installed version is too old" + }, + "updateRequiredNotice": "Эта версия {count} больше не поддерживается. Обновите, чтобы продолжить использовать приложение.", + "@updateRequiredNotice": { + "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "updateCurrent": "Текущая", + "@updateCurrent": { + "description": "Label for current version" + }, + "updateNew": "Новая", + "@updateNew": { + "description": "Label for new version" + }, + "updateDownloading": "Скачивание...", + "@updateDownloading": { + "description": "Update status - downloading" + }, + "updateWhatsNew": "Что нового", + "@updateWhatsNew": { + "description": "Changelog section title" + }, + "updateDownloadInstall": "Скачать и установить", + "@updateDownloadInstall": { + "description": "Update button - download and install" + }, + "updateDontRemind": "Не напоминать", + "@updateDontRemind": { + "description": "Update button - skip this version" + }, + "providerPriorityTitle": "Приоритет провайдера", + "@providerPriorityTitle": { + "description": "Provider priority page title" + }, + "providerPriorityDescription": "Перетаскивайте, чтобы изменить порядок провайдеров загрузки. Приложение будет пробовать провайдеров сверху вниз при загрузке треков.", + "@providerPriorityDescription": { + "description": "Provider priority page description" + }, + "providerPriorityInfo": "Если трек не доступен у первого провайдера, приложение автоматически попробует следующий.", + "@providerPriorityInfo": { + "description": "Info tip about fallback behavior" + }, + "providerPriorityFallbackExtensionsDescription": "Choose which installed download extensions can be used during automatic fallback.", + "@providerPriorityFallbackExtensionsDescription": { + "description": "Section description for extension fallback selection" + }, + "providerPriorityFallbackExtensionsHint": "Здесь перечислены только включенные расширения с возможностями поставщика загрузок.", + "@providerPriorityFallbackExtensionsHint": { + "description": "Hint below the extension fallback selection list" + }, + "providerExtension": "Расширение", + "@providerExtension": { + "description": "Label for extension-provided providers" + }, + "metadataProviderPriorityTitle": "Приоритет метаданных", + "@metadataProviderPriorityTitle": { + "description": "Metadata priority page title" + }, + "metadataProviderPriorityDescription": "Перетаскивайте, чтобы изменить порядок провайдеров метаданных. Приложение будет пробовать провайдеров сверху вниз при поиске треков и извлечении метаданных.", + "@metadataProviderPriorityDescription": { + "description": "Metadata priority page description" + }, + "metadataProviderPriorityInfo": "Deezer не имеет ограничений по скорости и рекомендуется в качестве основного. Spotify может ограничивать скорость после большого количества запросов.", + "@metadataProviderPriorityInfo": { + "description": "Info tip about rate limits" + }, + "logTitle": "Логи", + "@logTitle": { + "description": "Logs screen title" + }, + "logCopied": "Логи скопированы в буфер обмена", + "@logCopied": { + "description": "Snackbar - logs copied" + }, + "logSearchHint": "Поиск логов...", + "@logSearchHint": { + "description": "Log search placeholder" + }, + "logFilterLevel": "Уровень", + "@logFilterLevel": { + "description": "Filter by log level" + }, + "logFilterSection": "Фильтр", + "@logFilterSection": { + "description": "Filter section title" + }, + "logShareLogs": "Поделиться логами", + "@logShareLogs": { + "description": "Share button tooltip" + }, + "logClearLogs": "Очистить логи", + "@logClearLogs": { + "description": "Clear button tooltip" + }, + "logClearLogsTitle": "Очистить логи", + "@logClearLogsTitle": { + "description": "Clear logs dialog title" + }, + "logClearLogsMessage": "Вы уверены, что хотите очистить все логи?", + "@logClearLogsMessage": { + "description": "Clear logs confirmation message" + }, + "logFilterBySeverity": "Фильтровать логи по серьезности", + "@logFilterBySeverity": { + "description": "Filter dialog title" + }, + "logNoLogsYet": "Логов нет", + "@logNoLogsYet": { + "description": "Empty state title" + }, + "logNoLogsYetSubtitle": "Логи появятся здесь по мере использования приложения", + "@logNoLogsYetSubtitle": { + "description": "Empty state subtitle" + }, "logEntriesFiltered": "Записи ({count} фильтровано)", "@logEntriesFiltered": { "description": "Log count with filter active", @@ -3116,173 +1357,6 @@ } } }, - "@lyricsModeDescription": { - "description": "Lyrics mode picker description" - }, - "@setupAppDocumentsFolderSubtitle": { - "description": "Subtitle for documents folder" - }, - "storeAddRepoButton": "Добавить репозиторий", - "@storeAddRepoButton": { - "description": "Button to submit a new repository URL" - }, - "@collectionLovedEmptyTitle": { - "description": "Loved empty state title" - }, - "aboutReportIssue": "Сообщить о проблеме", - "snackbarFailedToWriteStorage": "Failed to write back to storage", - "@snackbarFailedToWriteStorage": { - "description": "Snackbar when writing metadata back to file fails" - }, - "errorInvalidFolderSelected": "Invalid folder selected", - "allFilesAccessDisabledMessage": "Доступ ко всем файлам отключен. Приложение будет использовать ограниченный доступ к хранилищу.", - "@allFilesAccessDisabledMessage": { - "description": "Snackbar message when user disables all files access" - }, - "downloadMusixmatchLanguageCode": "Код языка", - "@downloadMusixmatchLanguageCode": { - "description": "Label for Musixmatch language input field" - }, - "dialogUnsavedChanges": "Есть несохраненные изменения. Отменить их?", - "setupChooseFromFiles": "Выбрать из файлов", - "@setupChooseFromFiles": { - "description": "iOS file picker option" - }, - "@collectionFavoriteArtistsEmptySubtitle": { - "description": "Favorite artists empty state subtitle" - }, - "downloadLossy320FormatDesc": "Choose the output format for 320kbps lossy downloads. The original stream will be converted to your selected format when needed.", - "@backupRestoreConfirmButton": { - "description": "Confirm button to proceed with restore" - }, - "@queueEmptyAlbumsSubtitle": { - "description": "Empty state subtitle for album downloads" - }, - "collectionRemovedFromWishlist": "\"{trackName}\" удалён из списка желаний", - "@collectionRemovedFromWishlist": { - "description": "Snackbar after removing track from wishlist", - "placeholders": { - "trackName": { - "type": "String" - } - } - }, - "extensionsInstalledSuccess": "Расширение успешно установлено", - "progressReadingCsv": "Чтение CSV...", - "@progressReadingCsv": { - "description": "Progress indicator - parsing CSV file" - }, - "artistReleases": "Releases", - "@artistReleases": { - "description": "Section header for all artist releases" - }, - "extensionVerificationBrowserTitle": "Verification browser", - "@optionsDefaultSearchTabSubtitle": { - "description": "Subtitle for the preferred default search tab setting" - }, - "optionsArtistTagModeJoinedSubtitle": "Write one ARTIST value like \"Artist A, Artist B\" for maximum player compatibility.", - "downloadLossy320": "С потерями 320 кбит/с", - "@downloadLossy320": { - "description": "Quality option label for lossy 320kbps" - }, - "queueFlacAction": "Очередь FLAC", - "@queueFlacAction": { - "description": "Action/button label for queueing FLAC redownloads for local tracks" - }, - "@setupDownloadLocationIosMessage": { - "description": "iOS-specific folder info" - }, - "trackConvertOriginal": "Original", - "sectionLyricsProviderOptions": "Provider Options", - "nowPlayingTitle": "Now Playing", - "@nowPlayingTitle": { - "description": "Title for the now playing screen" - }, - "@extensionHealthChecksConfigured": { - "description": "Extension service health check count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@cacheClearAll": { - "description": "Button label to clear all caches" - }, - "a11yDeselectTrack": "Deselect track", - "@a11yDeselectTrack": { - "description": "Accessibility label for deselecting a track" - }, - "@lyricsProvidersInfoText": { - "description": "Info tip on lyrics provider priority page" - }, - "queueEmptyHistory": "Нет истории скачиваний", - "dialogClear": "Очистить", - "@dialogClear": { - "description": "Dialog button - clear items" - }, - "allFilesAccessDescription": "Включите, если вы сталкиваетесь с ошибками записи при сохранении в пользовательские папки. Android 13+ по умолчанию ограничивает доступ к определенным папкам.", - "@allFilesAccessDescription": { - "description": "Description explaining when to enable all files access" - }, - "trackConvertConfirmTitle": "Подтвердить конвертацию", - "storeCategoryLyrics": "Lyrics", - "@storeCategoryLyrics": { - "description": "Store extension category - lyrics" - }, - "@lyricsProvidersDescription": { - "description": "Description on the lyrics provider priority page" - }, - "tooltipLoveAll": "Love All", - "downloadDirectory": "Папка для скачивания", - "@downloadDirectory": { - "description": "Setting - download folder" - }, - "@tutorialExtensionsTip2": { - "description": "Tutorial extensions tip 2" - }, - "libraryFolder": "Папка библиотеки", - "@metadataProviderPriorityTitle": { - "description": "Metadata priority page title" - }, - "@cleanupOrphanedDownloadsResult": { - "description": "Snackbar after orphan cleanup", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "cacheExploreFeedDesc": "Изучите содержимое вкладки (новые релизы, тренды). Они обновятся при следующем посещении.", - "@cacheExploreFeedDesc": { - "description": "Description of what explore feed cache contains" - }, - "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", - "@a11yOpenTrackByArtist": { - "description": "Accessibility label for opening a track item", - "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" - } - } - }, - "announcementUnableToOpenLink": "Unable to open link. Please try again.", - "libraryFilterSortAlbumDesc": "Альбом (Я-А)", - "@libraryFilterSortAlbumDesc": { - "description": "Sort option - album descending" - }, - "trackConvertBitrate": "Битрейт", - "@trackConvertBitrate": { - "description": "Label for bitrate selection" - }, - "audioAnalysisFileSize": "Размер", - "extensionHealthServiceOnline": "Service online", - "@extensionHealthServiceOnline": { - "description": "Tooltip for online extension service" - }, "logEntries": "Записи ({count})", "@logEntries": { "description": "Total log count", @@ -3292,846 +1366,536 @@ } } }, - "trackConvertConfirmMessage": "Конвертировать из {sourceFormat} в {targetFormat} {bitrate}?\n\nОригинальный файл будет удален после конвертации.", - "@trackConvertConfirmMessage": { - "description": "Confirmation dialog message", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "bitrate": { - "type": "String" - } - } + "channelStable": "Стабильный", + "@channelStable": { + "description": "Update channel - stable releases" }, - "@optionsArtistTagModeSplitVorbisSubtitle": { - "description": "Subtitle for split Vorbis artist tag mode" + "channelPreview": "Предварительный", + "@channelPreview": { + "description": "Update channel - beta/preview releases" }, - "folderOrganizationByAlbum": "По альбому", - "@folderOrganizationByAlbum": { - "description": "Folder option - album folders" + "sectionSearchSource": "Поиск источника", + "@sectionSearchSource": { + "description": "Settings section header" }, - "libraryPlayback": "Playback", - "@storeFilterAll": { - "description": "Repo filter - all extensions" + "sectionDownload": "Скачивание", + "@sectionDownload": { + "description": "Settings section header" }, - "aboutApp": "Приложение", - "@aboutApp": { - "description": "Section for app info" + "sectionPerformance": "Производительность", + "@sectionPerformance": { + "description": "Settings section header" }, - "optionsReplayGainSubtitleOff": "Выключено: нет тегов нормализации громкости", - "@optionsReplayGainSubtitleOff": { - "description": "Subtitle when ReplayGain is disabled" + "sectionApp": "Приложение", + "@sectionApp": { + "description": "Settings section header" }, - "@storeRepoDialogTitle": { - "description": "Title of the change/remove repository dialog" + "sectionData": "Данные", + "@sectionData": { + "description": "Settings section header" }, - "settingsLyricsSubtitle": "Embed, mode, providers, language options", - "@settingsLyricsSubtitle": { - "description": "Subtitle for lyrics settings" + "sectionDebug": "Отладка", + "@sectionDebug": { + "description": "Settings section header" }, - "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", - "storeFilterIntegration": "Интеграция", - "@storeFilterIntegration": { - "description": "Repo filter - integrations" + "sectionService": "Сервис", + "@sectionService": { + "description": "Settings section header" }, - "@lyricsProvidersAtLeastOne": { - "description": "Snackbar when user tries to disable the last enabled provider" - }, - "@appearanceHistoryViewGrid": { - "description": "Grid layout option" - }, - "trackDownloaded": "Скачано", - "extensionVerificationHelpMessageManual": "SpotiFLAC Mobile could not open the browser automatically. Open this link in your browser, or copy it manually.", - "setupDownloadLocationIosMessage": "В iOS загрузки сохраняются в папке Документы приложения. Вы можете получить к ним доступ через приложение Файлы.", - "optionsArtistTagModeDescription": "Выберите, как несколько исполнителей записываются встроенные теги.", - "@optionsArtistTagModeDescription": { - "description": "Bottom-sheet description for artist tag mode setting" - }, - "@queueRetryAllFailed": { - "description": "Button to retry every failed download in the queue", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@trackConvertDitherTriangularHp": { - "description": "Lossless conversion high-pass triangular dither option" - }, - "@extensionVerificationCopyLink": { - "description": "Button to copy the extension verification URL" - }, - "searchSongs": "Песни", - "@searchSongs": { - "description": "Search result category - songs" - }, - "@appearanceHistoryView": { - "description": "Layout style for history" + "sectionAudioQuality": "Качество аудио", + "@sectionAudioQuality": { + "description": "Settings section header" }, "sectionFileSettings": "Настройки файла", "@sectionFileSettings": { "description": "Settings section header" }, - "@cancelDownloadTitle": { - "description": "Dialog title when confirming cancellation of an active download" + "sectionLyrics": "Тексты песен", + "@sectionLyrics": { + "description": "Settings section header" }, - "@cacheLibraryCover": { - "description": "Cache item title for local library cover art images" + "lyricsMode": "Режим текстов песен", + "@lyricsMode": { + "description": "Setting - how to save lyrics" }, - "audioAnalysisSpectralCutoff": "Spectral Cutoff", - "dialogDelete": "Удалить", - "@dialogDelete": { - "description": "Dialog button - delete item" + "lyricsModeDescription": "Выберите как сохранить тексты песен при скачивании", + "@lyricsModeDescription": { + "description": "Lyrics mode picker description" }, - "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", - "@tutorialLibraryDesc": { - "description": "Tutorial library page description" + "lyricsModeEmbed": "Вписать в файл", + "@lyricsModeEmbed": { + "description": "Lyrics mode option - embed in audio file" }, - "@queueDownloadSpeedStatus": { - "description": "Queue status while downloading with speed", - "placeholders": { - "speed": { - "type": "String" - } - } + "lyricsModeEmbedSubtitle": "Встроить текст в метаданные FLAC", + "@lyricsModeEmbedSubtitle": { + "description": "Subtitle for embed option" }, - "@extensionsHomeFeedOffSubtitle": { - "description": "Extensions page - subtitle for off home feed option" - }, - "cacheCleanupResult": "Очистка завершена: {downloadCount} потерянных загрузок, {libraryCount} отсутствующих записей в библиотеке", - "@cacheCleanupResult": { - "description": "Snackbar after unused data cleanup", - "placeholders": { - "downloadCount": { - "type": "int" - }, - "libraryCount": { - "type": "int" - } - } - }, - "trackConvertLosslessHint": "Конвертация без потери качества", - "@trackConvertLosslessHint": { - "description": "Hint shown when converting between lossless formats" - }, - "collectionRenamePlaylist": "Переименовать плейлист", - "@collectionRenamePlaylist": { - "description": "Action to rename playlist" - }, - "@libraryFilterTitle": { - "description": "Filter bottom sheet title" - }, - "@storageModeAppFolder": { - "description": "Storage mode option - app-managed folder" - }, - "logTotalErrors": "Total errors: {count}", - "@logTotalErrors": { - "description": "Total error count in log issue analysis", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@setupStorageRequired": { - "description": "Title when storage permission needed" - }, - "@snackbarMetadataProviderSaved": { - "description": "Snackbar - metadata provider order saved" - }, - "@selectionBatchConvertConfirmTitle": { - "description": "Confirmation dialog title for batch conversion" - }, - "extensionsHomeFeedAutoSubtitle": "Automatically select the best available", - "@extensionsHomeFeedAutoSubtitle": { - "description": "Extensions page - subtitle for auto home feed option" - }, - "setupLanguageDescription": "Выберите язык для приложения. Вы можете изменить его позже в настройках.", - "settingsBackupSubtitle": "Move your library, history and settings to a new device", - "@settingsBackupSubtitle": { - "description": "Subtitle for backup and restore settings item" - }, - "recentTypeArtist": "Исполнитель", - "@recentTypeArtist": { - "description": "Recent access item type - artist" - }, - "collectionPlaylistEmptySubtitle": "Удерживайте + на любом треке, чтобы добавить его сюда", - "artistCompilations": "Сборники", - "@artistCompilations": { - "description": "Section header for compilations" - }, - "snackbarFolderPickerFailed": "Не удалось открыть выбор папок: {error}", - "@snackbarFolderPickerFailed": { - "description": "Snackbar shown when folder picker fails to open", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "@optionsDetailedLoggingOn": { - "description": "Status when logging enabled" - }, - "settingsSaveDownloadHistory": "Save download history", - "@settingsSaveDownloadHistory": { - "description": "Settings switch title for storing completed downloads in history" - }, - "@storeCategoryIntegration": { - "description": "Store extension category - integration" - }, - "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", - "@a11yOpenItemCount": { - "description": "Accessibility label for opening a grouped item with count", - "placeholders": { - "title": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "trackFileInfo": "Информация о файле", - "@trackFileInfo": { - "description": "Tab title - file information" - }, - "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", - "audioAnalysisNoClipping": "No clipping", - "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", - "@tutorialSettingsDesc": { - "description": "Tutorial settings page description" + "lyricsModeExternal": "Внешний файл .lrc", + "@lyricsModeExternal": { + "description": "Lyrics mode option - separate LRC file" }, "lyricsModeExternalSubtitle": "Отдельный файл .lrc для плееров, таких, как Samsung Music", "@lyricsModeExternalSubtitle": { "description": "Subtitle for external option" }, - "trackLoadLyrics": "Загрузить текст песни", - "@trackLoadLyrics": { - "description": "Action - fetch lyrics" + "lyricsModeBoth": "Оба варианта", + "@lyricsModeBoth": { + "description": "Lyrics mode option - embed and external" }, - "extensionVerificationHelpTitleWaiting": "Verification still waiting", - "@extensionVerificationHelpTitleWaiting": { - "description": "Dialog title when verification is taking longer than expected" + "lyricsModeBothSubtitle": "Вписать и сохранить .lrc файл", + "@lyricsModeBothSubtitle": { + "description": "Subtitle for both option" }, - "libraryFilterReset": "Сброс", - "@libraryFilterReset": { - "description": "Reset all filters button" - }, - "@downloadAlbumArtistMetadataFull": { - "description": "Status label when album-artist folder filtering uses full metadata" - }, - "storeTitle": "Репозиторий расширения", - "@storeTitle": { - "description": "Repo screen title" - }, - "libraryCleared": "Библиотека очищена", - "@libraryCleared": { - "description": "Snackbar after clearing library" - }, - "queueDownloadCompleted": "Download completed", - "@queueDownloadCompleted": { - "description": "Accessibility label for completed download state in queue" - }, - "libraryTitle": "Локальная библиотека", - "@libraryTitle": { - "description": "Library settings page title" - }, - "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", - "@queueAlbumCount": { - "description": "Album count label with plural support", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "libraryClearConfirmTitle": "Очистить библиотеку", - "@backupExportSectionTitle": { - "description": "Section title for the export/backup card" - }, - "dialogClearAll": "Очистить всё", - "@dialogClearAll": { - "description": "Dialog title - clear all items" - }, - "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", - "@tutorialExtensionsDesc": { - "description": "Tutorial extensions page description" - }, - "libraryExternalPlayer": "External player", - "@libraryExternalPlayer": { - "description": "Setting option to use an external music player" - }, - "editMetadataFieldGenre": "Жанр", - "@tutorialLibraryTitle": { - "description": "Tutorial library page title" - }, - "folderOrganizationByPlaylist": "По плейлисту", - "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", - "@searchSortTitle": { - "description": "Bottom sheet title for search sort options" - }, - "editMetadataSelectNone": "None", - "@historyFilterSingles": { - "description": "Filter chip - show singles only" - }, - "@setupLanguageTitle": { - "description": "Title for the language selection step in setup" - }, - "trackSaveCoverArt": "Сохранить обложку", - "@trackSaveCoverArt": { - "description": "Menu action - save album cover art as file" - }, - "@downloadAlbumFolderStructure": { - "description": "Setting - album folder organization" - }, - "lyricsProvidersAtLeastOne": "По крайней мере один провайдер должен оставаться включенным", - "@notifDownloadCompleteCount": { - "description": "Notification title when download is complete, with count", - "placeholders": { - "completed": { - "type": "int" - }, - "total": { - "type": "int" - } - } - }, - "setupUseDefault": "По умолчанию", - "@setupUseDefault": { - "description": "Button to use default folder" - }, - "logNoLogsYetSubtitle": "Логи появятся здесь по мере использования приложения", - "@logNoLogsYetSubtitle": { - "description": "Empty state subtitle" - }, - "@dateToday": { - "description": "Relative date - today" - }, - "trackSaveLyricsProgress": "Сохранение текста...", - "@trackSaveLyricsProgress": { - "description": "Snackbar while saving lyrics to file" - }, - "trackCoverSaved": "Обложка сохранена в {fileName}", - "@trackCoverSaved": { - "description": "Snackbar after cover art saved", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "trackReEnrichFieldLyrics": "Текст песни", - "@audioAnalysisRescan": { - "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" - }, - "@downloadNeteaseIncludeRomanizationEnabled": { - "description": "Subtitle when Netease romanization is on" - }, - "dialogDisableAndClear": "Turn off and clear", - "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", - "cleanupOrphanedDownloadsSubtitle": "Удалить историю записи для файлов, которых больше не существует", - "@notifLibraryScanProgressWithTotal": { - "description": "Notification body for library scan progress when total is known", - "placeholders": { - "scanned": { - "type": "int" - }, - "total": { - "type": "int" - }, - "percentage": { - "type": "int" - } - } - }, - "@extensionDetailsTags": { - "description": "Section title for extension tags" - }, - "@albumFolderAlbumOnlySubtitle": { - "description": "Folder structure example" - }, - "@audioAnalysisAnalyzing": { - "description": "Loading text while analyzing audio" - }, - "@settingsDonate": { - "description": "Settings menu item - donate page" - }, - "@collectionPlaylistNameRequired": { - "description": "Validation error for empty playlist name" - }, - "@backupImportSectionDescription": { - "description": "Description for the restore action" - }, - "storeFilterLyrics": "Тексты песен", - "libraryAutoScan": "Автосканирование", - "@libraryAutoScan": { - "description": "Setting for automatic library scanning" - }, - "safMigrationMessage1": "SpotiFLAC now uses Android Storage Access Framework (SAF) for downloads. This fixes \"permission denied\" errors on Android 10+.", - "@safMigrationMessage1": { - "description": "First paragraph of SAF migration dialog" - }, - "setupStorageRequired": "Требуется доступ к хранилищу", - "@notifLibraryScanErrors": { - "description": "Library scan complete suffix - error count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "appearanceHistoryViewGrid": "Сетка", - "trackConvertConverting": "Конвертация аудио...", - "@trackConvertConverting": { - "description": "Snackbar while converting" - }, - "@setupUseDefaultFolder": { - "description": "Dialog title for default folder" - }, - "optionsArtistTagModeSplitVorbisSubtitle": "Write one artist tag per artist for FLAC and Opus; MP3 and M4A stay joined.", - "snackbarPlayingNext": "Playing next", - "@snackbarPlayingNext": { - "description": "Snackbar when a track is inserted as the next queue item" - }, - "optionsDefaultSearchTabSubtitle": "Выберите, какая вкладка открывает новые результаты поиска.", - "@editMetadataAutoFillFetch": { - "description": "Button label to fetch online metadata and fill selected fields" - }, - "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", - "@sectionService": { + "sectionColor": "Цвет", + "@sectionColor": { "description": "Settings section header" }, - "notifUpdateProgress": "{received} / {total} МБ • {percentage}%", - "@discographyDownloadSelected": { - "description": "Button - download selected albums" + "sectionTheme": "Тема", + "@sectionTheme": { + "description": "Settings section header" }, - "cacheClearAllConfirmMessage": "Это очистит все категории кэша на этой странице. Скачанные музыкальные файлы не будут удалены.", - "@cacheClearAllConfirmMessage": { - "description": "Dialog message before clearing all caches" + "sectionLayout": "Разметка", + "@sectionLayout": { + "description": "Settings section header" }, - "extensionsHomeFeedProvider": "Home Feed Provider", - "@extensionsHomeFeedProvider": { - "description": "Extensions page - label for home feed provider selector" + "sectionLanguage": "Язык", + "@sectionLanguage": { + "description": "Settings section header for language" }, - "@cacheExploreFeed": { - "description": "Cache item title for explore home feed cache" + "appearanceLanguage": "Язык приложения", + "@appearanceLanguage": { + "description": "Language setting title" }, - "@audioAnalysisDynamicRange": { - "description": "Dynamic range metric label" + "settingsAppearanceSubtitle": "Тема, цвета, дисплей", + "@settingsAppearanceSubtitle": { + "description": "Appearance settings description" }, - "unknownAlbum": "Unknown Album", - "trackCoverCurrent": "Current cover", - "downloadSongLinkRegionDesc": "Region used when resolving track links via SongLink. Choose the country where your streaming services are available.", - "downloadPrimaryArtistOnlyOff": "Primary only: Off", - "dialogDone": "Готово", - "@dialogDone": { - "description": "Dialog button - action completed" + "settingsDownloadSubtitle": "Сервис, качество, откат", + "@settingsDownloadSubtitle": { + "description": "Download settings description" }, - "storeRepoUrlLabel": "Ссылка на репозиторий", - "downloadSelectServiceToEnable": "Select a provider with quality options to enable this option", - "@logIssueRateLimitedSuggestion": { - "description": "Diagnostic badge suggestion for rate limiting" + "settingsExtensionsSubtitle": "Управление провайдерами скачивания", + "@settingsExtensionsSubtitle": { + "description": "Extensions settings description" }, - "libraryScanProgress": "{progress}% из {total} файлов", - "@libraryScanProgress": { - "description": "Scan progress display", + "settingsLogsSubtitle": "Просмотреть логи для отладки", + "@settingsLogsSubtitle": { + "description": "Logs settings description" + }, + "loadingSharedLink": "Загрузка общедоступной ссылки...", + "@loadingSharedLink": { + "description": "Status when opening shared URL" + }, + "pressBackAgainToExit": "Нажмите «Назад» ещё раз, чтобы выйти", + "@pressBackAgainToExit": { + "description": "Exit confirmation message" + }, + "downloadAllCount": "Скачать все ({count})", + "@downloadAllCount": { + "description": "Download all button with count", "placeholders": { - "progress": { - "type": "String" - }, - "total": { + "count": { "type": "int" } } }, - "collectionLovedEmptyTitle": "Папка Любимые пуста", - "tutorialExtensionsTitle": "Расширения", - "@tutorialExtensionsTitle": { - "description": "Tutorial extensions page title" - }, - "searchSortDurationShort": "Продолжительность (наименьшая)", - "@searchSortDurationShort": { - "description": "Sort option - shortest duration first" + "tracksCount": "{count, plural, one {{count} трек} few {{count} трека} many {{count} треков} =1 {1 трек} other {{count} треков}}", + "@tracksCount": { + "description": "Track count display", + "placeholders": { + "count": { + "type": "int" + } + } }, "trackCopyFilePath": "Скопировать путь к файлу", "@trackCopyFilePath": { "description": "Action - copy file path" }, - "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", - "@trackConvertResampler": { - "description": "Section label for lossless conversion resampler options" + "trackRemoveFromDevice": "Удалить с устройства", + "@trackRemoveFromDevice": { + "description": "Action - delete downloaded file" }, - "editMetadataFieldTrackNum": "Трек #", - "@editMetadataFieldTrackNum": { - "description": "Chip label for track number field in auto-fill selector" + "trackLoadLyrics": "Загрузить текст песни", + "@trackLoadLyrics": { + "description": "Action - fetch lyrics" }, - "snackbarFailedToUpdate": "Не удалось обновить расширение", - "@snackbarFailedToUpdate": { - "description": "Snackbar - extension update error" + "trackMetadata": "Метаданные", + "@trackMetadata": { + "description": "Tab title - track metadata" }, - "notifAlreadyInLibrary": "Уже в библиотеке", - "@notifAlreadyInLibrary": { - "description": "Notification title when track is already in library" + "trackFileInfo": "Информация о файле", + "@trackFileInfo": { + "description": "Tab title - file information" }, - "collectionPlaylistNameHint": "Название плейлиста", - "extensionVerificationCopyLink": "Copy link", - "@replayGainBatchAnalyzing": { - "description": "Progress dialog title while batch scanning ReplayGain" + "trackLyrics": "Текст песни", + "@trackLyrics": { + "description": "Tab title - lyrics" + }, + "trackFileNotFound": "Файл не найден", + "@trackFileNotFound": { + "description": "Error - file doesn't exist" + }, + "trackOpenInDeezer": "Открыть в Deezer", + "@trackOpenInDeezer": { + "description": "Action - open track in Deezer app" + }, + "trackOpenInSpotify": "Открыть в Spotify", + "@trackOpenInSpotify": { + "description": "Action - open track in Spotify app" + }, + "trackTrackName": "Название", + "@trackTrackName": { + "description": "Metadata label - track title" + }, + "trackArtist": "Исполнитель", + "@trackArtist": { + "description": "Metadata label - artist name" + }, + "trackAlbumArtist": "Исполнитель альбома", + "@trackAlbumArtist": { + "description": "Metadata label - album artist" + }, + "trackAlbum": "Альбом", + "@trackAlbum": { + "description": "Metadata label - album name" + }, + "trackTrackNumber": "Номер трека", + "@trackTrackNumber": { + "description": "Metadata label - track number" + }, + "trackDiscNumber": "Номер диска", + "@trackDiscNumber": { + "description": "Metadata label - disc number" + }, + "trackDuration": "Продолжительность", + "@trackDuration": { + "description": "Metadata label - track length" + }, + "trackAudioQuality": "Качество записи", + "@trackAudioQuality": { + "description": "Metadata label - audio quality" + }, + "libraryQualityLabelFileFormat": "File format", + "@libraryQualityLabelFileFormat": { + "description": "Library audio quality label mode that shows the detected file format" + }, + "trackReleaseDate": "Дата выхода", + "@trackReleaseDate": { + "description": "Metadata label - release date" + }, + "trackGenre": "Жанр", + "@trackGenre": { + "description": "Metadata label - music genre" + }, + "trackLabel": "Заголовок", + "@trackLabel": { + "description": "Metadata label - record label" + }, + "trackCopyright": "Авторские права", + "@trackCopyright": { + "description": "Metadata label - copyright information" + }, + "trackDownloaded": "Скачано", + "@trackDownloaded": { + "description": "Metadata label - download date" + }, + "trackCopyLyrics": "Копировать текст", + "@trackCopyLyrics": { + "description": "Action - copy lyrics to clipboard" + }, + "trackLyricsSource": "Источник: {source}", + "@trackLyricsSource": { + "description": "Label showing the lyrics source/provider", + "placeholders": { + "source": { + "type": "String" + } + } + }, + "trackLyricsNotAvailable": "Текст песни недоступен для этого трека", + "@trackLyricsNotAvailable": { + "description": "Message when lyrics not found" + }, + "trackLyricsNotInFile": "В этом файле не найдено текстов песен", + "@trackLyricsNotInFile": { + "description": "Message when no embedded lyrics in audio file" + }, + "trackFetchOnlineLyrics": "Поиск в сети", + "@trackFetchOnlineLyrics": { + "description": "Action - fetch lyrics from online providers" + }, + "trackLyricsTimeout": "Время ожидания запроса истекло. Повторите попытку позже.", + "@trackLyricsTimeout": { + "description": "Message when lyrics request times out" + }, + "trackLyricsLoadFailed": "Не удалось загрузить текст песни", + "@trackLyricsLoadFailed": { + "description": "Message when lyrics loading fails" + }, + "trackEmbedLyrics": "Вписать текст песни", + "@trackEmbedLyrics": { + "description": "Action - embed lyrics into audio file" + }, + "trackLyricsEmbedded": "Текст успешно добавлен", + "@trackLyricsEmbedded": { + "description": "Snackbar - lyrics saved to file" + }, + "trackInstrumental": "Инструментальный трек", + "@trackInstrumental": { + "description": "Message when track is instrumental (no lyrics)" + }, + "trackCopiedToClipboard": "Скопировано в буфер обмена", + "@trackCopiedToClipboard": { + "description": "Snackbar - content copied" + }, + "trackDeleteConfirmTitle": "Удалить с устройства?", + "@trackDeleteConfirmTitle": { + "description": "Delete confirmation title" + }, + "trackDeleteConfirmMessage": "Это приведет к окончательному удалению загруженного файла и его удалению из истории.", + "@trackDeleteConfirmMessage": { + "description": "Delete confirmation message" + }, + "dateToday": "Сегодня", + "@dateToday": { + "description": "Relative date - today" + }, + "dateYesterday": "Вчера", + "@dateYesterday": { + "description": "Relative date - yesterday" + }, + "dateDaysAgo": "{count} дней назад", + "@dateDaysAgo": { + "description": "Relative date - days ago", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dateWeeksAgo": "{count} недель назад", + "@dateWeeksAgo": { + "description": "Relative date - weeks ago", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dateMonthsAgo": "{count} месяцев назад", + "@dateMonthsAgo": { + "description": "Relative date - months ago", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "storeFilterAll": "Все", + "@storeFilterAll": { + "description": "Repo filter - all extensions" + }, + "storeFilterMetadata": "Метаданные", + "@storeFilterMetadata": { + "description": "Repo filter - metadata providers" + }, + "storeFilterDownload": "Скачивание", + "@storeFilterDownload": { + "description": "Repo filter - download providers" + }, + "storeFilterUtility": "Утилиты", + "@storeFilterUtility": { + "description": "Repo filter - utility extensions" + }, + "storeFilterLyrics": "Тексты песен", + "@storeFilterLyrics": { + "description": "Repo filter - lyrics providers" + }, + "storeFilterIntegration": "Интеграция", + "@storeFilterIntegration": { + "description": "Repo filter - integrations" + }, + "storeClearFilters": "Очистить фильтры", + "@storeClearFilters": { + "description": "Button to clear all filters" + }, + "storeAddRepoTitle": "Добавить репозиторий расширения", + "@storeAddRepoTitle": { + "description": "Store setup screen - heading when no repo is configured" + }, + "storeAddRepoDescription": "Введите URL-адрес репозитория GitHub, который содержит файл registry.json для просмотра и установки расширений.", + "@storeAddRepoDescription": { + "description": "Store setup screen - explanatory text" + }, + "storeRepoUrlLabel": "Ссылка на репозиторий", + "@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" + }, + "storeAddRepoButton": "Добавить репозиторий", + "@storeAddRepoButton": { + "description": "Button to submit a new repository URL" + }, + "storeChangeRepoTooltip": "Изменить репозиторий", + "@storeChangeRepoTooltip": { + "description": "Tooltip for the change-repository icon button in the app bar" + }, + "storeRepoDialogTitle": "Репозиторий расширения", + "@storeRepoDialogTitle": { + "description": "Title of the change/remove repository dialog" + }, + "storeRepoDialogCurrent": "Текущий репозиторий:", + "@storeRepoDialogCurrent": { + "description": "Label shown above the current repository URL in the dialog" + }, + "storeNewRepoUrlLabel": "Новый 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": "Расширения не найдены", + "@storeEmptyNoResults": { + "description": "Message when search/filter returns no results" }, - "setupLanguageTitle": "Выберите язык", "extensionId": "ID", "@extensionId": { "description": "Extension detail - unique ID" }, - "regionCountryBR": "Brazil", - "@updateNewVersionReady": { - "description": "Update subtitle" + "extensionError": "Ошибка", + "@extensionError": { + "description": "Extension detail - error message" }, - "@queueDownloadedFileMissing": { - "description": "Accessibility label when a downloaded file is missing from disk" - }, - "@lyricsMode": { - "description": "Setting - how to save lyrics" - }, - "@settingsAppearance": { - "description": "Settings section - visual customization" - }, - "@setupStorageAccessMessageAndroid11": { - "description": "Android 11+ specific explanation" - }, - "@tutorialLibraryTip3": { - "description": "Tutorial library tip 3" - }, - "@downloadAppleQqMultiPersonDisabled": { - "description": "Subtitle when multi-person lyrics is off" - }, - "libraryStorageAccessMessage": "SpotiFLAC требуется доступ к хранилищу для сканирования вашей библиотеки музыки. Пожалуйста, предоставьте разрешение в настройках.", - "@libraryStorageAccessMessage": { - "description": "Dialog message for storage permission" - }, - "@tutorialLibraryTip1": { - "description": "Tutorial library tip 1" - }, - "dialogRemoveExtensionMessage": "Вы уверены, что хотите удалить это расширение? Это действие не может быть отменено.", - "@dialogRemoveExtensionMessage": { - "description": "Dialog message - uninstall confirmation" - }, - "setupDownloadLocationTitle": "Папка для скачивания", - "@setupDownloadLocationTitle": { - "description": "Download location dialog title" - }, - "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", - "@downloadNetworkCompatibilityModeEnabled": { - "description": "Subtitle when network compatibility mode is on" - }, - "@audioAnalysisBitDepth": { - "description": "Bit depth metric label" - }, - "trackOptionAddToLoved": "Добавить в Любимое", - "@trackOptionAddToLoved": { - "description": "Bottom sheet action label - add track to loved folder" - }, - "cacheAppDirectory": "Папка кэша приложения", - "@cacheAppDirectory": { - "description": "Cache item title for app cache directory" - }, - "lyricsProviderMusixmatchDesc": "Крупнейшая база данных текстов песен (мультиязычная)", - "@navStore": { - "description": "Bottom navigation - Extension repo tab" - }, - "extensionPostProcessing": "Постобработка", - "@searchTracks": { - "description": "Search filter label - tracks" - }, - "logCopied": "Логи скопированы в буфер обмена", - "@logCopied": { - "description": "Snackbar - logs copied" - }, - "@extensionHealthRequired": { - "description": "Label for a required extension service health check" - }, - "@previewPlay": { - "description": "Tooltip for the button that plays a short track preview snippet" - }, - "clickableLookingUpArtist": "Looking up artist...", - "@clickableLookingUpArtist": { - "description": "Snackbar shown while clickable artist metadata is being resolved" - }, - "@extensionVerificationBrowserSubtitleInApp": { - "description": "Subtitle when in-app browser is preferred for extension verification" - }, - "setupUseDefaultFolder": "Использовать папку по умолчанию?", - "tutorialSearchHint": "Paste or search...", - "@logIssueTrackNotFoundLabel": { - "description": "Diagnostic badge label when a track is unavailable" - }, - "@storageModeAppFolderSubtitle": { - "description": "Subtitle for app folder storage mode" - }, - "downloadMusixmatchLanguage": "Язык Musixmatch", - "@downloadMusixmatchLanguage": { - "description": "Setting for Musixmatch lyrics translation language" - }, - "lyricsModeExternal": "Внешний файл .lrc", - "@setupSelectFolder": { - "description": "Button to select folder" - }, - "logSearchHint": "Поиск логов...", - "@backupCreateFailed": { - "description": "Snackbar when backup creation fails" - }, - "@settingsSaveDownloadHistorySubtitle": { - "description": "Settings switch subtitle for storing completed downloads in history" - }, - "@albumFolderArtistAlbumFlat": { - "description": "Album folder option with singles directly in artist folder" - }, - "extensionHealthRequired": "required", - "actionCancel": "Отмена", - "@actionCancel": { - "description": "Action button - cancel operation" - }, - "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", - "@optionsEmbedMetadataSubtitleOff": { - "description": "Subtitle when metadata embedding is disabled" - }, - "downloadAllowLocalNetworkDisabled": "Local/private addresses are blocked for security", - "@downloadAllowLocalNetworkDisabled": { - "description": "Subtitle when allow local network access is off" - }, - "@extensionsDownloadPrioritySubtitle": { - "description": "Subtitle for download priority" - }, - "downloadSingleFilenameFormat": "Формат имени файла", - "@downloadSingleFilenameFormat": { - "description": "Setting for output filename pattern for singles/EPs" - }, - "cacheSummarySubtitle": "Очистка кэша не приведет к удалению загруженных музыкальных файлов.", - "@cacheSummarySubtitle": { - "description": "Helper text for cache summary card" - }, - "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", - "libraryFilterMetadataMissingTrackNumber": "Missing track number", - "@libraryFilterMetadataMissingTrackNumber": { - "description": "Filter option - items missing track number" - }, - "backupIncludeSecretsDescription": "Tokens and API keys from extensions will be saved into the backup file. Keep the file private. When off, you re-enter them after restoring.", - "@backupIncludeSecretsDescription": { - "description": "Explanation for the include-credentials toggle" - }, - "audioAnalysisChannelStats": "Per-channel Stats", - "@audioAnalysisChannelStats": { - "description": "Per-channel audio analysis section label" - }, - "@extensionServiceStatus": { - "description": "Extension detail section header for service status" - }, - "queueEmptySingles": "No single downloads", - "@queueEmptySingles": { - "description": "Empty state title when no single track downloads exist" - }, - "@snackbarSelectedPlaylistsEmpty": { - "description": "Snackbar when selected playlists contain no tracks" - }, - "@errorRateLimited": { - "description": "Error title - too many requests" - }, - "setupDownloadInFlac": "Download music in lossless and Hi-Res quality", - "@setupDownloadInFlac": { - "description": "App tagline in setup" - }, - "trackRemoveFromDevice": "Удалить с устройства", - "@extensionsNoDownloadProvider": { - "description": "Empty state - no download providers" - }, - "@backupCreated": { - "description": "Snackbar after a backup file is created" - }, - "cacheSummaryTitle": "Просмотр кэша", - "@cacheSummaryTitle": { - "description": "Heading for cache summary card" - }, - "selectionReplayGainCount": "ReplayGain ({count})", - "@selectionReplayGainCount": { - "description": "Batch selection action button label for ReplayGain", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@setupNotificationBackgroundDescription": { - "description": "Detailed notification explanation" - }, - "safMigrationTitle": "Storage Update Required", - "snackbarMetadataSaved": "Метаданные успешно сохранены", - "@snackbarMetadataSaved": { - "description": "Snackbar after successfully saving track metadata" - }, - "@backupContentsSettings": { - "description": "Backup contents row label for settings" - }, - "logClearLogsTitle": "Очистить логи", - "extensionsCustomSearch": "Пользовательский поиск", - "@extensionsCustomSearch": { - "description": "Label for custom search provider" - }, - "@downloadFrom": { - "description": "Label - download source" - }, - "cacheSizeWithFiles": "{size} в {count} файлах", - "selectionShareNoFiles": "Файлы, доступные для совместного доступа, не найдены", - "@selectionShareNoFiles": { - "description": "Snackbar when no selected files exist on disk" - }, - "snackbarAddedTracksToQueue": "Добавлено {count} треков в очередь", - "downloadFilenameInsertTag": "Нажмите для вставки тега:", - "@downloadFilenameInsertTag": { - "description": "Label above filename tag chips" - }, - "collectionRemovedFromFavoriteArtists": "\"{artistName}\" удалено из избранных исполнителей", - "@collectionRemovedFromFavoriteArtists": { - "description": "Snackbar after removing artist from favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", - "backupRestoreConfirmButton": "Restore", - "@libraryCleanupMissingFiles": { - "description": "Button to remove entries for missing files" - }, - "backupCreateFailed": "Failed to create backup", - "notifLibraryScanFailed": "Ошибка сканирования библиотеки", - "@notifLibraryScanFailed": { - "description": "Notification title when library scan fails" - }, - "audioAnalysisRescan": "Re-analyze", - "@trackTrackName": { - "description": "Metadata label - track title" - }, - "@setupPermissionRequired": { - "description": "Generic permission required title", - "placeholders": { - "permissionType": { - "type": "String", - "description": "Type of permission (Storage/Notification)" - } - } - }, - "@nowPlayingNoLyrics": { - "description": "Empty state when the playing file has no embedded lyrics" - }, - "libraryFilesUnit": "{count, plural, =1{file} other{files}}", - "@libraryFilesUnit": { - "description": "Unit label for files count during library scanning", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionCapabilities": "Возможности", + "@extensionCapabilities": { + "description": "Section header - extension features" }, + "extensionMetadataProvider": "Провайдер метаданных", "@extensionMetadataProvider": { "description": "Capability - provides metadata" }, - "@downloadFilterContributing": { - "description": "Setting to strip contributing artists from Album Artist folder name" + "extensionDownloadProvider": "Провайдер скачивания", + "@extensionDownloadProvider": { + "description": "Capability - provides downloads" }, - "libraryScanSelectFolderFirst": "Сначала выберите папку", - "@sectionDownload": { - "description": "Settings section header" + "extensionLyricsProvider": "Провайдер текстов", + "@extensionLyricsProvider": { + "description": "Capability - provides lyrics" }, - "extensionHealthNotConfigured": "Not configured", - "queueRetryAllFailed": "Retry {count} failed", - "folderOrganizationByPlaylistSubtitle": "Отдельная папка для каждого плейлиста", - "@folderOrganizationByPlaylistSubtitle": { - "description": "Subtitle for playlist folder option" + "extensionUrlHandler": "URL-обработчик", + "@extensionUrlHandler": { + "description": "Capability - handles URLs" }, - "lyricsProviderExtensionDesc": "Поставщик расширений", - "@libraryFilterQualityHiRes": { - "description": "Filter option - high resolution audio" + "extensionQualityOptions": "Параметры качества", + "@extensionQualityOptions": { + "description": "Capability - quality selection" }, - "trackConvertTitle": "Конвертировать аудио", - "@trackConvertTitle": { - "description": "Title of convert bottom sheet" + "extensionPostProcessingHooks": "Хуки постобработки", + "@extensionPostProcessingHooks": { + "description": "Capability - post-processing" }, - "setupSkipForNow": "Пропустить", - "sectionDownload": "Скачивание", - "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", - "@downloadLossyOpus256Subtitle": { - "description": "Subtitle for Opus 256kbps lossy option" + "extensionPermissions": "Разрешения", + "@extensionPermissions": { + "description": "Section header - required permissions" }, - "@trackConvertActionLabelLossless": { - "description": "Convert button label for lossless conversion with quality cap", + "extensionSettings": "Настройки", + "@extensionSettings": { + "description": "Section header - extension settings" + }, + "extensionRemoveButton": "Удалить расширение", + "@extensionRemoveButton": { + "description": "Button to uninstall extension" + }, + "extensionUpdated": "Обновлено", + "@extensionUpdated": { + "description": "Extension detail - last update" + }, + "extensionMinAppVersion": "Мин. версия приложения", + "@extensionMinAppVersion": { + "description": "Extension detail - minimum app version" + }, + "extensionCustomTrackMatching": "Соответствие пользовательских треков", + "@extensionCustomTrackMatching": { + "description": "Capability - custom track matching algorithm" + }, + "extensionPostProcessing": "Постобработка", + "@extensionPostProcessing": { + "description": "Capability - post-download processing" + }, + "extensionHooksAvailable": "Доступно {count} хуков(ов)", + "@extensionHooksAvailable": { + "description": "Post-processing hooks count", "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { + "count": { + "type": "int" + } + } + }, + "extensionPatternsCount": "{count} шаблон(ов)", + "@extensionPatternsCount": { + "description": "URL patterns count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionStrategy": "Стратегия: {strategy}", + "@extensionStrategy": { + "description": "Track matching strategy name", + "placeholders": { + "strategy": { "type": "String" } } }, - "storeRequiresVersion": "Requires v{version}+", - "@storeRequiresVersion": { - "description": "Store compatibility badge for minimum app version", - "placeholders": { - "version": { - "type": "String" - } - } + "extensionsProviderPrioritySection": "Приоритет провайдера", + "@extensionsProviderPrioritySection": { + "description": "Section header - provider priority" }, - "metadataProviderPriorityDescription": "Перетаскивайте, чтобы изменить порядок провайдеров метаданных. Приложение будет пробовать провайдеров сверху вниз при поиске треков и извлечении метаданных.", - "@notifUpdateFailed": { - "description": "Notification title when app update download fails" + "extensionsInstalledSection": "Установленные расширения", + "@extensionsInstalledSection": { + "description": "Section header - installed extensions" + }, + "extensionsNoExtensions": "Нет установленных расширений", + "@extensionsNoExtensions": { + "description": "Empty state - no extensions" + }, + "extensionsNoExtensionsSubtitle": "Установите .spotiflac-ext файлы для добавления новых провайдеров", + "@extensionsNoExtensionsSubtitle": { + "description": "Empty state subtitle" + }, + "extensionsInstallButton": "Установить расширение", + "@extensionsInstallButton": { + "description": "Button to install extension from file" }, "extensionsInfoTip": "Расширения могут добавлять новые метаданные и провайдеров загрузки. Устанавливайте только расширения из надежных источников.", "@extensionsInfoTip": { "description": "Security warning about extensions" }, - "@downloadAppleQqMultiPersonEnabled": { - "description": "Subtitle when multi-person lyrics is on" + "extensionsInstalledSuccess": "Расширение успешно установлено", + "@extensionsInstalledSuccess": { + "description": "Success message after install" }, - "libraryFilterMetadataMissingYear": "Отсутствует год", - "extensionsDownloadPriority": "Приоритет скачивания", - "@extensionsDownloadPriority": { - "description": "Setting - download provider order" - }, - "@downloadAllowLocalNetworkEnabled": { - "description": "Subtitle when allow local network access is on" - }, - "libraryScan": "Сканировать библиотеку", - "@libraryScan": { - "description": "Button to start library scan" - }, - "editMetadataFieldLabel": "Заголовок", - "@editMetadataFieldLabel": { - "description": "Chip label for label field in auto-fill selector" - }, - "updateDownloadFailed": "Не удалось скачать", - "@updateDownloadFailed": { - "description": "Update error title" - }, - "appearanceAmoledDarkSubtitle": "Глубокий чёрный фон", - "@appearanceAmoledDarkSubtitle": { - "description": "Subtitle for AMOLED dark" - }, - "setupIcloudNotSupported": "iCloud Drive не поддерживается. Пожалуйста, используйте папку Документы.", - "trackLyricsEmbeddedSource": "Embedded", - "@trackLyricsEmbeddedSource": { - "description": "Lyrics source label for embedded lyrics" - }, - "@trackAlbumArtist": { - "description": "Metadata label - album artist" + "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": { @@ -4147,1741 +1911,217 @@ } } }, - "@extensionSettingsCount": { - "description": "Count of settings exposed by an extension quality option", - "placeholders": { - "count": { - "type": "int" - } - } + "extensionsDownloadPriority": "Приоритет скачивания", + "@extensionsDownloadPriority": { + "description": "Setting - download provider order" }, - "notifLibraryScanCancelled": "Сканирование библиотеки отменено", - "@notifLibraryScanCancelled": { - "description": "Notification title when library scan is cancelled by the user" + "extensionsDownloadPrioritySubtitle": "Установка порядок сервисов скачивания", + "@extensionsDownloadPrioritySubtitle": { + "description": "Subtitle for download priority" }, - "collectionPlaylistNameRequired": "Имя плейлиста обязательно", - "libraryCleanupMissingFiles": "Очистка отсутствующих файлов", - "storeCategoryUtility": "Utility", - "@storeCategoryUtility": { - "description": "Store extension category - utility" + "extensionsFallbackTitle": "Fallback Extensions", + "@extensionsFallbackTitle": { + "description": "Setting and page title for choosing which download extensions can be used during fallback" }, - "searchSortTitle": "Упорядочить результаты", - "@extensionVerificationBrowserExternal": { - "description": "Chip label for external browser verification mode" + "extensionsFallbackSubtitle": "Choose which installed download extensions can be used as fallback", + "@extensionsFallbackSubtitle": { + "description": "Subtitle for download fallback extensions menu" }, - "audioAnalysisLufs": "LUFS", - "@setupAllowAccessToManageFiles": { - "description": "Instruction for file access permission" + "extensionsNoDownloadProvider": "Нет расширений с провайдером загрузки", + "@extensionsNoDownloadProvider": { + "description": "Empty state - no download providers" + }, + "extensionsMetadataPriority": "Приоритет метаданных", + "@extensionsMetadataPriority": { + "description": "Setting - metadata provider order" + }, + "extensionsMetadataPrioritySubtitle": "Установка порядка поиска и источника метаданных", + "@extensionsMetadataPrioritySubtitle": { + "description": "Subtitle for metadata priority" + }, + "extensionsNoMetadataProvider": "Нет расширений с провайдером метаданных", + "@extensionsNoMetadataProvider": { + "description": "Empty state - no metadata providers" + }, + "extensionsSearchProvider": "Провайдер поиска", + "@extensionsSearchProvider": { + "description": "Setting - search provider selection" + }, + "extensionsNoCustomSearch": "Нет расширений с пользовательским поиском", + "@extensionsNoCustomSearch": { + "description": "Empty state - no search providers" + }, + "extensionsSearchProviderDescription": "Выберите, какой сервис использовать для поиска треков", + "@extensionsSearchProviderDescription": { + "description": "Search provider setting description" + }, + "extensionsCustomSearch": "Пользовательский поиск", + "@extensionsCustomSearch": { + "description": "Label for custom search provider" }, "extensionsErrorLoading": "Ошибка загрузки расширения", - "@actionPaste": { - "description": "Generic action - paste from clipboard" + "@extensionsErrorLoading": { + "description": "Error message when extension fails to load" }, - "aboutFeatureRequestSubtitle": "Предложить новые функции для приложения", - "@aboutFeatureRequestSubtitle": { - "description": "Subtitle for feature request" + "qualityFlacLossless": "FLAC Lossless", + "@qualityFlacLossless": { + "description": "Quality option - CD quality FLAC" }, - "@aboutTitle": { - "description": "About page title" + "qualityFlacLosslessSubtitle": "16-бит / 44.1 кГц", + "@qualityFlacLosslessSubtitle": { + "description": "Technical spec for lossless" }, - "@downloadNeteaseIncludeTranslation": { - "description": "Setting to include translated lyrics from Netease" + "qualityHiResFlac": "Hi-Res FLAC", + "@qualityHiResFlac": { + "description": "Quality option - high resolution FLAC" }, - "@actionGo": { - "description": "Generic action button label" + "qualityHiResFlacSubtitle": "24-бит / до 96кГц", + "@qualityHiResFlacSubtitle": { + "description": "Technical spec for hi-res" }, - "regionCountryFR": "France", - "trackConvertResamplerSoxr": "SoXr", - "extensionUpdated": "Обновлено", - "@extensionUpdated": { - "description": "Extension detail - last update" + "qualityHiResFlacMax": "Hi-Res FLAC Макс.", + "@qualityHiResFlacMax": { + "description": "Quality option - maximum resolution FLAC" + }, + "qualityHiResFlacMaxSubtitle": "24-бит / до 192кГц", + "@qualityHiResFlacMaxSubtitle": { + "description": "Technical spec for hi-res max" + }, + "downloadLossy320": "С потерями 320 кбит/с", + "@downloadLossy320": { + "description": "Quality option label for lossy 320kbps" }, "downloadLossyFormat": "Формат с потерями", "@downloadLossyFormat": { "description": "Setting title to pick output format for lossy downloads" }, - "snackbarAlreadyInLibrary": "\"{trackName}\" уже есть в вашей библиотеке", - "@snackbarAlreadyInLibrary": { - "description": "Snackbar - track already exists in local library", - "placeholders": { - "trackName": { - "type": "String" - } - } + "downloadAutoConvert": "Auto-convert after download", + "@downloadAutoConvert": { + "description": "Toggle for automatic post-download audio conversion" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", - "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", - "libraryFilterQuality": "Качество", - "@libraryFilterQuality": { - "description": "Filter section - audio quality" + "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", + "@downloadAutoConvertSubtitle": { + "description": "Explanation of safe automatic post-download conversion" }, - "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", - "@editMetadataAutoFillDone": { - "description": "Snackbar confirming how many fields were auto-filled", - "placeholders": { - "count": { - "type": "int" - } - } + "downloadAutoConvertFormat": "Output format", + "@downloadAutoConvertFormat": { + "description": "Automatic conversion output format setting" }, - "@discographyDownload": { - "description": "Button - download artist discography" + "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", + "@downloadAutoConvertFormatSubtitle": { + "description": "Automatic conversion format picker explanation" }, - "aboutFeatureRequest": "Предложить новую функцию", - "downloadSingleFilenameFormatDescription": "Формат имени файла для синглов и EP. Используются те же теги, что и для альбомов.", - "@downloadSingleFilenameFormatDescription": { - "description": "Subtitle description for single filename format setting" + "downloadAutoConvertBitrate": "Output quality", + "@downloadAutoConvertBitrate": { + "description": "Automatic conversion bitrate setting" }, - "queueClearAllMessage": "Вы уверены, что хотите очистить все загрузки?", - "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", - "extensionLastChecked": "Last checked {time}", - "@extensionLastChecked": { - "description": "Timestamp for the latest extension service health check", - "placeholders": { - "time": { - "type": "String" - } - } + "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", + "@downloadAutoConvertBitrateSubtitle": { + "description": "Automatic conversion bitrate picker explanation" }, - "homeImportCsvTooltip": "Import playlist (CSV, M3U)", - "@homeImportCsvTooltip": { - "description": "Tooltip for importing a CSV file into Home search" + "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", + "@downloadAutoConvertMp3Subtitle": { + "description": "MP3 automatic conversion option description" }, - "trackConvertResamplerSwr": "SWR", - "@trackConvertResamplerSwr": { - "description": "Lossless conversion default FFmpeg swresample resampler option" + "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", + "@downloadAutoConvertM4aSubtitle": { + "description": "M4A AAC automatic conversion option description" }, - "@downloadFolderOrganization": { - "description": "Title of the folder organization picker bottom sheet" + "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", + "@downloadAutoConvertOpusSubtitle": { + "description": "Opus automatic conversion option description" }, - "dialogClearHistoryTitle": "Очистить историю", - "@logClearSearch": { - "description": "Tooltip for clearing the log search field" + "downloadLossy320Format": "Формат с потерями 320 кбит/с", + "@downloadLossy320Format": { + "description": "Title of the lossy format picker bottom sheet" }, - "dialogImport": "Импорт", - "@dialogImport": { - "description": "Dialog button - import data" + "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" }, - "@setupChangeFolderTooltip": { - "description": "Tooltip for editing the selected download folder" + "downloadLossyMp3": "MP3 320 кбит/с", + "@downloadLossyMp3": { + "description": "Lossy format option - MP3 320kbps" }, - "notifLibraryScanErrors": "{count} ошибок", - "@downloadNetworkCompatibilityMode": { - "description": "Setting for legacy TLS/network handling" + "downloadLossyMp3Subtitle": "Наилучшая совместимость, ~10 Мб на трек", + "@downloadLossyMp3Subtitle": { + "description": "Subtitle for MP3 320kbps lossy option" }, - "@metadataSaveFailedFfmpeg": { - "description": "Snackbar error when FFmpeg fails to write metadata" + "downloadLossyAac": "AAC/M4A 320kbps", + "@downloadLossyAac": { + "description": "Lossy format option - AAC in M4A container at 320kbps" }, - "dialogUninstallExtension": "Удалить расширение?", - "recentTypePlaylist": "Плейлист", - "@recentTypePlaylist": { - "description": "Recent access item type - playlist" + "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", + "@downloadLossyAacSubtitle": { + "description": "Subtitle for AAC/M4A 320kbps lossy option" }, - "trackDeleteConfirmMessage": "Это приведет к окончательному удалению загруженного файла и его удалению из истории.", - "@logIssueNetworkErrorDescription": { - "description": "Diagnostic badge description for generic network errors" + "downloadLossyOpus256": "Opus 256 кбит/с", + "@downloadLossyOpus256": { + "description": "Lossy format option - Opus 256kbps" }, - "appearanceThemeSystem": "Системная", - "@appearanceThemeSystem": { - "description": "Follow system theme" + "downloadLossyOpus256Subtitle": "Best quality Opus, ~8MB per track", + "@downloadLossyOpus256Subtitle": { + "description": "Subtitle for Opus 256kbps lossy option" }, - "albumFolderArtistAlbumSingles": "Исполнитель / Альбом + Синглы", - "@aboutTranslators": { - "description": "Section for translators" - }, - "shareSheetNotFound": "Not found", - "@shareSheetNotFound": { - "description": "Cross-service share sheet row subtitle when a service has no match" - }, - "@tutorialDownloadInProgressSemantics": { - "description": "Accessibility label for active download state in tutorial demo" - }, - "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", - "@editMetadataAutoFillNoneSelected": { - "description": "Snackbar when user taps Fetch without selecting any fields" - }, - "@snackbarViewQueue": { - "description": "Snackbar action - view download queue" - }, - "@optionsUpdateChannelPreview": { - "description": "Include beta/preview updates" - }, - "editMetadataFieldComposer": "Composer", - "@editMetadataFieldComposer": { - "description": "Label for composer field in the edit metadata sheet" - }, - "aboutSachinsenalDesc": "The original HiFi project creator. A foundation for lossless-source integration.", - "@aboutSachinsenalDesc": { - "description": "Credit description for sachinsenal0x64" - }, - "backupTitle": "Backup & Restore", - "@libraryFilterMetadata": { - "description": "Filter section - metadata completeness" - }, - "setupStorageAccessRequired": "Требуется доступ к хранилищу", - "@setupStorageAccessRequired": { - "description": "Title when storage access needed" - }, - "trackMetadataDelete": "Удалить", - "@trackMetadataDelete": { - "description": "Action button - delete track" - }, - "libraryFilterMetadataMissingDiscNumber": "Missing disc number", - "@libraryFilterMetadataMissingDiscNumber": { - "description": "Filter option - items missing disc number" - }, - "snackbarMetadataProviderSaved": "Приоритет провайдера метаданных сохранён", - "setupPermissionRequired": "Требуется разрешение {permissionType}", - "@selectionConvertNoConvertible": { - "description": "Snackbar when no selected tracks support conversion" - }, - "extensionHealthDegraded": "Degraded", - "regionCountryKR": "South Korea", - "@regionCountryKR": { - "description": "Country name for SongLink region picker" - }, - "trackLyricsNotInFile": "В этом файле не найдено текстов песен", - "@trackLyricsNotInFile": { - "description": "Message when no embedded lyrics in audio file" - }, - "@downloadedAlbumTapToSelect": { - "description": "Selection hint" - }, - "downloadArtistNameFilters": "Artist Name Filters", - "@downloadArtistNameFilters": { - "description": "Setting title for artist folder filter options" - }, - "@libraryFilterMetadataMissingArtist": { - "description": "Filter option - items missing artist" - }, - "recentShowAllDownloads": "Показать все загрузки", - "@appearanceThemeLight": { - "description": "Light theme" - }, - "trackReEnrichFieldTrackInfo": "Номер трека и диска", - "@appearanceThemeDark": { - "description": "Dark theme" - }, - "extensionVerificationLinkCopied": "Verification link copied", - "@extensionVerificationLinkCopied": { - "description": "Snackbar after copying the extension verification URL" - }, - "@extensionsHomeFeedDescription": { - "description": "Extensions page - description for home feed provider picker" - }, - "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", - "@downloadAlbumArtistMetadataPrimaryOnly": { - "description": "Status label when album-artist folder filtering uses primary artist only" - }, - "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", - "setupNext": "Далее", - "extensionVerificationBrowserSubtitleInApp": "Open challenges in the in-app browser first", - "libraryAutoScanDaily": "Ежедневно", - "@libraryAutoScanDaily": { - "description": "Auto scan once per day" - }, - "@audioAnalysisDescription": { - "description": "Description for audio analysis tap-to-analyze prompt" - }, - "nowPlayingUpNext": "Up next", - "@nowPlayingUpNext": { - "description": "Title for the playback queue sheet" - }, - "nowPlayingPreviousTrack": "Previous track", - "nowPlayingNextTrack": "Next track", - "logAutoScrollOff": "Auto-scroll OFF", - "trackConvertFailed": "Ошибка конвертации", - "@trackConvertFailed": { - "description": "Snackbar when conversion fails" - }, - "extensionsUninstall": "Удалить", - "safMigrationSuccess": "Download folder updated to SAF mode", - "optionsClearHistorySubtitle": "Удалить все скачанные треки из истории", - "@optionsClearHistorySubtitle": { - "description": "Subtitle for clear history" - }, - "trackPlayNext": "Play next", - "extensionsNoHomeFeedExtensions": "No extensions with home feed", - "optionsUpdateChannelStable": "Только стабильные релизы", - "@optionsUpdateChannelStable": { - "description": "Only stable updates" - }, - "@discographyDownloadAllSubtitle": { - "description": "Subtitle showing total tracks and albums", - "placeholders": { - "count": { - "type": "int" - }, - "albumCount": { - "type": "int" - } - } - }, - "searchPlaylists": "Плейлисты", - "@searchPlaylists": { - "description": "Search result category - playlists" - }, - "downloadNetworkCompatibilityMode": "Network Compatibility Mode", - "settingsAppearance": "Внешний вид", - "logIssueRateLimitedLabel": "RATE LIMITED", - "@logIssueRateLimitedLabel": { - "description": "Diagnostic badge label when the service rate limits requests" - }, - "logIssueSummary": "Issue Summary", - "@logIssueSummary": { - "description": "Header for log issue analysis summary" - }, - "appName": "Spotify", - "storeRepoDialogCurrent": "Текущий репозиторий:", - "@optionsExtensionStoreSubtitle": { - "description": "Subtitle for extension repo toggle" - }, - "@trackLyrics": { - "description": "Tab title - lyrics" - }, - "@backupImportButton": { - "description": "Button to pick a backup file to restore" - }, - "@setupFolderChoose": { - "description": "Button to choose folder" - }, - "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", - "@extensionsDisabled": { - "description": "Extension status - inactive" - }, - "@regionCountryAU": { - "description": "Country name for SongLink region picker" - }, - "@storeCategoryMetadata": { - "description": "Store extension category - metadata" - }, - "libraryFilterApply": "Применить", - "@libraryFilterApply": { - "description": "Apply filters button" - }, - "@libraryFilterSortGenreAsc": { - "description": "Sort option - genre ascending" - }, - "setupAllowAccessToManageFiles": "Пожалуйста, включите \"Разрешить доступ для управления всеми файлами\" на следующем экране.", - "@dialogSave": { - "description": "Dialog button - save changes" - }, - "trackLyrics": "Текст песни", - "extensionSettingNotSet": "Not set", - "@extensionSettingNotSet": { - "description": "Value shown when an extension setting has no value" - }, - "@audioAnalysisClipping": { - "description": "Clipping metric label" - }, - "downloadNeteaseIncludeTranslation": "Netease: включение перевода", - "@albumFolderArtistAlbumSubtitle": { - "description": "Folder structure example" - }, - "@settingsDonateSubtitle": { - "description": "Subtitle for donate menu item" - }, - "cueSplitSuccess": "Успешно разделено на {count} треков", - "@cueSplitSuccess": { - "description": "Snackbar after successful CUE split", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "cueSplitArtist": "Артист: {artist}", - "@cueSplitArtist": { - "description": "Artist name in CUE split sheet", - "placeholders": { - "artist": { - "type": "String" - } - } - }, - "updateSeeReleaseNotes": "See release notes for details.", - "@updateSeeReleaseNotes": { - "description": "Fallback changelog text when release notes cannot be parsed" - }, - "@trackReEnrichFfmpegFailed": { - "description": "Snackbar when FFmpeg embed fails for MP3/Opus" - }, - "collectionWishlist": "Список желаемого", - "@collectionWishlist": { - "description": "Custom folder for saved tracks to download later" - }, - "editMetadataAutoFillFetch": "Получить и заполнить", - "@extensionsHomeFeedAuto": { - "description": "Label for auto-selected search provider" - }, - "providerPriorityDescription": "Перетаскивайте, чтобы изменить порядок провайдеров загрузки. Приложение будет пробовать провайдеров сверху вниз при загрузке треков.", - "@providerPriorityDescription": { - "description": "Provider priority page description" - }, - "queueEmptySinglesSubtitle": "Single track downloads will appear here", "downloadLossyOpus128": "Opus 128 кбит/с", - "downloadUseAlbumArtistForFolders": "Использовать исполнителя альбома для папок", - "@downloadUseAlbumArtistForFolders": { - "description": "Setting - choose whether artist folders use Album Artist or Track Artist" + "@downloadLossyOpus128": { + "description": "Lossy format option - Opus 128kbps" }, - "@aboutLinks": { - "description": "Section for external links" + "downloadLossyOpus128Subtitle": "Минимальный размер, ~4 Мб на трек", + "@downloadLossyOpus128Subtitle": { + "description": "Subtitle for Opus 128kbps lossy option" }, - "downloadedAlbumDeleteCount": "Delete {count} {count, plural, =1{track} other{tracks}}", - "updateLater": "Позже", - "@logIssueIspBlockingSuggestion": { - "description": "Diagnostic badge suggestion for ISP blocking" + "downloadAskBeforeDownload": "Спрашивать перед скачиванием", + "@downloadAskBeforeDownload": { + "description": "Setting - show quality picker" }, - "actionResume": "Возобновить", - "optionsDetailedLoggingOff": "Включить для отчётов об ошибках", - "@searchSortDefault": { - "description": "Sort option - default API order" + "downloadDirectory": "Папка для скачивания", + "@downloadDirectory": { + "description": "Setting - download folder" }, - "@regionCountryCA": { - "description": "Country name for SongLink region picker" + "downloadSeparateSinglesFolder": "Отдельная папка для синглов", + "@downloadSeparateSinglesFolder": { + "description": "Setting - separate folder for singles" }, - "@sectionStorageAccess": { - "description": "Section header for storage access settings" - }, - "downloadFilterContributing": "Filter Contributing Artists", - "downloadUseAlbumArtistForFoldersTrackSubtitle": "Папка названная в честь тега Трека Артиста", - "storeSearch": "Поиск расширений...", - "@storeSearch": { - "description": "Repo search placeholder" - }, - "aboutTelegramChat": "Сообщество в Telegram", - "lyricsModeBoth": "Оба варианта", - "@lyricsModeBoth": { - "description": "Lyrics mode option - embed and external" - }, - "@permissionNotification": { - "description": "Notification permission type label" - }, - "libraryAutoScanSubtitle": "Automatically scan your library for new files", - "@libraryAutoScanSubtitle": { - "description": "Subtitle for auto scan setting" - }, - "libraryEnableLocalLibrary": "Включить локальную библиотеку", - "trackConvertTargetFormat": "Целевой формат", - "@trackConvertTargetFormat": { - "description": "Label for format selection" - }, - "extensionSettings": "Настройки", - "@editMetadataAutoFillSearching": { - "description": "Snackbar shown while searching for online metadata" - }, - "trackLyricsTimeout": "Время ожидания запроса истекло. Повторите попытку позже.", - "settingsExtensions": "Расширения", - "@settingsBackup": { - "description": "Settings menu item - backup and restore page" - }, - "librarySourceDownloaded": "Скачанные", - "@librarySourceDownloaded": { - "description": "Badge for tracks downloaded via SpotiFLAC" - }, - "appearanceDynamicColor": "Динамический цвет", - "@appearanceDynamicColor": { - "description": "Material You dynamic colors" - }, - "backupImportButton": "Choose backup file", - "downloadAppleElrcWordSyncDisabled": "Safer line-by-line Apple Music lyrics", - "@optionsEmbedMetadata": { - "description": "Settings toggle title for writing metadata into downloaded files" - }, - "appearanceTitle": "Внешний вид", - "downloadNeteaseIncludeRomanizationDisabled": "No romanization", - "@downloadNeteaseIncludeRomanizationDisabled": { - "description": "Subtitle when Netease romanization is off" - }, - "@libraryScanCancelled": { - "description": "Library scan status when a scan was cancelled" - }, - "tracksCount": "{count, plural, one {{count} трек} few {{count} трека} many {{count} треков} =1 {1 трек} other {{count} треков}}", - "@snackbarFailedToUpdateNamed": { - "description": "Snackbar when extension update fails in the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - } - } - }, - "@extensionQualityOptions": { - "description": "Capability - quality selection" - }, - "logClearSearch": "Clear search", - "trackSaveLyrics": "Сохранить текст (.lrc)", - "@trackReEnrichSearching": { - "description": "Snackbar while searching metadata from internet for local items" - }, - "@editMetadataAutoFillNoResults": { - "description": "Snackbar when online metadata search returns no results" - }, - "notifDownloadComplete": "Скачивание завершено", - "snackbarAlreadyDownloaded": "\"{trackName}\" уже скачан", - "folderOrganizationByAlbumSubtitle": "Отдельная папка для каждого альбома", - "storeRepoUrlHint": "https://github.com/user/repo", - "trackConvertDitherTriangularHp": "Triangular HP", - "lyricsModeBothSubtitle": "Вписать и сохранить .lrc файл", - "trackReEnrichFieldExtra": "Жанр, Название, Авторские права", - "@trackReEnrichFieldExtra": { - "description": "Checkbox label for extra metadata in re-enrich" - }, - "sectionLyrics": "Тексты песен", - "@sectionLyrics": { - "description": "Settings section header" - }, - "extensionStrategy": "Стратегия: {strategy}", - "@extensionStrategy": { - "description": "Track matching strategy name", - "placeholders": { - "strategy": { - "type": "String" - } - } - }, - "@downloadNativeWorker": { - "description": "Setting title for Android native download worker" - }, - "optionsArtistTagModeSplitVorbis": "Разделить теги для FLAC/Opus", - "extensionsHomeFeedUse": "Use {extensionName} home feed", - "@cacheAppDirectoryDesc": { - "description": "Description of what app cache directory contains" - }, - "cancelDownloadTitle": "Отменить скачивание?", - "updateWhatsNew": "Что нового", - "updateNewVersionReady": "Доступна новая версия", - "@extensionVerificationClose": { - "description": "Button to dismiss the extension verification help dialog" - }, - "a11ySelectTrack": "Select track", - "libraryClearSubtitle": "Удалить все сканированные треки", - "@libraryClearSubtitle": { - "description": "Subtitle for clear button" - }, - "@settingsDownloadNetworkSubtitle": { - "description": "Subtitle explaining network preference" - }, - "storeAnyVersion": "Any", - "@storeAnyVersion": { - "description": "Store detail value when any app version is accepted" - }, - "navStore": "Репозиторий", - "backupExportSectionDescription": "Save your settings, download history, liked tracks, wishlist, favorite artists and playlists into a single file you can keep or move to another phone.", - "libraryScanSettings": "Настройки сканирования", - "@libraryScanSettings": { - "description": "Section header for scan settings" - }, - "trackDuration": "Продолжительность", - "@trackDuration": { - "description": "Metadata label - track length" - }, - "extensionHealthOffline": "Offline", - "@extensionHealthOffline": { - "description": "Extension service health status - offline" - }, - "editMetadataFieldArtist": "Исполнитель", - "@editMetadataFieldArtist": { - "description": "Chip label for artist field in auto-fill selector" - }, - "libraryInLibrary": "В библиотеке", - "pressBackAgainToExit": "Нажмите «Назад» ещё раз, чтобы выйти", - "@pressBackAgainToExit": { - "description": "Exit confirmation message" - }, - "setupNotificationGranted": "Разрешение на уведомление предоставлено!", - "@setupNotificationGranted": { - "description": "Success message for notification permission" - }, - "settingsDonate": "Support Development", - "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", - "backupContentsTitle": "Backup contents", - "updateDontRemind": "Не напоминать", - "@dialogDiscard": { - "description": "Dialog button - discard changes" - }, - "editMetadataAutoFillSearching": "Поиск в сети...", - "discographyDownloadSelected": "Скачать выбранное", - "trackConvertResampler": "Resampler", - "queueFilteringIndicator": "Фильтрация...", - "@queueFilteringIndicator": { - "description": "Shown while filter results are being computed" - }, - "@dialogDownloadAllTitle": { - "description": "Dialog title for bulk download confirmation" - }, - "cueSplitConfirmMessage": "Разбить \"{album}\" на {count} отдельных FLAC-файлов?", - "@downloadCreatePlaylistSourceFolderRedundant": { - "description": "Subtitle when folder organization is already set to playlist" - }, - "regionCountryCA": "Canada", - "cacheTempDirectory": "Временная директория", - "@cacheTempDirectory": { - "description": "Cache item title for temporary files directory" - }, - "libraryShowDuplicateIndicator": "Показать индикатор дубликатов", - "@logFilterBySeverity": { - "description": "Filter dialog title" - }, - "homeSearchHintProvider": "Search with {providerName}...", - "@downloadNeteaseIncludeTranslationDisabled": { - "description": "Subtitle when Netease translation is off" - }, - "optionsCheckUpdates": "Проверить обновления", - "replayGainBatchAnalyzing": "Анализ ReplayGain...", - "recentTypeAlbum": "Альбом", - "providerExtension": "Расширение", - "@providerExtension": { - "description": "Label for extension-provided providers" - }, - "trackCoverNoSource": "Нет доступных источников обложки", - "libraryFilterMetadata": "Метаданные", - "albumFolderArtistYearAlbum": "Исполнитель / [Год] Альбом", - "@albumFolderArtistYearAlbum": { - "description": "Album folder option with year" - }, - "audioAnalysisClipping": "Clipping", - "@a11yOpenAlbumByArtistTrackCount": { - "description": "Accessibility label for opening an album item with track count", - "placeholders": { - "albumName": { - "type": "String" - }, - "artistName": { - "type": "String" - }, - "trackCount": { - "type": "int" - } - } - }, - "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.", - "@backupExtensionsRestoreFailed": { - "description": "Snackbar/hint when some extensions failed to reinstall during restore", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "channelStable": "Стабильный", - "@channelStable": { - "description": "Update channel - stable releases" - }, - "tutorialSettingsTip3": "Настроить тему и внешний вид приложения", - "setupAppDocumentsFolderSubtitle": "Рекомендуется - доступ через Файлы", - "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", - "@a11yPlayTrackByArtist": { - "description": "Accessibility label for playing a local library track", - "placeholders": { - "trackName": { - "type": "String" - }, - "artistName": { - "type": "String" - } - } - }, - "dialogRemove": "Убрать", - "extensionVerificationClose": "Close", - "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", - "@bulkDownloadPlaylistsButton": { - "description": "Button label for bulk downloading selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "optionsAutoFallbackSubtitle": "Попробовать другие сервисы при сбое загрузки", - "@optionsAutoFallbackSubtitle": { - "description": "Subtitle for auto fallback" - }, - "extensionPatternsCount": "{count} шаблон(ов)", - "@libraryFilterLocal": { - "description": "Filter chip - show only local library items" - }, - "errorUrlNotRecognizedMessage": "Эта ссылка не поддерживается. Убедитесь, что URL-адрес указан правильно и установлено совместимое расширение.", - "@errorUrlNotRecognizedMessage": { - "description": "Error message - URL not recognized explanation" - }, - "@extensionVerificationBrowserSubtitleExternal": { - "description": "Subtitle when external browser is preferred for extension verification" - }, - "optionsArtistTagMode": "Режим тега исполнителя", - "libraryFilterMetadataComplete": "Complete metadata", - "@libraryFilterMetadataComplete": { - "description": "Filter option - items with complete metadata" - }, - "@extensionsVersion": { - "description": "Extension version display", - "placeholders": { - "version": { - "type": "String" - } - } - }, - "@downloadNetworkAnySubtitle": { - "description": "Subtitle for any-network option in picker" - }, - "optionsReplayGainSubtitleOn": "Сканировать громкость и вставить теги ReplayGain (EBU R128)", - "libraryScanning": "Сканирование...", - "@libraryScanning": { - "description": "Status during scan" - }, - "cacheRefresh": "Обновить", - "@actionShuffle": { - "description": "Tooltip for shuffle playback action" - }, - "optionsEmbedLyricsSubtitle": "Сохранять синхронизированный текст песни рядом с загруженным треком", - "@optionsEmbedLyricsSubtitle": { - "description": "Subtitle for embed lyrics" - }, - "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", - "extensionEnterValue": "Enter value", - "@settingsDownloadNetworkAny": { - "description": "Network option - use any connection" - }, - "collectionLoved": "Любимые", - "@collectionLoved": { - "description": "Custom folder for favorite tracks" - }, - "storeAddRepoTitle": "Добавить репозиторий расширения", - "@storeAddRepoTitle": { - "description": "Store setup screen - heading when no repo is configured" - }, - "collectionNoPlaylistsYet": "Плейлисты отсутствуют", - "@collectionNoPlaylistsYet": { - "description": "Empty state title when user has no playlists" - }, - "libraryCleanupMissingFilesSubtitle": "Удалить записи для файлов, которых больше не существует", - "@libraryCleanupMissingFilesSubtitle": { - "description": "Subtitle for cleanup button" - }, - "folderOrganizationByArtist": "По исполнителю", - "@folderOrganizationByArtist": { - "description": "Folder option - artist folders" - }, - "aboutTranslators": "Переводчики", - "notifAlreadyInLibraryCount": "Уже в библиотеке ({completed}/{total})", - "editMetadataFieldTitle": "Название", - "@editMetadataFieldTitle": { - "description": "Chip label for title field in auto-fill selector" - }, - "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", - "@downloadFilenameDescription": { - "description": "Description shown in filename format editor" - }, - "@notifDownloadsFinishedBody": { - "description": "Notification body when queue finishes with failures", - "placeholders": { - "completed": { - "type": "int" - }, - "failed": { - "type": "int" - } - } - }, - "@libraryFolderNotExist": { - "description": "Error when folder doesn't exist" - }, - "@playlistsCount": { - "description": "Playlist count display", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@loadingSharedLink": { - "description": "Status when opening shared URL" - }, - "extensionServiceHealth": "Service health", - "@extensionServiceHealth": { - "description": "Extension capability label for service health checks" - }, - "@collectionDeletePlaylistsMessage": { - "description": "Confirmation message for deleting selected playlists", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "setupStorageDescription": "SpotiFLAC требуется разрешение на хранение для сохранения скачанных файлов.", - "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", - "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", - "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", - "appearanceThemeLight": "Светлая", - "queueEmptyHistorySubtitle": "Скачанные треки появятся здесь", - "@queueEmptyHistorySubtitle": { - "description": "Empty state subtitle for download history" - }, - "backupRestoreFailed": "Failed to restore backup", - "@backupRestoreFailed": { - "description": "Snackbar when restore fails" - }, - "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", - "@queueFlacQueuedWithSkipped": { - "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", - "placeholders": { - "addedCount": { - "type": "int" - }, - "skippedCount": { - "type": "int" - } - } - }, - "@trackReplayGain": { - "description": "Three-dot menu option to scan loudness and write ReplayGain tags" - }, - "@downloadedAlbumDownloadedCount": { - "description": "Downloaded tracks count badge", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "setupFolderChoose": "Выбрать папку для скачивания", - "dialogDownloadAllTitle": "Скачать всё", - "providerPriorityInfo": "Если трек не доступен у первого провайдера, приложение автоматически попробует следующий.", - "@providerPriorityInfo": { - "description": "Info tip about fallback behavior" - }, - "@dialogDiscardChanges": { - "description": "Dialog title - unsaved changes warning" - }, - "discographyNoAlbums": "Нет доступных альбомов", - "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", - "cacheNoData": "Нет кэшированных данных", - "@cacheNoData": { - "description": "Label when cache category has no data" - }, - "tutorialStartDownloadSemantics": "Start download", - "@tutorialStartDownloadSemantics": { - "description": "Accessibility label for idle download button in tutorial demo" - }, - "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", - "aboutTitle": "О программе", - "@cueSplitButton": { - "description": "Button text to start CUE splitting" - }, - "appearanceHistoryView": "Отображение истории", - "audioAnalysisSampleRate": "Частота дискретизации", - "@settingsCache": { - "description": "Settings menu item - cache management" - }, - "lyricsProvidersInfoText": "Extension lyrics providers run before built-in lyrics providers. At least one provider must remain enabled.", - "cacheTrackLookup": "Отслеживать кэш поиска", - "extensionsHomeFeedOffSubtitle": "Do not show the home feed on the main screen", - "@downloadUsePrimaryArtistOnly": { - "description": "Setting - strip featured artists from folder name" - }, - "@regionCountryIN": { - "description": "Country name for SongLink region picker" - }, - "@libraryFilterQualityLossy": { - "description": "Filter option - lossy compressed audio" - }, - "extensionRefreshStatus": "Refresh status", - "notifAllDownloadsComplete": "Все загрузки завершены", - "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", - "editMetadataFieldDateHint": "YYYY-MM-DD or YYYY", - "@editMetadataFieldDateHint": { - "description": "Hint text for the edit metadata date field" - }, - "trackMetadataShare": "Поделиться", - "@trackMetadataShare": { - "description": "Action button - share track" - }, - "discographyDownloadAllSubtitle": "{count} треков из {albumCount} релизов", - "settingsDonateSubtitle": "Buy the developer a coffee", - "libraryFilterDownloaded": "Скачанные", - "downloadNetworkAnySubtitle": "Use WiFi or mobile data", - "@cueSplitNoAudioFile": { - "description": "Error when CUE audio file is missing" - }, - "notifLibraryScanStopped": "Сканирование остановлено перед завершением.", - "@settingsMetadata": { - "description": "Settings menu item - metadata settings" - }, - "snackbarFailedToInstallNamed": "Failed to install {extensionName}", - "trackCopyLyrics": "Копировать текст", - "@trackCopyLyrics": { - "description": "Action - copy lyrics to clipboard" - }, - "regionCountryAU": "Australia", "downloadAlbumFolderStructure": "Структура папок альбома", - "downloadMusixmatchAuto": "Авто", - "actionDismiss": "Dismiss", - "storeFilterAll": "Все", - "extensionsDisabled": "Выключено", - "@logClearLogs": { - "description": "Clear button tooltip" - }, - "dialogDownloadAllMessage": "Download {count} tracks?", - "@optionsEmbedLyrics": { - "description": "Embed lyrics in audio files" - }, - "tutorialLibraryTitle": "Ваша библиотека", - "optionsCheckUpdatesSubtitle": "Уведомлять о наличии новой версии", - "@optionsCheckUpdatesSubtitle": { - "description": "Subtitle for update check" - }, - "collectionPlaylist": "Плейлист", - "@collectionPlaylist": { - "description": "Single playlist label" - }, - "dateMonthsAgo": "{count} месяцев назад", - "@dateMonthsAgo": { - "description": "Relative date - months ago", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@extensionRemoveButton": { - "description": "Button to uninstall extension" - }, - "collectionPlaylistRenamed": "Плейлист переименован", - "collectionCreatePlaylist": "Создать плейлист", - "homeGoToAlbum": "Перейти к альбому", - "@homeGoToAlbum": { - "description": "Context menu item to navigate to the album page" - }, - "folderOrganizationByArtistSubtitle": "Отдельная папка для каждого исполнителя", - "@optionsClearHistory": { - "description": "Delete all download history" - }, - "@searchAlbums": { - "description": "Search result category - albums" - }, - "@sectionDebug": { - "description": "Settings section header" - }, - "extensionsVersion": "Версия {version}", - "@navHome": { - "description": "Bottom navigation - Home tab" - }, - "@editMetadataFieldDate": { - "description": "Chip label for date field in auto-fill selector" - }, - "downloadUsePrimaryArtistOnly": "Основной исполнитель только для папок", - "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", - "@setupStorageGranted": { - "description": "Success message for storage permission" - }, - "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", - "a11ySelectAlbum": "Select album {albumName}", - "@a11ySelectAlbum": { - "description": "Accessibility label for selecting an album", - "placeholders": { - "albumName": { - "type": "String" - } - } - }, - "aboutMobileSource": "Исходный код мобильной версии", - "@aboutMobileSource": { - "description": "Link to mobile GitHub repo" - }, - "@extensionCustomUrlHandling": { - "description": "Extension detail section title for custom URL handling" - }, - "@downloadMusixmatchLanguageAuto": { - "description": "Subtitle when no language is set" - }, - "@cancelDownloadKeep": { - "description": "Dialog button - keep the active download (do not cancel)" - }, - "libraryFilterSource": "Источник", - "@libraryFilterSource": { - "description": "Filter section - source type" - }, - "sectionStorageAccess": "Доступ к хранилищу", - "logFilterBySeverity": "Фильтровать логи по серьезности", - "libraryFolderNotExist": "Выбранной папки не существует", - "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", - "albumFolderArtistAlbum": "Исполнитель / Альбом", - "@albumFolderArtistAlbum": { - "description": "Album folder option" - }, - "allFilesAccessDeniedMessage": "В разрешении отказано. Пожалуйста, включите функцию «Доступ ко всем файлам» в настройках системы.", - "@allFilesAccessDeniedMessage": { - "description": "Message when permission is permanently denied" - }, - "editMetadataSelectEmpty": "Только пустые", - "settingsLocalLibrarySubtitle": "Сканировать и обнаружить дубликаты", - "@settingsAutoExportFailed": { - "description": "Setting toggle for auto-export" - }, - "cacheCleanupUnusedSubtitle": "Удалить историю загрузок, оставшихся без просмотра, и отсутствующие записи в библиотеке", - "@tutorialSettingsTitle": { - "description": "Tutorial settings page title" - }, - "libraryFilterMetadataMissingGenre": "Отсутствует жанр", - "@appearanceSelectAccentColor": { - "description": "Accessibility label for picking an accent color", - "placeholders": { - "hex": { - "type": "String" - } - } - }, - "setupFolderDescription": "Выберите папку, в которой будет сохраняться скачанная музыка.", - "extensionDetailsTags": "Tags", - "unknownArtist": "Unknown Artist", - "trackFetchOnlineLyrics": "Поиск в сети", - "snackbarNoActionDefined": "No action defined for this button", - "@snackbarNoActionDefined": { - "description": "Snackbar when an extension button has no action configured" - }, - "downloadAllCount": "Скачать все ({count})", - "@downloadAllCount": { - "description": "Download all button with count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "downloadedAlbumDiscHeader": "Диск {discNumber}", - "@backupInvalidFile": { - "description": "Snackbar when the chosen file is not a valid backup" - }, - "@extensionHooksAvailable": { - "description": "Post-processing hooks count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@logIssueTrackNotFoundSuggestion": { - "description": "Diagnostic badge suggestion when a track is unavailable" - }, - "@snackbarFileNotFound": { - "description": "Snackbar - file doesn't exist" - }, - "extensionHealthOnline": "Online", - "@extensionHealthOnline": { - "description": "Extension service health status - online" - }, - "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", - "trackOptionRemoveFromWishlist": "Удалить из списка желаний", - "extensionsFallbackTitle": "Fallback Extensions", - "@extensionsFallbackTitle": { - "description": "Setting and page title for choosing which download extensions can be used during fallback" - }, - "metadataSaveFailedFfmpeg": "Не удалось сохранить метаданные через FFmpeg", - "@albumFolderAlbumOnly": { - "description": "Album folder option" - }, - "@albumFolderYearAlbumSubtitle": { - "description": "Folder structure example" - }, - "downloadedAlbumDeleteSelected": "Удалить выбранные", - "selectionSelectPlaylistsToDelete": "Select playlists to delete", - "@selectionSelectPlaylistsToDelete": { - "description": "Hint shown when no playlists are selected for deletion" - }, - "storeAddRepoDescription": "Введите URL-адрес репозитория GitHub, который содержит файл registry.json для просмотра и установки расширений.", - "appearanceThemeDark": "Тёмная", - "downloadedAlbumTapToSelect": "Нажмите на треки для выбора", - "@collectionAddedToFavoriteArtists": { - "description": "Snackbar after adding artist to favorite artists", - "placeholders": { - "artistName": { - "type": "String" - } - } - }, - "@backupRestored": { - "description": "Snackbar after a successful restore" - }, - "nowPlayingLibraryEmpty": "Your library is empty", - "@nowPlayingLibraryEmpty": { - "description": "Snackbar when shuffle library is requested but library has no tracks" - }, - "editMetadataAutoFillNoResults": "No matching metadata found online", - "updateDownloading": "Скачивание...", - "trackLyricsSource": "Источник: {source}", - "logFilterLevel": "Уровень", - "logNoLogsYet": "Логов нет", - "cacheSizeOnly": "{size}", - "@cacheSizeOnly": { - "description": "Cache size only", - "placeholders": { - "size": { - "type": "String" - } - } - }, - "trackOpenInService": "Open in {serviceName}", - "@trackOpenInService": { - "description": "Button label to open a track in a named music service", - "placeholders": { - "serviceName": { - "type": "String" - } - } - }, - "@cacheLibraryCoverDesc": { - "description": "Description of what library cover cache contains" - }, - "libraryClearConfirmMessage": "Это удалит все сканированные треки из вашей библиотеки. Ваши фактические файлы не будут удалены.", - "@dialogImportPlaylistMessage": { - "description": "Dialog message - import playlist confirmation", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "extensionsHomeFeedAuto": "Авто", - "searchEmptyResultSubtitle": "Попробуйте другое ключевое слово", - "@searchEmptyResultSubtitle": { - "description": "Subtitle shown under the empty search result state on the home screen" - }, - "dateToday": "Сегодня", - "a11yOpenItem": "Open {itemType} {name}", - "@a11yOpenItem": { - "description": "Accessibility label for opening a generic item", - "placeholders": { - "itemType": { - "type": "String" - }, - "name": { - "type": "String" - } - } - }, - "audioAnalysisBitDepth": "Разрядность", - "editMetadataFieldTrackTotal": "Track Total", - "@editMetadataFieldTrackTotal": { - "description": "Label for total tracks field in the edit metadata sheet" - }, - "@editMetadataFieldDiscTotal": { - "description": "Label for total discs field in the edit metadata sheet" - }, - "replayGainBatchConfirmMessage": "Проанализировать громкость и записать ReplayGain теги на {count} трек(-а)?", - "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Папка названная в честь тега Альбома Артиста", - "@notifDownloadingUpdate": { - "description": "Notification title while downloading an app update", - "placeholders": { - "version": { - "type": "String" - } - } - }, - "@csvImportTracks": { - "description": "Label shown in quality picker for CSV import", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "trackEditMetadata": "Редактировать метаданные", - "discographyDownloadAll": "Скачать всё", - "@discographyDownloadAll": { - "description": "Option - download entire discography" - }, - "@editMetadataFieldAlbum": { - "description": "Chip label for album field in auto-fill selector" - }, - "albumFolderArtistAlbumSubtitle": "Альбомы/Исполнитель/Название Альбома/", - "extensionHealthServiceUnknown": "Service status unknown", - "navHome": "Главная", - "queueDownloadStarting": "Starting...", - "@dialogRemoveExtension": { - "description": "Dialog title - uninstall extension" - }, - "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", - "@appearanceAmoledDark": { - "description": "Theme option - pure black" - }, - "qualityHiResFlac": "Hi-Res FLAC", - "selectionSelected": "{count} выбрано", - "extensionDetailsInformation": "Information", - "@extensionDetailsInformation": { - "description": "Section title for extension metadata information" - }, - "discographyDownload": "Скачать дискографию", - "editMetadataFieldCopyright": "Авторские права", - "@setupOpenSettings": { - "description": "Button to open system settings" - }, - "libraryFilterSort": "Сортировка", - "cacheLibraryCoverDesc": "Обложка извлечена из локальных музыкальных файлов. Будет повторно извлечено при следующем сканировании.", - "dialogRemoveExtension": "Удалить расширение", - "backupExportSectionTitle": "Create backup", - "downloadEmbedLyricsDisabled": "Enable metadata embedding first", - "openInOtherServices": "Open in Other Services", - "actionSelectAll": "Выбрать все", - "settingsDownloadNetworkSubtitle": "Выберите, какую сеть использовать для скачивания. Когда установлено значение только WiFi — скачивания через мобильную сеть будут приостановлены.", - "downloadFolderOrganization": "Организация папок", - "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", - "@tutorialWelcomeTip2": { - "description": "Tutorial welcome tip 2" - }, - "selectionAllSelected": "Все треки выбраны", - "@selectionAllSelected": { - "description": "Status - all items selected" - }, - "settingsLogsSubtitle": "Просмотреть логи для отладки", - "albumFolderYearAlbumSubtitle": "Альбомы/[2005] Название Альбома /", - "cancelDownloadKeep": "Удерживать", - "optionsDetailedLoggingOn": "Ведутся подробные логи", - "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", - "@storeChangeRepoTooltip": { - "description": "Tooltip for the change-repository icon button in the app bar" - }, - "regionCountryJP": "Japan", - "notifUpdateFailed": "Ошибка обновления", - "downloadCreatePlaylistSourceFolderRedundant": "Handled by folder organization setting", - "@trackLyricsSaved": { - "description": "Snackbar after lyrics saved", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "downloadLocationSubtitle": "Choose where to save your downloaded tracks", - "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", - "lyricsProvidersDisabledSection": "Выключено ({count})", - "@dateDaysAgo": { - "description": "Relative date - days ago", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "librarySourceLocal": "Локальные", - "backupContentsExtensions": "{count, plural, =1{1 extension} other{{count} extensions}}", - "sectionService": "Сервис", - "lyricsProviderQqMusicDesc": "QQ Музыка (хорошо подходит для китайских песен, через прокси)", - "@lyricsProviderQqMusicDesc": { - "description": "Description for QQ Music provider" - }, - "cacheCleanupUnusedDesc": "Удалить записи из истории загрузок и библиотеки, которые остались без файлов.", - "selectionTapPlaylistsToSelect": "Tap playlists to select", - "notifUpdateFailedBody": "Не удалось скачать обновление. Попробуйте позже.", - "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", - "artistPopular": "Популярное", - "extensionRemoveButton": "Удалить расширение", - "allFilesAccessEnabledSubtitle": "Можно записать в любую папку", - "@allFilesAccessEnabledSubtitle": { - "description": "Subtitle when all files access is enabled" - }, - "extensionsSearchProvider": "Провайдер поиска", - "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", - "selectionBatchConvertConfirmTitle": "Пакетная конвертация", - "extensionMetadataProvider": "Провайдер метаданных", - "queueDownloadedFileMissing": "Downloaded file missing", - "logClearLogs": "Очистить логи", - "@downloadAppleQqMultiPerson": { - "description": "Setting for word-by-word multi-person lyrics from Apple Music and QQ Music" - }, - "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", - "@tutorialWelcomeTip1": { - "description": "Tutorial welcome tip 1" - }, - "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", - "downloadAllowLocalNetworkEnabled": "Requests to local/private addresses are allowed (for local proxy or custom DNS)", - "@regionCountryUS": { - "description": "Country name for SongLink region picker" - }, - "trackArtist": "Исполнитель", - "extensionCustomUrlHandling": "Custom URL Handling", - "appearanceDynamicColorSubtitle": "Использовать цвета из ваших обоев", - "@appearanceDynamicColorSubtitle": { - "description": "Subtitle for dynamic color" - }, - "searchSortDefault": "По умолчанию", - "@downloadFallbackExtensions": { - "description": "Settings item for configuring fallback extension providers" + "@downloadAlbumFolderStructure": { + "description": "Setting - album folder organization" }, "albumFolderStructureDescription": "Choose how album folders are structured", "@albumFolderStructureDescription": { "description": "Album folder structure picker description" }, - "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", - "@libraryBuiltInPreviewPlayerSubtitle": { - "description": "Subtitle for built-in preview player option" + "downloadUseAlbumArtistForFolders": "Использовать исполнителя альбома для папок", + "@downloadUseAlbumArtistForFolders": { + "description": "Setting - choose whether artist folders use Album Artist or Track Artist" }, - "storageModeAppFolder": "App Folder (Recommended)", - "@actionPause": { - "description": "Action button - pause download" + "downloadUsePrimaryArtistOnly": "Основной исполнитель только для папок", + "@downloadUsePrimaryArtistOnly": { + "description": "Setting - strip featured artists from folder name" }, - "actionPaste": "Paste", - "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", - "downloadNativeWorker": "Native download worker", - "releaseTypeEp": "EP", - "@releaseTypeEp": { - "description": "Badge label for EP releases" + "downloadUsePrimaryArtistOnlyEnabled": "Список исполнителей, чьи работы были удалены из названия папки (например, Джастин Бибер, Quavo → Джастин Бибер)", + "@downloadUsePrimaryArtistOnlyEnabled": { + "description": "Subtitle when primary artist only is enabled" }, - "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", - "cacheRefreshStats": "Обновить статистику", - "collectionPlaylistChangeCover": "Изменить обложку", - "@collectionPlaylistChangeCover": { - "description": "Bottom sheet action to pick a custom cover image for a playlist" + "downloadUsePrimaryArtistOnlyDisabled": "Полная строка исполнителя, используемая для имени папки", + "@downloadUsePrimaryArtistOnlyDisabled": { + "description": "Subtitle when primary artist only is disabled" }, - "optionsClearHistory": "Очистить историю загрузок", - "trackGenre": "Жанр", - "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", - "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", - "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", - "libraryFilterMetadataMissingArtist": "Missing artist", - "extensionsNoCustomSearch": "Нет расширений с пользовательским поиском", - "@extensionsTitle": { - "description": "Extensions page title" + "downloadSelectQuality": "Выбор качества", + "@downloadSelectQuality": { + "description": "Dialog title - choose audio quality" }, - "extensionDownloadProvider": "Провайдер скачивания", - "@extensionDownloadProvider": { - "description": "Capability - provides downloads" - }, - "lyricsMode": "Режим текстов песен", - "aboutReportIssueSubtitle": "Сообщите о возникших проблемах", - "@downloadSeparateSinglesFolder": { - "description": "Setting - separate folder for singles" + "downloadFrom": "Скачивать из", + "@downloadFrom": { + "description": "Label - download source" }, "appearanceAmoledDark": "AMOLED", - "logIssueNetworkErrorDescription": "Connection issues detected", - "folderOrganizationByArtistAlbumSubtitle": "Вложенные папки для исполнителей и альбомов", - "@libraryForceFullScanSubtitle": { - "description": "Subtitle for force full scan button" + "@appearanceAmoledDark": { + "description": "Theme option - pure black" }, - "setupGrantPermission": "Предоставить разрешение", - "lyricsProvidersDescription": "Включайте, выключайте, переупорядочивайте источники текстов. Поставщики связаны сверху вниз пока проводится поиск текста.", - "dateDaysAgo": "{count} дней назад", - "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", - "downloadLossyMp3Subtitle": "Наилучшая совместимость, ~10 Мб на трек", - "@downloadLossyMp3Subtitle": { - "description": "Subtitle for MP3 320kbps lossy option" - }, - "nowPlayingDetails": "Details", - "collectionWishlistEmptyTitle": "Список желаний пуст", - "downloadAppleQqMultiPersonEnabled": "Speaker labels included for duets and group tracks", - "@snackbarExtensionUpdatedVersion": { - "description": "Snackbar after updating an extension from the repo tab", - "placeholders": { - "extensionName": { - "type": "String" - }, - "version": { - "type": "String" - } - } - }, - "extensionHealthServiceDegraded": "Service degraded", - "selectionConvertNoConvertible": "Не выбраны конвертируемые треки", - "setupStorageGranted": "Доступ к хранилищу предоставлен!", - "downloadAllowLocalNetwork": "Allow Local Network Access", - "nowPlayingNoLyrics": "No lyrics in this file", - "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", - "@selectionDeleteTracksCount": { - "description": "Button label for deleting selected tracks", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "@libraryForceFullScan": { - "description": "Button to force a complete rescan of library" - }, - "notifLibraryScanExcluded": "{count} исключено", - "@aboutPaxsenixSubtitle": { - "description": "Subtitle for Paxsenix special thanks entry on the about page" - }, - "setupChangeFolderTooltip": "Change folder", - "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", - "@logIssueIspBlockingDescription": { - "description": "Diagnostic badge description for ISP blocking" - }, - "libraryClear": "Очистить библиотеку", - "collectionRemoveFromPlaylist": "Удалить из плейлиста", - "@collectionRemoveFromPlaylist": { - "description": "Tooltip for removing track from playlist" - }, - "backupIncludeSecrets": "Include extension credentials", - "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", - "storeCategoryMetadata": "Metadata", - "@trackLyricsEmbedded": { - "description": "Snackbar - lyrics saved to file" - }, - "editMetadataFieldDiscTotal": "Disc Total", - "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", - "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "downloadCreatePlaylistSourceFolderDisabled": "All tracks saved directly to download folder", - "@downloadFallbackExtensionsSubtitle": { - "description": "Subtitle for fallback extensions item" - }, - "libraryFilterLocal": "Локальные", - "tutorialDownloadInProgressSemantics": "Download in progress", - "searchSortDurationLong": "Продолжительность (наибольшая)", - "@appearanceLanguage": { - "description": "Language setting title" - }, - "libraryAbout": "О локальной библиотеке", - "@libraryAbout": { - "description": "Section header for about info" - }, - "cueSplitNoAudioFile": "Аудиофайл для этого CUE sheet не найден", - "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", - "appearanceSelectAccentColor": "Select accent color {hex}", - "@homeAlbumInfoUnavailable": { - "description": "Snackbar when album info cannot be loaded" - }, - "trackReplayGain": "Пересканировать ReplayGain", - "downloadSeparateSinglesFolder": "Отдельная папка для синглов", - "trackAlbumArtist": "Исполнитель альбома", - "qualityFlacLossless": "FLAC Lossless", - "@extensionVerificationHelpMessageWaiting": { - "description": "Dialog message when verification may need manual browser help" - }, - "tutorialSettingsTitle": "Настройте приложение под себя", - "extensionActionFailed": "Action failed", - "@storeEmptyNoResults": { - "description": "Message when search/filter returns no results" - }, - "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", - "downloadFallbackExtensionsSubtitle": "Choose which extensions can be used as fallback", - "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", - "trackCoverNoEmbeddedArt": "No embedded album art found", - "@trackCoverNoEmbeddedArt": { - "description": "Message shown when a track file has no embedded cover art" - }, - "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", - "setupStorageAccessMessageAndroid11": "Для Android 11+ требуется разрешение \"Доступ ко всем файлам\" для сохранения файлов в выбранную вами папку загрузки.", - "notifDownloadsFinished": "Загрузка завершена ({completed} завершено, {failed} не удалось)", - "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", - "optionsPrimaryProvider": "Основной провайдер", - "@optionsPrimaryProvider": { - "description": "Main search provider setting" - }, - "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", - "collectionAddedToLoved": "\"{trackName}\" добавлен в Любимые", - "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", - "homeAlbumInfoUnavailable": "Album info not available", - "settingsLyrics": "Lyrics", - "extensionVerificationBrowserExternal": "External", - "regionCountryIN": "India", - "extensionHealthUnknown": "Unknown", - "backupContentsWishlist": "{count} wishlist {count, plural, =1{track} other{tracks}}", - "settingsAutoExportFailed": "Автоэкспорт неудачных загрузок", - "logFilterSection": "Фильтр", - "dialogDiscardChanges": "Отменить изменения?", - "@qualityHiResFlacSubtitle": { - "description": "Technical spec for hi-res" - }, - "searchTracks": "Tracks", - "searchAlbums": "Альбомы", - "trackConvertFormat": "Переконвертировать формат", - "metadataProviderPriorityTitle": "Приоритет метаданных", - "libraryFolderHint": "Нажмите, чтобы выбрать папку", - "downloadedAlbumDeleteMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from this album?\n\nThis will also delete the files from storage.", - "@downloadedAlbumDeleteMessage": { - "description": "Delete confirmation with count", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "trackAlbum": "Альбом", - "updateAvailable": "Доступно обновление", - "optionsEmbedLyrics": "Вписать текст песни", - "trackReEnrichProgress": "Обновление метаданных...", - "@trackReEnrichProgress": { - "description": "Snackbar while re-enriching metadata" - }, - "audioAnalysisPeak": "Peak", - "@audioAnalysisPeak": { - "description": "Peak amplitude metric label" - }, - "optionsExtensionStoreSubtitle": "Показывать вкладку репозитория в навигации", - "settingsTitle": "Настройки", - "@settingsAbout": { - "description": "Settings section - app info" - }, - "cacheExploreFeed": "Просмотреть кэш ленты", - "@dialogDownloadPlaylistsMessage": { - "description": "Dialog message for bulk playlist download confirmation", - "placeholders": { - "trackCount": { - "type": "int" - }, - "playlistCount": { - "type": "int" - } - } - }, - "downloadedAlbumSelectedCount": "{count} выбрано", - "downloadAskQualitySubtitle": "Показывать выбор качества для каждого скачивания", - "filenameShowAdvancedTags": "Показать расширенные теги", - "@filenameShowAdvancedTags": { - "description": "Toggle label for showing advanced filename tags" - }, - "@editMetadataFieldComment": { - "description": "Label for comment field in the edit metadata sheet" - }, - "downloadFallbackExtensions": "Fallback Extensions", - "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", - "cacheLibraryCover": "Кэш обложек библиотеки", - "actionShuffle": "Shuffle", - "backupCreated": "Backup created", - "downloadLossyAacSubtitle": "Best mobile compatibility, M4A container", - "actionCreate": "Создать", - "snackbarAddedToQueueGeneric": "Added to queue", - "downloadedAlbumDownloadedCount": "{count} скачано", - "snackbarLoadingCueSheet": "Загрузка CUE разметки...", - "@trackCoverClearSelected": { - "description": "Tooltip for clearing the newly selected cover art" - }, - "aboutOriginalCreator": "Создатель оригинального SpotiFLAC", - "a11yTrackByArtist": "{trackName} by {artistName}", - "audioAnalysisDynamicRange": "Динамический диапазон", - "homeChangeSearchProviderTooltip": "Change search provider", - "loadingSharedLink": "Загрузка общедоступной ссылки...", - "lyricsModeEmbedSubtitle": "Встроить текст в метаданные FLAC", - "setupNotificationBackgroundDescription": "Получайте уведомления о ходе и завершении загрузки. Это поможет вам отслеживать загрузки, когда приложение находится в фоновом режиме.", - "snackbarViewQueue": "Просмотр очереди", - "@audioAnalysisDuration": { - "description": "Duration metric label" - }, - "downloadSeparateSinglesDisabled": "Singles and albums saved in the same folder", - "backupRestored": "Backup restored successfully", - "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", - "@trackConvertConfirmMessageLosslessCapped": { - "description": "Confirmation dialog message for capped lossless conversion of a single file", - "placeholders": { - "sourceFormat": { - "type": "String" - }, - "targetFormat": { - "type": "String" - }, - "quality": { - "type": "String" - } - } - }, - "discographySelectAlbumsSubtitle": "Выберите конкретные альбомы или синглы", - "@discographySelectAlbumsSubtitle": { - "description": "Subtitle for select albums option" - }, - "backupImportSectionDescription": "Pick a backup file to restore your data. This replaces the current settings, history and library on this device.", - "errorUrlFetchFailed": "Не удалось загрузить контент по этой ссылке. Пожалуйста, попробуйте еще раз.", - "lyricsProviderLyricsPlusDesc": "Word-by-word karaoke lyrics (Apple/Musixmatch/Spotify/QQ, via proxy)", - "dialogSave": "Сохранить", - "trackReEnrichSearching": "Поиск метаданных в сети...", - "regionCountryUS": "United States", - "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", - "downloadFilenameFormat": "Формат имени файла", - "cueSplitTitle": "Разделить CUE Sheet", - "settingsAppSubtitle": "Updates, data, extension repo, debug", - "@settingsAppSubtitle": { - "description": "Subtitle for app settings" - }, - "@setupPermissionRequiredMessage": { - "description": "Generic permission required message", - "placeholders": { - "permissionType": { - "type": "String" - } - } - }, - "errorMissingExtensionSource": "Невозможно загрузить {item}: отсутствует источник расширения", - "albumFolderAlbumOnlySubtitle": "Альбомы/Название Альбома/", - "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", - "extensionVerificationHelpTitleManual": "Open verification manually", - "dialogDiscard": "Отменить", - "storageModeSaf": "Custom Folder (SAF)", - "errorRateLimited": "Слишком много запросов", - "downloadSelectQuality": "Выбор качества", - "dialogDownloadPlaylistsMessage": "Download {trackCount} {trackCount, plural, =1{track} other{tracks}} from {playlistCount} {playlistCount, plural, =1{playlist} other{playlists}}?", - "collectionFoldersTitle": "Мои папки", - "progressFetchingMetadata": "Получение метаданных... {current}/{total}", - "settingsDownloadNetworkAny": "WiFi и Мобильная сеть", - "audioAnalysisDuration": "Продолжительность", - "audioAnalysisAnalyzing": "Analyzing audio...", - "extensionVerificationHelpMessageWaiting": "If the browser did not open, or verification finished but did not return to SpotiFLAC Mobile, open this link again or copy it manually.", - "editMetadataFieldDiscNum": "Диск #", - "@editMetadataFieldDiscNum": { - "description": "Chip label for disc number field in auto-fill selector" - }, - "@noTracksFoundForAlbum": { - "description": "Empty state message when an album has no tracks" - }, - "previewPlay": "Предпросмотр проигрывания", - "setupPermissionRequiredMessage": "Для оптимальной работы требуется разрешение {permissionType}. Вы можете изменить это позже в настройках.", - "aboutVersion": "Версия", - "qualityHiResFlacSubtitle": "24-бит / до 96кГц", - "audioAnalysisSamples": "Сэмплы", - "libraryFilterQualityHiRes": "Hi-Res (24 бит)", - "sectionMetadataProviders": "Providers", - "@sectionMetadataProviders": { - "description": "Settings section header for metadata providers" - }, - "trackCopyright": "Авторские права", - "libraryForceFullScanSubtitle": "Пересканировать все файлы, игнорировать кэш", - "trackCopiedToClipboard": "Скопировано в буфер обмена", - "optionsEmbedMetadata": "Embed Metadata", - "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", - "@collectionAddedTracksToPlaylistWithExisting": { - "description": "Snackbar after adding multiple tracks to a playlist when some were already present", - "placeholders": { - "count": { - "type": "int" - }, - "playlistName": { - "type": "String" - }, - "alreadyCount": { - "type": "int" - } - } - }, - "storeCategoryIntegration": "Integration", - "storeClearFilters": "Очистить фильтры", - "navSettings": "Настройки", - "@homeRecent": { - "description": "Section header for recent searches" - }, - "sectionApp": "Приложение", - "@sectionLanguage": { - "description": "Settings section header for language" - }, - "downloadFilterContributingDisabled": "Full Album Artist string used", - "albumFolderArtistAlbumSinglesSubtitle": "Исполнитель/Альбом и Исполнитель/Сингл/", - "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", - "lyricsProvidersSaved": "Приоритетный провайдер текстов песен сохранен", - "@trackReplayGainFailed": { - "description": "Snackbar message when ReplayGain scan/write fails" - }, - "trackTrackName": "Название", - "homeRecent": "Недавние", - "recentEmpty": "Нет недавних элементов", - "cacheClearAll": "Очистить весь кэш", - "trackReEnrichFieldReleaseInfo": "Дата и ISRC", - "regionCountryMX": "Mexico", - "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", - "editMetadataFieldAlbum": "Альбом", - "settingsAbout": "О программе", - "libraryFilterTitle": "Фильтры", - "cleanupOrphanedDownloadsResult": "Удалено {count} утерянных записей из истории", - "extensionHooksAvailable": "Доступно {count} хуков(ов)", - "backupContentsSettings": "App settings", - "trackLyricsEmbedded": "Текст успешно добавлен", - "optionsUpdateChannelPreview": "Предварительные версии", - "collectionAddedToFavoriteArtists": "\"{artistName}\" добавлен в избранные исполнители", - "libraryForceFullScan": "Полное сканирование", - "snackbarProviderPrioritySaved": "Приоритет провайдера сохранён", - "collectionFavoriteArtistsEmptySubtitle": "Нажмите на сердце на странице исполнителя, чтобы сохранить его здесь", - "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", - "extensionServiceStatus": "Service Status", - "dateWeeksAgo": "{count} недель назад", - "historyFilterSingles": "Синглы", - "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", - "trackLyricsSaved": "Текст песни сохранен в {fileName}", - "cacheClearAllConfirmTitle": "Очистить весь кэш?", - "noTracksFoundForAlbum": "No tracks found for this album", - "sectionLanguage": "Язык", - "@logIssueTrackNotFoundDescription": { - "description": "Diagnostic badge description when a track is unavailable" - }, - "setupSelectFolder": "Выбрать папку", - "dateYesterday": "Вчера", - "collectionAddToPlaylist": "Добавить в плейлист", - "snackbarUnsupportedAudioFormat": "Неподдерживаемый аудио формат", - "libraryScanCancelled": "Scan cancelled", - "appearanceLanguage": "Язык приложения", - "extensionsTitle": "Расширения", - "dialogImportPlaylistMessage": "Found {count} tracks in the playlist file. Add them to download queue?", - "permissionNotification": "Notification", - "notifUpdateReady": "Обновление готово", - "lyricsModeDescription": "Выберите как сохранить тексты песен при скачивании", - "downloadFrom": "Скачивать из", - "collectionWishlistEmptySubtitle": "Нажмите + на треках, чтобы сохранить то, что вы хотите скачать позже", - "cueSplitSplitting": "Разделение CUE sheet... ({current}/{total})", - "trackOptionAddToWishlist": "Добавить в список желаний", - "settingsBackup": "Backup & Restore", - "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", - "notifDownloadCompleteCount": "Загрузка завершена ({completed}/{total})", - "extensionsNoDownloadProvider": "Нет расширений с провайдером загрузки", - "libraryFilterSortGenreAsc": "Жанр (А-Я)", - "trackReplayGainFailed": "Не удалось добавить теги ReplayGain", - "collectionPlaylistRemoveCover": "Удалить обложку", - "storeEmptyNoResults": "Расширения не найдены", - "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", - "editMetadataFieldComment": "Comment", - "settingsMetadata": "Metadata", - "settingsCache": "Хранилище и кэш", - "providerPriorityFallbackExtensionsHint": "Здесь перечислены только включенные расширения с возможностями поставщика загрузок.", - "libraryFilterAll": "Все", - "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", - "extensionsProviderPrioritySection": "Приоритет провайдера", - "storeChangeRepoTooltip": "Изменить репозиторий", - "snackbarFailedToInstall": "Не удалось установить расширение", - "libraryScanSubtitle": "Сканировать аудио файлы", - "snackbarExtensionInstalled": "{extensionName} установлено.", - "setupOpenSettings": "Открыть настройки", - "extensionsInstalledSection": "Установленные расширения", - "aboutLinks": "Ссылки", - "trackCoverClearSelected": "Clear selected cover", - "libraryAutoScanWeekly": "Еженедельно", - "downloadMusixmatchLanguageAuto": "Auto (original language)", - "optionsDefaultSearchTab": "Вкладка поиска по умолчанию", - "downloadPrimaryArtistOnlyOn": "Primary only: On", - "folderOrganizationDescription": "Сортировать скачанные файлы по папкам", - "@folderOrganizationDescription": { - "description": "Folder organization sheet description" - }, - "lyricsModeEmbed": "Вписать в файл", - "trackReEnrichFfmpegFailed": "Ошибка встраивания метаданных FFmpeg", - "@extensionsSearchProviderDescription": { - "description": "Search provider setting description" - }, - "libraryFilterQualityLossy": "С потерями", - "actionPause": "Пауза", - "csvImportTracks": "{count} трек(-ов) из CSV", - "actionGo": "Go", - "sectionDebug": "Отладка", - "editMetadataFieldDate": "Дата", - "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", - "sectionPerformance": "Производительность", - "extensionsDownloadPrioritySubtitle": "Установка порядок сервисов скачивания", - "cacheAppDirectoryDesc": "HTTP-ответы, данные WebView и другие временные данные приложения.", - "sectionData": "Данные", - "notifFinalizingTrack": "Finalizing {trackName}", - "snackbarFileNotFound": "Файл не найден", - "extensionQualityOptions": "Параметры качества", - "extensionVerificationBrowserSubtitleExternal": "Open challenges in the default browser first", - "backupInvalidFile": "This file is not a valid SpotiFLAC backup", - "storeRepoDialogTitle": "Репозиторий расширения", - "extensionsSearchProviderDescription": "Выберите, какой сервис использовать для поиска треков", - "albumFolderAlbumOnly": "Только альбом", - "nowPlayingOpenInExternalPlayer": "Open in external player", - "cueSplitButton": "Разделить на Треки", - "updateRequiredTitle": "Требуется обновление", - "@updateRequiredTitle": { - "description": "Title of the mandatory update dialog shown when the installed version is too old" - }, - "updateRequiredNotice": "Эта версия {count} больше не поддерживается. Обновите, чтобы продолжить использовать приложение.", - "@updateRequiredNotice": { - "description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed", - "placeholders": { - "count": { - "type": "int" - } - } + "appearanceAmoledDarkSubtitle": "Глубокий чёрный фон", + "@appearanceAmoledDarkSubtitle": { + "description": "Subtitle for AMOLED dark" }, "appearanceHeroAnimations": "Hero animations", "@appearanceHeroAnimations": { @@ -5891,6 +2131,46 @@ "@appearanceHeroAnimationsSubtitle": { "description": "Subtitle for the Hero animations toggle" }, + "appearanceForceBlur": "Always use blur effects", + "@appearanceForceBlur": { + "description": "Toggle that forces backdrop blur on even when the device profile disabled it" + }, + "appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.", + "@appearanceForceBlurSubtitle": { + "description": "Subtitle for the force-blur toggle" + }, + "queueClearAll": "Очистить всё", + "@queueClearAll": { + "description": "Button - clear all queue items" + }, + "queueClearAllMessage": "Вы уверены, что хотите очистить все загрузки?", + "@queueClearAllMessage": { + "description": "Clear queue confirmation" + }, + "settingsAutoExportFailed": "Автоэкспорт неудачных загрузок", + "@settingsAutoExportFailed": { + "description": "Setting toggle for auto-export" + }, + "settingsAutoExportFailedSubtitle": "Автоматическое сохранение неудачных загрузок в TXT файл", + "@settingsAutoExportFailedSubtitle": { + "description": "Subtitle for auto-export setting" + }, + "settingsDownloadNetwork": "Сеть для скачивания", + "@settingsDownloadNetwork": { + "description": "Setting for network type preference" + }, + "settingsDownloadNetworkAny": "WiFi и Мобильная сеть", + "@settingsDownloadNetworkAny": { + "description": "Network option - use any connection" + }, + "settingsDownloadNetworkWifiOnly": "Только WiFi", + "@settingsDownloadNetworkWifiOnly": { + "description": "Network option - only use WiFi" + }, + "settingsDownloadNetworkSubtitle": "Выберите, какую сеть использовать для скачивания. Когда установлено значение только WiFi — скачивания через мобильную сеть будут приостановлены.", + "@settingsDownloadNetworkSubtitle": { + "description": "Subtitle explaining network preference" + }, "settingsConcurrentDownloads": "Concurrent downloads", "@settingsConcurrentDownloads": { "description": "Setting title - how many tracks download at the same time" @@ -5912,6 +2192,854 @@ } } }, + "albumFolderArtistAlbum": "Исполнитель / Альбом", + "@albumFolderArtistAlbum": { + "description": "Album folder option" + }, + "albumFolderArtistAlbumSubtitle": "Альбомы/Исполнитель/Название Альбома/", + "@albumFolderArtistAlbumSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistYearAlbum": "Исполнитель / [Год] Альбом", + "@albumFolderArtistYearAlbum": { + "description": "Album folder option with year" + }, + "albumFolderArtistYearAlbumSubtitle": "Альбомы/Исполнитель/[2005] Название Альбома/", + "@albumFolderArtistYearAlbumSubtitle": { + "description": "Folder structure example" + }, + "albumFolderAlbumOnly": "Только альбом", + "@albumFolderAlbumOnly": { + "description": "Album folder option" + }, + "albumFolderAlbumOnlySubtitle": "Альбомы/Название Альбома/", + "@albumFolderAlbumOnlySubtitle": { + "description": "Folder structure example" + }, + "albumFolderYearAlbum": "[Год] Альбом", + "@albumFolderYearAlbum": { + "description": "Album folder option with year" + }, + "albumFolderYearAlbumSubtitle": "Альбомы/[2005] Название Альбома /", + "@albumFolderYearAlbumSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistAlbumSingles": "Исполнитель / Альбом + Синглы", + "@albumFolderArtistAlbumSingles": { + "description": "Album folder option with singles inside artist" + }, + "albumFolderArtistAlbumSinglesSubtitle": "Исполнитель/Альбом и Исполнитель/Сингл/", + "@albumFolderArtistAlbumSinglesSubtitle": { + "description": "Folder structure example" + }, + "albumFolderArtistAlbumFlat": "Artist / Album (Singles flat)", + "@albumFolderArtistAlbumFlat": { + "description": "Album folder option with singles directly in artist folder" + }, + "albumFolderArtistAlbumFlatSubtitle": "Artist/Album/ and Artist/song.flac", + "@albumFolderArtistAlbumFlatSubtitle": { + "description": "Folder structure example for flat singles" + }, + "downloadedAlbumDeleteSelected": "Удалить выбранные", + "@downloadedAlbumDeleteSelected": { + "description": "Button - delete selected tracks" + }, + "downloadedAlbumDeleteMessage": "Delete {count} {count, plural, =1{track} other{tracks}} from this album?\n\nThis will also delete the files from storage.", + "@downloadedAlbumDeleteMessage": { + "description": "Delete confirmation with count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadedAlbumSelectedCount": "{count} выбрано", + "@downloadedAlbumSelectedCount": { + "description": "Selection count indicator", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadedAlbumTapToSelect": "Нажмите на треки для выбора", + "@downloadedAlbumTapToSelect": { + "description": "Selection hint" + }, + "downloadedAlbumDeleteCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "@downloadedAlbumDeleteCount": { + "description": "Delete button text with count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadedAlbumSelectToDelete": "Выберите треки для удаления", + "@downloadedAlbumSelectToDelete": { + "description": "Placeholder when nothing selected" + }, + "downloadedAlbumDiscHeader": "Диск {discNumber}", + "@downloadedAlbumDiscHeader": { + "description": "Header for disc separator in multi-disc albums", + "placeholders": { + "discNumber": { + "type": "int", + "example": "1" + } + } + }, + "recentTypeArtist": "Исполнитель", + "@recentTypeArtist": { + "description": "Recent access item type - artist" + }, + "recentTypeAlbum": "Альбом", + "@recentTypeAlbum": { + "description": "Recent access item type - album" + }, + "recentTypeSong": "Песня", + "@recentTypeSong": { + "description": "Recent access item type - song/track" + }, + "recentTypePlaylist": "Плейлист", + "@recentTypePlaylist": { + "description": "Recent access item type - playlist" + }, + "recentEmpty": "Нет недавних элементов", + "@recentEmpty": { + "description": "Empty state text for recent access list" + }, + "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", + "@recentClearAllMessage": { + "description": "Confirmation message before clearing all recent activity" + }, + "recentShowAllDownloads": "Показать все загрузки", + "@recentShowAllDownloads": { + "description": "Button label to unhide hidden downloads in recent access" + }, + "recentPlaylistInfo": "Плейлист: {name}", + "@recentPlaylistInfo": { + "description": "Snackbar message when tapping playlist in recent access", + "placeholders": { + "name": { + "type": "String", + "description": "Playlist name" + } + } + }, + "discographyDownload": "Скачать дискографию", + "@discographyDownload": { + "description": "Button - download artist discography" + }, + "discographyDownloadAll": "Скачать всё", + "@discographyDownloadAll": { + "description": "Option - download entire discography" + }, + "discographyDownloadAllSubtitle": "{count} треков из {albumCount} релизов", + "@discographyDownloadAllSubtitle": { + "description": "Subtitle showing total tracks and albums", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } + }, + "discographyAlbumsOnly": "Только альбомы", + "@discographyAlbumsOnly": { + "description": "Option - download only albums" + }, + "discographyAlbumsOnlySubtitle": "{count} треков из {albumCount} альбомов", + "@discographyAlbumsOnlySubtitle": { + "description": "Subtitle showing album tracks count", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } + }, + "discographySinglesOnly": "Только синглы и EP", + "@discographySinglesOnly": { + "description": "Option - download only singles" + }, + "discographySinglesOnlySubtitle": "{count} треков из {albumCount} синглов", + "@discographySinglesOnlySubtitle": { + "description": "Subtitle showing singles tracks count", + "placeholders": { + "count": { + "type": "int" + }, + "albumCount": { + "type": "int" + } + } + }, + "discographySelectAlbums": "Выбрать альбомы...", + "@discographySelectAlbums": { + "description": "Option - manually select albums to download" + }, + "discographySelectAlbumsSubtitle": "Выберите конкретные альбомы или синглы", + "@discographySelectAlbumsSubtitle": { + "description": "Subtitle for select albums option" + }, + "discographyFetchingTracks": "Получение треков...", + "@discographyFetchingTracks": { + "description": "Progress - fetching album tracks" + }, + "discographyFetchingAlbum": "Получение {current} из {total}...", + "@discographyFetchingAlbum": { + "description": "Progress - fetching specific album", + "placeholders": { + "current": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "discographySelectedCount": "{count} выбрано", + "@discographySelectedCount": { + "description": "Selection count badge", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "discographyDownloadSelected": "Скачать выбранное", + "@discographyDownloadSelected": { + "description": "Button - download selected albums" + }, + "discographyAddedToQueue": "Добавлено {count} треков в очередь", + "@discographyAddedToQueue": { + "description": "Snackbar - tracks added from discography", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "discographySkippedDownloaded": "{added} добавлено, {skipped} уже скачано", + "@discographySkippedDownloaded": { + "description": "Snackbar - with skipped tracks count", + "placeholders": { + "added": { + "type": "int" + }, + "skipped": { + "type": "int" + } + } + }, + "discographyNoAlbums": "Нет доступных альбомов", + "@discographyNoAlbums": { + "description": "Error - no albums found for artist" + }, + "discographyFailedToFetch": "Не удалось получить некоторые альбомы", + "@discographyFailedToFetch": { + "description": "Error - some albums failed to load" + }, + "sectionStorageAccess": "Доступ к хранилищу", + "@sectionStorageAccess": { + "description": "Section header for storage access settings" + }, + "allFilesAccess": "Доступ ко всем файлам", + "@allFilesAccess": { + "description": "Toggle for MANAGE_EXTERNAL_STORAGE permission" + }, + "allFilesAccessEnabledSubtitle": "Можно записать в любую папку", + "@allFilesAccessEnabledSubtitle": { + "description": "Subtitle when all files access is enabled" + }, + "allFilesAccessDisabledSubtitle": "Ограничено только папками медиа", + "@allFilesAccessDisabledSubtitle": { + "description": "Subtitle when all files access is disabled" + }, + "allFilesAccessDescription": "Включите, если вы сталкиваетесь с ошибками записи при сохранении в пользовательские папки. Android 13+ по умолчанию ограничивает доступ к определенным папкам.", + "@allFilesAccessDescription": { + "description": "Description explaining when to enable all files access" + }, + "allFilesAccessDeniedMessage": "В разрешении отказано. Пожалуйста, включите функцию «Доступ ко всем файлам» в настройках системы.", + "@allFilesAccessDeniedMessage": { + "description": "Message when permission is permanently denied" + }, + "allFilesAccessDisabledMessage": "Доступ ко всем файлам отключен. Приложение будет использовать ограниченный доступ к хранилищу.", + "@allFilesAccessDisabledMessage": { + "description": "Snackbar message when user disables all files access" + }, + "settingsLocalLibrary": "Локальная библиотека", + "@settingsLocalLibrary": { + "description": "Settings menu item - local library" + }, + "settingsLocalLibrarySubtitle": "Сканировать и обнаружить дубликаты", + "@settingsLocalLibrarySubtitle": { + "description": "Subtitle for local library settings" + }, + "settingsCache": "Хранилище и кэш", + "@settingsCache": { + "description": "Settings menu item - cache management" + }, + "settingsCacheSubtitle": "Просмотреть размер и очистить кэш", + "@settingsCacheSubtitle": { + "description": "Subtitle for cache management menu" + }, + "libraryTitle": "Локальная библиотека", + "@libraryTitle": { + "description": "Library settings page title" + }, + "libraryScanSettings": "Настройки сканирования", + "@libraryScanSettings": { + "description": "Section header for scan settings" + }, + "libraryEnableLocalLibrary": "Включить локальную библиотеку", + "@libraryEnableLocalLibrary": { + "description": "Toggle to enable library scanning" + }, + "libraryEnableLocalLibrarySubtitle": "Сканировать и отслеживать вашу существующую музыку", + "@libraryEnableLocalLibrarySubtitle": { + "description": "Subtitle for enable toggle" + }, + "libraryFolder": "Папка библиотеки", + "@libraryFolder": { + "description": "Folder selection setting" + }, + "libraryFolderHint": "Нажмите, чтобы выбрать папку", + "@libraryFolderHint": { + "description": "Placeholder when no folder selected" + }, + "libraryAddFolder": "Add library folder", + "@libraryAddFolder": { + "description": "Action to add another local library source" + }, + "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", + "@libraryAddFolderSubtitle": { + "description": "Supported storage locations for local library sources" + }, + "librarySourceOnline": "Online", + "@librarySourceOnline": { + "description": "Library source is connected and accessible" + }, + "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", + "@librarySourceOffline": { + "description": "Library source is temporarily disconnected" + }, + "librarySourceDisabled": "Disabled", + "@librarySourceDisabled": { + "description": "Library source has been disabled by the user" + }, + "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", + "@librarySourceScanCount": { + "description": "Live progress for one library folder scan", + "placeholders": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "progress": { + "type": "String" + } + } + }, + "libraryExternalStorage": "External storage", + "@libraryExternalStorage": { + "description": "Label for a removable or external library source" + }, + "libraryRemoveFolder": "Remove library folder", + "@libraryRemoveFolder": { + "description": "Action to remove one indexed library source" + }, + "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", + "@libraryRemoveFolderMessage": { + "description": "Confirmation shown before removing a library source" + }, + "libraryShowDuplicateIndicator": "Показать индикатор дубликатов", + "@libraryShowDuplicateIndicator": { + "description": "Toggle for duplicate indicator in search" + }, + "libraryShowDuplicateIndicatorSubtitle": "Показать при поиске существующих треков", + "@libraryShowDuplicateIndicatorSubtitle": { + "description": "Subtitle for duplicate indicator toggle" + }, + "libraryAutoScan": "Автосканирование", + "@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": "Каждое открытие приложения", + "@libraryAutoScanOnOpen": { + "description": "Auto scan when app opens" + }, + "libraryAutoScanDaily": "Ежедневно", + "@libraryAutoScanDaily": { + "description": "Auto scan once per day" + }, + "libraryAutoScanWeekly": "Еженедельно", + "@libraryAutoScanWeekly": { + "description": "Auto scan once per week" + }, + "libraryActions": "Действия", + "@libraryActions": { + "description": "Section header for library actions" + }, + "libraryScan": "Сканировать библиотеку", + "@libraryScan": { + "description": "Button to start library scan" + }, + "libraryScanSubtitle": "Сканировать аудио файлы", + "@libraryScanSubtitle": { + "description": "Subtitle for scan button" + }, + "libraryScanSelectFolderFirst": "Сначала выберите папку", + "@libraryScanSelectFolderFirst": { + "description": "Message when trying to scan without folder" + }, + "libraryCleanupMissingFiles": "Очистка отсутствующих файлов", + "@libraryCleanupMissingFiles": { + "description": "Button to remove entries for missing files" + }, + "libraryCleanupMissingFilesSubtitle": "Удалить записи для файлов, которых больше не существует", + "@libraryCleanupMissingFilesSubtitle": { + "description": "Subtitle for cleanup button" + }, + "libraryClear": "Очистить библиотеку", + "@libraryClear": { + "description": "Button to clear all library entries" + }, + "libraryClearSubtitle": "Удалить все сканированные треки", + "@libraryClearSubtitle": { + "description": "Subtitle for clear button" + }, + "libraryClearConfirmTitle": "Очистить библиотеку", + "@libraryClearConfirmTitle": { + "description": "Dialog title for clear confirmation" + }, + "libraryClearConfirmMessage": "Это удалит все сканированные треки из вашей библиотеки. Ваши фактические файлы не будут удалены.", + "@libraryClearConfirmMessage": { + "description": "Dialog message for clear confirmation" + }, + "libraryAbout": "О локальной библиотеке", + "@libraryAbout": { + "description": "Section header for about info" + }, + "libraryAboutDescription": "Сканирует существующую коллекцию музыки для обнаружения дубликатов при загрузке. Поддерживает форматы FLAC, M4A, MP3, Opus и OGG. Метаданные читаются из тегов файлов, если доступны.", + "@libraryAboutDescription": { + "description": "Description of local library feature" + }, + "libraryTracksUnit": "{count, plural, =1{track} other{tracks}}", + "@libraryTracksUnit": { + "description": "Unit label for tracks count (without the number itself)", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "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", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "libraryLastScannedNever": "Никогда", + "@libraryLastScannedNever": { + "description": "Shown when library has never been scanned" + }, + "libraryScanning": "Сканирование...", + "@libraryScanning": { + "description": "Status during scan" + }, + "libraryScanFinalizing": "Завершение работы с библиотекой...", + "@libraryScanFinalizing": { + "description": "Status shown after file scanning finishes but library persistence is still running" + }, + "libraryScanProgress": "{progress}% из {total} файлов", + "@libraryScanProgress": { + "description": "Scan progress display", + "placeholders": { + "progress": { + "type": "String" + }, + "total": { + "type": "int" + } + } + }, + "libraryInLibrary": "В библиотеке", + "@libraryInLibrary": { + "description": "Badge shown on tracks that exist in local library" + }, + "libraryRemovedMissingFiles": "Удалено {count} {count, plural, one{отсутствующий файл} few{трека} many{отсутствующих файлов} other{отсутствующих файлов}} в библиотеке", + "@libraryRemovedMissingFiles": { + "description": "Snackbar after cleanup", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "libraryCleared": "Библиотека очищена", + "@libraryCleared": { + "description": "Snackbar after clearing library" + }, + "libraryStorageAccessRequired": "Требуется доступ к хранилищу", + "@libraryStorageAccessRequired": { + "description": "Dialog title for storage permission" + }, + "libraryStorageAccessMessage": "SpotiFLAC требуется доступ к хранилищу для сканирования вашей библиотеки музыки. Пожалуйста, предоставьте разрешение в настройках.", + "@libraryStorageAccessMessage": { + "description": "Dialog message for storage permission" + }, + "libraryFolderNotExist": "Выбранной папки не существует", + "@libraryFolderNotExist": { + "description": "Error when folder doesn't exist" + }, + "librarySourceDownloaded": "Скачанные", + "@librarySourceDownloaded": { + "description": "Badge for tracks downloaded via SpotiFLAC" + }, + "librarySourceLocal": "Локальные", + "@librarySourceLocal": { + "description": "Badge for tracks from local library scan" + }, + "libraryFilterAll": "Все", + "@libraryFilterAll": { + "description": "Filter chip - show all library items" + }, + "libraryFilterDownloaded": "Скачанные", + "@libraryFilterDownloaded": { + "description": "Filter chip - show only downloaded items" + }, + "libraryFilterLocal": "Локальные", + "@libraryFilterLocal": { + "description": "Filter chip - show only local library items" + }, + "libraryFilterTitle": "Фильтры", + "@libraryFilterTitle": { + "description": "Filter bottom sheet title" + }, + "libraryFilterReset": "Сброс", + "@libraryFilterReset": { + "description": "Reset all filters button" + }, + "libraryFilterApply": "Применить", + "@libraryFilterApply": { + "description": "Apply filters button" + }, + "libraryFilterSource": "Источник", + "@libraryFilterSource": { + "description": "Filter section - source type" + }, + "libraryFilterQuality": "Качество", + "@libraryFilterQuality": { + "description": "Filter section - audio quality" + }, + "libraryFilterQualityHiRes": "Hi-Res (24 бит)", + "@libraryFilterQualityHiRes": { + "description": "Filter option - high resolution audio" + }, + "libraryFilterQualityCD": "CD (16 бит)", + "@libraryFilterQualityCD": { + "description": "Filter option - CD quality audio" + }, + "libraryFilterQualityLossy": "С потерями", + "@libraryFilterQualityLossy": { + "description": "Filter option - lossy compressed audio" + }, + "libraryFilterFormat": "Формат", + "@libraryFilterFormat": { + "description": "Filter section - file format" + }, + "libraryFilterMetadata": "Метаданные", + "@libraryFilterMetadata": { + "description": "Filter section - metadata completeness" + }, + "libraryFilterMetadataComplete": "Complete metadata", + "@libraryFilterMetadataComplete": { + "description": "Filter option - items with complete metadata" + }, + "libraryFilterMetadataMissingAny": "Не хватает метаданных", + "@libraryFilterMetadataMissingAny": { + "description": "Filter option - items missing any tracked metadata field" + }, + "libraryFilterMetadataMissingYear": "Отсутствует год", + "@libraryFilterMetadataMissingYear": { + "description": "Filter option - items missing release year/date" + }, + "libraryFilterMetadataMissingGenre": "Отсутствует жанр", + "@libraryFilterMetadataMissingGenre": { + "description": "Filter option - items missing genre" + }, + "libraryFilterMetadataMissingAlbumArtist": "Missing album artist", + "@libraryFilterMetadataMissingAlbumArtist": { + "description": "Filter option - items missing album artist" + }, + "libraryFilterSort": "Сортировка", + "@libraryFilterSort": { + "description": "Filter section - sort order" + }, + "libraryFilterSortLatest": "Последние", + "@libraryFilterSortLatest": { + "description": "Sort option - newest first" + }, + "libraryFilterSortOldest": "Старые", + "@libraryFilterSortOldest": { + "description": "Sort option - oldest first" + }, + "libraryFilterSortAlbumAsc": "Альбом (А-Я)", + "@libraryFilterSortAlbumAsc": { + "description": "Sort option - album ascending" + }, + "libraryFilterSortAlbumDesc": "Альбом (Я-А)", + "@libraryFilterSortAlbumDesc": { + "description": "Sort option - album descending" + }, + "libraryFilterSortGenreAsc": "Жанр (А-Я)", + "@libraryFilterSortGenreAsc": { + "description": "Sort option - genre ascending" + }, + "libraryFilterSortGenreDesc": "Жанр (Я-А)", + "@libraryFilterSortGenreDesc": { + "description": "Sort option - genre descending" + }, + "timeJustNow": "Только что", + "@timeJustNow": { + "description": "Relative time - less than a minute ago" + }, + "timeMinutesAgo": "{count, plural, =1{1 minute ago} other{{count} minutes ago}}", + "@timeMinutesAgo": { + "description": "Relative time - minutes ago", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "timeHoursAgo": "{count, plural, =1{1 hour ago} other{{count} hours ago}}", + "@timeHoursAgo": { + "description": "Relative time - hours ago", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "tutorialWelcomeTitle": "Welcome to SpotiFLAC Mobile!", + "@tutorialWelcomeTitle": { + "description": "Tutorial welcome page title" + }, + "tutorialWelcomeDesc": "Learn how to find music with extensions, choose the quality you want, and manage downloads in SpotiFLAC Mobile.", + "@tutorialWelcomeDesc": { + "description": "Tutorial welcome page description" + }, + "tutorialWelcomeTip1": "Search with an installed extension or paste a supported music link", + "@tutorialWelcomeTip1": { + "description": "Tutorial welcome tip 1" + }, + "tutorialWelcomeTip2": "Choose from the audio qualities offered by your download provider", + "@tutorialWelcomeTip2": { + "description": "Tutorial welcome tip 2" + }, + "tutorialWelcomeTip3": "Embed metadata, cover art, lyrics, and release information automatically", + "@tutorialWelcomeTip3": { + "description": "Tutorial welcome tip 3" + }, + "tutorialSearchTitle": "Поиск музыки", + "@tutorialSearchTitle": { + "description": "Tutorial search page title" + }, + "tutorialSearchDesc": "Search with your selected extension or paste a supported music link.", + "@tutorialSearchDesc": { + "description": "Tutorial search page description" + }, + "tutorialDownloadTitle": "Скачивание музыки", + "@tutorialDownloadTitle": { + "description": "Tutorial download page title" + }, + "tutorialDownloadDesc": "Pick an available quality, start the download, and follow its progress in the queue.", + "@tutorialDownloadDesc": { + "description": "Tutorial download page description" + }, + "tutorialLibraryTitle": "Ваша библиотека", + "@tutorialLibraryTitle": { + "description": "Tutorial library page title" + }, + "tutorialLibraryDesc": "Downloaded and locally scanned music is organized in your Library.", + "@tutorialLibraryDesc": { + "description": "Tutorial library page description" + }, + "tutorialLibraryTip1": "Manage active, pending, and completed downloads from the Library queue", + "@tutorialLibraryTip1": { + "description": "Tutorial library tip 1" + }, + "tutorialLibraryTip2": "Tap a track to play it with the built-in player", + "@tutorialLibraryTip2": { + "description": "Tutorial library tip 2" + }, + "tutorialLibraryTip3": "Browse tracks, albums, and playlists in list or grid views", + "@tutorialLibraryTip3": { + "description": "Tutorial library tip 3" + }, + "tutorialExtensionsTitle": "Расширения", + "@tutorialExtensionsTitle": { + "description": "Tutorial extensions page title" + }, + "tutorialExtensionsDesc": "Extensions add search, download, metadata, lyrics, and other integrations.", + "@tutorialExtensionsDesc": { + "description": "Tutorial extensions page description" + }, + "tutorialExtensionsTip1": "Browse the Repo tab to discover useful extensions", + "@tutorialExtensionsTip1": { + "description": "Tutorial extensions tip 1" + }, + "tutorialExtensionsTip2": "Choose providers for search, downloads, metadata, and fallbacks", + "@tutorialExtensionsTip2": { + "description": "Tutorial extensions tip 2" + }, + "tutorialExtensionsTip3": "Connect accounts when required and keep extensions up to date", + "@tutorialExtensionsTip3": { + "description": "Tutorial extensions tip 3" + }, + "tutorialSettingsTitle": "Настройте приложение под себя", + "@tutorialSettingsTitle": { + "description": "Tutorial settings page title" + }, + "tutorialSettingsDesc": "Fine-tune downloads, playback, Library behavior, appearance, and storage.", + "@tutorialSettingsDesc": { + "description": "Tutorial settings page description" + }, + "tutorialSettingsTip1": "Изменить местоположение и организацию папок для скачивания", + "@tutorialSettingsTip1": { + "description": "Tutorial settings tip 1" + }, + "tutorialSettingsTip2": "Set quality, concurrency, filenames, and conversion preferences", + "@tutorialSettingsTip2": { + "description": "Tutorial settings tip 2" + }, + "tutorialSettingsTip3": "Настроить тему и внешний вид приложения", + "@tutorialSettingsTip3": { + "description": "Tutorial settings tip 3" + }, + "tutorialReadyMessage": "You're ready. Select your extensions, then search or paste a supported link.", + "@tutorialReadyMessage": { + "description": "Tutorial completion message" + }, + "libraryForceFullScan": "Полное сканирование", + "@libraryForceFullScan": { + "description": "Button to force a complete rescan of library" + }, + "libraryForceFullScanSubtitle": "Пересканировать все файлы, игнорировать кэш", + "@libraryForceFullScanSubtitle": { + "description": "Subtitle for force full scan button" + }, + "cleanupOrphanedDownloads": "Очистка отложенных скачиваний", + "@cleanupOrphanedDownloads": { + "description": "Button to remove history entries for deleted files" + }, + "cleanupOrphanedDownloadsSubtitle": "Удалить историю записи для файлов, которых больше не существует", + "@cleanupOrphanedDownloadsSubtitle": { + "description": "Subtitle for orphaned cleanup button" + }, + "cleanupOrphanedDownloadsResult": "Удалено {count} утерянных записей из истории", + "@cleanupOrphanedDownloadsResult": { + "description": "Snackbar after orphan cleanup", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "cleanupOrphanedDownloadsNone": "Записей без описания не найдено", + "@cleanupOrphanedDownloadsNone": { + "description": "Snackbar when no orphans found" + }, + "cacheTitle": "Хранилище и кэш", + "@cacheTitle": { + "description": "Cache management page title" + }, + "cacheSummaryTitle": "Просмотр кэша", + "@cacheSummaryTitle": { + "description": "Heading for cache summary card" + }, + "cacheSummarySubtitle": "Очистка кэша не приведет к удалению загруженных музыкальных файлов.", + "@cacheSummarySubtitle": { + "description": "Helper text for cache summary card" + }, + "cacheEstimatedTotal": "Приблизительное использование кэша: {size}", + "@cacheEstimatedTotal": { + "description": "Total cache size shown in summary", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheSectionStorage": "Кэшированные данные", + "@cacheSectionStorage": { + "description": "Section header for cache entries" + }, + "cacheSectionMaintenance": "Обслуживание", + "@cacheSectionMaintenance": { + "description": "Section header for cleanup actions" + }, + "cacheAppDirectory": "Папка кэша приложения", + "@cacheAppDirectory": { + "description": "Cache item title for app cache directory" + }, + "cacheAppDirectoryDesc": "HTTP-ответы, данные WebView и другие временные данные приложения.", + "@cacheAppDirectoryDesc": { + "description": "Description of what app cache directory contains" + }, + "cacheTempDirectory": "Временная директория", + "@cacheTempDirectory": { + "description": "Cache item title for temporary files directory" + }, + "cacheTempDirectoryDesc": "Временные файлы из загрузок и аудио конвертации.", + "@cacheTempDirectoryDesc": { + "description": "Description of what temporary directory contains" + }, + "cacheCoverImage": "Кэш обложек", + "@cacheCoverImage": { + "description": "Cache item title for persistent cover images" + }, + "cacheCoverImageDesc": "Скачанный альбом и трек обложки. Будет заново скачан после просмотра.", + "@cacheCoverImageDesc": { + "description": "Description of what cover image cache contains" + }, + "cacheLibraryCover": "Кэш обложек библиотеки", + "@cacheLibraryCover": { + "description": "Cache item title for local library cover art images" + }, + "cacheLibraryCoverDesc": "Обложка извлечена из локальных музыкальных файлов. Будет повторно извлечено при следующем сканировании.", + "@cacheLibraryCoverDesc": { + "description": "Description of what library cover cache contains" + }, "libraryPlaybackNormalization": "Volume normalization", "@libraryPlaybackNormalization": { "description": "Toggle title for ReplayGain playback normalization in the built-in player" @@ -5928,6 +3056,322 @@ "@cacheAudioAnalysisDesc": { "description": "Description of what audio analysis cache contains" }, + "cacheExploreFeed": "Просмотреть кэш ленты", + "@cacheExploreFeed": { + "description": "Cache item title for explore home feed cache" + }, + "cacheExploreFeedDesc": "Изучите содержимое вкладки (новые релизы, тренды). Они обновятся при следующем посещении.", + "@cacheExploreFeedDesc": { + "description": "Description of what explore feed cache contains" + }, + "cacheTrackLookup": "Отслеживать кэш поиска", + "@cacheTrackLookup": { + "description": "Cache item title for track ID lookup cache" + }, + "cacheTrackLookupDesc": "Поиск ID трека в Spotify/Deezer. Очистка может замедлить следующие несколько поисков.", + "@cacheTrackLookupDesc": { + "description": "Description of what track lookup cache contains" + }, + "cacheCleanupUnusedDesc": "Удалить записи из истории загрузок и библиотеки, которые остались без файлов.", + "@cacheCleanupUnusedDesc": { + "description": "Description of what cleanup unused data does" + }, + "cacheNoData": "Нет кэшированных данных", + "@cacheNoData": { + "description": "Label when cache category has no data" + }, + "cacheSizeWithFiles": "{size} в {count} файлах", + "@cacheSizeWithFiles": { + "description": "Cache size and file count", + "placeholders": { + "size": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "cacheSizeOnly": "{size}", + "@cacheSizeOnly": { + "description": "Cache size only", + "placeholders": { + "size": { + "type": "String" + } + } + }, + "cacheEntries": "{count} записей", + "@cacheEntries": { + "description": "Track cache entry count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "cacheClearSuccess": "Очищено: {target}", + "@cacheClearSuccess": { + "description": "Snackbar after clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } + }, + "cacheClearConfirmTitle": "Очистить кэш?", + "@cacheClearConfirmTitle": { + "description": "Dialog title before clearing one cache category" + }, + "cacheClearConfirmMessage": "Это очистит кэш для {target}. Загруженные музыкальные файлы не будут удалены.", + "@cacheClearConfirmMessage": { + "description": "Dialog message before clearing selected cache", + "placeholders": { + "target": { + "type": "String" + } + } + }, + "cacheClearAllConfirmTitle": "Очистить весь кэш?", + "@cacheClearAllConfirmTitle": { + "description": "Dialog title before clearing all caches" + }, + "cacheClearAllConfirmMessage": "Это очистит все категории кэша на этой странице. Скачанные музыкальные файлы не будут удалены.", + "@cacheClearAllConfirmMessage": { + "description": "Dialog message before clearing all caches" + }, + "cacheClearAll": "Очистить весь кэш", + "@cacheClearAll": { + "description": "Button label to clear all caches" + }, + "cacheCleanupUnused": "Очистка неиспользуемых данных", + "@cacheCleanupUnused": { + "description": "Action title for cleaning unused entries" + }, + "cacheCleanupUnusedSubtitle": "Удалить историю загрузок, оставшихся без просмотра, и отсутствующие записи в библиотеке", + "@cacheCleanupUnusedSubtitle": { + "description": "Subtitle for cleanup unused data action" + }, + "cacheCleanupResult": "Очистка завершена: {downloadCount} потерянных загрузок, {libraryCount} отсутствующих записей в библиотеке", + "@cacheCleanupResult": { + "description": "Snackbar after unused data cleanup", + "placeholders": { + "downloadCount": { + "type": "int" + }, + "libraryCount": { + "type": "int" + } + } + }, + "cacheRefreshStats": "Обновить статистику", + "@cacheRefreshStats": { + "description": "Button label to refresh cache statistics" + }, + "trackSaveCoverArt": "Сохранить обложку", + "@trackSaveCoverArt": { + "description": "Menu action - save album cover art as file" + }, + "trackSaveLyrics": "Сохранить текст (.lrc)", + "@trackSaveLyrics": { + "description": "Menu action - save lyrics as .lrc file" + }, + "trackSaveLyricsProgress": "Сохранение текста...", + "@trackSaveLyricsProgress": { + "description": "Snackbar while saving lyrics to file" + }, + "trackReEnrich": "Обновить", + "@trackReEnrich": { + "description": "Menu action - re-embed metadata into audio file" + }, + "trackReEnrichOnlineSubtitle": "Поиск в сети метаданных и встраивание в файл", + "@trackReEnrichOnlineSubtitle": { + "description": "Subtitle for re-enrich metadata action for local items" + }, + "trackReEnrichFieldCover": "Обложка", + "@trackReEnrichFieldCover": { + "description": "Checkbox label for cover art field in re-enrich" + }, + "trackReEnrichFieldLyrics": "Текст песни", + "@trackReEnrichFieldLyrics": { + "description": "Checkbox label for lyrics field in re-enrich" + }, + "trackReEnrichFieldBasicTags": "Альбом, Исполнитель альбома", + "@trackReEnrichFieldBasicTags": { + "description": "Checkbox label for basic tags in re-enrich (title/artist are never overwritten)" + }, + "trackReEnrichFieldTrackInfo": "Номер трека и диска", + "@trackReEnrichFieldTrackInfo": { + "description": "Checkbox label for track info in re-enrich" + }, + "trackReEnrichFieldReleaseInfo": "Дата и ISRC", + "@trackReEnrichFieldReleaseInfo": { + "description": "Checkbox label for release info in re-enrich" + }, + "trackReEnrichFieldExtra": "Жанр, Название, Авторские права", + "@trackReEnrichFieldExtra": { + "description": "Checkbox label for extra metadata in re-enrich" + }, + "trackReEnrichSelectAll": "Выбрать всё", + "@trackReEnrichSelectAll": { + "description": "Select all fields checkbox in re-enrich" + }, + "trackReEnrichModeIsrc": "ISRC only", + "@trackReEnrichModeIsrc": { + "description": "Batch metadata mode that only writes ISRC" + }, + "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", + "@trackReEnrichModeIsrcSubtitle": { + "description": "Explanation for the ISRC-only batch metadata mode" + }, + "trackReEnrichModeMissing": "Fill missing tags", + "@trackReEnrichModeMissing": { + "description": "Batch metadata mode that fills only empty tags" + }, + "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", + "@trackReEnrichModeMissingSubtitle": { + "description": "Explanation for the fill-missing batch metadata mode" + }, + "trackReEnrichModeReplace": "Update selected tags", + "@trackReEnrichModeReplace": { + "description": "Batch metadata mode that replaces selected tag groups" + }, + "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", + "@trackReEnrichModeReplaceSubtitle": { + "description": "Explanation for the selected-tag batch metadata mode" + }, + "trackReEnrichFieldsTitle": "Tags to update", + "@trackReEnrichFieldsTitle": { + "description": "Heading above batch re-enrich field checkboxes" + }, + "trackReEnrichReview": "Review changes", + "@trackReEnrichReview": { + "description": "Button that searches metadata and opens the batch change review" + }, + "trackReEnrichReviewTitle": "Review metadata changes", + "@trackReEnrichReviewTitle": { + "description": "Title of the batch metadata review sheet" + }, + "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", + "@trackReEnrichReviewSubtitle": { + "description": "Summary shown above proposed batch metadata changes", + "placeholders": { + "changeCount": { + "type": "int" + }, + "trackCount": { + "type": "int" + } + } + }, + "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", + "@trackReEnrichNoChanges": { + "description": "Message when batch metadata preview has no proposed changes" + }, + "trackReEnrichApplyChanges": "Apply changes", + "@trackReEnrichApplyChanges": { + "description": "Confirmation button in the batch metadata review sheet" + }, + "trackReEnrichRefreshOnline": "Refresh from online", + "@trackReEnrichRefreshOnline": { + "description": "Proposed value when lyrics will be refreshed during re-enrich" + }, + "trackEditMetadata": "Редактировать метаданные", + "@trackEditMetadata": { + "description": "Menu action - edit embedded metadata" + }, + "trackCoverSaved": "Обложка сохранена в {fileName}", + "@trackCoverSaved": { + "description": "Snackbar after cover art saved", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "trackCoverNoSource": "Нет доступных источников обложки", + "@trackCoverNoSource": { + "description": "Snackbar when no cover art URL or embedded cover" + }, + "trackLyricsSaved": "Текст песни сохранен в {fileName}", + "@trackLyricsSaved": { + "description": "Snackbar after lyrics saved", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "trackReEnrichProgress": "Обновление метаданных...", + "@trackReEnrichProgress": { + "description": "Snackbar while re-enriching metadata" + }, + "trackReEnrichSearching": "Поиск метаданных в сети...", + "@trackReEnrichSearching": { + "description": "Snackbar while searching metadata from internet for local items" + }, + "trackReEnrichSuccess": "Метаданные успешно обновлены", + "@trackReEnrichSuccess": { + "description": "Snackbar after successful re-enrichment" + }, + "trackReEnrichFfmpegFailed": "Ошибка встраивания метаданных FFmpeg", + "@trackReEnrichFfmpegFailed": { + "description": "Snackbar when FFmpeg embed fails for MP3/Opus" + }, + "queueFlacAction": "Очередь FLAC", + "@queueFlacAction": { + "description": "Action/button label for queueing FLAC redownloads for local tracks" + }, + "queueFlacConfirmMessage": "Search online matches for the selected tracks and queue FLAC downloads.\n\nExisting files will not be modified or deleted.\n\nOnly high-confidence matches are queued automatically.\n\n{count} selected", + "@queueFlacConfirmMessage": { + "description": "Confirmation dialog body before queueing FLAC redownloads for local tracks", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueFlacNoReliableMatches": "No reliable online matches found for the selection", + "@queueFlacNoReliableMatches": { + "description": "Snackbar when no safe FLAC redownload matches were found" + }, + "queueFlacQueuedWithSkipped": "Added {addedCount} tracks to queue, skipped {skippedCount}", + "@queueFlacQueuedWithSkipped": { + "description": "Snackbar when some selected local tracks were queued for FLAC redownload and some were skipped", + "placeholders": { + "addedCount": { + "type": "int" + }, + "skippedCount": { + "type": "int" + } + } + }, + "trackSaveFailed": "Ошибка: {error}", + "@trackSaveFailed": { + "description": "Snackbar when save operation fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "trackConvertFormat": "Переконвертировать формат", + "@trackConvertFormat": { + "description": "Menu item - convert audio format" + }, + "trackConvertTitle": "Конвертировать аудио", + "@trackConvertTitle": { + "description": "Title of convert bottom sheet" + }, + "trackConvertTargetFormat": "Целевой формат", + "@trackConvertTargetFormat": { + "description": "Label for format selection" + }, + "trackConvertBitrate": "Битрейт", + "@trackConvertBitrate": { + "description": "Label for bitrate selection" + }, "trackConvertKeepOriginal": "Keep original file", "@trackConvertKeepOriginal": { "description": "Toggle to preserve the source file during conversion" @@ -5936,6 +3380,37 @@ "@trackConvertKeepOriginalDescription": { "description": "Description for preserving the source file during conversion" }, + "trackConvertConfirmTitle": "Подтвердить конвертацию", + "@trackConvertConfirmTitle": { + "description": "Confirmation dialog title" + }, + "trackConvertConfirmMessage": "Конвертировать из {sourceFormat} в {targetFormat} {bitrate}?\n\nОригинальный файл будет удален после конвертации.", + "@trackConvertConfirmMessage": { + "description": "Confirmation dialog message", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLossless": "Конвертировать {sourceFormat} в {targetFormat}? (Lossless — Без потери качества)\n\nОригинальные файлы будут удалены после конвертации.", + "@trackConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless-to-lossless conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + } + } + }, "trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.", "@trackConvertConfirmKeepOriginal": { "description": "Confirmation message when the source file will be preserved", @@ -5948,6 +3423,382 @@ } } }, + "trackConvertLosslessHint": "Конвертация без потери качества", + "@trackConvertLosslessHint": { + "description": "Hint shown when converting between lossless formats" + }, + "trackConvertConverting": "Конвертация аудио...", + "@trackConvertConverting": { + "description": "Snackbar while converting" + }, + "trackConvertSuccess": "Успешно конвертировано в {format}", + "@trackConvertSuccess": { + "description": "Snackbar after successful conversion", + "placeholders": { + "format": { + "type": "String" + } + } + }, + "trackConvertFailed": "Ошибка конвертации", + "@trackConvertFailed": { + "description": "Snackbar when conversion fails" + }, + "cueSplitTitle": "Разделить CUE Sheet", + "@cueSplitTitle": { + "description": "Title for CUE split bottom sheet" + }, + "cueSplitAlbum": "Альбом: {album}", + "@cueSplitAlbum": { + "description": "Album name in CUE split sheet", + "placeholders": { + "album": { + "type": "String" + } + } + }, + "cueSplitArtist": "Артист: {artist}", + "@cueSplitArtist": { + "description": "Artist name in CUE split sheet", + "placeholders": { + "artist": { + "type": "String" + } + } + }, + "cueSplitTrackCount": "{count} треков", + "@cueSplitTrackCount": { + "description": "Number of tracks in CUE sheet", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "cueSplitConfirmTitle": "Разделенный CUE-альбом", + "@cueSplitConfirmTitle": { + "description": "CUE split confirmation dialog title" + }, + "cueSplitConfirmMessage": "Разбить \"{album}\" на {count} отдельных FLAC-файлов?", + "@cueSplitConfirmMessage": { + "description": "CUE split confirmation dialog message", + "placeholders": { + "album": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "cueSplitSplitting": "Разделение CUE sheet... ({current}/{total})", + "@cueSplitSplitting": { + "description": "Snackbar while splitting CUE", + "placeholders": { + "current": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "cueSplitSuccess": "Успешно разделено на {count} треков", + "@cueSplitSuccess": { + "description": "Snackbar after successful CUE split", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "cueSplitFailed": "Разделение CUE не удалось", + "@cueSplitFailed": { + "description": "Snackbar when CUE split fails" + }, + "cueSplitNoAudioFile": "Аудиофайл для этого CUE sheet не найден", + "@cueSplitNoAudioFile": { + "description": "Error when CUE audio file is missing" + }, + "cueSplitButton": "Разделить на Треки", + "@cueSplitButton": { + "description": "Button text to start CUE splitting" + }, + "actionCreate": "Создать", + "@actionCreate": { + "description": "Generic action button - create" + }, + "collectionFoldersTitle": "Мои папки", + "@collectionFoldersTitle": { + "description": "Library section title for custom folders" + }, + "collectionWishlist": "Список желаемого", + "@collectionWishlist": { + "description": "Custom folder for saved tracks to download later" + }, + "collectionLoved": "Любимые", + "@collectionLoved": { + "description": "Custom folder for favorite tracks" + }, + "collectionFavoriteArtists": "Избранный исполнитель", + "@collectionFavoriteArtists": { + "description": "Custom folder for favorite artists" + }, + "collectionPlaylist": "Плейлист", + "@collectionPlaylist": { + "description": "Single playlist label" + }, + "collectionAddToPlaylist": "Добавить в плейлист", + "@collectionAddToPlaylist": { + "description": "Action to add a track to user playlist" + }, + "collectionCreatePlaylist": "Создать плейлист", + "@collectionCreatePlaylist": { + "description": "Action to create a new playlist" + }, + "collectionNoPlaylistsYet": "Плейлисты отсутствуют", + "@collectionNoPlaylistsYet": { + "description": "Empty state title when user has no playlists" + }, + "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", + "@collectionPlaylistTracks": { + "description": "Track count label for custom playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "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", + "placeholders": { + "playlistName": { + "type": "String" + } + } + }, + "collectionAlreadyInPlaylist": "Уже в \"{playlistName}\"", + "@collectionAlreadyInPlaylist": { + "description": "Snackbar when track already exists in playlist", + "placeholders": { + "playlistName": { + "type": "String" + } + } + }, + "collectionPlaylistNameHint": "Название плейлиста", + "@collectionPlaylistNameHint": { + "description": "Hint text for playlist name input" + }, + "collectionPlaylistNameRequired": "Имя плейлиста обязательно", + "@collectionPlaylistNameRequired": { + "description": "Validation error for empty playlist name" + }, + "collectionRenamePlaylist": "Переименовать плейлист", + "@collectionRenamePlaylist": { + "description": "Action to rename playlist" + }, + "collectionDeletePlaylist": "Удалить плейлист", + "@collectionDeletePlaylist": { + "description": "Action to delete playlist" + }, + "collectionPlaylistRenamed": "Плейлист переименован", + "@collectionPlaylistRenamed": { + "description": "Snackbar after renaming playlist" + }, + "collectionWishlistEmptyTitle": "Список желаний пуст", + "@collectionWishlistEmptyTitle": { + "description": "Wishlist empty state title" + }, + "collectionWishlistEmptySubtitle": "Нажмите + на треках, чтобы сохранить то, что вы хотите скачать позже", + "@collectionWishlistEmptySubtitle": { + "description": "Wishlist empty state subtitle" + }, + "collectionLovedEmptyTitle": "Папка Любимые пуста", + "@collectionLovedEmptyTitle": { + "description": "Loved empty state title" + }, + "collectionLovedEmptySubtitle": "Нажмите \"любовь\" на треках, чтобы сохранить ваши избранные", + "@collectionLovedEmptySubtitle": { + "description": "Loved empty state subtitle" + }, + "collectionFavoriteArtistsEmptyTitle": "Нет избранных исполнителей", + "@collectionFavoriteArtistsEmptyTitle": { + "description": "Favorite artists empty state title" + }, + "collectionFavoriteArtistsEmptySubtitle": "Нажмите на сердце на странице исполнителя, чтобы сохранить его здесь", + "@collectionFavoriteArtistsEmptySubtitle": { + "description": "Favorite artists empty state subtitle" + }, + "collectionPlaylistEmptyTitle": "Плейлист пуст", + "@collectionPlaylistEmptyTitle": { + "description": "Playlist empty state title" + }, + "collectionPlaylistEmptySubtitle": "Удерживайте + на любом треке, чтобы добавить его сюда", + "@collectionPlaylistEmptySubtitle": { + "description": "Playlist empty state subtitle" + }, + "collectionRemoveFromPlaylist": "Удалить из плейлиста", + "@collectionRemoveFromPlaylist": { + "description": "Tooltip for removing track from playlist" + }, + "collectionRemoveFromFolder": "Убрать из папки", + "@collectionRemoveFromFolder": { + "description": "Tooltip for removing track from wishlist/loved folder" + }, + "collectionAddedToLoved": "\"{trackName}\" добавлен в Любимые", + "@collectionAddedToLoved": { + "description": "Snackbar after adding track to loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } + }, + "collectionRemovedFromLoved": "\"{trackName}\" удалено из Любимых", + "@collectionRemovedFromLoved": { + "description": "Snackbar after removing track from loved folder", + "placeholders": { + "trackName": { + "type": "String" + } + } + }, + "collectionAddedToWishlist": "\"{trackName}\" добавлен в список желаний", + "@collectionAddedToWishlist": { + "description": "Snackbar after adding track to wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } + }, + "collectionRemovedFromWishlist": "\"{trackName}\" удалён из списка желаний", + "@collectionRemovedFromWishlist": { + "description": "Snackbar after removing track from wishlist", + "placeholders": { + "trackName": { + "type": "String" + } + } + }, + "collectionAddedToFavoriteArtists": "\"{artistName}\" добавлен в избранные исполнители", + "@collectionAddedToFavoriteArtists": { + "description": "Snackbar after adding artist to favorite artists", + "placeholders": { + "artistName": { + "type": "String" + } + } + }, + "collectionRemovedFromFavoriteArtists": "\"{artistName}\" удалено из избранных исполнителей", + "@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" + }, + "trackOptionRemoveFromLoved": "Исключить из Любимых", + "@trackOptionRemoveFromLoved": { + "description": "Bottom sheet action label - remove track from loved folder" + }, + "trackOptionAddToWishlist": "Добавить в список желаний", + "@trackOptionAddToWishlist": { + "description": "Bottom sheet action label - add track to wishlist" + }, + "trackOptionRemoveFromWishlist": "Удалить из списка желаний", + "@trackOptionRemoveFromWishlist": { + "description": "Bottom sheet action label - remove track from wishlist" + }, + "artistOptionAddToFavorites": "Добавить в избранные исполнители", + "@artistOptionAddToFavorites": { + "description": "Action label - add artist to favorite artists" + }, + "artistOptionRemoveFromFavorites": "Удалить из избранных исполнителей", + "@artistOptionRemoveFromFavorites": { + "description": "Action label - remove artist from favorite artists" + }, + "collectionPlaylistChangeCover": "Изменить обложку", + "@collectionPlaylistChangeCover": { + "description": "Bottom sheet action to pick a custom cover image for a playlist" + }, + "collectionPlaylistRemoveCover": "Удалить обложку", + "@collectionPlaylistRemoveCover": { + "description": "Bottom sheet action to remove custom cover image from a playlist" + }, + "selectionShareCount": "Отправить {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", + "@selectionShareCount": { + "description": "Share button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "selectionShareNoFiles": "Файлы, доступные для совместного доступа, не найдены", + "@selectionShareNoFiles": { + "description": "Snackbar when no selected files exist on disk" + }, + "selectionConvertCount": "Конвертировать {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}}", + "@selectionConvertCount": { + "description": "Convert button text with count in selection mode", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "selectionConvertNoConvertible": "Не выбраны конвертируемые треки", + "@selectionConvertNoConvertible": { + "description": "Snackbar when no selected tracks support conversion" + }, + "selectionBatchConvertConfirmTitle": "Пакетная конвертация", + "@selectionBatchConvertConfirmTitle": { + "description": "Confirmation dialog title for batch conversion" + }, + "selectionBatchConvertConfirmMessage": "Преобразовать {count} {count, plural, =1{track} other{tracks}} в {format} с {bitrate}?", + "@selectionBatchConvertConfirmMessage": { + "description": "Confirmation dialog message for batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLossless": "Конвертировать {count} {count, plural, =1{track} other{tracks}} в {format}? (Без потери качества)\n\nОригинальные файлы будут удалены после конвертации.", + "@selectionBatchConvertConfirmMessageLossless": { + "description": "Confirmation dialog message for lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + } + } + }, "selectionBatchConvertConfirmKeepOriginal": "Конвертировать {count} {count, plural, one {трек} few {трека} many {треков} =1{трек} other{треков}} в {format}?\n\nОригинальные файлы будут храниться и преобразовываться как отдельные элементы библиотеки.", "@selectionBatchConvertConfirmKeepOriginal": { "description": "Batch conversion confirmation when source files will be preserved", @@ -5960,6 +3811,387 @@ } } }, + "selectionBatchConvertSuccess": "Конвертировано {success} треков {total} в {format}", + "@selectionBatchConvertSuccess": { + "description": "Snackbar after batch conversion completes", + "placeholders": { + "success": { + "type": "int" + }, + "total": { + "type": "int" + }, + "format": { + "type": "String" + } + } + }, + "downloadedAlbumDownloadedCount": "{count} скачано", + "@downloadedAlbumDownloadedCount": { + "description": "Downloaded tracks count badge", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadUseAlbumArtistForFoldersAlbumSubtitle": "Папка названная в честь тега Альбома Артиста", + "@downloadUseAlbumArtistForFoldersAlbumSubtitle": { + "description": "Subtitle when album artist is used for folder names" + }, + "downloadUseAlbumArtistForFoldersTrackSubtitle": "Папка названная в честь тега Трека Артиста", + "@downloadUseAlbumArtistForFoldersTrackSubtitle": { + "description": "Subtitle when track artist is used for folder names" + }, + "lyricsProvidersTitle": "Приоритет к поставщику текста песни", + "@lyricsProvidersTitle": { + "description": "Settings item title for lyrics provider order" + }, + "lyricsProvidersDescription": "Включайте, выключайте, переупорядочивайте источники текстов. Поставщики связаны сверху вниз пока проводится поиск текста.", + "@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": { + "description": "Info tip on lyrics provider priority page" + }, + "lyricsProvidersEnabledSection": "Включено ({count})", + "@lyricsProvidersEnabledSection": { + "description": "Section header for enabled providers", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "lyricsProvidersDisabledSection": "Выключено ({count})", + "@lyricsProvidersDisabledSection": { + "description": "Section header for disabled providers", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "lyricsProvidersAtLeastOne": "По крайней мере один провайдер должен оставаться включенным", + "@lyricsProvidersAtLeastOne": { + "description": "Snackbar when user tries to disable the last enabled provider" + }, + "lyricsProvidersSaved": "Приоритетный провайдер текстов песен сохранен", + "@lyricsProvidersSaved": { + "description": "Snackbar after saving lyrics provider priority" + }, + "lyricsProvidersDiscardContent": "У вас есть несохранённые изменения, которые будут потеряны.", + "@lyricsProvidersDiscardContent": { + "description": "Body text of the discard-changes dialog on lyrics provider page" + }, + "lyricsProviderLrclibDesc": "Open-source synced lyrics database", + "@lyricsProviderLrclibDesc": { + "description": "Description for LRCLIB provider" + }, + "lyricsProviderNeteaseDesc": "NetEase Cloud Music (хорош для азиатских песен)", + "@lyricsProviderNeteaseDesc": { + "description": "Description for Netease provider" + }, + "lyricsProviderMusixmatchDesc": "Крупнейшая база данных текстов песен (мультиязычная)", + "@lyricsProviderMusixmatchDesc": { + "description": "Description for Musixmatch provider" + }, + "lyricsProviderAppleMusicDesc": "Word-by-word synced lyrics (via proxy)", + "@lyricsProviderAppleMusicDesc": { + "description": "Description for Apple Music provider" + }, + "lyricsProviderQqMusicDesc": "QQ Music (good for Chinese songs, direct API)", + "@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" + }, + "safMigrationTitle": "Storage Update Required", + "@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": { + "description": "First paragraph of SAF migration dialog" + }, + "safMigrationMessage2": "Please select your download folder again to switch to the new storage system.", + "@safMigrationMessage2": { + "description": "Second paragraph of SAF migration dialog" + }, + "safMigrationSuccess": "Download folder updated to SAF mode", + "@safMigrationSuccess": { + "description": "Snackbar after successfully migrating to SAF" + }, + "settingsDonate": "Support Development", + "@settingsDonate": { + "description": "Settings menu item - donate page" + }, + "settingsDonateSubtitle": "Buy the developer a coffee", + "@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" + }, + "backupCreated": "Backup created", + "@backupCreated": { + "description": "Snackbar after a backup file is created" + }, + "backupCreateFailed": "Failed to create backup", + "@backupCreateFailed": { + "description": "Snackbar when backup creation fails" + }, + "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" + }, + "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 repo.", + "@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" + }, + "tooltipAddToPlaylist": "Добавить в плейлист", + "@tooltipAddToPlaylist": { + "description": "Tooltip for the Add to Playlist button" + }, + "snackbarRemovedTracksFromLoved": "Removed {count} tracks from Loved", + "@snackbarRemovedTracksFromLoved": { + "description": "Snackbar after removing multiple tracks from Loved folder", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "snackbarAddedTracksToLoved": "Added {count} tracks to Loved", + "@snackbarAddedTracksToLoved": { + "description": "Snackbar after adding multiple tracks to Loved folder", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "dialogDownloadAllTitle": "Скачать всё", + "@dialogDownloadAllTitle": { + "description": "Dialog title for bulk download confirmation" + }, + "dialogDownloadAllMessage": "Download {count} tracks?", + "@dialogDownloadAllMessage": { + "description": "Body of the Download All confirmation dialog", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "homeSkipAlreadyDownloaded": "Skip already downloaded songs", + "@homeSkipAlreadyDownloaded": { + "description": "Checkbox label in import dialog to skip already-downloaded songs" + }, + "homeGoToAlbum": "Перейти к альбому", + "@homeGoToAlbum": { + "description": "Context menu item to navigate to the album page" + }, + "homeAlbumInfoUnavailable": "Album info not available", + "@homeAlbumInfoUnavailable": { + "description": "Snackbar when album info cannot be loaded" + }, + "snackbarLoadingCueSheet": "Загрузка CUE разметки...", + "@snackbarLoadingCueSheet": { + "description": "Snackbar while loading a CUE sheet file" + }, + "snackbarMetadataSaved": "Метаданные успешно сохранены", + "@snackbarMetadataSaved": { + "description": "Snackbar after successfully saving track metadata" + }, + "snackbarFailedToEmbedLyrics": "Failed to embed lyrics", + "@snackbarFailedToEmbedLyrics": { + "description": "Snackbar when lyrics embedding fails" + }, + "snackbarFailedToWriteStorage": "Failed to write back to storage", + "@snackbarFailedToWriteStorage": { + "description": "Snackbar when writing metadata back to file fails" + }, + "snackbarError": "Ошибка: {error}", + "@snackbarError": { + "description": "Generic error snackbar with error detail", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "snackbarNoActionDefined": "No action defined for this button", + "@snackbarNoActionDefined": { + "description": "Snackbar when an extension button has no action configured" + }, + "noTracksFoundForAlbum": "No tracks found for this album", + "@noTracksFoundForAlbum": { + "description": "Empty state message when an album has no tracks" + }, + "downloadLocationSubtitle": "Choose where to save your downloaded tracks", + "@downloadLocationSubtitle": { + "description": "Subtitle shown in the download location picker sheet" + }, + "storageModeAppFolder": "App Folder (Recommended)", + "@storageModeAppFolder": { + "description": "Storage mode option - app-managed folder" + }, + "storageModeAppFolderSubtitle": "Saves to Music/SpotiFLAC by default", + "@storageModeAppFolderSubtitle": { + "description": "Subtitle for app folder storage mode" + }, + "storageModeSaf": "Custom Folder (SAF)", + "@storageModeSaf": { + "description": "Storage mode option - Storage Access Framework" + }, + "storageModeSafSubtitle": "Pick any folder, including SD card", + "@storageModeSafSubtitle": { + "description": "Subtitle for SAF storage mode" + }, "downloadFolderAccessLostTitle": "Download folder access lost", "@downloadFolderAccessLostTitle": { "description": "Title of the warning banner shown in Files settings when the saved SAF folder grant is no longer valid" @@ -5980,6 +4212,687 @@ "@downloadErrorFolderAccessLost": { "description": "Error shown on downloads that failed because the iOS download folder bookmark could not be opened" }, + "downloadFilenameDescription": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.", + "@downloadFilenameDescription": { + "description": "Description shown in filename format editor" + }, + "downloadFilenameInsertTag": "Нажмите для вставки тега:", + "@downloadFilenameInsertTag": { + "description": "Label above filename tag chips" + }, + "downloadSeparateSinglesEnabled": "Singles and EPs saved in a separate folder", + "@downloadSeparateSinglesEnabled": { + "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 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", + "@downloadSongLinkRegion": { + "description": "Setting for SongLink region used during fallback resolution" + }, + "downloadNetworkCompatibilityMode": "Network Compatibility Mode", + "@downloadNetworkCompatibilityMode": { + "description": "Setting for legacy TLS/network handling" + }, + "downloadNetworkCompatibilityModeEnabled": "Allowing legacy HTTP endpoints; TLS verification remains enabled", + "@downloadNetworkCompatibilityModeEnabled": { + "description": "Subtitle when network compatibility mode is on" + }, + "downloadNetworkCompatibilityModeDisabled": "Using standard network settings", + "@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" + }, + "downloadEmbedLyricsDisabled": "Enable metadata embedding first", + "@downloadEmbedLyricsDisabled": { + "description": "Subtitle when lyrics embedding is blocked by metadata toggle" + }, + "downloadNeteaseIncludeTranslation": "Netease: включение перевода", + "@downloadNeteaseIncludeTranslation": { + "description": "Setting to include translated lyrics from Netease" + }, + "downloadNeteaseIncludeTranslationEnabled": "Chinese translation lines included", + "@downloadNeteaseIncludeTranslationEnabled": { + "description": "Subtitle when Netease translation is on" + }, + "downloadNeteaseIncludeTranslationDisabled": "Original lyrics only", + "@downloadNeteaseIncludeTranslationDisabled": { + "description": "Subtitle when Netease translation is off" + }, + "downloadNeteaseIncludeRomanization": "Netease: Include Romanization", + "@downloadNeteaseIncludeRomanization": { + "description": "Setting to include romanized lyrics from Netease" + }, + "downloadNeteaseIncludeRomanizationEnabled": "Romanization lines included", + "@downloadNeteaseIncludeRomanizationEnabled": { + "description": "Subtitle when Netease romanization is on" + }, + "downloadNeteaseIncludeRomanizationDisabled": "No romanization", + "@downloadNeteaseIncludeRomanizationDisabled": { + "description": "Subtitle when Netease romanization is off" + }, + "downloadAppleQqMultiPerson": "Apple / QQ: Multi-Person Lyrics", + "@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": { + "description": "Subtitle when multi-person lyrics is on" + }, + "downloadAppleQqMultiPersonDisabled": "Standard lyrics without speaker labels", + "@downloadAppleQqMultiPersonDisabled": { + "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 for Musixmatch lyrics translation language" + }, + "downloadMusixmatchLanguageAuto": "Auto (original language)", + "@downloadMusixmatchLanguageAuto": { + "description": "Subtitle when no language is set" + }, + "downloadFilterContributing": "Filter Contributing Artists", + "@downloadFilterContributing": { + "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 on" + }, + "downloadFilterContributingDisabled": "Full Album Artist string used", + "@downloadFilterContributingDisabled": { + "description": "Subtitle when contributing artist filter is off" + }, + "downloadProvidersNoneEnabled": "No providers enabled", + "@downloadProvidersNoneEnabled": { + "description": "Shown when no lyrics providers are active" + }, + "downloadMusixmatchLanguageCode": "Код языка", + "@downloadMusixmatchLanguageCode": { + "description": "Label for Musixmatch language input field" + }, + "downloadMusixmatchLanguageHint": "e.g. en, de, ja", + "@downloadMusixmatchLanguageHint": { + "description": "Placeholder for Musixmatch language input" + }, + "downloadMusixmatchLanguageDesc": "Enter a BCP-47 language code (e.g. en, de, ja) to request translated lyrics from Musixmatch.", + "@downloadMusixmatchLanguageDesc": { + "description": "Description in Musixmatch language picker" + }, + "downloadMusixmatchAuto": "Авто", + "@downloadMusixmatchAuto": { + "description": "Button to clear Musixmatch language (use auto)" + }, + "downloadNetworkAnySubtitle": "Use WiFi or mobile data", + "@downloadNetworkAnySubtitle": { + "description": "Subtitle for any-network option in picker" + }, + "downloadNetworkWifiOnlySubtitle": "Downloads pause when on mobile data", + "@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": { + "description": "Description in SongLink region picker" + }, + "snackbarUnsupportedAudioFormat": "Неподдерживаемый аудио формат", + "@snackbarUnsupportedAudioFormat": { + "description": "Snackbar when the audio format is not supported for the requested operation" + }, + "cacheRefresh": "Обновить", + "@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": { + "description": "Dialog message for bulk playlist download confirmation", + "placeholders": { + "trackCount": { + "type": "int" + }, + "playlistCount": { + "type": "int" + } + } + }, + "bulkDownloadPlaylistsButton": "Download {count} {count, plural, =1{playlist} other{playlists}}", + "@bulkDownloadPlaylistsButton": { + "description": "Button label for bulk downloading selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "bulkDownloadSelectPlaylists": "Select playlists to download", + "@bulkDownloadSelectPlaylists": { + "description": "Button label when no playlists are selected for download" + }, + "snackbarSelectedPlaylistsEmpty": "Selected playlists have no tracks", + "@snackbarSelectedPlaylistsEmpty": { + "description": "Snackbar when selected playlists contain no tracks" + }, + "playlistsCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@playlistsCount": { + "description": "Playlist count display", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "editMetadataAutoFill": "Auto-fill from online", + "@editMetadataAutoFill": { + "description": "Section title for selective online metadata auto-fill in the edit metadata sheet" + }, + "editMetadataAutoFillDesc": "Choose a metadata extension, select fields, then review its data before applying", + "@editMetadataAutoFillDesc": { + "description": "Description for the auto-fill section" + }, + "editMetadataAutoFillSource": "Metadata source", + "@editMetadataAutoFillSource": { + "description": "Label for the metadata extension selector in online auto-fill" + }, + "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", + "@editMetadataAutoFillSourceAutomatic": { + "description": "Automatic source option that follows configured metadata provider priority" + }, + "editMetadataAutoFillFind": "Find metadata", + "@editMetadataAutoFillFind": { + "description": "Button label for finding an online metadata candidate" + }, + "editMetadataAutoFillPreview": "Data from {source}", + "@editMetadataAutoFillPreview": { + "description": "Title for the online metadata preview", + "placeholders": { + "source": { + "type": "String" + } + } + }, + "editMetadataAutoFillCoverAvailable": "Cover artwork available", + "@editMetadataAutoFillCoverAvailable": { + "description": "Preview value when the selected metadata source provides cover artwork" + }, + "editMetadataAutoFillApply": "Apply selected data", + "@editMetadataAutoFillApply": { + "description": "Button label for applying the previewed metadata" + }, + "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", + "@editMetadataAutoFillDoneFromSource": { + "description": "Snackbar confirming fields applied from a selected metadata source", + "placeholders": { + "count": { + "type": "int" + }, + "source": { + "type": "String" + } + } + }, + "editMetadataAutoFillFetch": "Получить и заполнить", + "@editMetadataAutoFillFetch": { + "description": "Button label to fetch online metadata and fill selected fields" + }, + "editMetadataAutoFillSearching": "Поиск в сети...", + "@editMetadataAutoFillSearching": { + "description": "Snackbar shown while searching for online metadata" + }, + "editMetadataAutoFillNoResults": "No matching metadata found online", + "@editMetadataAutoFillNoResults": { + "description": "Snackbar when online metadata search returns no results" + }, + "editMetadataAutoFillDone": "Filled {count} {count, plural, =1{field} other{fields}} from online metadata", + "@editMetadataAutoFillDone": { + "description": "Snackbar confirming how many fields were auto-filled", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "editMetadataAutoFillNoneSelected": "Select at least one field to auto-fill", + "@editMetadataAutoFillNoneSelected": { + "description": "Snackbar when user taps Fetch without selecting any fields" + }, + "editMetadataFieldTitle": "Название", + "@editMetadataFieldTitle": { + "description": "Chip label for title field in auto-fill selector" + }, + "editMetadataFieldArtist": "Исполнитель", + "@editMetadataFieldArtist": { + "description": "Chip label for artist field in auto-fill selector" + }, + "editMetadataFieldAlbum": "Альбом", + "@editMetadataFieldAlbum": { + "description": "Chip label for album field in auto-fill selector" + }, + "editMetadataFieldAlbumArtist": "Исполнитель альбома", + "@editMetadataFieldAlbumArtist": { + "description": "Chip label for album artist field in auto-fill selector" + }, + "editMetadataFieldDate": "Дата", + "@editMetadataFieldDate": { + "description": "Chip label for date field in auto-fill selector" + }, + "editMetadataFieldTrackNum": "Трек #", + "@editMetadataFieldTrackNum": { + "description": "Chip label for track number field in auto-fill selector" + }, + "editMetadataFieldDiscNum": "Диск #", + "@editMetadataFieldDiscNum": { + "description": "Chip label for disc number field in auto-fill selector" + }, + "editMetadataFieldGenre": "Жанр", + "@editMetadataFieldGenre": { + "description": "Chip label for genre field in auto-fill selector" + }, + "editMetadataFieldIsrc": "ISRC", + "@editMetadataFieldIsrc": { + "description": "Chip label for ISRC field in auto-fill selector" + }, + "editMetadataFieldLabel": "Заголовок", + "@editMetadataFieldLabel": { + "description": "Chip label for label field in auto-fill selector" + }, + "editMetadataFieldCopyright": "Авторские права", + "@editMetadataFieldCopyright": { + "description": "Chip label for copyright field in auto-fill selector" + }, + "editMetadataFieldCover": "Обложка", + "@editMetadataFieldCover": { + "description": "Chip label for cover art field in auto-fill selector" + }, + "editMetadataSelectAll": "Все", + "@editMetadataSelectAll": { + "description": "Button to select all fields for auto-fill" + }, + "editMetadataSelectEmpty": "Только пустые", + "@editMetadataSelectEmpty": { + "description": "Button to select only fields that are currently empty" + }, + "queueDownloadingCount": "Скачивание ({count})", + "@queueDownloadingCount": { + "description": "Header for active downloads section with count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueFilteringIndicator": "Фильтрация...", + "@queueFilteringIndicator": { + "description": "Shown while filter results are being computed" + }, + "queueTrackCount": "{count, plural, =1{1 track} other{{count} tracks}}", + "@queueTrackCount": { + "description": "Track count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueAlbumCount": "{count, plural, =1{1 album} other{{count} albums}}", + "@queueAlbumCount": { + "description": "Album count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueEmptyAlbums": "No album downloads", + "@queueEmptyAlbums": { + "description": "Empty state title when no album downloads exist" + }, + "queueEmptyAlbumsSubtitle": "Download multiple tracks from an album to see them here", + "@queueEmptyAlbumsSubtitle": { + "description": "Empty state subtitle for album downloads" + }, + "queueEmptySingles": "No single downloads", + "@queueEmptySingles": { + "description": "Empty state title when no single track downloads exist" + }, + "queueEmptySinglesSubtitle": "Single track downloads will appear here", + "@queueEmptySinglesSubtitle": { + "description": "Empty state subtitle for single track downloads" + }, + "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", + "@queuePlaylistCount": { + "description": "Playlist count label with plural support", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", + "@queueEmptyPlaylistsSubtitle": { + "description": "Empty state subtitle for the playlists library view" + }, + "libraryDefaultView": "Default view", + "@libraryDefaultView": { + "description": "Setting title - which library view opens when switching to the Library tab" + }, + "libraryDefaultViewLastUsed": "Last used", + "@libraryDefaultViewLastUsed": { + "description": "Default view option - keep the last used library view" + }, + "queueEmptyHistory": "Нет истории скачиваний", + "@queueEmptyHistory": { + "description": "Empty state title when download history is empty" + }, + "queueEmptyHistorySubtitle": "Скачанные треки появятся здесь", + "@queueEmptyHistorySubtitle": { + "description": "Empty state subtitle for download history" + }, + "selectionAllPlaylistsSelected": "Выбраны все плейлисты", + "@selectionAllPlaylistsSelected": { + "description": "Shown when all playlists are selected in selection mode" + }, + "selectionTapPlaylistsToSelect": "Tap playlists to select", + "@selectionTapPlaylistsToSelect": { + "description": "Hint shown in playlist selection mode" + }, + "selectionSelectPlaylistsToDelete": "Select playlists to delete", + "@selectionSelectPlaylistsToDelete": { + "description": "Hint shown when no playlists are selected for deletion" + }, + "audioAnalysisTitle": "Audio Quality Analysis", + "@audioAnalysisTitle": { + "description": "Title for audio analysis section" + }, + "audioAnalysisDescription": "Verify lossless quality with spectrum analysis", + "@audioAnalysisDescription": { + "description": "Description for audio analysis tap-to-analyze prompt" + }, + "audioAnalysisAnalyzing": "Analyzing audio...", + "@audioAnalysisAnalyzing": { + "description": "Loading text while analyzing audio" + }, + "audioAnalysisSampleRate": "Частота дискретизации", + "@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" + }, + "audioAnalysisChannels": "Каналы", + "@audioAnalysisChannels": { + "description": "Channels metric label" + }, + "audioAnalysisDuration": "Продолжительность", + "@audioAnalysisDuration": { + "description": "Duration metric label" + }, + "audioAnalysisNyquist": "Nyquist", + "@audioAnalysisNyquist": { + "description": "Nyquist frequency metric label" + }, + "audioAnalysisFileSize": "Размер", + "@audioAnalysisFileSize": { + "description": "File size metric label" + }, + "audioAnalysisDynamicRange": "Динамический диапазон", + "@audioAnalysisDynamicRange": { + "description": "Dynamic range metric label" + }, + "audioAnalysisPeak": "Peak", + "@audioAnalysisPeak": { + "description": "Peak amplitude metric label" + }, + "audioAnalysisRms": "RMS", + "@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" + }, + "audioAnalysisCutoffNotDetected": "Not detected", + "@audioAnalysisCutoffNotDetected": { + "description": "Displayed when no reliable broadband spectral cutoff can be detected" + }, + "audioAnalysisChannelStats": "Per-channel Stats", + "@audioAnalysisChannelStats": { + "description": "Per-channel audio analysis section label" + }, + "audioAnalysisSamples": "Сэмплы", + "@audioAnalysisSamples": { + "description": "Total samples metric label" + }, + "audioAnalysisRescan": "Re-analyze", + "@audioAnalysisRescan": { + "description": "Tooltip/label for the button that re-runs the audio analysis, discarding cached results" + }, + "audioAnalysisRescanning": "Re-analyzing audio...", + "@audioAnalysisRescanning": { + "description": "Loading text while audio is being re-analyzed after an explicit refresh" + }, + "extensionsHomeFeedProvider": "Home Feed Provider", + "@extensionsHomeFeedProvider": { + "description": "Extensions page - label for home feed provider selector" + }, + "extensionsHomeFeedDescription": "Choose which extension provides the home feed on the main screen", + "@extensionsHomeFeedDescription": { + "description": "Extensions page - description for home feed provider picker" + }, + "extensionsHomeFeedAuto": "Авто", + "@extensionsHomeFeedAuto": { + "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", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "extensionsNoHomeFeedExtensions": "No extensions with home feed", + "@extensionsNoHomeFeedExtensions": { + "description": "Extensions page - shown when no installed extension has home feed" + }, + "cancelDownloadTitle": "Отменить скачивание?", + "@cancelDownloadTitle": { + "description": "Dialog title when confirming cancellation of an active download" + }, + "cancelDownloadContent": "This will cancel the active download for \"{trackName}\".", + "@cancelDownloadContent": { + "description": "Dialog body when confirming cancellation of an active download", + "placeholders": { + "trackName": { + "type": "String" + } + } + }, + "cancelDownloadKeep": "Удерживать", + "@cancelDownloadKeep": { + "description": "Dialog button - keep the active download (do not cancel)" + }, + "queueCancelledTitle": "Download cancelled", + "@queueCancelledTitle": { + "description": "Dialog title when opening a cancelled queue item" + }, + "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", + "@queueCancelledMessage": { + "description": "Dialog body when opening a cancelled queue item" + }, + "metadataSaveFailedFfmpeg": "Не удалось сохранить метаданные через FFmpeg", + "@metadataSaveFailedFfmpeg": { + "description": "Snackbar error when FFmpeg fails to write metadata" + }, + "metadataSaveFailedStorage": "Не удалось записать метаданные обратно в хранилище", + "@metadataSaveFailedStorage": { + "description": "Snackbar error when writing metadata file back to storage fails" + }, + "snackbarFolderPickerFailed": "Не удалось открыть выбор папок: {error}", + "@snackbarFolderPickerFailed": { + "description": "Snackbar shown when folder picker fails to open", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "notifDownloadingTrack": "Downloading {trackName}", + "@notifDownloadingTrack": { + "description": "Notification title while downloading a track", + "placeholders": { + "trackName": { + "type": "String" + } + } + }, + "notifFinalizingTrack": "Finalizing {trackName}", + "@notifFinalizingTrack": { + "description": "Notification title while finalizing (embedding metadata) a track", + "placeholders": { + "trackName": { + "type": "String" + } + } + }, + "notifEmbeddingMetadata": "Встраивание метаданных...", + "@notifEmbeddingMetadata": { + "description": "Notification body while embedding metadata into a downloaded track" + }, + "notifAlreadyInLibraryCount": "Уже в библиотеке ({completed}/{total})", + "@notifAlreadyInLibraryCount": { + "description": "Notification title when track is already in library, with count", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "notifAlreadyInLibrary": "Уже в библиотеке", + "@notifAlreadyInLibrary": { + "description": "Notification title when track is already in library" + }, + "notifDownloadCompleteCount": "Загрузка завершена ({completed}/{total})", + "@notifDownloadCompleteCount": { + "description": "Notification title when download is complete, with count", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "notifDownloadComplete": "Скачивание завершено", + "@notifDownloadComplete": { + "description": "Notification title when a single download is complete" + }, + "notifDownloadsFinished": "Загрузка завершена ({completed} завершено, {failed} не удалось)", + "@notifDownloadsFinished": { + "description": "Notification title when queue finishes with some failures", + "placeholders": { + "completed": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, "notifVerificationRequiredTitle": "Verification required", "@notifVerificationRequiredTitle": { "description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background" @@ -5988,10 +4901,592 @@ "@notifVerificationRequiredBody": { "description": "Notification body prompting the user to return to the app to solve a verification challenge" }, + "notifAllDownloadsComplete": "Все загрузки завершены", + "@notifAllDownloadsComplete": { + "description": "Notification title when all downloads finish successfully" + }, + "notifTracksDownloadedSuccess": "{count, plural, =1{1 track downloaded successfully} other{{count} tracks downloaded successfully}}", + "@notifTracksDownloadedSuccess": { + "description": "Notification body for queue complete - how many tracks were downloaded", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "notifDownloadsFinishedBody": "{completed, plural, =1{1 track downloaded} other{{completed} tracks downloaded}}, {failed, plural, =1{1 failed} other{{failed} failed}}", + "@notifDownloadsFinishedBody": { + "description": "Notification body when queue finishes with failures", + "placeholders": { + "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" + }, + "notifLibraryScanProgressWithTotal": "{scanned}/{total} files • {percentage}%", + "@notifLibraryScanProgressWithTotal": { + "description": "Notification body for library scan progress when total is known", + "placeholders": { + "scanned": { + "type": "int" + }, + "total": { + "type": "int" + }, + "percentage": { + "type": "int" + } + } + }, + "notifLibraryScanProgressNoTotal": "{scanned} files scanned • {percentage}%", + "@notifLibraryScanProgressNoTotal": { + "description": "Notification body for library scan progress when total is unknown", + "placeholders": { + "scanned": { + "type": "int" + }, + "percentage": { + "type": "int" + } + } + }, + "notifLibraryScanComplete": "Сканирование библиотеки завершено", + "@notifLibraryScanComplete": { + "description": "Notification title when library scan finishes" + }, + "notifLibraryScanCompleteBody": "{count} треков индексировано", + "@notifLibraryScanCompleteBody": { + "description": "Notification body for library scan complete - number of indexed tracks", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "notifLibraryScanExcluded": "{count} исключено", + "@notifLibraryScanExcluded": { + "description": "Library scan complete suffix - excluded track count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "notifLibraryScanErrors": "{count} ошибок", + "@notifLibraryScanErrors": { + "description": "Library scan complete suffix - error count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "notifLibraryScanFailed": "Ошибка сканирования библиотеки", + "@notifLibraryScanFailed": { + "description": "Notification title when library scan fails" + }, + "notifLibraryScanCancelled": "Сканирование библиотеки отменено", + "@notifLibraryScanCancelled": { + "description": "Notification title when library scan is cancelled by the user" + }, + "notifLibraryScanStopped": "Сканирование остановлено перед завершением.", + "@notifLibraryScanStopped": { + "description": "Notification body when library scan is cancelled" + }, + "notifDownloadingUpdate": "Downloading SpotiFLAC Mobile v{version}", + "@notifDownloadingUpdate": { + "description": "Notification title while downloading an app update", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "notifUpdateProgress": "{received} / {total} МБ • {percentage}%", + "@notifUpdateProgress": { + "description": "Notification body showing update download progress", + "placeholders": { + "received": { + "type": "String" + }, + "total": { + "type": "String" + }, + "percentage": { + "type": "int" + } + } + }, + "notifUpdateReady": "Обновление готово", + "@notifUpdateReady": { + "description": "Notification title when app update download is complete" + }, + "notifUpdateReadyBody": "SpotiFLAC Mobile v{version} downloaded. Tap to install.", + "@notifUpdateReadyBody": { + "description": "Notification body when app update is ready to install", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "notifUpdateFailed": "Ошибка обновления", + "@notifUpdateFailed": { + "description": "Notification title when app update download fails" + }, + "notifUpdateFailedBody": "Не удалось скачать обновление. Попробуйте позже.", + "@notifUpdateFailedBody": { + "description": "Notification body when app update download fails" + }, + "searchTracks": "Tracks", + "@searchTracks": { + "description": "Search filter label - tracks" + }, + "homeSearchHintDefault": "Paste supported URL or search...", + "@homeSearchHintDefault": { + "description": "Default placeholder for the main search field on Home" + }, + "homeSearchHintProvider": "Search with {providerName}...", + "@homeSearchHintProvider": { + "description": "Placeholder for the main search field when a provider is selected", + "placeholders": { + "providerName": { + "type": "String" + } + } + }, + "homeImportCsvTooltip": "Import playlist (CSV, M3U)", + "@homeImportCsvTooltip": { + "description": "Tooltip for importing a CSV or M3U playlist file into Home search" + }, + "homeChangeSearchProviderTooltip": "Change search provider", + "@homeChangeSearchProviderTooltip": { + "description": "Tooltip for the Home search provider picker" + }, + "actionPaste": "Paste", + "@actionPaste": { + "description": "Generic action - paste from clipboard" + }, + "tutorialSearchHint": "Paste or search...", + "@tutorialSearchHint": { + "description": "Placeholder shown in the tutorial search demo" + }, + "tutorialDownloadCompletedSemantics": "Download completed", + "@tutorialDownloadCompletedSemantics": { + "description": "Accessibility label for completed download state in tutorial demo" + }, + "tutorialDownloadInProgressSemantics": "Download in progress", + "@tutorialDownloadInProgressSemantics": { + "description": "Accessibility label for active download state in tutorial demo" + }, + "tutorialStartDownloadSemantics": "Start download", + "@tutorialStartDownloadSemantics": { + "description": "Accessibility label for idle download button in tutorial demo" + }, + "optionsEmbedMetadata": "Embed Metadata", + "@optionsEmbedMetadata": { + "description": "Settings toggle title for writing metadata into downloaded files" + }, + "optionsEmbedMetadataSubtitleOn": "Write metadata, cover art, and embedded lyrics to files", + "@optionsEmbedMetadataSubtitleOn": { + "description": "Subtitle when metadata embedding is enabled" + }, + "optionsEmbedMetadataSubtitleOff": "Disabled (advanced): skip all metadata embedding", + "@optionsEmbedMetadataSubtitleOff": { + "description": "Subtitle when metadata embedding is disabled" + }, + "trackCoverNoEmbeddedArt": "No embedded album art found", + "@trackCoverNoEmbeddedArt": { + "description": "Message shown when a track file has no embedded cover art" + }, + "trackCoverReplace": "Replace Cover", + "@trackCoverReplace": { + "description": "Button label for replacing selected cover art" + }, + "trackCoverPick": "Pick Cover", + "@trackCoverPick": { + "description": "Button label for selecting cover art" + }, + "trackCoverClearSelected": "Clear selected cover", + "@trackCoverClearSelected": { + "description": "Tooltip for clearing the newly selected cover art" + }, + "trackCoverCurrent": "Current cover", + "@trackCoverCurrent": { + "description": "Label for the currently embedded cover preview" + }, + "trackCoverSelected": "Selected cover", + "@trackCoverSelected": { + "description": "Label for the newly selected cover preview" + }, + "trackCoverReplaceNotice": "The selected cover will replace the current embedded cover when you tap Save.", + "@trackCoverReplaceNotice": { + "description": "Notice shown when a new cover has been selected but not saved yet" + }, + "trackCoverResolution": "Cover resolution", + "@trackCoverResolution": { + "description": "Label for selecting the embedded cover art resolution" + }, + "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", + "@trackCoverResolutionHint": { + "description": "Explanation below the embedded cover art resolution selector" + }, + "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", + "@trackCoverResizeFailed": { + "description": "Error shown when resizing cover art before saving metadata fails" + }, + "actionStop": "Stop", + "@actionStop": { + "description": "Generic action - stop" + }, + "queueFinalizingDownload": "Finalizing download", + "@queueFinalizingDownload": { + "description": "Accessibility label for a queue item that is finalizing" + }, + "queueDownloadNext": "Download next", + "@queueDownloadNext": { + "description": "Tooltip on a queued download row; moves the item to the front of the queue so the next free slot downloads it" + }, + "queueMoveUp": "Move up", + "@queueMoveUp": { + "description": "Queue item menu action - move the queued item one position earlier" + }, + "queueMoveDown": "Move down", + "@queueMoveDown": { + "description": "Queue item menu action - move the queued item one position later" + }, + "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", + "@editMetadataMusicBrainzButton": { + "description": "Tag editor button that fills genre and album artist from MusicBrainz by ISRC" + }, + "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", + "@editMetadataMusicBrainzFilled": { + "description": "Snackbar after MusicBrainz suggestions were applied to the tag editor fields" + }, + "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", + "@editMetadataMusicBrainzNothing": { + "description": "Snackbar when the MusicBrainz lookup returns no data" + }, + "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", + "@editMetadataMusicBrainzNeedsIsrc": { + "description": "Snackbar when the MusicBrainz lookup is tapped without an ISRC" + }, + "nowPlayingRepeatOff": "Repeat off", + "@nowPlayingRepeatOff": { + "description": "Repeat toggle tooltip when repeat is disabled" + }, + "nowPlayingRepeatAll": "Repeat all", + "@nowPlayingRepeatAll": { + "description": "Repeat toggle tooltip when the whole queue repeats" + }, + "nowPlayingRepeatOne": "Repeat one", + "@nowPlayingRepeatOne": { + "description": "Repeat toggle tooltip when the current track repeats" + }, + "queueNetworkFailedOffline": "{count} downloads failed while offline", + "@queueNetworkFailedOffline": { + "description": "Snackbar shown when connectivity returns and network-failed downloads can be retried", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueDownloadedFileMissing": "Downloaded file missing", + "@queueDownloadedFileMissing": { + "description": "Accessibility label when a downloaded file is missing from disk" + }, + "queueCheckingDownloadedFile": "Checking downloaded file...", + "@queueCheckingDownloadedFile": { + "description": "Accessibility label while the app checks whether a just-completed download has appeared at its final path yet. Not about authentication or a download session." + }, + "queueDownloadCompleted": "Download completed", + "@queueDownloadCompleted": { + "description": "Accessibility label for completed download state in queue" + }, + "queueRateLimitTitle": "Service rate limited", + "@queueRateLimitTitle": { + "description": "Title shown on a failed queue item when the download service rate limits requests" + }, + "queueRateLimitMessage": "This track may still be available. Wait a few minutes, reduce parallel downloads, then retry.", + "@queueRateLimitMessage": { + "description": "Explanation shown on a failed queue item when the download service rate limits requests" + }, + "appearanceSelectAccentColor": "Select accent color {hex}", + "@appearanceSelectAccentColor": { + "description": "Accessibility label for picking an accent color", + "placeholders": { + "hex": { + "type": "String" + } + } + }, + "logAutoScrollOn": "Auto-scroll ON", + "@logAutoScrollOn": { + "description": "Tooltip when auto-scroll is enabled on the log screen" + }, + "logAutoScrollOff": "Auto-scroll OFF", + "@logAutoScrollOff": { + "description": "Tooltip when auto-scroll is disabled on the log screen" + }, + "logCopyLogs": "Copy logs", + "@logCopyLogs": { + "description": "Tooltip for copying logs" + }, + "logClearSearch": "Clear search", + "@logClearSearch": { + "description": "Tooltip for clearing the log search field" + }, + "logIssueIspBlockingLabel": "ISP BLOCKING DETECTED", + "@logIssueIspBlockingLabel": { + "description": "Diagnostic badge label when ISP blocking is detected" + }, + "logIssueIspBlockingDescription": "Your ISP may be blocking access to download services", + "@logIssueIspBlockingDescription": { + "description": "Diagnostic badge description for ISP blocking" + }, + "logIssueIspBlockingSuggestion": "Try using a VPN or change DNS to 1.1.1.1 or 8.8.8.8", + "@logIssueIspBlockingSuggestion": { + "description": "Diagnostic badge suggestion for ISP blocking" + }, + "logIssueRateLimitedLabel": "RATE LIMITED", + "@logIssueRateLimitedLabel": { + "description": "Diagnostic badge label when the service rate limits requests" + }, + "logIssueRateLimitedDescription": "Too many requests to the service", + "@logIssueRateLimitedDescription": { + "description": "Diagnostic badge description for rate limiting" + }, + "logIssueRateLimitedSuggestion": "Wait a few minutes before trying again", + "@logIssueRateLimitedSuggestion": { + "description": "Diagnostic badge suggestion for rate limiting" + }, + "logIssueNetworkErrorLabel": "NETWORK ERROR", + "@logIssueNetworkErrorLabel": { + "description": "Diagnostic badge label for generic network errors" + }, + "logIssueNetworkErrorDescription": "Connection issues detected", + "@logIssueNetworkErrorDescription": { + "description": "Diagnostic badge description for generic network errors" + }, + "logIssueNetworkErrorSuggestion": "Check your internet connection", + "@logIssueNetworkErrorSuggestion": { + "description": "Diagnostic badge suggestion for generic network errors" + }, + "logIssueTrackNotFoundLabel": "TRACK NOT FOUND", + "@logIssueTrackNotFoundLabel": { + "description": "Diagnostic badge label when a track is unavailable" + }, + "logIssueTrackNotFoundDescription": "Some tracks could not be found on download services", + "@logIssueTrackNotFoundDescription": { + "description": "Diagnostic badge description when a track is unavailable" + }, + "logIssueTrackNotFoundSuggestion": "The track may not be available in lossless quality", + "@logIssueTrackNotFoundSuggestion": { + "description": "Diagnostic badge suggestion when a track is unavailable" + }, + "clickableLookingUpArtist": "Looking up artist...", + "@clickableLookingUpArtist": { + "description": "Snackbar shown while clickable artist metadata is being resolved" + }, + "clickableInformationUnavailable": "{type} information not available", + "@clickableInformationUnavailable": { + "description": "Snackbar shown when clickable metadata cannot open a destination", + "placeholders": { + "type": { + "type": "String" + } + } + }, + "extensionDetailsTags": "Tags", + "@extensionDetailsTags": { + "description": "Section title for extension tags" + }, + "extensionDetailsInformation": "Information", + "@extensionDetailsInformation": { + "description": "Section title for extension metadata information" + }, + "extensionUtilityFunctions": "Utility Functions", + "@extensionUtilityFunctions": { + "description": "Capability label for utility-only extensions" + }, + "actionDismiss": "Dismiss", + "@actionDismiss": { + "description": "Generic action - dismiss" + }, + "setupChangeFolderTooltip": "Change folder", + "@setupChangeFolderTooltip": { + "description": "Tooltip for editing the selected download folder" + }, + "a11yOpenTrackByArtist": "Open track {trackName} by {artistName}", + "@a11yOpenTrackByArtist": { + "description": "Accessibility label for opening a track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } + }, + "a11yOpenItem": "Open {itemType} {name}", + "@a11yOpenItem": { + "description": "Accessibility label for opening a generic item", + "placeholders": { + "itemType": { + "type": "String" + }, + "name": { + "type": "String" + } + } + }, + "a11yOpenItemCount": "Open {title}, {count} {count, plural, =1{item} other{items}}", + "@a11yOpenItemCount": { + "description": "Accessibility label for opening a grouped item with count", + "placeholders": { + "title": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "a11yOpenAlbumByArtistTrackCount": "Open album {albumName} by {artistName}, {trackCount} tracks", + "@a11yOpenAlbumByArtistTrackCount": { + "description": "Accessibility label for opening an album item with track count", + "placeholders": { + "albumName": { + "type": "String" + }, + "artistName": { + "type": "String" + }, + "trackCount": { + "type": "int" + } + } + }, + "a11yTrackByArtist": "{trackName} by {artistName}", + "@a11yTrackByArtist": { + "description": "Accessibility label for a queue or list track item", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } + }, + "a11ySelectAlbum": "Select album {albumName}", + "@a11ySelectAlbum": { + "description": "Accessibility label for selecting an album", + "placeholders": { + "albumName": { + "type": "String" + } + } + }, + "a11yOpenAlbum": "Open album {albumName}", + "@a11yOpenAlbum": { + "description": "Accessibility label for opening an album", + "placeholders": { + "albumName": { + "type": "String" + } + } + }, + "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" + }, "downloadDeduplicationWithQualityVariants": "Existing files at the selected quality will be skipped", "@downloadDeduplicationWithQualityVariants": { "description": "Deduplication subtitle when separate quality versions are allowed" }, + "downloadDeduplicationDisabled": "All tracks will be downloaded regardless of history", + "@downloadDeduplicationDisabled": { + "description": "Subtitle when deduplication is off" + }, "downloadQualityVariants": "Allow different quality versions", "@downloadQualityVariants": { "description": "Setting to retain multiple quality versions of the same track" @@ -6004,99 +5499,1050 @@ "@trackOptionDownloadQualityVariant": { "description": "Track menu action to download another quality version" }, + "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" + }, + "editMetadataFieldTrackTotal": "Track Total", + "@editMetadataFieldTrackTotal": { + "description": "Label for total tracks field in the edit metadata sheet" + }, + "editMetadataFieldDiscTotal": "Disc Total", + "@editMetadataFieldDiscTotal": { + "description": "Label for total discs field in the edit metadata sheet" + }, + "editMetadataFieldComposer": "Composer", + "@editMetadataFieldComposer": { + "description": "Label for composer field in the edit metadata sheet" + }, + "editMetadataFieldComment": "Comment", + "@editMetadataFieldComment": { + "description": "Label for comment field in the edit metadata sheet" + }, + "trackAlbumType": "Release Type", + "@trackAlbumType": { + "description": "Label for an album or release type metadata value" + }, + "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", + "@editMetadataFieldAlbumTypeHint": { + "description": "Hint for the release type metadata field" + }, + "editMetadataFieldExplicit": "Explicit", + "@editMetadataFieldExplicit": { + "description": "Label for the explicit content metadata field" + }, + "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", + "@editMetadataFieldExplicitHint": { + "description": "Description for the explicit content metadata switch" + }, + "metadataExplicitValue": "Explicit", + "@metadataExplicitValue": { + "description": "Displayed value when a track is marked explicit" + }, + "editMetadataFieldUpc": "UPC / Barcode", + "@editMetadataFieldUpc": { + "description": "Label for the release barcode metadata field" + }, + "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", + "@editMetadataFieldUpcHint": { + "description": "Hint for the release barcode metadata field" + }, + "editMetadataAdvanced": "Advanced", + "@editMetadataAdvanced": { + "description": "Expandable section label for advanced metadata fields" + }, + "libraryFilterMetadataMissingTrackNumber": "Missing track number", + "@libraryFilterMetadataMissingTrackNumber": { + "description": "Filter option - items missing track number" + }, + "libraryFilterMetadataMissingDiscNumber": "Missing disc number", + "@libraryFilterMetadataMissingDiscNumber": { + "description": "Filter option - items missing disc number" + }, + "libraryFilterMetadataMissingArtist": "Missing artist", + "@libraryFilterMetadataMissingArtist": { + "description": "Filter option - items missing artist" + }, + "libraryFilterMetadataIncorrectIsrcFormat": "Incorrect ISRC format", + "@libraryFilterMetadataIncorrectIsrcFormat": { + "description": "Filter option - items with an invalid ISRC format" + }, + "libraryFilterMetadataMissingIsrc": "Missing ISRC", + "@libraryFilterMetadataMissingIsrc": { + "description": "Filter option - items without any ISRC tag" + }, + "libraryFilterMetadataMissingLabel": "Missing label", + "@libraryFilterMetadataMissingLabel": { + "description": "Filter option - items missing record label" + }, + "collectionDeletePlaylistsMessage": "Delete {count} {count, plural, =1{playlist} other{playlists}}?", + "@collectionDeletePlaylistsMessage": { + "description": "Confirmation message for deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "collectionPlaylistsDeleted": "{count} {count, plural, =1{playlist} other{playlists}} deleted", + "@collectionPlaylistsDeleted": { + "description": "Snackbar after deleting selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "collectionAddedTracksToPlaylist": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName}", + "@collectionAddedTracksToPlaylist": { + "description": "Snackbar after adding multiple tracks to a playlist", + "placeholders": { + "count": { + "type": "int" + }, + "playlistName": { + "type": "String" + } + } + }, + "collectionAddedTracksToPlaylistWithExisting": "Added {count} {count, plural, =1{track} other{tracks}} to {playlistName} ({alreadyCount} already in playlist)", + "@collectionAddedTracksToPlaylistWithExisting": { + "description": "Snackbar after adding multiple tracks to a playlist when some were already present", + "placeholders": { + "count": { + "type": "int" + }, + "playlistName": { + "type": "String" + }, + "alreadyCount": { + "type": "int" + } + } + }, + "itemCount": "{count} {count, plural, =1{item} other{items}}", + "@itemCount": { + "description": "Generic item count label", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "trackReEnrichSuccessWithFailures": "Metadata re-enriched successfully ({successCount}/{total}) - Failed: {failedCount}", + "@trackReEnrichSuccessWithFailures": { + "description": "Snackbar summary after batch metadata re-enrichment finishes with failures", + "placeholders": { + "successCount": { + "type": "int" + }, + "total": { + "type": "int" + }, + "failedCount": { + "type": "int" + } + } + }, + "selectionDeleteTracksCount": "Delete {count} {count, plural, =1{track} other{tracks}}", + "@selectionDeleteTracksCount": { + "description": "Button label for deleting selected tracks", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "queueDownloadSpeedStatus": "Downloading - {speed} MB/s", + "@queueDownloadSpeedStatus": { + "description": "Queue status while downloading with speed", + "placeholders": { + "speed": { + "type": "String" + } + } + }, + "queueDownloadStarting": "Starting...", "queueCheckingDownloadSession": "Checking download session...", "queueResolvingDownloadMetadata": "Resolving track metadata...", "queueResolvingDownloadStream": "Preparing audio stream...", "queueWaitingForVerification": "Waiting for verification...", "queueResumingAfterVerification": "Resuming after verification...", + "@queueDownloadStarting": { + "description": "Queue status before download progress is available" + }, + "@queueCheckingDownloadSession": { + "description": "Queue status while the download provider's session is being checked during preparation (preparationStage 'checking_session'). This is about the provider session, not about locating a finished file." + }, + "a11ySelectTrack": "Select track", + "@a11ySelectTrack": { + "description": "Accessibility label for selecting a track" + }, + "a11yDeselectTrack": "Deselect track", + "@a11yDeselectTrack": { + "description": "Accessibility label for deselecting a track" + }, + "a11yPlayTrackByArtist": "Play {trackName} by {artistName}", + "@a11yPlayTrackByArtist": { + "description": "Accessibility label for playing a local library track", + "placeholders": { + "trackName": { + "type": "String" + }, + "artistName": { + "type": "String" + } + } + }, + "storeExtensionsCount": "{count} {count, plural, =1{extension} other{extensions}}", + "@storeExtensionsCount": { + "description": "Store extension result count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "storeRequiresVersion": "Requires v{version}+", + "@storeRequiresVersion": { + "description": "Store compatibility badge for minimum app version", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "actionGo": "Go", + "@actionGo": { + "description": "Generic action button label" + }, + "logIssueSummary": "Issue Summary", + "@logIssueSummary": { + "description": "Header for log issue analysis summary" + }, + "logTotalErrors": "Total errors: {count}", + "@logTotalErrors": { + "description": "Total error count in log issue analysis", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "logAffectedDomains": "Affected: {domains}", + "@logAffectedDomains": { + "description": "Affected domains in log issue analysis", + "placeholders": { + "domains": { + "type": "String" + } + } + }, + "libraryScanCancelled": "Scan cancelled", + "@libraryScanCancelled": { + "description": "Library scan status when a scan was cancelled" + }, + "libraryScanCancelledSubtitle": "You can retry the scan when ready.", + "@libraryScanCancelledSubtitle": { + "description": "Library scan status subtitle after cancellation" + }, + "libraryDownloadsHistoryExcluded": "{count} from Downloads history (excluded from list)", + "@libraryDownloadsHistoryExcluded": { + "description": "Library count note for downloaded history items excluded from the local list", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "downloadNativeWorker": "Native download worker", + "@downloadNativeWorker": { + "description": "Setting title for Android native download worker" + }, + "downloadNativeWorkerSubtitle": "Android background service for extension downloads", + "@downloadNativeWorkerSubtitle": { + "description": "Setting subtitle for Android native download worker" + }, + "extensionServiceStatus": "Service Status", + "@extensionServiceStatus": { + "description": "Extension detail section header for service status" + }, + "extensionServiceHealth": "Service health", + "@extensionServiceHealth": { + "description": "Extension capability label for service health checks" + }, + "extensionHealthChecksConfigured": "{count} {count, plural, =1{check} other{checks}} configured", + "@extensionHealthChecksConfigured": { + "description": "Extension service health check count", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionOauthConnectHint": "Tap Connect to Spotify to fill this field.", + "@extensionOauthConnectHint": { + "description": "Hint for an OAuth login link field before connecting Spotify" + }, + "extensionLastChecked": "Last checked {time}", + "@extensionLastChecked": { + "description": "Timestamp for the latest extension service health check", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "extensionRefreshStatus": "Refresh status", + "@extensionRefreshStatus": { + "description": "Tooltip for refreshing extension service health status" + }, + "extensionCustomUrlHandling": "Custom URL Handling", + "@extensionCustomUrlHandling": { + "description": "Extension detail section title for custom URL handling" + }, + "extensionCustomUrlHandlingSubtitle": "This extension can handle links from these sites", + "@extensionCustomUrlHandlingSubtitle": { + "description": "Extension detail subtitle for custom URL handling" + }, + "extensionCustomUrlHandlingShareHint": "Share links from these sites to SpotiFLAC Mobile and this extension will handle them.", + "@extensionCustomUrlHandlingShareHint": { + "description": "Extension detail hint explaining share-to-app URL handling" + }, + "extensionSettingsCount": "{count} {count, plural, =1{setting} other{settings}}", + "@extensionSettingsCount": { + "description": "Count of settings exposed by an extension quality option", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "extensionHealthOnline": "Online", + "@extensionHealthOnline": { + "description": "Extension service health status - online" + }, + "extensionHealthDegraded": "Degraded", + "@extensionHealthDegraded": { + "description": "Extension service health status - degraded" + }, + "extensionHealthOffline": "Offline", + "@extensionHealthOffline": { + "description": "Extension service health status - offline" + }, + "extensionHealthNotConfigured": "Not configured", + "@extensionHealthNotConfigured": { + "description": "Extension service health status - not configured" + }, + "extensionHealthUnknown": "Unknown", + "@extensionHealthUnknown": { + "description": "Extension service health status - unknown" + }, + "extensionHealthRequired": "required", + "@extensionHealthRequired": { + "description": "Label for a required extension service health check" + }, + "extensionSettingNotSet": "Not set", + "@extensionSettingNotSet": { + "description": "Value shown when an extension setting has no value" + }, + "extensionActionFailed": "Action failed", + "@extensionActionFailed": { + "description": "Fallback error when an extension action fails without details" + }, + "extensionEnterValue": "Enter value", + "@extensionEnterValue": { + "description": "Hint for editing an extension setting value" + }, + "extensionHealthServiceOnline": "Service online", + "@extensionHealthServiceOnline": { + "description": "Tooltip for online extension service" + }, + "extensionHealthServiceDegraded": "Service degraded", + "@extensionHealthServiceDegraded": { + "description": "Tooltip for degraded extension service" + }, + "extensionHealthServiceOffline": "Service offline", + "@extensionHealthServiceOffline": { + "description": "Tooltip for offline extension service" + }, + "extensionHealthServiceUnknown": "Service status unknown", + "@extensionHealthServiceUnknown": { + "description": "Tooltip for unknown extension service health" + }, + "audioAnalysisStereo": "Stereo", + "@audioAnalysisStereo": { + "description": "Audio channel layout label - stereo" + }, + "audioAnalysisMono": "Mono", + "@audioAnalysisMono": { + "description": "Audio channel layout label - mono" + }, + "trackOpenInService": "Open in {serviceName}", + "@trackOpenInService": { + "description": "Button label to open a track in a named music service", + "placeholders": { + "serviceName": { + "type": "String" + } + } + }, + "trackLyricsEmbeddedSource": "Embedded", + "@trackLyricsEmbeddedSource": { + "description": "Lyrics source label for embedded lyrics" + }, + "unknownAlbum": "Unknown Album", + "@unknownAlbum": { + "description": "Fallback album name when metadata is missing" + }, + "unknownArtist": "Unknown Artist", + "@unknownArtist": { + "description": "Fallback artist name when metadata is missing" + }, + "permissionAudio": "Audio", + "@permissionAudio": { + "description": "Audio permission type label" + }, + "permissionStorage": "Storage", + "@permissionStorage": { + "description": "Storage permission type label" + }, + "permissionNotification": "Notification", + "@permissionNotification": { + "description": "Notification permission type label" + }, + "errorInvalidFolderSelected": "Invalid folder selected", + "@errorInvalidFolderSelected": { + "description": "Error when the selected folder is invalid" + }, + "storeAnyVersion": "Any", + "@storeAnyVersion": { + "description": "Store detail value when any app version is accepted" + }, + "storeCategoryMetadata": "Metadata", + "@storeCategoryMetadata": { + "description": "Store extension category - metadata" + }, + "storeCategoryDownload": "Download", + "@storeCategoryDownload": { + "description": "Store extension category - download" + }, + "storeCategoryUtility": "Utility", + "@storeCategoryUtility": { + "description": "Store extension category - utility" + }, + "storeCategoryLyrics": "Lyrics", + "@storeCategoryLyrics": { + "description": "Store extension category - lyrics" + }, + "storeCategoryIntegration": "Integration", + "@storeCategoryIntegration": { + "description": "Store extension category - integration" + }, + "artistReleases": "Releases", + "@artistReleases": { + "description": "Section header for all artist releases" + }, + "editMetadataSelectNone": "None", + "@editMetadataSelectNone": { + "description": "Button to clear selected fields for auto-fill" + }, + "queueRetryAllFailed": "Retry {count} failed", + "@queueRetryAllFailed": { + "description": "Button to retry every failed download in the queue", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "settingsSaveDownloadHistory": "Save download history", + "@settingsSaveDownloadHistory": { + "description": "Settings switch title for storing completed downloads in history" + }, + "settingsSaveDownloadHistorySubtitle": "Keep completed downloads in history and library views", + "@settingsSaveDownloadHistorySubtitle": { + "description": "Settings switch subtitle for storing completed downloads in history" + }, + "dialogDisableHistoryTitle": "Turn off download history?", + "@dialogDisableHistoryTitle": { + "description": "Confirmation dialog title shown before disabling download history" + }, + "dialogDisableHistoryMessage": "Existing history will be cleared. Downloaded files will not be deleted.", + "@dialogDisableHistoryMessage": { + "description": "Confirmation dialog message shown before disabling download history" + }, + "dialogDisableAndClear": "Turn off and clear", + "@dialogDisableAndClear": { + "description": "Confirmation action to disable download history and clear existing entries" + }, + "openInOtherServices": "Open in Other Services", + "@openInOtherServices": { + "description": "Title and tooltip for finding the current collection in other services" + }, + "shareSheetNoExtensions": "No other compatible services", + "@shareSheetNoExtensions": { + "description": "Empty state when no extensions can be searched for cross-service links" + }, + "shareSheetNotFound": "Not found", + "@shareSheetNotFound": { + "description": "Cross-service share sheet row subtitle when a service has no match" + }, + "shareSheetCopyLink": "Copy Link", + "@shareSheetCopyLink": { + "description": "Tooltip for copying a cross-service link" + }, + "shareSheetLinkCopied": "{service} link copied", + "@shareSheetLinkCopied": { + "description": "Snackbar after copying a cross-service link", + "placeholders": { + "service": {} + } + }, + "libraryPlayback": "Playback", + "@libraryPlayback": { + "description": "Section header for playback settings in library settings" + }, + "libraryExternalPlayer": "External player", + "@libraryExternalPlayer": { + "description": "Setting option to use an external music player" + }, + "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "@libraryExternalPlayerSubtitle": { + "description": "Subtitle for external player option" + }, + "libraryBuiltInPreviewPlayer": "Built-in preview player", + "@libraryBuiltInPreviewPlayer": { + "description": "Setting option to use the built-in preview player" + }, + "libraryBuiltInPreviewPlayerSubtitle": "Only for quick local previews inside SpotiFLAC Mobile, not recommended for regular listening", + "@libraryBuiltInPreviewPlayerSubtitle": { + "description": "Subtitle for built-in preview player option" + }, + "libraryBuiltInPlayerInfo": "The built-in player is a preview tool for checking local tracks quickly. Use an external music player for actual listening.", + "@libraryBuiltInPlayerInfo": { + "description": "Info note explaining the built-in player is for previews only" + }, + "nowPlayingTitle": "Now Playing", + "@nowPlayingTitle": { + "description": "Title for the now playing screen" + }, + "nowPlayingNothingPlaying": "Nothing is playing", + "@nowPlayingNothingPlaying": { + "description": "Empty state when no track is currently playing" + }, + "nowPlayingMinimize": "Minimize", + "@nowPlayingMinimize": { + "description": "Tooltip for minimizing the now playing screen" + }, + "nowPlayingUpNext": "Up next", + "@nowPlayingUpNext": { + "description": "Title for the playback queue sheet" + }, + "nowPlayingPreviousTrack": "Previous track", + "@nowPlayingPreviousTrack": { + "description": "Tooltip for the previous-track playback control" + }, + "nowPlayingNextTrack": "Next track", + "@nowPlayingNextTrack": { + "description": "Tooltip for the next-track playback control" + }, + "nowPlayingDetails": "Details", + "@nowPlayingDetails": { + "description": "Menu item and section title for track metadata details" + }, + "nowPlayingSleepTimer": "Sleep timer", + "@nowPlayingSleepTimer": { + "description": "Menu item and sheet title for the playback sleep timer" + }, + "nowPlayingSleepTimerActive": "Ends at {time}", + "@nowPlayingSleepTimerActive": { + "description": "Active sleep timer deadline shown in the player menu", + "placeholders": { + "time": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerMinutes": "{minutes, plural, =1{1 minute} other{{minutes} minutes}}", + "@nowPlayingSleepTimerMinutes": { + "description": "Duration choice for the playback sleep timer", + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "nowPlayingSleepTimerOff": "Turn off sleep timer", + "@nowPlayingSleepTimerOff": { + "description": "Action to cancel the active playback sleep timer" + }, + "nowPlayingSleepTimerSet": "Sleep timer set for {duration}", + "@nowPlayingSleepTimerSet": { + "description": "Confirmation after setting the playback sleep timer", + "placeholders": { + "duration": { + "type": "String" + } + } + }, + "nowPlayingSleepTimerCancelled": "Sleep timer turned off", + "@nowPlayingSleepTimerCancelled": { + "description": "Confirmation after cancelling the playback sleep timer" + }, + "nowPlayingOpenInExternalPlayer": "Open in external player", + "@nowPlayingOpenInExternalPlayer": { + "description": "Menu item to open the current track in an external player" + }, + "nowPlayingTabPlayer": "Player", + "@nowPlayingTabPlayer": { + "description": "Tab label for the player view" + }, + "nowPlayingTabLyrics": "Lyrics", + "@nowPlayingTabLyrics": { + "description": "Tab label for the lyrics view" + }, + "nowPlayingNoLyrics": "No lyrics in this file", + "@nowPlayingNoLyrics": { + "description": "Empty state when the playing file has no embedded lyrics" + }, + "nowPlayingLibraryEmpty": "Your library is empty", + "@nowPlayingLibraryEmpty": { + "description": "Snackbar when shuffle library is requested but library has no tracks" + }, + "nowPlayingShuffleLibraryFailed": "Could not shuffle library: {error}", + "@nowPlayingShuffleLibraryFailed": { + "description": "Snackbar when shuffling the library fails", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "nowPlayingShuffleOn": "Shuffle on", + "@nowPlayingShuffleOn": { + "description": "Tooltip when shuffle mode is enabled" + }, + "nowPlayingPlayInOrder": "Play in order", + "@nowPlayingPlayInOrder": { + "description": "Tooltip when shuffle mode is disabled" + }, + "nowPlayingShuffleLibrary": "Shuffle library", + "@nowPlayingShuffleLibrary": { + "description": "Button label to shuffle and play the entire local library" + }, + "nowPlayingQueueEmpty": "Queue is empty", + "@nowPlayingQueueEmpty": { + "description": "Empty state when the playback queue has no items" + }, + "nowPlayingNoMetadata": "No metadata available", + "@nowPlayingNoMetadata": { + "description": "Empty state when track metadata cannot be loaded" + }, + "announcementUnableToOpenLink": "Unable to open link. Please try again.", + "@announcementUnableToOpenLink": { + "description": "Snackbar shown when an announcement CTA link cannot be opened" + }, + "trackConvertLosslessOutputWithCap": "Lossless output with {quality} cap", + "@trackConvertLosslessOutputWithCap": { + "description": "Hint shown when lossless conversion will cap bit depth or sample rate", + "placeholders": { + "quality": { + "type": "String" + } + } + }, + "trackConvertConfirmMessageLosslessCapped": "Convert from {sourceFormat} to {targetFormat} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original file will be deleted after conversion.", + "@trackConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless conversion of a single file", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "selectionBatchConvertConfirmMessageLosslessCapped": "Convert {count} {count, plural, =1{track} other{tracks}} to {format} ({quality})?\n\nThe output stays in a lossless codec, but bit depth/sample rate will be capped. Original files will be deleted after conversion.", + "@selectionBatchConvertConfirmMessageLosslessCapped": { + "description": "Confirmation dialog message for capped lossless batch conversion", + "placeholders": { + "count": { + "type": "int" + }, + "format": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossless": "{sourceFormat} → {targetFormat} ({quality})", + "@trackConvertActionLabelLossless": { + "description": "Convert button label for lossless conversion with quality cap", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "quality": { + "type": "String" + } + } + }, + "trackConvertActionLabelLossy": "{sourceFormat} → {targetFormat} @ {bitrate}", + "@trackConvertActionLabelLossy": { + "description": "Convert button label for lossy conversion", + "placeholders": { + "sourceFormat": { + "type": "String" + }, + "targetFormat": { + "type": "String" + }, + "bitrate": { + "type": "String" + } + } + }, + "aboutPaxsenixSubtitle": "Lyrics proxy for Musixmatch, Netease, Apple Music, QQ Music, Spotify, Deezer, YouTube, Kugou, and Genius", + "@aboutPaxsenixSubtitle": { + "description": "Subtitle for Paxsenix special thanks entry on the about page" + }, + "snackbarPlayingNext": "Playing next", + "@snackbarPlayingNext": { + "description": "Snackbar when a track is inserted as the next queue item" + }, + "snackbarAddedToQueueGeneric": "Added to queue", + "@snackbarAddedToQueueGeneric": { + "description": "Snackbar when a track is added to the playback queue without naming it" + }, + "selectionDeletePlaylistsCount": "Delete {count} {count, plural, =1{playlist} other{playlists}}", + "@selectionDeletePlaylistsCount": { + "description": "Button label for deleting multiple selected playlists", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "actionShuffle": "Shuffle", + "@actionShuffle": { + "description": "Tooltip for shuffle playback action" + }, + "downloadPrimaryArtistOnlyOn": "Primary only: On", + "@downloadPrimaryArtistOnlyOn": { + "description": "Status label when primary-artist-only folder naming is enabled" + }, + "downloadPrimaryArtistOnlyOff": "Primary only: Off", + "@downloadPrimaryArtistOnlyOff": { + "description": "Status label when primary-artist-only folder naming is disabled" + }, + "downloadAlbumArtistMetadataPrimaryOnly": "Album Artist metadata: Primary only", + "@downloadAlbumArtistMetadataPrimaryOnly": { + "description": "Status label when album-artist folder filtering uses primary artist only" + }, + "downloadAlbumArtistMetadataFull": "Album Artist metadata: Full", + "@downloadAlbumArtistMetadataFull": { + "description": "Status label when album-artist folder filtering uses full metadata" + }, + "trackConvertOriginal": "Original", + "@trackConvertOriginal": { + "description": "Label for keeping original bit depth or sample rate during conversion" + }, + "trackConvertOriginalQuality": "Original quality", + "@trackConvertOriginalQuality": { + "description": "Label when no bit depth or sample rate cap is applied during lossless conversion" + }, + "trackConvertLosslessSuffix": "Lossless", + "@trackConvertLosslessSuffix": { + "description": "Suffix used in converted lossless quality labels" + }, + "trackConvertDithering": "Dithering", + "@trackConvertDithering": { + "description": "Section label for lossless conversion dithering options" + }, + "trackConvertResampler": "Resampler", + "@trackConvertResampler": { + "description": "Section label for lossless conversion resampler options" + }, + "trackConvertDitherNone": "None", + "@trackConvertDitherNone": { + "description": "Lossless conversion dither option with no dithering applied" + }, + "trackConvertDitherTriangular": "TPDF", + "@trackConvertDitherTriangular": { + "description": "Lossless conversion triangular probability density function dither option" + }, + "trackConvertDitherTriangularHp": "Triangular HP", + "@trackConvertDitherTriangularHp": { + "description": "Lossless conversion high-pass triangular dither option" + }, + "trackConvertResamplerSwr": "SWR", + "@trackConvertResamplerSwr": { + "description": "Lossless conversion default FFmpeg swresample resampler option" + }, + "trackConvertResamplerSoxr": "SoXr", + "@trackConvertResamplerSoxr": { + "description": "Lossless conversion SoX resampler option" + }, + "updateSeeReleaseNotes": "See release notes for details.", + "@updateSeeReleaseNotes": { + "description": "Fallback changelog text when release notes cannot be parsed" + }, + "unknownTitle": "Unknown title", + "@unknownTitle": { + "description": "Fallback track title when metadata is missing" + }, + "trackPlayNext": "Play next", + "@trackPlayNext": { + "description": "Menu action to play a track as the next queue item" + }, + "trackAddToQueue": "Add to queue", + "@trackAddToQueue": { + "description": "Menu action to add a track to the playback queue" + }, + "snackbarExtensionInstalledEnable": "{extensionName} installed. Enable it in Settings > Extensions", + "@snackbarExtensionInstalledEnable": { + "description": "Snackbar after installing an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarExtensionUpdatedVersion": "{extensionName} updated to v{version}", + "@snackbarExtensionUpdatedVersion": { + "description": "Snackbar after updating an extension from the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + }, + "version": { + "type": "String" + } + } + }, + "snackbarFailedToInstallNamed": "Failed to install {extensionName}", + "@snackbarFailedToInstallNamed": { + "description": "Snackbar when extension install fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "snackbarFailedToUpdateNamed": "Failed to update {extensionName}", + "@snackbarFailedToUpdateNamed": { + "description": "Snackbar when extension update fails in the repo tab", + "placeholders": { + "extensionName": { + "type": "String" + } + } + }, + "releaseTypeEp": "EP", + "@releaseTypeEp": { + "description": "Badge label for EP releases" + }, + "releaseTypeSingle": "Single", + "@releaseTypeSingle": { + "description": "Badge label for single releases" + }, + "trackCoverOnline": "Online cover", + "@trackCoverOnline": { + "description": "Label shown when metadata autofill downloaded cover art from the internet" + }, + "regionCountryUS": "United States", + "@regionCountryUS": { + "description": "Country name for SongLink region picker" + }, + "regionCountryGB": "United Kingdom", + "@regionCountryGB": { + "description": "Country name for SongLink region picker" + }, + "regionCountryFR": "France", + "@regionCountryFR": { + "description": "Country name for SongLink region picker" + }, + "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" + }, + "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" + }, "settingsSearchHint": "Search settings", + "@settingsSearchHint": { + "description": "Placeholder of the search field on the Settings tab" + }, "settingsSearchNoResults": "No settings match \"{query}\"", + "@settingsSearchNoResults": { + "description": "Shown when a Settings search returns nothing", + "placeholders": { + "query": { + "type": "String" + } + } + }, "settingsGroupInterface": "Extensions & appearance", + "@settingsGroupInterface": { + "description": "Settings group covering look and feel" + }, "settingsGroupContent": "Content & metadata", + "@settingsGroupContent": { + "description": "Settings group covering the library, metadata and lyrics" + }, "settingsGroupDownloads": "Downloads & files", + "@settingsGroupDownloads": { + "description": "Settings group covering download behaviour and storage" + }, "settingsGroupSystem": "System", + "@settingsGroupSystem": { + "description": "Settings group covering app-level data, cache and logs" + }, "settingsGroupHelp": "About & support", - "collectionExportM3u": "Export as M3U8", - "collectionExportM3uDone": "Exported {exported} of {total} tracks", - "collectionExportM3uNone": "No downloaded files to export", - "collectionExportM3uFailed": "Export failed", - "trackOpenOn": "Open on...", - "trackOpenOnNoLinks": "No platform links found for this track.", - "libraryReviewDuplicates": "Review duplicates", - "libraryReviewDuplicatesSubtitle": "Find tracks stored more than once", - "duplicatesTitle": "Duplicates", - "duplicatesEmpty": "No duplicate tracks found.", - "duplicatesKeepBest": "Keep best", - "duplicatesKeepBestMessage": "Delete {count} lower-quality copies of \"{trackName}\"?", - "duplicatesDeleteCopyMessage": "Delete this copy of \"{trackName}\"?", - "downloadAutoConvert": "Auto-convert after download", - "downloadAutoConvertSubtitle": "Convert completed downloads to a smaller lossy format. The original is replaced only after conversion succeeds.", - "downloadAutoConvertFormat": "Output format", - "downloadAutoConvertFormatSubtitle": "Choose the lossy format used for newly completed downloads.", - "downloadAutoConvertBitrate": "Output quality", - "downloadAutoConvertBitrateSubtitle": "Higher bitrates preserve more detail but create larger files.", - "downloadAutoConvertMp3Subtitle": "Best compatibility across players and devices", - "downloadAutoConvertM4aSubtitle": "Efficient AAC audio in an M4A container", - "downloadAutoConvertOpusSubtitle": "Best efficiency for modern players", - "appearanceForceBlur": "Always use blur effects", - "appearanceForceBlurSubtitle": "Enable the navigation bar blur even on devices where it is off by default. May cost performance.", - "recentClearAllMessage": "Clear all recent activity? Download history and music files will not be deleted.", - "libraryAddFolder": "Add library folder", - "libraryAddFolderSubtitle": "Internal storage, SD card, SSD, or another external drive", - "librarySourceOnline": "Online", - "librarySourceOffline": "Offline. Reconnect the storage to restore these tracks", - "librarySourceDisabled": "Disabled", - "librarySourceScanCount": "{scanned} of {total} files scanned ({progress}%)", - "libraryExternalStorage": "External storage", - "libraryRemoveFolder": "Remove library folder", - "libraryRemoveFolderMessage": "Remove this folder and its indexed tracks from SpotiFLAC Mobile? Audio files on the storage will not be deleted.", - "trackReEnrichModeIsrc": "ISRC only", - "trackReEnrichModeIsrcSubtitle": "Find and add the recording identifier without changing other tags", - "trackReEnrichModeMissing": "Fill missing tags", - "trackReEnrichModeMissingSubtitle": "Keep existing values and fill only fields that are empty", - "trackReEnrichModeReplace": "Update selected tags", - "trackReEnrichModeReplaceSubtitle": "Choose which existing values may be replaced by online metadata", - "trackReEnrichFieldsTitle": "Tags to update", - "trackReEnrichReview": "Review changes", - "trackReEnrichReviewTitle": "Review metadata changes", - "trackReEnrichReviewSubtitle": "{changeCount} proposed changes across {trackCount} tracks", - "trackReEnrichNoChanges": "No metadata changes were found for the selected tracks.", - "trackReEnrichApplyChanges": "Apply changes", - "trackReEnrichRefreshOnline": "Refresh from online", - "editMetadataAutoFillSource": "Metadata source", - "editMetadataAutoFillSourceAutomatic": "Automatic (provider priority)", - "editMetadataAutoFillFind": "Find metadata", - "editMetadataAutoFillPreview": "Data from {source}", - "editMetadataAutoFillCoverAvailable": "Cover artwork available", - "editMetadataAutoFillApply": "Apply selected data", - "editMetadataAutoFillDoneFromSource": "Filled {count} {count, plural, =1{field} other{fields}} from {source}", - "queuePlaylistCount": "{count, plural, =1{1 playlist} other{{count} playlists}}", - "queueEmptyPlaylistsSubtitle": "Create a playlist to organize your tracks", - "libraryDefaultView": "Default view", - "libraryDefaultViewLastUsed": "Last used", - "audioAnalysisCutoffNotDetected": "Not detected", - "queueCancelledTitle": "Download cancelled", - "queueCancelledMessage": "This download was cancelled. Retry it or remove it from the queue.", - "trackCoverResolution": "Cover resolution", - "trackCoverResolutionHint": "Sets the longest edge when saved. Enlarging does not add image detail.", - "trackCoverResizeFailed": "The cover image could not be resized. Please try another size or image.", - "queueDownloadNext": "Download next", - "queueMoveUp": "Move up", - "queueMoveDown": "Move down", - "editMetadataMusicBrainzButton": "Fetch from MusicBrainz", - "editMetadataMusicBrainzFilled": "Updated from MusicBrainz", - "editMetadataMusicBrainzNothing": "Nothing found on MusicBrainz", - "editMetadataMusicBrainzNeedsIsrc": "Requires an ISRC tag", - "nowPlayingRepeatOff": "Repeat off", - "nowPlayingRepeatAll": "Repeat all", - "nowPlayingRepeatOne": "Repeat one", - "queueNetworkFailedOffline": "{count} downloads failed while offline", - "trackAlbumType": "Release Type", - "editMetadataFieldAlbumTypeHint": "Album, single, EP, compilation...", - "editMetadataFieldExplicit": "Explicit", - "editMetadataFieldExplicitHint": "Mark this track as containing explicit content", - "metadataExplicitValue": "Explicit", - "editMetadataFieldUpc": "UPC / Barcode", - "editMetadataFieldUpcHint": "Numeric UPC, EAN, or GTIN", - "libraryFilterMetadataMissingIsrc": "Missing ISRC" -} + "@settingsGroupHelp": { + "description": "Settings group covering the about page and donations" + }, + "libraryFilterMetadataMissingLyrics": "Missing lyrics", + "@libraryFilterMetadataMissingLyrics": { + "description": "Filter option for tracks without embedded or sidecar lyrics" + }, + "trackOptionCopyTrackName": "Copy track name", + "@trackOptionCopyTrackName": { + "description": "Track menu action that copies the track title" + }, + "trackOptionCopyArtist": "Copy artist", + "@trackOptionCopyArtist": { + "description": "Track menu action that copies the artist name" + }, + "trackOptionCopyTrackAndArtist": "Copy track and artist", + "@trackOptionCopyTrackAndArtist": { + "description": "Track menu action that copies the track title and artist" + }, + "metadataCopyValue": "Copy value", + "@metadataCopyValue": { + "description": "Metadata menu action that copies only the selected value" + }, + "metadataCopyField": "Copy field and value", + "@metadataCopyField": { + "description": "Metadata menu action that copies the selected key and value" + }, + "metadataCopyAll": "Copy all metadata", + "@metadataCopyAll": { + "description": "Metadata menu action that copies every visible key and value" + }, + "optionsEmbeddedCoverSize": "Embedded Cover Size", + "@optionsEmbeddedCoverSize": { + "description": "Metadata setting that limits downloaded artwork resolution before it is embedded" + }, + "optionsEmbeddedCoverSizeDescription": "Downscale remotely downloaded cover art before embedding it. Images already within the limit are kept unchanged.", + "@optionsEmbeddedCoverSizeDescription": { + "description": "Description shown in the embedded cover size picker" + }, + "optionsEmbeddedCoverSizeOriginal": "Original resolution", + "@optionsEmbeddedCoverSizeOriginal": { + "description": "Option that preserves the provider artwork at its original resolution" + } +} \ No newline at end of file