New translations app_en.arb (Arabic)

[ci skip]
This commit is contained in:
Zarz Eleutherius
2026-07-25 10:12:46 +07:00
parent 49a824c171
commit bcb3729fa9
+146 -328
View File
@@ -19,7 +19,7 @@
}, },
"navStore": "المستودع", "navStore": "المستودع",
"@navStore": { "@navStore": {
"description": "Bottom navigation - Extension store tab" "description": "Bottom navigation - Extension repo tab"
}, },
"homeTitle": "الصفحة الرئيسية", "homeTitle": "الصفحة الرئيسية",
"@homeTitle": { "@homeTitle": {
@@ -73,10 +73,6 @@
"@settingsAppearance": { "@settingsAppearance": {
"description": "Settings section - visual customization" "description": "Settings section - visual customization"
}, },
"settingsOptions": "الخيارات",
"@settingsOptions": {
"description": "Settings section - app options"
},
"settingsExtensions": "الإضافات", "settingsExtensions": "الإضافات",
"@settingsExtensions": { "@settingsExtensions": {
"description": "Settings section - extension management" "description": "Settings section - extension management"
@@ -145,10 +141,6 @@
"@appearanceHistoryViewGrid": { "@appearanceHistoryViewGrid": {
"description": "Grid layout option" "description": "Grid layout option"
}, },
"optionsTitle": "خيارات",
"@optionsTitle": {
"description": "Options settings page title"
},
"optionsPrimaryProvider": "المزود الرئيسي", "optionsPrimaryProvider": "المزود الرئيسي",
"@optionsPrimaryProvider": { "@optionsPrimaryProvider": {
"description": "Main search provider setting" "description": "Main search provider setting"
@@ -174,10 +166,6 @@
"@optionsDefaultSearchTabSubtitle": { "@optionsDefaultSearchTabSubtitle": {
"description": "Subtitle for the preferred default search tab setting" "description": "Subtitle for the preferred default search tab setting"
}, },
"optionsSwitchBack": "اختر مزود البحث الافتراضي للتبديل من مكون إضافي",
"@optionsSwitchBack": {
"description": "Hint to switch back from extension search"
},
"optionsAutoFallback": "التراجع التلقائي", "optionsAutoFallback": "التراجع التلقائي",
"@optionsAutoFallback": { "@optionsAutoFallback": {
"description": "Auto-retry with other services" "description": "Auto-retry with other services"
@@ -186,18 +174,6 @@
"@optionsAutoFallbackSubtitle": { "@optionsAutoFallbackSubtitle": {
"description": "Subtitle for auto fallback" "description": "Subtitle for auto fallback"
}, },
"optionsUseExtensionProviders": "استخدام مزودي الإضافات",
"@optionsUseExtensionProviders": {
"description": "Legacy setting label for extension download providers"
},
"optionsUseExtensionProvidersOn": "مزودي الإضافات مفعلين",
"@optionsUseExtensionProvidersOn": {
"description": "Status when extension providers enabled"
},
"optionsUseExtensionProvidersOff": "مزودي الإضافات مطلوبين",
"@optionsUseExtensionProvidersOff": {
"description": "Legacy status when extension providers would be disabled"
},
"optionsEmbedLyrics": "تضمين كلمات الأغنية", "optionsEmbedLyrics": "تضمين كلمات الأغنية",
"@optionsEmbedLyrics": { "@optionsEmbedLyrics": {
"description": "Embed lyrics in audio files" "description": "Embed lyrics in audio files"
@@ -230,10 +206,6 @@
"@trackReplayGain": { "@trackReplayGain": {
"description": "Three-dot menu option to scan loudness and write ReplayGain tags" "description": "Three-dot menu option to scan loudness and write ReplayGain tags"
}, },
"trackReplayGainSubtitle": "تحليل ارتفاع الصوت وكتابة وسوم ReplayGain",
"@trackReplayGainSubtitle": {
"description": "Subtitle for the rescan ReplayGain menu option"
},
"trackReplayGainScanning": "تحليل الصوت...", "trackReplayGainScanning": "تحليل الصوت...",
"@trackReplayGainScanning": { "@trackReplayGainScanning": {
"description": "Snackbar/progress message while scanning ReplayGain for a single track" "description": "Snackbar/progress message while scanning ReplayGain for a single track"
@@ -310,11 +282,11 @@
}, },
"optionsExtensionStore": "مستودع الإضافات", "optionsExtensionStore": "مستودع الإضافات",
"@optionsExtensionStore": { "@optionsExtensionStore": {
"description": "Show/hide store tab" "description": "Show/hide repo tab"
}, },
"optionsExtensionStoreSubtitle": "إظهار صفحة المستودع في شريط التنقل", "optionsExtensionStoreSubtitle": "إظهار صفحة المستودع في شريط التنقل",
"@optionsExtensionStoreSubtitle": { "@optionsExtensionStoreSubtitle": {
"description": "Subtitle for extension store toggle" "description": "Subtitle for extension repo toggle"
}, },
"optionsCheckUpdates": "التحقق من وجود تحديثات", "optionsCheckUpdates": "التحقق من وجود تحديثات",
"@optionsCheckUpdates": { "@optionsCheckUpdates": {
@@ -360,31 +332,6 @@
"@optionsDetailedLoggingOff": { "@optionsDetailedLoggingOff": {
"description": "Status when logging disabled" "description": "Status when logging disabled"
}, },
"optionsSpotifyCredentials": "بيانات اعتماد Spotify",
"@optionsSpotifyCredentials": {
"description": "Spotify API credentials setting"
},
"optionsSpotifyCredentialsConfigured": "معرف العميل: {clientId}...",
"@optionsSpotifyCredentialsConfigured": {
"description": "Shows configured client ID preview",
"placeholders": {
"clientId": {
"type": "String"
}
}
},
"optionsSpotifyCredentialsRequired": "مطلوب - انقر للتهيئة",
"@optionsSpotifyCredentialsRequired": {
"description": "Prompt to set up credentials"
},
"optionsSpotifyWarning": "Spotify يتطلب بيانات اعتماد API الخاصة بك. احصل عليها مجاناً من developer.spotify.com",
"@optionsSpotifyWarning": {
"description": "Info about Spotify API requirement"
},
"optionsSpotifyDeprecationWarning": "سيتم إلغاء البحث في Spotify في 3 مارس 2026 بسبب تغييرات API Spotify. الرجاء التبديل إلى Deezer.",
"@optionsSpotifyDeprecationWarning": {
"description": "Warning about Spotify API deprecation"
},
"extensionsTitle": "الإضافات", "extensionsTitle": "الإضافات",
"@extensionsTitle": { "@extensionsTitle": {
"description": "Extensions page title" "description": "Extensions page title"
@@ -402,26 +349,17 @@
} }
} }
}, },
"extensionsAuthor": "من قِبل {author}",
"@extensionsAuthor": {
"description": "Extension author credit",
"placeholders": {
"author": {
"type": "String"
}
}
},
"extensionsUninstall": "إلغاء التثبيت", "extensionsUninstall": "إلغاء التثبيت",
"@extensionsUninstall": { "@extensionsUninstall": {
"description": "Uninstall extension button" "description": "Uninstall extension button"
}, },
"storeTitle": "مستودع الإضافات", "storeTitle": "مستودع الإضافات",
"@storeTitle": { "@storeTitle": {
"description": "Store screen title" "description": "Repo screen title"
}, },
"storeSearch": "البحث في الإضافات...", "storeSearch": "البحث في الإضافات...",
"@storeSearch": { "@storeSearch": {
"description": "Store search placeholder" "description": "Repo search placeholder"
}, },
"storeInstall": "تثبيت", "storeInstall": "تثبيت",
"@storeInstall": { "@storeInstall": {
@@ -912,14 +850,6 @@
"@snackbarHistoryCleared": { "@snackbarHistoryCleared": {
"description": "Snackbar - history deleted" "description": "Snackbar - history deleted"
}, },
"snackbarCredentialsSaved": "تم حفظ بيانات الاعتماد",
"@snackbarCredentialsSaved": {
"description": "Snackbar - Spotify credentials saved"
},
"snackbarCredentialsCleared": "تم مسح بيانات الاعتماد",
"@snackbarCredentialsCleared": {
"description": "Snackbar - Spotify credentials removed"
},
"snackbarDeletedTracks": "تم حذف {count} {count, plural, zero {} one {أغنيتين} two {أغنيتين} few {أغانٍ} many {أغنية}=1{أغنية} other{أغانٍ}}", "snackbarDeletedTracks": "تم حذف {count} {count, plural, zero {} one {أغنيتين} two {أغنيتين} few {أغانٍ} many {أغنية}=1{أغنية} other{أغانٍ}}",
"@snackbarDeletedTracks": { "@snackbarDeletedTracks": {
"description": "Snackbar - tracks deleted", "description": "Snackbar - tracks deleted",
@@ -938,10 +868,6 @@
} }
} }
}, },
"snackbarFillAllFields": "من فضلك قم بإدخال جميع البيانات",
"@snackbarFillAllFields": {
"description": "Snackbar - validation error"
},
"snackbarViewQueue": "عرض قائمة الانتظار", "snackbarViewQueue": "عرض قائمة الانتظار",
"@snackbarViewQueue": { "@snackbarViewQueue": {
"description": "Snackbar action - view download queue" "description": "Snackbar action - view download queue"
@@ -1055,14 +981,6 @@
"@actionDeselect": { "@actionDeselect": {
"description": "Action button - deselect all" "description": "Action button - deselect all"
}, },
"actionRemoveCredentials": "إزالة بيانات الاعتماد",
"@actionRemoveCredentials": {
"description": "Action button - delete Spotify credentials"
},
"actionSaveCredentials": "حفظ بيانات الاعتماد",
"@actionSaveCredentials": {
"description": "Action button - save Spotify credentials"
},
"selectionSelected": "تم تحديد {count}", "selectionSelected": "تم تحديد {count}",
"@selectionSelected": { "@selectionSelected": {
"description": "Selection count indicator", "description": "Selection count indicator",
@@ -1236,6 +1154,19 @@
"@updateNewVersionReady": { "@updateNewVersionReady": {
"description": "Update subtitle" "description": "Update subtitle"
}, },
"updateRequiredTitle": "Update required",
"@updateRequiredTitle": {
"description": "Title of the mandatory update dialog shown when the installed version is too old"
},
"updateRequiredNotice": "This version is {count} releases behind and is no longer supported. Update to keep using the app.",
"@updateRequiredNotice": {
"description": "Subtitle of the mandatory update dialog; explains why the dialog cannot be dismissed",
"placeholders": {
"count": {
"type": "int"
}
}
},
"updateCurrent": "الحالي", "updateCurrent": "الحالي",
"@updateCurrent": { "@updateCurrent": {
"description": "Label for current version" "description": "Label for current version"
@@ -1272,10 +1203,6 @@
"@providerPriorityInfo": { "@providerPriorityInfo": {
"description": "Info tip about fallback behavior" "description": "Info tip about fallback behavior"
}, },
"providerPriorityFallbackExtensionsTitle": "المكون الإضافي الاحتياطي",
"@providerPriorityFallbackExtensionsTitle": {
"description": "Section title for choosing which download extensions can be used as fallback providers"
},
"providerPriorityFallbackExtensionsDescription": "اختر إضافات التحميل المثبتة التي يمكن استخدامها أثناء الرجوع التلقائي للمزود الاحتياطي.", "providerPriorityFallbackExtensionsDescription": "اختر إضافات التحميل المثبتة التي يمكن استخدامها أثناء الرجوع التلقائي للمزود الاحتياطي.",
"@providerPriorityFallbackExtensionsDescription": { "@providerPriorityFallbackExtensionsDescription": {
"description": "Section description for extension fallback selection" "description": "Section description for extension fallback selection"
@@ -1284,10 +1211,6 @@
"@providerPriorityFallbackExtensionsHint": { "@providerPriorityFallbackExtensionsHint": {
"description": "Hint below the extension fallback selection list" "description": "Hint below the extension fallback selection list"
}, },
"providerBuiltIn": "قديم",
"@providerBuiltIn": {
"description": "Legacy label retained for old generated localization compatibility"
},
"providerExtension": "الإضافة", "providerExtension": "الإضافة",
"@providerExtension": { "@providerExtension": {
"description": "Label for extension-provided providers" "description": "Label for extension-provided providers"
@@ -1304,14 +1227,6 @@
"@metadataProviderPriorityInfo": { "@metadataProviderPriorityInfo": {
"description": "Info tip about rate limits" "description": "Info tip about rate limits"
}, },
"metadataNoRateLimits": "لا حدود للطلبات",
"@metadataNoRateLimits": {
"description": "Deezer provider description"
},
"metadataMayRateLimit": "قد يفرض حدودا للطلب",
"@metadataMayRateLimit": {
"description": "Spotify provider description"
},
"logTitle": "السجلات", "logTitle": "السجلات",
"@logTitle": { "@logTitle": {
"description": "Logs screen title" "description": "Logs screen title"
@@ -1378,30 +1293,6 @@
} }
} }
}, },
"credentialsTitle": "بيانات اعتماد Spotify",
"@credentialsTitle": {
"description": "Credentials dialog title"
},
"credentialsDescription": "أدخل معرف العميل الخاص بك و الكود السري لاستخدام حصة تطبيق Spotify الخاصة بك.",
"@credentialsDescription": {
"description": "Credentials dialog explanation"
},
"credentialsClientId": "Client ID",
"@credentialsClientId": {
"description": "Client ID field label - DO NOT TRANSLATE"
},
"credentialsClientIdHint": "لصق Client ID",
"@credentialsClientIdHint": {
"description": "Client ID placeholder"
},
"credentialsClientSecret": "Client Secret",
"@credentialsClientSecret": {
"description": "Client Secret field label - DO NOT TRANSLATE"
},
"credentialsClientSecretHint": "لصق Client Secret",
"@credentialsClientSecretHint": {
"description": "Client Secret placeholder"
},
"channelStable": "مستقر", "channelStable": "مستقر",
"@channelStable": { "@channelStable": {
"description": "Update channel - stable releases" "description": "Update channel - stable releases"
@@ -1510,10 +1401,6 @@
"@settingsDownloadSubtitle": { "@settingsDownloadSubtitle": {
"description": "Download settings description" "description": "Download settings description"
}, },
"settingsOptionsSubtitle": "الإحتياطات، البيانات الوصفية (metadata)، كلمات الأغاني، غلاف الأغنية",
"@settingsOptionsSubtitle": {
"description": "Options settings description"
},
"settingsExtensionsSubtitle": "إدارة موفري التحميل", "settingsExtensionsSubtitle": "إدارة موفري التحميل",
"@settingsExtensionsSubtitle": { "@settingsExtensionsSubtitle": {
"description": "Extensions settings description" "description": "Extensions settings description"
@@ -1730,27 +1617,27 @@
}, },
"storeFilterAll": "الكل", "storeFilterAll": "الكل",
"@storeFilterAll": { "@storeFilterAll": {
"description": "Store filter - all extensions" "description": "Repo filter - all extensions"
}, },
"storeFilterMetadata": "البيانات الوصفية (Metadata)", "storeFilterMetadata": "البيانات الوصفية (Metadata)",
"@storeFilterMetadata": { "@storeFilterMetadata": {
"description": "Store filter - metadata providers" "description": "Repo filter - metadata providers"
}, },
"storeFilterDownload": "التحميل", "storeFilterDownload": "التحميل",
"@storeFilterDownload": { "@storeFilterDownload": {
"description": "Store filter - download providers" "description": "Repo filter - download providers"
}, },
"storeFilterUtility": "الأدوات", "storeFilterUtility": "الأدوات",
"@storeFilterUtility": { "@storeFilterUtility": {
"description": "Store filter - utility extensions" "description": "Repo filter - utility extensions"
}, },
"storeFilterLyrics": "كلمات الأغنية", "storeFilterLyrics": "كلمات الأغنية",
"@storeFilterLyrics": { "@storeFilterLyrics": {
"description": "Store filter - lyrics providers" "description": "Repo filter - lyrics providers"
}, },
"storeFilterIntegration": "التكامل", "storeFilterIntegration": "التكامل",
"@storeFilterIntegration": { "@storeFilterIntegration": {
"description": "Store filter - integrations" "description": "Repo filter - integrations"
}, },
"storeClearFilters": "حذف الفلاتر", "storeClearFilters": "حذف الفلاتر",
"@storeClearFilters": { "@storeClearFilters": {
@@ -1772,10 +1659,6 @@
"@storeRepoUrlHint": { "@storeRepoUrlHint": {
"description": "Hint/placeholder for the repository URL input field" "description": "Hint/placeholder for the repository URL input field"
}, },
"storeRepoUrlHelper": "مثال: https://github.com/user/extensions-repo",
"@storeRepoUrlHelper": {
"description": "Helper text below the repository URL input field"
},
"storeAddRepoButton": "أضف مستودعًا", "storeAddRepoButton": "أضف مستودعًا",
"@storeAddRepoButton": { "@storeAddRepoButton": {
"description": "Button to submit a new repository URL" "description": "Button to submit a new repository URL"
@@ -1808,18 +1691,6 @@
"@storeEmptyNoResults": { "@storeEmptyNoResults": {
"description": "Message when search/filter returns no results" "description": "Message when search/filter returns no results"
}, },
"extensionDefaultProvider": "البحث الافتراضي",
"@extensionDefaultProvider": {
"description": "Default search provider option"
},
"extensionDefaultProviderSubtitle": "استخدام البحث الافتراضي عن البيانات الوصفية",
"@extensionDefaultProviderSubtitle": {
"description": "Subtitle for default provider"
},
"extensionAuthor": "المؤلف",
"@extensionAuthor": {
"description": "Extension detail - author"
},
"extensionId": "ID", "extensionId": "ID",
"@extensionId": { "@extensionId": {
"description": "Extension detail - unique ID" "description": "Extension detail - unique ID"
@@ -2087,10 +1958,6 @@
"@downloadLossyOpus128Subtitle": { "@downloadLossyOpus128Subtitle": {
"description": "Subtitle for Opus 128kbps lossy option" "description": "Subtitle for Opus 128kbps lossy option"
}, },
"qualityNote": "الجودة الفعلية تعتمد على المسار المتوفر من الخدمة",
"@qualityNote": {
"description": "Note about quality availability"
},
"downloadAskBeforeDownload": "اسأل قبل التحميل", "downloadAskBeforeDownload": "اسأل قبل التحميل",
"@downloadAskBeforeDownload": { "@downloadAskBeforeDownload": {
"description": "Setting - show quality picker" "description": "Setting - show quality picker"
@@ -2143,6 +2010,14 @@
"@appearanceAmoledDarkSubtitle": { "@appearanceAmoledDarkSubtitle": {
"description": "Subtitle for AMOLED dark" "description": "Subtitle for AMOLED dark"
}, },
"appearanceHeroAnimations": "Hero animations",
"@appearanceHeroAnimations": {
"description": "Toggle for shared-element (Hero) transitions"
},
"appearanceHeroAnimationsSubtitle": "Fly covers between screens, e.g. when opening the player",
"@appearanceHeroAnimationsSubtitle": {
"description": "Subtitle for the Hero animations toggle"
},
"queueClearAll": "مسح الكل", "queueClearAll": "مسح الكل",
"@queueClearAll": { "@queueClearAll": {
"description": "Button - clear all queue items" "description": "Button - clear all queue items"
@@ -2175,6 +2050,27 @@
"@settingsDownloadNetworkSubtitle": { "@settingsDownloadNetworkSubtitle": {
"description": "Subtitle explaining network preference" "description": "Subtitle explaining network preference"
}, },
"settingsConcurrentDownloads": "Concurrent downloads",
"@settingsConcurrentDownloads": {
"description": "Setting title - how many tracks download at the same time"
},
"settingsConcurrentDownloadsSubtitle": "Downloading several tracks at once is faster, but some providers may rate-limit parallel requests.",
"@settingsConcurrentDownloadsSubtitle": {
"description": "Subtitle explaining the concurrent downloads picker"
},
"concurrentDownloadsOne": "1 track at a time",
"@concurrentDownloadsOne": {
"description": "Concurrent downloads option - sequential"
},
"concurrentDownloadsCount": "Up to {count} tracks at once",
"@concurrentDownloadsCount": {
"description": "Concurrent downloads option - parallel",
"placeholders": {
"count": {
"type": "int"
}
}
},
"albumFolderArtistAlbum": "ألبوم / الفنان", "albumFolderArtistAlbum": "ألبوم / الفنان",
"@albumFolderArtistAlbum": { "@albumFolderArtistAlbum": {
"description": "Album folder option" "description": "Album folder option"
@@ -2245,10 +2141,6 @@
} }
} }
}, },
"downloadedAlbumAllSelected": "All tracks selected",
"@downloadedAlbumAllSelected": {
"description": "Status - all items selected"
},
"downloadedAlbumTapToSelect": "Tap tracks to select", "downloadedAlbumTapToSelect": "Tap tracks to select",
"@downloadedAlbumTapToSelect": { "@downloadedAlbumTapToSelect": {
"description": "Selection hint" "description": "Selection hint"
@@ -2976,6 +2868,22 @@
"@cacheLibraryCoverDesc": { "@cacheLibraryCoverDesc": {
"description": "Description of what library cover cache contains" "description": "Description of what library cover cache contains"
}, },
"libraryPlaybackNormalization": "Volume normalization",
"@libraryPlaybackNormalization": {
"description": "Toggle title for ReplayGain playback normalization in the built-in player"
},
"libraryPlaybackNormalizationSubtitle": "Even out loudness between tracks using their ReplayGain or R128 tags, when present",
"@libraryPlaybackNormalizationSubtitle": {
"description": "Subtitle explaining playback volume normalization"
},
"cacheAudioAnalysis": "Audio analysis cache",
"@cacheAudioAnalysis": {
"description": "Cache item title for saved audio analysis results"
},
"cacheAudioAnalysisDesc": "Saved spectrograms and analysis results. Will re-analyze on next open.",
"@cacheAudioAnalysisDesc": {
"description": "Description of what audio analysis cache contains"
},
"cacheExploreFeed": "Explore feed cache", "cacheExploreFeed": "Explore feed cache",
"@cacheExploreFeed": { "@cacheExploreFeed": {
"description": "Cache item title for explore home feed cache" "description": "Cache item title for explore home feed cache"
@@ -3092,18 +3000,10 @@
"@trackSaveCoverArt": { "@trackSaveCoverArt": {
"description": "Menu action - save album cover art as file" "description": "Menu action - save album cover art as file"
}, },
"trackSaveCoverArtSubtitle": "Save album art as .jpg file",
"@trackSaveCoverArtSubtitle": {
"description": "Subtitle for save cover art action"
},
"trackSaveLyrics": "Save Lyrics (.lrc)", "trackSaveLyrics": "Save Lyrics (.lrc)",
"@trackSaveLyrics": { "@trackSaveLyrics": {
"description": "Menu action - save lyrics as .lrc file" "description": "Menu action - save lyrics as .lrc file"
}, },
"trackSaveLyricsSubtitle": "Fetch and save lyrics as .lrc file",
"@trackSaveLyricsSubtitle": {
"description": "Subtitle for save lyrics action"
},
"trackSaveLyricsProgress": "Saving lyrics...", "trackSaveLyricsProgress": "Saving lyrics...",
"@trackSaveLyricsProgress": { "@trackSaveLyricsProgress": {
"description": "Snackbar while saving lyrics to file" "description": "Snackbar while saving lyrics to file"
@@ -3116,10 +3016,6 @@
"@trackReEnrichOnlineSubtitle": { "@trackReEnrichOnlineSubtitle": {
"description": "Subtitle for re-enrich metadata action for local items" "description": "Subtitle for re-enrich metadata action for local items"
}, },
"trackReEnrichFieldsTitle": "Fields to update",
"@trackReEnrichFieldsTitle": {
"description": "Section title for field selection in re-enrich dialog"
},
"trackReEnrichFieldCover": "Cover Art", "trackReEnrichFieldCover": "Cover Art",
"@trackReEnrichFieldCover": { "@trackReEnrichFieldCover": {
"description": "Checkbox label for cover art field in re-enrich" "description": "Checkbox label for cover art field in re-enrich"
@@ -3203,18 +3099,6 @@
} }
} }
}, },
"queueFlacFindingProgress": "Finding FLAC matches... ({current}/{total})",
"@queueFlacFindingProgress": {
"description": "Snackbar while resolving remote matches for local FLAC redownloads",
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"queueFlacNoReliableMatches": "No reliable online matches found for the selection", "queueFlacNoReliableMatches": "No reliable online matches found for the selection",
"@queueFlacNoReliableMatches": { "@queueFlacNoReliableMatches": {
"description": "Snackbar when no safe FLAC redownload matches were found" "description": "Snackbar when no safe FLAC redownload matches were found"
@@ -3244,10 +3128,6 @@
"@trackConvertFormat": { "@trackConvertFormat": {
"description": "Menu item - convert audio format" "description": "Menu item - convert audio format"
}, },
"trackConvertFormatSubtitle": "Convert to AAC/M4A, MP3, Opus, ALAC, or FLAC",
"@trackConvertFormatSubtitle": {
"description": "Subtitle for convert format menu item"
},
"trackConvertTitle": "Convert Audio", "trackConvertTitle": "Convert Audio",
"@trackConvertTitle": { "@trackConvertTitle": {
"description": "Title of convert bottom sheet" "description": "Title of convert bottom sheet"
@@ -3260,6 +3140,14 @@
"@trackConvertBitrate": { "@trackConvertBitrate": {
"description": "Label for bitrate selection" "description": "Label for bitrate selection"
}, },
"trackConvertKeepOriginal": "Keep original file",
"@trackConvertKeepOriginal": {
"description": "Toggle to preserve the source file during conversion"
},
"trackConvertKeepOriginalDescription": "Add the converted file as a separate library entry",
"@trackConvertKeepOriginalDescription": {
"description": "Description for preserving the source file during conversion"
},
"trackConvertConfirmTitle": "Confirm Conversion", "trackConvertConfirmTitle": "Confirm Conversion",
"@trackConvertConfirmTitle": { "@trackConvertConfirmTitle": {
"description": "Confirmation dialog title" "description": "Confirmation dialog title"
@@ -3291,6 +3179,18 @@
} }
} }
}, },
"trackConvertConfirmKeepOriginal": "Convert from {sourceFormat} to {targetFormat}?\n\nThe original file will be kept and the converted file will be added as a separate library entry.",
"@trackConvertConfirmKeepOriginal": {
"description": "Confirmation message when the source file will be preserved",
"placeholders": {
"sourceFormat": {
"type": "String"
},
"targetFormat": {
"type": "String"
}
}
},
"trackConvertLosslessHint": "Lossless conversion — no quality loss", "trackConvertLosslessHint": "Lossless conversion — no quality loss",
"@trackConvertLosslessHint": { "@trackConvertLosslessHint": {
"description": "Hint shown when converting between lossless formats" "description": "Hint shown when converting between lossless formats"
@@ -3316,10 +3216,6 @@
"@cueSplitTitle": { "@cueSplitTitle": {
"description": "Title for CUE split bottom sheet" "description": "Title for CUE split bottom sheet"
}, },
"cueSplitSubtitle": "Split CUE+FLAC into individual tracks",
"@cueSplitSubtitle": {
"description": "Subtitle for CUE split menu item"
},
"cueSplitAlbum": "Album: {album}", "cueSplitAlbum": "Album: {album}",
"@cueSplitAlbum": { "@cueSplitAlbum": {
"description": "Album name in CUE split sheet", "description": "Album name in CUE split sheet",
@@ -3416,10 +3312,6 @@
"@collectionFavoriteArtists": { "@collectionFavoriteArtists": {
"description": "Custom folder for favorite artists" "description": "Custom folder for favorite artists"
}, },
"collectionPlaylists": "Playlists",
"@collectionPlaylists": {
"description": "Custom user playlists folder"
},
"collectionPlaylist": "Playlist", "collectionPlaylist": "Playlist",
"@collectionPlaylist": { "@collectionPlaylist": {
"description": "Single playlist label" "description": "Single playlist label"
@@ -3436,10 +3328,6 @@
"@collectionNoPlaylistsYet": { "@collectionNoPlaylistsYet": {
"description": "Empty state title when user has no playlists" "description": "Empty state title when user has no playlists"
}, },
"collectionNoPlaylistsSubtitle": "Create a playlist to start categorizing tracks",
"@collectionNoPlaylistsSubtitle": {
"description": "Empty state subtitle when user has no playlists"
},
"collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}", "collectionPlaylistTracks": "{count, plural, =1{1 track} other{{count} tracks}}",
"@collectionPlaylistTracks": { "@collectionPlaylistTracks": {
"description": "Track count label for custom playlists", "description": "Track count label for custom playlists",
@@ -3476,10 +3364,6 @@
} }
} }
}, },
"collectionPlaylistCreated": "Playlist created",
"@collectionPlaylistCreated": {
"description": "Snackbar after creating playlist"
},
"collectionPlaylistNameHint": "Playlist name", "collectionPlaylistNameHint": "Playlist name",
"@collectionPlaylistNameHint": { "@collectionPlaylistNameHint": {
"description": "Hint text for playlist name input" "description": "Hint text for playlist name input"
@@ -3496,19 +3380,6 @@
"@collectionDeletePlaylist": { "@collectionDeletePlaylist": {
"description": "Action to delete playlist" "description": "Action to delete playlist"
}, },
"collectionDeletePlaylistMessage": "Delete \"{playlistName}\" and all tracks inside it?",
"@collectionDeletePlaylistMessage": {
"description": "Confirmation message for deleting playlist",
"placeholders": {
"playlistName": {
"type": "String"
}
}
},
"collectionPlaylistDeleted": "Playlist deleted",
"@collectionPlaylistDeleted": {
"description": "Snackbar after deleting playlist"
},
"collectionPlaylistRenamed": "Playlist renamed", "collectionPlaylistRenamed": "Playlist renamed",
"@collectionPlaylistRenamed": { "@collectionPlaylistRenamed": {
"description": "Snackbar after renaming playlist" "description": "Snackbar after renaming playlist"
@@ -3553,15 +3424,6 @@
"@collectionRemoveFromFolder": { "@collectionRemoveFromFolder": {
"description": "Tooltip for removing track from wishlist/loved folder" "description": "Tooltip for removing track from wishlist/loved folder"
}, },
"collectionRemoved": "\"{trackName}\" removed",
"@collectionRemoved": {
"description": "Snackbar after removing a track from a collection",
"placeholders": {
"trackName": {
"type": "String"
}
}
},
"collectionAddedToLoved": "\"{trackName}\" added to Loved", "collectionAddedToLoved": "\"{trackName}\" added to Loved",
"@collectionAddedToLoved": { "@collectionAddedToLoved": {
"description": "Snackbar after adding track to loved folder", "description": "Snackbar after adding track to loved folder",
@@ -3705,15 +3567,15 @@
} }
} }
}, },
"selectionBatchConvertProgress": "Converting {current} of {total}...", "selectionBatchConvertConfirmKeepOriginal": "Convert {count} {count, plural, =1{track} other{tracks}} to {format}?\n\nOriginal files will be kept and converted files will be added as separate library entries.",
"@selectionBatchConvertProgress": { "@selectionBatchConvertConfirmKeepOriginal": {
"description": "Snackbar during batch conversion progress", "description": "Batch conversion confirmation when source files will be preserved",
"placeholders": { "placeholders": {
"current": { "count": {
"type": "int" "type": "int"
}, },
"total": { "format": {
"type": "int" "type": "String"
} }
} }
}, },
@@ -3879,10 +3741,6 @@
"@backupImportButton": { "@backupImportButton": {
"description": "Button to pick a backup file to restore" "description": "Button to pick a backup file to restore"
}, },
"backupCreating": "Creating backup...",
"@backupCreating": {
"description": "Progress text while a backup is being created"
},
"backupCreated": "Backup created", "backupCreated": "Backup created",
"@backupCreated": { "@backupCreated": {
"description": "Snackbar after a backup file is created" "description": "Snackbar after a backup file is created"
@@ -3891,10 +3749,6 @@
"@backupCreateFailed": { "@backupCreateFailed": {
"description": "Snackbar when backup creation fails" "description": "Snackbar when backup creation fails"
}, },
"backupEmpty": "There is nothing to back up yet",
"@backupEmpty": {
"description": "Snackbar when there is no data to back up"
},
"backupRestoreConfirmTitle": "Restore this backup?", "backupRestoreConfirmTitle": "Restore this backup?",
"@backupRestoreConfirmTitle": { "@backupRestoreConfirmTitle": {
"description": "Confirmation dialog title before restoring a backup" "description": "Confirmation dialog title before restoring a backup"
@@ -3907,10 +3761,6 @@
"@backupRestoreConfirmButton": { "@backupRestoreConfirmButton": {
"description": "Confirm button to proceed with restore" "description": "Confirm button to proceed with restore"
}, },
"backupRestoring": "Restoring backup...",
"@backupRestoring": {
"description": "Progress text while restoring a backup"
},
"backupRestored": "Backup restored successfully", "backupRestored": "Backup restored successfully",
"@backupRestored": { "@backupRestored": {
"description": "Snackbar after a successful restore" "description": "Snackbar after a successful restore"
@@ -3997,7 +3847,7 @@
"@backupIncludeSecretsDescription": { "@backupIncludeSecretsDescription": {
"description": "Explanation for the include-credentials toggle" "description": "Explanation for the include-credentials toggle"
}, },
"backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the store.", "backupExtensionsRestoreFailed": "{count} {count, plural, =1{extension} other{extensions}} could not be reinstalled. Install them manually from the repo.",
"@backupExtensionsRestoreFailed": { "@backupExtensionsRestoreFailed": {
"description": "Snackbar/hint when some extensions failed to reinstall during restore", "description": "Snackbar/hint when some extensions failed to reinstall during restore",
"placeholders": { "placeholders": {
@@ -4110,6 +3960,26 @@
"@storageModeSafSubtitle": { "@storageModeSafSubtitle": {
"description": "Subtitle for SAF storage mode" "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"
},
"downloadFolderAccessLostSubtitle": "Downloads will fail until you re-select the folder",
"@downloadFolderAccessLostSubtitle": {
"description": "Subtitle of the warning banner shown when the saved SAF folder grant is no longer valid"
},
"downloadFolderReselect": "Re-select folder",
"@downloadFolderReselect": {
"description": "Button that reopens the folder picker to restore download folder access"
},
"downloadErrorSafPermissionLost": "SAF permission invalid or revoked. Please reconfigure download location in Settings.",
"@downloadErrorSafPermissionLost": {
"description": "Error shown on downloads that failed because the persisted Android SAF folder grant is no longer valid"
},
"downloadErrorFolderAccessLost": "Download folder access lost. Please re-select your download folder in Settings.",
"@downloadErrorFolderAccessLost": {
"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": "Use {artist}, {title}, {album}, {track}, {year}, {date}, {disc} as placeholders.",
"@downloadFilenameDescription": { "@downloadFilenameDescription": {
"description": "Description shown in filename format editor" "description": "Description shown in filename format editor"
@@ -4178,10 +4048,6 @@
"@downloadSelectServiceToEnable": { "@downloadSelectServiceToEnable": {
"description": "Subtitle when quality picker is disabled due to extension service" "description": "Subtitle when quality picker is disabled due to extension service"
}, },
"downloadSelectTidalQobuz": "Select a provider with quality options to choose audio quality",
"@downloadSelectTidalQobuz": {
"description": "Legacy info shown when a provider does not expose quality options"
},
"downloadEmbedLyricsDisabled": "Enable metadata embedding first", "downloadEmbedLyricsDisabled": "Enable metadata embedding first",
"@downloadEmbedLyricsDisabled": { "@downloadEmbedLyricsDisabled": {
"description": "Subtitle when lyrics embedding is blocked by metadata toggle" "description": "Subtitle when lyrics embedding is blocked by metadata toggle"
@@ -4430,10 +4296,6 @@
} }
} }
}, },
"queueDownloadedHeader": "Downloaded",
"@queueDownloadedHeader": {
"description": "Header label for downloaded items section in library"
},
"queueFilteringIndicator": "Filtering...", "queueFilteringIndicator": "Filtering...",
"@queueFilteringIndicator": { "@queueFilteringIndicator": {
"description": "Shown while filter results are being computed" "description": "Shown while filter results are being computed"
@@ -4588,15 +4450,6 @@
"@audioAnalysisRescanning": { "@audioAnalysisRescanning": {
"description": "Loading text while audio is being re-analyzed after an explicit refresh" "description": "Loading text while audio is being re-analyzed after an explicit refresh"
}, },
"extensionsSearchWith": "Search with {providerName}",
"@extensionsSearchWith": {
"description": "Extensions page - subtitle for default metadata search provider option",
"placeholders": {
"providerName": {
"type": "String"
}
}
},
"extensionsHomeFeedProvider": "Home Feed Provider", "extensionsHomeFeedProvider": "Home Feed Provider",
"@extensionsHomeFeedProvider": { "@extensionsHomeFeedProvider": {
"description": "Extensions page - label for home feed provider selector" "description": "Extensions page - label for home feed provider selector"
@@ -4634,14 +4487,6 @@
"@extensionsNoHomeFeedExtensions": { "@extensionsNoHomeFeedExtensions": {
"description": "Extensions page - shown when no installed extension has home feed" "description": "Extensions page - shown when no installed extension has home feed"
}, },
"sortAlphaAsc": "A-Z",
"@sortAlphaAsc": {
"description": "Sort option - alphabetical ascending"
},
"sortAlphaDesc": "Z-A",
"@sortAlphaDesc": {
"description": "Sort option - alphabetical descending"
},
"cancelDownloadTitle": "Cancel download?", "cancelDownloadTitle": "Cancel download?",
"@cancelDownloadTitle": { "@cancelDownloadTitle": {
"description": "Dialog title when confirming cancellation of an active download" "description": "Dialog title when confirming cancellation of an active download"
@@ -4676,34 +4521,6 @@
} }
} }
}, },
"errorLoadAlbum": "Failed to load album",
"@errorLoadAlbum": {
"description": "Error state shown when album fails to load"
},
"errorLoadPlaylist": "Failed to load playlist",
"@errorLoadPlaylist": {
"description": "Error state shown when playlist fails to load"
},
"errorLoadArtist": "Failed to load artist",
"@errorLoadArtist": {
"description": "Error state shown when artist fails to load"
},
"notifChannelDownloadName": "Download Progress",
"@notifChannelDownloadName": {
"description": "Android notification channel name for download progress"
},
"notifChannelDownloadDesc": "Shows download progress for tracks",
"@notifChannelDownloadDesc": {
"description": "Android notification channel description for download progress"
},
"notifChannelLibraryScanName": "Library Scan",
"@notifChannelLibraryScanName": {
"description": "Android notification channel name for library scan"
},
"notifChannelLibraryScanDesc": "Shows local library scan progress",
"@notifChannelLibraryScanDesc": {
"description": "Android notification channel description for library scan"
},
"notifDownloadingTrack": "Downloading {trackName}", "notifDownloadingTrack": "Downloading {trackName}",
"@notifDownloadingTrack": { "@notifDownloadingTrack": {
"description": "Notification title while downloading a track", "description": "Notification title while downloading a track",
@@ -4770,6 +4587,14 @@
} }
} }
}, },
"notifVerificationRequiredTitle": "Verification required",
"@notifVerificationRequiredTitle": {
"description": "Notification title shown when a download needs the user to complete a verification challenge but the app is in the background"
},
"notifVerificationRequiredBody": "Open the app to complete verification and resume downloads",
"@notifVerificationRequiredBody": {
"description": "Notification body prompting the user to return to the app to solve a verification challenge"
},
"notifAllDownloadsComplete": "All Downloads Complete", "notifAllDownloadsComplete": "All Downloads Complete",
"@notifAllDownloadsComplete": { "@notifAllDownloadsComplete": {
"description": "Notification title when all downloads finish successfully" "description": "Notification title when all downloads finish successfully"
@@ -4956,14 +4781,6 @@
"@actionPaste": { "@actionPaste": {
"description": "Generic action - paste from clipboard" "description": "Generic action - paste from clipboard"
}, },
"searchTracksHint": "Search tracks...",
"@searchTracksHint": {
"description": "Placeholder for the search screen input"
},
"searchTracksEmptyPrompt": "Search for tracks",
"@searchTracksEmptyPrompt": {
"description": "Empty-state prompt on the search screen"
},
"tutorialSearchHint": "Paste or search...", "tutorialSearchHint": "Paste or search...",
"@tutorialSearchHint": { "@tutorialSearchHint": {
"description": "Placeholder shown in the tutorial search demo" "description": "Placeholder shown in the tutorial search demo"
@@ -4992,14 +4809,6 @@
"@optionsEmbedMetadataSubtitleOff": { "@optionsEmbedMetadataSubtitleOff": {
"description": "Subtitle when metadata embedding is disabled" "description": "Subtitle when metadata embedding is disabled"
}, },
"optionsMaxQualityCoverSubtitleDisabled": "Disabled when metadata embedding is off",
"@optionsMaxQualityCoverSubtitleDisabled": {
"description": "Subtitle for max quality cover when metadata embedding is disabled"
},
"downloadFilenameHintExample": "{artist} - {title}",
"@downloadFilenameHintExample": {
"description": "Example placeholder for the download filename format input"
},
"trackCoverNoEmbeddedArt": "No embedded album art found", "trackCoverNoEmbeddedArt": "No embedded album art found",
"@trackCoverNoEmbeddedArt": { "@trackCoverNoEmbeddedArt": {
"description": "Message shown when a track file has no embedded cover art" "description": "Message shown when a track file has no embedded cover art"
@@ -5239,14 +5048,6 @@
} }
} }
}, },
"optionsDefaultSearchTabAlbums": "Albums",
"@optionsDefaultSearchTabAlbums": {
"description": "Default search tab option - Albums tab"
},
"optionsDefaultSearchTabTracks": "Tracks",
"@optionsDefaultSearchTabTracks": {
"description": "Default search tab option - Tracks tab"
},
"settingsFiles": "Files & Folders", "settingsFiles": "Files & Folders",
"@settingsFiles": { "@settingsFiles": {
"description": "Settings menu item - file and folder settings" "description": "Settings menu item - file and folder settings"
@@ -5307,10 +5108,26 @@
"@downloadDeduplicationEnabled": { "@downloadDeduplicationEnabled": {
"description": "Subtitle when deduplication is on" "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": "All tracks will be downloaded regardless of history",
"@downloadDeduplicationDisabled": { "@downloadDeduplicationDisabled": {
"description": "Subtitle when deduplication is off" "description": "Subtitle when deduplication is off"
}, },
"downloadQualityVariants": "Allow different quality versions",
"@downloadQualityVariants": {
"description": "Setting to retain multiple quality versions of the same track"
},
"downloadQualityVariantsDescription": "Add the selected quality to the filename and keep each version in download history",
"@downloadQualityVariantsDescription": {
"description": "Description for retaining multiple quality versions"
},
"trackOptionDownloadQualityVariant": "Download another quality",
"@trackOptionDownloadQualityVariant": {
"description": "Track menu action to download another quality version"
},
"downloadFallbackExtensions": "Fallback Extensions", "downloadFallbackExtensions": "Fallback Extensions",
"@downloadFallbackExtensions": { "@downloadFallbackExtensions": {
"description": "Settings item for configuring fallback extension providers" "description": "Settings item for configuring fallback extension providers"
@@ -5451,6 +5268,11 @@
} }
}, },
"queueDownloadStarting": "Starting...", "queueDownloadStarting": "Starting...",
"queueCheckingDownloadSession": "Checking download session...",
"queueResolvingDownloadMetadata": "Resolving track metadata...",
"queueResolvingDownloadStream": "Preparing audio stream...",
"queueWaitingForVerification": "Waiting for verification...",
"queueResumingAfterVerification": "Resuming after verification...",
"@queueDownloadStarting": { "@queueDownloadStarting": {
"description": "Queue status before download progress is available" "description": "Queue status before download progress is available"
}, },
@@ -5539,7 +5361,7 @@
"@downloadNativeWorker": { "@downloadNativeWorker": {
"description": "Setting title for Android native download worker" "description": "Setting title for Android native download worker"
}, },
"downloadNativeWorkerSubtitle": "Beta Android service worker for extension downloads", "downloadNativeWorkerSubtitle": "Android background service for extension downloads",
"@downloadNativeWorkerSubtitle": { "@downloadNativeWorkerSubtitle": {
"description": "Setting subtitle for Android native download worker" "description": "Setting subtitle for Android native download worker"
}, },
@@ -5699,10 +5521,6 @@
"@errorInvalidFolderSelected": { "@errorInvalidFolderSelected": {
"description": "Error when the selected folder is invalid" "description": "Error when the selected folder is invalid"
}, },
"errorCouldNotKeepFolderAccess": "Could not keep access to the selected folder",
"@errorCouldNotKeepFolderAccess": {
"description": "Error when persistent folder access cannot be saved"
},
"storeAnyVersion": "Any", "storeAnyVersion": "Any",
"@storeAnyVersion": { "@storeAnyVersion": {
"description": "Store detail value when any app version is accepted" "description": "Store detail value when any app version is accepted"